Nove veze na novom VPN izlazu, stari tokovi ostaju netaknuti
Planirano dreniranje premešta samo neklasifikovane tokove. Uporedite to sa zamenom rute i pogledajte oznake, tabele i conntrack stanje koje ga održavaju.
Dva zdrava VPN izlaza, jedno dugo slanje koje već traje i zahtev da sledeća veza koristi drugi tunel. Postoje dva načina da se to zadovolji, a samo jedan od njih je bezbedan na živom gejtveju. Zamena podrazumevane rute pomera svaki paket, uključujući one koji pripadaju slanju. Planirano dreniranje menja izbor za nove veze, a praćeni tokovi ostaju na putu na kojem su počeli.
Dva načina da se promeni izlaz
Zamena rute je jedna komanda i vraća se u nekoliko sekundi, zbog čega se koristi tokom incidenata. Ona je i neodabrana: paketi postojećeg slanja iznenada izlaze kroz drugi tunel, sa drugom javnom izvornom adresom i odvojenim stanjem prevođenja.
Ako daleki kraj prati tokove po izvornoj adresi, slanje može jednostavno prestati da bude prepoznato. Dreniranje to izbegava tako što odluku donosi jednom po vezi i čuva je, pa staro slanje zadržava svoj izlaz dok se ne završi. To je cela vrednost vežbe: daleki kraj ne vidi nikakvu promenu koju treba tumačiti. Nastavlja da prima pakete koji odgovaraju vezi koju već poznaje.
Cena je složenost: dve tabele rutiranja, klasifikator koji radi na pravom hooku i oznake koje se moraju uskladiti sa svim ostalim na mašini.
Dajte svakom izlazu sopstvenu tabelu
Rezervišite tabelu rutiranja po izlazu i različite vrednosti oznaka ili bitove za dva izbora. Svakoj tabeli su potrebne rute primerene njenoj ulozi, ne samo ime, i potreban joj je namerni ishod neuspeha za slučaj nedostatka. Prazna tabela koja tiho propada u glavnu tabelu je način na koji saobraćaj izlazi kroz izlaz koji niko nije izabrao.
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 102Dodajte blackhole rutu na kraj svake tabele kako bi pretraga bez podudaranja glasno propala umesto da pobegne u podrazumevano stanje koje niste izabrali.
Izaberite jednom, na prvom paketu
Klasifikujte nakon što postoji praćenje veza i pre pretrage rute koja je važna. Za novu, neklasifikovanu LAN vezu izaberite izlaz i sačuvajte ga u stanju veze. Na kasnijim paketima vratite sačuvanu vrednost u oznaku paketa koju čita političko rutiranje.
Suptilan deo je šta znači novo. Conntrack još može prijaviti NEW za rane pakete i ponovna slanja pre nego što se vidi odgovor, pa klasifikator koji se oslanja samo na to stanje može prepisati izbor koji je već doneo. Proverite da za vezu nije sačuvan nijedan izlaz pre nego što ga dodelite.
nftables drži oznake paketa i veze odvojeno, a vodič za metainformacije dokumentuje eksplicitno kopiranje između njih. Oznaka veze sama ne postaje oznaka paketa sa kojom se podudara vaše pravilo, i to je najčešći razlog zašto pažljivo napisan klasifikator nema efekta.
Ograničite obnavljanje na smer i saobraćaj koji mislite. Primena oznake internet-izlaza na pakete koji se vraćaju može poslati odgovore ka izlazu umesto ka LAN-u, a simptom je jednosmerna veza koja izgleda kao problem sa firewallom. Pročitajte putanju odgovora pre nego što dirnete firewall pravilo, jer se paket rutira, samo ne nazad ka pošiljaocu.
Četiri faze dreniranja
Pripremite B bez diranja A: rutiranje, prosleđivanje, autorizacija, NAT i povratni put. Instalirajte njegovu tabelu i politiku izbora kroz postojećeg vlasnika konfiguracije gejtveja.
Prebacite klasifikator tako da nove, neklasifikovane veze biraju B, čuvajući sačuvane izbore. Atomska nftables transakcija izbegava prozor u kojem staro stanje mora biti očišćeno.
Ostavite A uključen dok njegovi tokovi ne završe. Njegov interfejs, tabela, udaljeni izlaz i NAT mapiranja su još deo tih tokova, a izmena NAT pravila ne obnavlja veze koje već postoje.
Uklonite A kada je uslov dreniranja ispunjen, procenjen iz stanja veza i ponašanja aplikacije, a ne iz jednog tihog intervala.
Šta dreniranje ne može obećati
Zahtev pregledača nije nova transportna veza; udruživanje nastavlja da šalje zahteve preko stare. Obrnuto, UDP tok može ostariti iz conntrack-a i kasniji paket se klasifikuje iznova. Dreniranje prati praćene tokove, a ne predstavu aplikacije o sesiji.
Ako A padne pre nego što njegovi tokovi završe, sačuvana oznaka ih ne spasava. Ponovo se povezuju kroz B ili se uopšte ne povezuju. Planirano dreniranje kupuje kontinuitet dok je originalni put zdrav; to nije replikacija stanja između nezavisnih izlaza.
Proverite obe polovine
Pokrenite dugotrajnu dozvoljenu vezu pre promene i istinski novu posle nje. Potvrdite koji tunel svaka koristi i koju javnu izvornu adresu daleki kraj vidi, zatim proverite da se povratni saobraćaj vraća.
Ne čistite conntrack tabelu da bi se novi izbor pojavio. To uništava upravo stanje koje dreniranje treba da sačuva i pretvara kontrolisanu migraciju u prekid sa čisto izgledajućim testom.