Nové spojení přes nový výstup VPN, staré toky zůstávají nedotčené
Plánované vypuštění přesouvá jen neklasifikované toky. Srovnejte to s výměnou trasy a podívejte se na značky, tabulky a stav conntrack, které to drží.
Dva zdravé výstupy VPN, jedno dlouhé nahrávání už běží a požadavek, aby další spojení použilo druhý tunel. Existují dva způsoby, jak to splnit, a jen jeden z nich je bezpečný na živém gatewayi. Výměna výchozí trasy přesune každý paket, včetně těch, které patří nahrávání. Plánované vypuštění mění volbu pro nová spojení a sledované toky nechává na cestě, na které začaly.
Dva způsoby, jak přepnout výstup
Výměna trasy je jediný příkaz a dá se vrátit během sekund, proto se používá při incidentech. Je také nerozlišující: pakety stávajícího nahrávání najednou odcházejí jiným tunelem, s jinou veřejnou zdrojovou adresou a odděleným překladovým stavem.
Pokud vzdálená strana sleduje toky podle zdrojové adresy, nahrávání může prostě přestat být rozpoznáváno. Vypuštění tomu předchází tím, že rozhodne jednou pro spojení a uloží to, takže staré nahrávání si drží svůj výstup, dokud neskončí. To je celá hodnota cvičení: vzdálená strana nevidí žádnou změnu, kterou by musela vykládat. Dál dostává pakety, které odpovídají spojení, jež už zná.
Cena je složitost: dvě směrovací tabulky, klasifikátor, který běží na správném hooku, a značky, které je třeba sladit se vším ostatním na stroji.
Dejte každému výstupu vlastní tabulku
Vyhraďte směrovací tabulku pro každý výstup a odlišné hodnoty značek nebo bity pro obě volby. Každá tabulka potřebuje trasy odpovídající své roli, ne jen jméno, a potřebuje záměrný výsledek selhání pro chybějící případ. Prázdná tabulka, která tiše propadne do hlavní tabulky je způsob, jak provoz odchází výstupem, který nikdo 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 102Přidejte na konec každé tabulky trasu blackhole, aby vyhledání bez shody hlasitě selhalo, místo aby uteklo do výchozí hodnoty, kterou jste nezvolili.
Vyberte jednou, u prvního paketu
Klasifikujte poté, co existuje sledování spojení, a před vyhledáním trasy, na kterém záleží. Pro nové, neklasifikované spojení LAN vyberte výstup a uložte ho do stavu spojení. U dalších paketů obnovte uloženou hodnotu do značky paketu, kterou čte politické směrování.
Jemná část je, co znamená nový. Conntrack může stále hlásit NEW pro rané pakety a opakované přenosy, dokud není vidět odpověď, takže klasifikátor, který se opírá jen o tento stav, může přepsat volbu, kterou už udělal. Před přiřazením ověřte, že pro spojení není uložen žádný výstup.
nftables drží značky paketu a spojení odděleně a průvodce metainformacemi dokumentuje explicitní kopírování mezi nimi. Značka spojení se sama nestane značkou paketu, se kterou vaše pravidlo souhlasí, a to je nejčastější důvod, proč pečlivě napsaný klasifikátor nemá žádný účinek.
Omezte obnovu na směr a provoz, který máte na mysli. Použití značky internetového výstupu na vracející se pakety může poslat odpovědi k výstupu místo k LAN a symptomem je jednosměrné spojení, které vypadá jako problém brány firewall. Přečtěte si cestu odpovědi, než se dotknete pravidla firewallu, protože paket se směruje, jen ne zpět k odesílateli.
Čtyři fáze vypuštění
Připravte B bez dotyku A: směrování, předávání, autorizace, NAT a zpáteční cesta. Nainstalujte jeho tabulku a politiku volby přes stávajícího vlastníka konfigurace gatewaye.
Přepněte klasifikátor, aby nová, neklasifikovaná spojení volila B, a uložené volby zůstaly zachovány. Atomická transakce nftables se vyhne oknu, ve kterém je třeba starý stav vyčistit.
Nechte A běžet, dokud jeho toky neskončí. Jeho rozhraní, tabulka, vzdálený výstup a mapování NAT jsou stále součástí těchto toků a úprava pravidla NAT nepřestavuje vazby, které už existují.
Vyřaďte A, když je splněna podmínka vypuštění, posouzená podle stavu spojení a chování aplikace, ne podle jednoho tichého intervalu.
Co vypuštění nemůže slíbit
Požadavek prohlížeče není nové transportní spojení; sdružování dál posílá požadavky po starém. Naopak tok UDP může zestárnout z conntracku a pozdější paket se klasifikuje znovu. Vypuštění sleduje sledované toky, ne představu aplikace o relaci.
Pokud A selže dřív, než jeho toky skončí, uložená značka je nezachrání. Znovu se připojí přes B, nebo se nepřipojí vůbec. Plánované vypuštění kupuje kontinuitu, dokud je původní cesta zdravá; není to replikace stavu mezi nezávislými výstupy.
Ověřte obě poloviny
Před změnou spusťte dlouhotrvající povolené spojení a po ní skutečně nové. Potvrďte, který tunel každé používá a jakou veřejnou zdrojovou adresu vzdálená strana vidí, a pak zkontrolujte, že se vracející provoz vrací.
Nevyprazdňujte tabulku conntracku, aby se nová volba objevila. To ničí právě ten stav, který má vypuštění zachovat, a mění řízenou migraci ve výpadek s čistě vypadajícím testem.