Uudet yhteydet uudella VPN-uloskäynnillä, vanhat vuot jätetään rauhaan
Suunniteltu tyhjennys siirtää vain luokittelemattomia vuotoja. Vertaa sitä reitin vaihtoon ja katso merkit, taulukot ja conntrack-tila, jotka pitävät sen pystyssä.
Kaksi tervettä VPN-uloskäyntiä, yksi pitkä lataus jo käynnissä ja vaatimus, että seuraava yhteys käyttää toista tunnelia. Sen täyttämiseen on kaksi tapaa, ja vain yksi niistä on turvallinen käynnissä olevalla yhdyskäytävällä. Oletusreitin vaihto siirtää jokaisen paketin, myös ne, jotka kuuluvat lataukseen. Suunniteltu tyhjennys muuttaa valintaa uusille yhteyksille ja jättää seurattavat vuot reitille, jolta ne alkoivat.
Kaksi tapaa vaihtaa uloskäynti
Reitin vaihto on yksi komento ja se voidaan perua sekunneissa, minkä vuoksi sitä käytetään häiriöiden aikana. Se on myös valikoimaton: nykyisen latauksen paketit lähtevät yhtäkkiä toisesta tunnelista, toisella julkisella lähdeosoitteella ja erillisellä käännöstilalla.
Jos kaukopää seuraa vuotoja lähdeosoitteen mukaan, lataus voi yksinkertaisesti lakkautua tunnistamasta. Tyhjennys välttää sen tekemällä päätöksen kerran yhteyttä kohden ja tallentamalla sen, joten vanha lataus pitää uloskäyntinsä kunnes se päättyy. Se on koko harjoituksen arvo: kaukopää ei näe mitään muutosta, jota sen pitäisi tulkita. Se saa edelleen paketteja, jotka vastaavat yhteyttä, jonka se jo tuntee.
Hinta on monimutkaisuus: kaksi reititystaulua, oikeassa koukussa ajettava luokittelija ja merkit, jotka on sovitettava yhteen kaiken muun koneella niitä käyttävän kanssa.
Anna jokaiselle uloskäynnille oma taulu
Varaa reititystaulu uloskäyntiä kohden ja erilliset merkkiarvot tai bitit kahdelle vaihtoehdolle. Jokainen taulu tarvitsee rooliinsa sopivat reitit, ei vain nimeä, ja se tarvitsee tarkoituksellisen epäonnistumistuloksen puuttuvalle tapaukselle. Tyhjä taulu, joka putoaa hiljaa päätauluun — näin liikenne lähtee uloskäynnistä, jota kukaan ei valinnut.
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 102Lisää blackhole-reitti jokaisen taulun loppuun, jotta ilman osumaa jäävä haku epäonnistuu äänekkäästi sen sijaan, että pakenisi oletukseen, jota et valinnut.
Valitse kerran, ensimmäisellä paketilla
Luokittele sen jälkeen, kun yhteyksien seuranta on olemassa, ja ennen sitä merkitsevää reittihakua. Uudelle, luokittelemattomalle LAN-yhteydelle valitse uloskäynti ja tallenna se yhteyden tilaan. Myöhemmillä paketeilla palauta tallennettu arvo pakettimerkkiin, jonka käytäntöreititys lukee.
Hienovarainen osa on, mitä uusi tarkoittaa. Conntrack voi yhä ilmoittaa NEW-arvon varhaisille paketeille ja uudelleenlähetyksille ennen vastauksen näkemistä, joten vain siihen tilaan nojaava luokittelija voi ylikirjoittaa jo tekemänsä valinnan. Tarkista ennen uloskäynnin määrittämistä, ettei yhteydelle ole tallennettu yhtään uloskäyntiä.
nftables pitää paketti- ja yhteysmerkit erillään, ja metatieto-opas dokumentoi niiden välisen nimenomaisen kopioinnin. Yhteysmerkistä ei itsestään tule sitä pakettimerkkiä, johon sääntösi osuu, ja se on tavallisin syy siihen, ettei huolellisesti kirjoitettu luokittelija vaikuta mitenkään.
Rajoita palautus suuntaan ja liikenteeseen, jota tarkoitat. Internet-uloskäynnin merkin soveltaminen palaaviin paketteihin voi lähettää vastaukset uloskäyntiä kohti LANin sijaan, ja oireena on yksisuuntainen yhteys, joka näyttää palomuuriongelmalta. Lue vastauksen polku ennen palomuurisääntöön koskemista, koska pakettia reititetään, vain ei takaisin lähettäjälle.
Tyhjennyksen neljä vaihetta
Valmistele B koskematta A:hen: reititys, edelleenlähetys, valtuutus, NAT ja paluupolku. Asenna sen taulu ja valintakäytäntö yhdyskäytävän olemassa olevan kokoonpanonomistajan kautta.
Vaihda luokittelija niin, että uudet, luokittelemattomat yhteydet valitsevat B:n, säilyttäen tallennetut valinnat. Atominen nftables-tapahtuma välttää ikkunan, jossa vanha tila on tyhjennettävä.
Jätä A päälle, kunnes sen vuot päättyvät. Sen liitäntä, taulu, kaukainen uloskäynti ja NAT-kartoitukset ovat yhä osa noita vuotoja, eikä NAT-säännön muokkaus rakenna uudelleen jo olemassa olevia sidontoja.
Poista A käytöstä, kun tyhjennyksen ehto täyttyy, arvioituna yhteyksien tilan ja sovelluksen käyttäytymisen perusteella eikä yhden hiljaisen jakson perusteella.
Mitä tyhjennys ei voi luvata
Selaimen pyyntö ei ole uusi kuljetusyhteys; yhdistely lähettää pyyntöjä edelleen vanhan kautta. Päinvastoin, UDP-vuo voi vanheta conntrackista ja myöhempi paketti luokitellaan uudelleen. Tyhjennys seuraa seurattuja vuotoja, ei sovelluksen käsitystä istunnosta.
Jos A epäonnistuu ennen vuotojensa päättymistä, tallennettu merkki ei pelasta niitä. Ne yhdistävät uudelleen B:n kautta tai eivät yhdistä lainkaan. Suunniteltu tyhjennys ostaa jatkuvuutta, kun alkuperäinen polku on terve; se ei ole tilan replikointia riippumattomien uloskäyntien välillä.
Tarkista molemmat puolet
Käynnistä pitkäikäinen sallittu yhteys ennen muutosta ja aidosti uusi sen jälkeen. Vahvista, kumpaa tunnelia kukin käyttää ja minkä julkisen lähdeosoitteen kaukopää näkee, tarkista sitten, että paluuliikenne palaa.
Älä tyhjennä conntrack-taulua saadaksesi uuden valinnan näkyviin. Se tuhoaa juuri sen tilan, jonka tyhjennys on tarkoitettu säilyttämään, ja muuttaa hallitun siirtymän katkokseksi, jossa on siistiltä näyttävä testi.