Nove povezave na novem izhodu VPN, stari tokovi ostanejo nedotaknjeni
Načrtovano izpraznjenje premakne le neklasificirane tokove. Primerjajte to z zamenjavo poti in poglejte oznake, tabele ter stanje conntrack, ki to držijo.
Dva zdrava izhoda VPN, eno dolgo nalaganje že poteka in zahteva, da naslednja povezava uporabi drug tunel. Obstajata dva načina za to, in le eden je varen na delujočem prehodu. Zamenjava privzete poti premakne vsak paket, tudi tiste, ki pripadajo nalaganju. Načrtovano izpraznjenje spremeni izbiro za nove povezave in sledene tokove pusti na poti, kjer so se začeli.
Dva načina za zamenjavo izhoda
Zamenjava poti je en ukaz in jo je mogoče razveljaviti v nekaj sekundah, zato se uporablja med incidenti. Je tudi nerazločevalna: paketi obstoječega nalaganja nenadoma odidejo skozi drug tunel, z drugim javnim izvornim naslovom in ločenim stanjem prevajanja.
Če oddaljeni konec sledi tokovom po izvornem naslovu, se nalaganje lahko preprosto neha prepoznavati. Izpraznjenje se temu izogne tako, da odločitev sprejme enkrat na povezavo in jo shrani, zato staro nalaganje obdrži svoj izhod, dokler se ne konča. To je vsa vrednost vaje: oddaljeni konec ne vidi nobene spremembe, ki bi jo moral razlagati. Še naprej prejema pakete, ki ustrezajo povezavi, ki jo že pozna.
Cena je zapletenost: dve usmerjevalni tabeli, klasifikator, ki teče na pravi kljuki, in oznake, ki jih je treba uskladiti z vsem drugim na stroju, kar jih uporablja.
Dajte vsakemu izhodu svojo tabelo
Rezervirajte usmerjevalno tabelo za vsak izhod in različne vrednosti oznak ali bite za obe izbiri. Vsaka tabela potrebuje poti, primerne svoji vlogi, ne le imena, in potrebuje nameren izid napake za manjkajoči primer. Prazna tabela, ki tiho pade v glavno tabelo — tako promet zapusti izhod, ki ga ni nihče izbral.
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 pot blackhole na konec vsake tabele, da iskanje brez ujemanja glasno propade, namesto da bi pobegnilo v privzeto vrednost, ki je niste izbrali.
Izberite enkrat, pri prvem paketu
Klasificirajte po tem, ko obstaja sledenje povezavam, in pred tistim iskanjem poti, ki je pomembno. Za novo, neklasificirano povezavo LAN izberite izhod in ga shranite v stanje povezave. Pri poznejših paketih obnovite shranjeno vrednost v oznako paketa, ki jo bere usmerjanje po politiki.
Subtilni del je, kaj pomeni novo. Conntrack lahko še vedno poroča NEW za zgodnje pakete in ponovne prenose, preden je videti odgovor, zato lahko klasifikator, ki se opira samo na to stanje, prepiše že sprejeto izbiro. Pred dodelitvijo preverite, da za povezavo ni shranjen noben izhod.
nftables drži oznaki paketa in povezave ločeni, in vodnik po metapodatkih dokumentira izrecno kopiranje med njima. Oznaka povezave sama ne postane oznaka paketa, s katero se ujema vaše pravilo, in to je najpogostejši razlog, da skrbno napisan klasifikator nima učinka.
Omejite obnovitev na smer in promet, ki ju mislite. Uporaba oznake internetnega izhoda na povratnih paketih lahko pošlje odgovore proti izhodu namesto proti LAN, simptom pa je enosmerna povezava, ki izgleda kot težava požarnega zidu. Preberite pot odgovora, preden se dotaknete pravila požarnega zidu, ker se paket usmerja, le nazaj k pošiljatelju ne.
Štiri faze izpraznjenja
Pripravite B brez dotikanja A: usmerjanje, posredovanje, avtorizacija, NAT in povratna pot. Namestite njegovo tabelo in politiko izbire prek obstoječega lastnika konfiguracije prehoda.
Preklopite klasifikator, da nove, neklasificirane povezave izberejo B, pri čemer shranjene izbire ostanejo. Atomska transakcija nftables se izogne oknu, v katerem je treba počistiti staro stanje.
Pustite A vklopljen, dokler se njegovi tokovi ne končajo. Njegov vmesnik, tabela, oddaljeni izhod in preslikave NAT so še vedno del teh tokov, urejanje pravila NAT pa ne obnovi že obstoječih povezav.
Umaknite A, ko je pogoj izpraznjenja izpolnjen, ocenjen po stanju povezav in vedenju aplikacije, ne po enem samem mirnem intervalu.
Česa izpraznjenje ne more obljubiti
Zahteva brskalnika ni nova transportna povezava; združevanje še naprej pošilja zahteve po stari. Nasprotno, tok UDP lahko ostari iz conntracka in poznejši paket se klasificira znova. Izpraznjenje sledi sledenim tokovom, ne ideji aplikacije o seji.
Če A odpove, preden se njegovi tokovi končajo, shranjena oznaka jih ne reši. Znova se povežejo prek B ali pa se sploh ne povežejo. Načrtovano izpraznjenje kupi neprekinjenost, dokler je prvotna pot zdrava; to ni replikacija stanja med neodvisnimi izhodi.
Preverite obe polovici
Pred spremembo zaženite dolgotrajno dovoljeno povezavo, po njej pa resnično novo. Potrdite, kateri tunel uporablja vsaka in kateri javni izvorni naslov vidi oddaljeni konec, nato preverite, da se povratni promet vrne.
Ne praznite tabele conntrack, da bi se nova izbira pojavila. To uniči natanko tisto stanje, ki naj bi ga izpraznjenje ohranilo, in spremeni nadzorovano selitev v izpad s čisto videčim se testom.