Új kapcsolatok új VPN-kimeneten, a régi folyamok békén maradnak
A tervezett lecsapolás csak osztályozatlan folyamokat mozgat. Hasonlítsa össze ezt egy útvonalcserével, és nézze meg a jeleket, táblákat és conntrack-állapotot, amelyek tartják.
Két egészséges VPN-kimenet, egy már futó hosszú feltöltés, és az a követelmény, hogy a következő kapcsolat a másik alagutat használja. Két módja van ennek teljesítésére, és csak az egyik biztonságos egy élő átjárón. Az alapértelmezett útvonal cseréje minden csomagot mozgat, azokat is, amelyek a feltöltéshez tartoznak. A tervezett lecsapolás megváltoztatja az új kapcsolatok választását, és a követett folyamokat azon az úton hagyja, ahol elkezdődtek.
Két módja a kimenet váltásának
Az útvonalcsere egyetlen parancs, és másodpercek alatt visszafordítható, ezért használják incidensek alatt. Ugyanakkor válogatás nélküli: a meglévő feltöltés csomagjai hirtelen egy másik alagúton távoznak, más nyilvános forrás címmel és külön fordítási állapottal.
Ha a távoli vég forrás cím szerint követi a folyamokat, a feltöltés egyszerűen megszűnhet felismerhetőnek lenni. A lecsapolás ezt úgy kerüli el, hogy kapcsolatonként egyszer dönt, és eltárolja, így a régi feltöltés megtartja a kimenetét, amíg be nem fejeződik. Ez a gyakorlat teljes értéke: a távoli vég nem lát olyan változást, amelyet értelmeznie kellene. Továbbra is olyan csomagokat kap, amelyek megfelelnek a már ismert kapcsolatnak.
Az ára a bonyolultság: két útválasztási tábla, a megfelelő hookon futó osztályozó, és olyan jelek, amelyeket össze kell hangolni mindennel, ami a gépen használja őket.
Adjon minden kimenetnek saját táblát
Foglaljon le egy útválasztási táblát kimenetenként, és külön jelértékeket vagy biteket a két választáshoz. Minden táblának a szerepéhez illő útvonalakra van szüksége, nem csupán névre, és szándékos hibaeredményre a hiányzó esetre. Egy üres tábla, amely csendben a főtáblába hullik — így hagyja el a forgalom azt a kimenetet, amelyet senki nem választott.
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 102Adjon hozzá blackhole útvonalat minden tábla végéhez, hogy az egyezést nem találó keresés hangosan meghiúsuljon, ahelyett hogy egy Ön által nem választott alapértelmezésbe meneküljön.
Válasszon egyszer, az első csomagnál
Osztályozzon, miután létezik kapcsolatkövetés, és azelőtt az útvonalkeresés előtt, amely számít. Egy új, osztályozatlan LAN-kapcsolatnál válassza ki a kimenetet, és mentse el a kapcsolat állapotába. A későbbi csomagoknál állítsa vissza a mentett értéket abba a csomagjelbe, amelyet a házirend-alapú útválasztás olvas.
A finom rész az, hogy mit jelent az új. A conntrack még mindig NEW-t jelenthet a korai csomagoknál és újraküldéseknél, mielőtt válasz látszana, ezért egy csak erre az állapotra támaszkodó osztályozó felülírhat egy már meghozott döntést. Ellenőrizze, hogy a kapcsolathoz nincs mentett kimenet, mielőtt kijelöl egyet.
Az nftables külön tartja a csomag- és kapcsolatjeleket, és a metaadatokról szóló útmutató dokumentálja a köztük lévő kifejezett másolást. A kapcsolatjel magától nem válik azzá a csomagjellé, amelyre a szabálya illeszkedik, és ez a leggyakoribb oka annak, hogy egy gondosan megírt osztályozónak nincs hatása.
Korlátozza a visszaállítást a szándékolt irányra és forgalomra. Az internet-kimenet jelének alkalmazása a visszatérő csomagokra a válaszokat a kimenet felé küldheti a LAN helyett, és a tünet egy egyirányú kapcsolat, amely tűzfalproblémának látszik. Olvassa el a válasz útját, mielőtt tűzfalszabályhoz nyúl, mert a csomag útválasztás alatt áll, csak éppen nem vissza a feladóhoz.
A lecsapolás négy fázisa
Készítse elő B-t A érintése nélkül: útválasztás, továbbítás, engedélyezés, NAT és a visszaút. Telepítse a tábláját és kiválasztási házirendjét az átjáró meglévő konfigurációtulajdonosán keresztül.
Váltsa át az osztályozót, hogy az új, osztályozatlan kapcsolatok B-t válasszák, a mentett választások megőrzésével. Az atomi nftables-tranzakció elkerüli azt az ablakot, amelyben a régi állapotot törölni kell.
Hagyja A-t futni, amíg a folyamai befejeződnek. Az interfésze, táblája, távoli kimenete és NAT-leképezései még mindig ezeknek a folyamoknak a részei, és a NAT-szabály szerkesztése nem építi újra a már létező kötéseket.
Vonja ki A-t, amikor a lecsapolási feltétel teljesül, a kapcsolatok állapota és az alkalmazás viselkedése alapján megítélve, nem egyetlen csendes intervallum alapján.
Amit a lecsapolás nem ígérhet
A böngészőkérés nem új szállítási kapcsolat; a csoportosítás továbbra is a régin küldi a kéréseket. Fordítva, egy UDP-folyam kiöregedhet a conntrackből, és egy későbbi csomag újra osztályozódik. A lecsapolás a követett folyamokat követi, nem az alkalmazás munkamenet-ötletét.
Ha A meghibásodik, mielőtt a folyamai befejeződnének, a mentett jel nem menti meg őket. B-n keresztül kapcsolódnak újra, vagy egyáltalán nem kapcsolódnak. A tervezett lecsapolás folytonosságot vásárol, amíg az eredeti út egészséges; ez nem állapotreplikáció független kimenetek között.
Ellenőrizze mindkét felét
Indítson hosszú életű engedélyezett kapcsolatot a változás előtt, és egy valóban újat utána. Erősítse meg, melyik alagutat használja mindegyik, és milyen nyilvános forráscímet lát a távoli vég, majd ellenőrizze, hogy a visszirányú forgalom visszatér.
Ne ürítse ki a conntrack táblát, hogy az új választás megjelenjen. Ez pontosan azt az állapotot pusztítja el, amelyet a lecsapolásnak meg kellene őriznie, és egy ellenőrzött migrációt kieséssé tesz egy tisztán látszó teszttel.