Nauji ryšiai naujame VPN išėjime, seni srautai paliekami ramybėje
Suplanuotas nutekinimas perkelia tik neklasifikuotus srautus. Palyginkite tai su maršruto pakeitimu ir pažiūrėkite žymes, lenteles ir conntrack būseną, kurie tai išlaiko.
Du sveiki VPN išėjimai, vienas ilgas įkėlimas jau vyksta ir reikalavimas, kad kitas ryšys naudotų kitą tunelį. Yra du būdai tai patenkinti, ir tik vienas jų saugus veikiančiame tinklelyje. Numatytosios maršruto pakeitimas perkelia kiekvieną paketą, įskaitant tuos, kurie priklauso įkėlimui. Suplanuotas nutekinimas keičia pasirinkimą naujiems ryšiams, o sekami srautai lieka tame kelyje, kuriame prasidėjo.
Du būdai pakeisti išėjimą
Maršruto pakeitimas yra viena komanda ir ją galima atšaukti per sekundes, todėl ji naudojama incidentų metu. Ji taip pat neatsirenka: esamo įkėlimo paketai staiga išeina per kitą tunelį, su kitu viešuoju šaltinio adresu ir atskira vertimo būsena.
Jei tolimasis galas seka srautus pagal šaltinio adresą, įkėlimas gali tiesiog nustoti būti atpažįstamas. Nutekinimas to išvengia priimdamas sprendimą vieną kartą vienam ryšiui ir jį išsaugodamas, todėl senas įkėlimas išlaiko savo išėjimą, kol baigiasi. Tai ir yra visa pratybų vertė: tolimasis galas nemato jokio pokyčio, kurį turėtų interpretuoti. Jis ir toliau gauna paketus, atitinkančius ryšį, kurį jau pažįsta.
Kaina yra sudėtingumas: dvi maršrutizavimo lentelės, klasifikatorius, veikiantis tinkamoje vietoje, ir žymės, kurias reikia suderinti su viskuo kitu mašinoje, kas jas naudoja.
Duokite kiekvienam išėjimui savo lentelę
Rezervuokite maršrutizavimo lentelę kiekvienam išėjimui ir skirtingas žymės reikšmes ar bitus dviem pasirinkimams. Kiekvienai lentelei reikia jos vaidmeniui tinkamų maršrutų, o ne vien pavadinimo, ir jai reikia sąmoningo gedimo rezultato trūkstamam atvejui. Tuščia lentelė, kuri tyliai patenka į pagrindinę lentelę — taip srautas išeina per išėjimą, kurio niekas nepasirinko.
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 102Pridėkite blackhole maršrutą kiekvienos lentelės gale, kad atitikmens nerandanti paieška garsiai žlugtų, o ne pabėgtų į numatytąjį, kurio nepasirinkote.
Pasirinkite vieną kartą, pirmame pakete
Klasifikuokite po to, kai yra ryšių sekimas, ir prieš svarbią maršruto paiešką. Naujam, neklasifikuotam LAN ryšiui pasirinkite išėjimą ir išsaugokite jį ryšio būsenoje. Vėlesniuose paketuose atkurkite išsaugotą reikšmę paketo žymėje, kurią skaito politikos maršrutizavimas.
Subtilioji dalis yra tai, ką reiškia naujas. Conntrack vis dar gali pranešti NEW ankstiems paketams ir pakartotiniams perdavimams, kol nepamatytas atsakymas, todėl klasifikatorius, besiremiantis vien šia būsena, gali perrašyti jau priimtą pasirinkimą. Prieš priskirdami patikrinkite, ar ryšiui nėra išsaugoto išėjimo.
nftables laiko paketo ir ryšio žymes atskirai, o metainformacijos vadovas dokumentuoja aiškų jų kopijavimą. Ryšio žymė savaime netampa paketo žyme, su kuria sutampa jūsų taisyklė, ir tai yra dažniausia priežastis, kodėl kruopščiai parašytas klasifikatorius neturi jokio poveikio.
Apribokite atkūrimą ta kryptimi ir srautu, kuriuos turite omenyje. Interneto išėjimo žymės taikymas grįžtantiems paketams gali nukreipti atsakymus link išėjimo, o ne link LAN, o simptomas yra vienpusis ryšys, atrodantis kaip ugniasienės problema. Perskaitykite atsakymo kelią prieš liesdami ugniasienės taisyklę, nes paketas yra maršrutizuojamas, tik ne atgal siuntėjui.
Keturi nutekinimo etapai
Paruoškite B neliesdami A: maršrutizavimas, perdavimas, autorizacija, NAT ir grįžimo kelias. Įdiekite jo lentelę ir pasirinkimo politiką per esamą tinklų sietuvos konfigūracijos savininką.
Perjunkite klasifikatorių, kad nauji, neklasifikuoti ryšiai rinktųsi B, išsaugant išsaugotus pasirinkimus. Atominė nftables transakcija išvengia lango, kuriame reikia išvalyti seną būseną.
Palikite A veikiantį, kol jo srautai baigsis. Jo sąsaja, lentelė, nuotolinis išėjimas ir NAT atvaizdai vis dar yra tų srautų dalis, o NAT taisyklės redagavimas neperstato jau esančių susiejimų.
Išveskite A iš eksploatacijos, kai įvykdoma nutekinimo sąlyga, vertinama pagal ryšių būseną ir programos elgseną, o ne vieną tykų intervalą.
Ko nutekinimas negali pažadėti
Naršyklės užklausa nėra naujas transporto ryšys; telkimas ir toliau siunčia užklausas senuoju. Atvirkščiai, UDP srautas gali pasenti iš conntrack, o vėlesnis paketas klasifikuojamas iš naujo. Nutekinimas seka sekamus srautus, o ne programos idėją apie sesiją.
Jei A sugenda anksčiau, nei baigiasi jo srautai, išsaugota žymė jų neišgelbsti. Jie vėl jungiasi per B arba visai nesijungia. Suplanuotas nutekinimas nuperka tęstinumą, kol pradinis kelias sveikas; tai nėra būsenos replikacija tarp nepriklausomų išėjimų.
Patikrinkite abi puses
Prieš pakeitimą pradėkite ilgalaikį leistiną ryšį, o po jo – tikrai naują. Patvirtinkite, kurį tunelį naudoja kiekvienas ir kokį viešąjį šaltinio adresą mato tolimasis galas, tada patikrinkite, ar grįžtamasis srautas grįžta.
Neišvalykite conntrack lentelės, kad atsirastų naujas pasirinkimas. Tai sunaikina būtent tą būseną, kurią nutekinimas turi išsaugoti, ir paverčia kontroliuojamą migraciją pertrauka su švariai atrodančiu testu.