Nové spojenia cez nový výstup VPN, staré toky zostávajú nedotknuté
Plánované vypustenie presúva iba neklasifikované toky. Porovnajte to s výmenou trasy a pozrite si značky, tabuľky a stav conntrack, ktoré to držia.
Dva zdravé výstupy VPN, jedno dlhé nahrávanie už beží a požiadavka, aby ďalšie spojenie použilo druhý tunel. Existujú dva spôsoby, ako to splniť, a iba jeden z nich je bezpečný na živom gatewayi. Výmena predvolenej trasy presunie každý paket, vrátane tých, ktoré patria nahrávaniu. Plánované vypustenie mení voľbu pre nové spojenia a sledované toky necháva na ceste, na ktorej začali.
Dva spôsoby, ako prepnúť výstup
Výmena trasy je jediný príkaz a dá sa vrátiť za sekundy, preto sa používa počas incidentov. Je tiež nerozlišujúca: pakety existujúceho nahrávania zrazu odchádzajú iným tunelom, s inou verejnou zdrojovou adresou a oddeleným prekladovým stavom.
Ak vzdialená strana sleduje toky podľa zdrojovej adresy, nahrávanie môže jednoducho prestať byť rozpoznávané. Vypustenie tomu predchádza tým, že rozhodne raz na spojenie a uloží to, takže staré nahrávanie si drží svoj výstup, kým sa neskončí. To je celá hodnota cvičenia: vzdialená strana nevidí žiadnu zmenu, ktorú by musela interpretovať. Ďalej dostáva pakety, ktoré zodpovedajú spojeniu, ktoré už pozná.
Cena je zložitosť: dve smerovacie tabuľky, klasifikátor, ktorý beží na správnom hooku, a značky, ktoré treba zosúladiť so všetkým ostatným na stroji, čo ich používa.
Dajte každému výstupu vlastnú tabuľku
Vyhraďte smerovaciu tabuľku pre každý výstup a odlišné hodnoty značiek alebo bity pre obe voľby. Každá tabuľka potrebuje trasy zodpovedajúce jej role, nie len meno, a potrebuje zámerný výsledok zlyhania pre chýbajúci prípad. Prázdna tabuľka, ktorá ticho prepadne do hlavnej tabuľky — takto prevádzka odchádza výstupom, ktorý nikto nezvolil.
ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102Pridajte na koniec každej tabuľky trasu blackhole, aby hľadanie bez zhody nahlas zlyhalo, namiesto aby utieklo do predvolenej hodnoty, ktorú ste nezvolili.
Vyberte raz, pri prvom pakete
Klasifikujte po tom, čo existuje sledovanie spojení, a pred tým hľadaním trasy, na ktorom záleží. Pre nové, neklasifikované spojenie LAN vyberte výstup a uložte ho do stavu spojenia. Pri ďalších paketoch obnovte uloženú hodnotu do značky paketu, ktorú číta politické smerovanie.
Jemná časť je, čo znamená nový. Conntrack môže stále hlásiť NEW pre skoré pakety a opakované prenosy, kým nie je vidieť odpoveď, takže klasifikátor, ktorý sa spolieha len na tento stav, môže prepísať už vykonanú voľbu. Pred priradením overte, že pre spojenie nie je uložený žiadny výstup.
nftables drží značky paketu a spojenia oddelene a príručka o metainformáciách dokumentuje explicitné kopírovanie medzi nimi. Značka spojenia sa sama nestane značkou paketu, s ktorou sa zhoduje vaše pravidlo, a to je najčastejší dôvod, prečo starostlivo napísaný klasifikátor nemá žiadny účinok.
Obmedzte obnovu na smer a prevádzku, ktoré máte na mysli. Použitie značky internetového výstupu na vracajúce sa pakety môže poslať odpovede k výstupu namiesto k LAN a symptómom je jednosmerné spojenie, ktoré vyzerá ako problém brány firewall. Prečítajte si cestu odpovede, kým sa dotknete pravidla firewallu, pretože paket sa smeruje, len nie späť k odosielateľovi.
Štyri fázy vypustenia
Pripravte B bez dotyku A: smerovanie, preposielanie, autorizácia, NAT a spiatočná cesta. Nainštalujte jeho tabuľku a politiku výberu cez existujúceho vlastníka konfigurácie gatewaya.
Prepnite klasifikátor, aby nové, neklasifikované spojenia volili B, pričom uložené voľby zostanú zachované. Atomická transakcia nftables sa vyhne oknu, v ktorom treba starý stav vyčistiť.
Nechajte A bežať, kým sa jeho toky neskončia. Jeho rozhranie, tabuľka, vzdialený výstup a mapovania NAT sú stále súčasťou týchto tokov a úprava pravidla NAT neprestavia väzby, ktoré už existujú.
Vyraďte A, keď je splnená podmienka vypustenia, posúdená podľa stavu spojení a správania aplikácie, nie podľa jedného tichého intervalu.
Čo vypustenie nemôže sľúbiť
Požiadavka prehliadača nie je nové transportné spojenie; zlučovanie ďalej posiela požiadavky po starom. Naopak, tok UDP môže zostarnúť z conntracku a neskorší paket sa klasifikuje znova. Vypustenie sleduje sledované toky, nie predstavu aplikácie o relácii.
Ak A zlyhá skôr, než sa jeho toky skončia, uložená značka ich nezachráni. Znova sa pripoja cez B, alebo sa nepripoja vôbec. Plánované vypustenie kupuje kontinuitu, kým je pôvodná cesta zdravá; nie je to replikácia stavu medzi nezávislými výstupmi.
Overte obe polovice
Pred zmenou spustite dlhotrvajúce povolené spojenie a po nej skutočne nové. Potvrďte, ktorý tunel každé používa a akú verejnú zdrojovú adresu vidí vzdialená strana, a potom skontrolujte, že sa vracajúca prevádzka vracia.
Nevyprazdňujte tabuľku conntracku, aby sa nová voľba objavila. To ničí presne ten stav, ktorý má vypustenie zachovať, a mení riadenú migráciu na výpadok s čisto vyzerajúcim testom.