Kill-switch po prehodu z Wi-Fi na mobilno omrežje: kaj se zlomi
Kill-switch se piše glede na imena vmesnikov, ki jih zamenja sprememba omrežja. Preverite zunanjo pot, družine naslovov in razreševalnik, preden mu zaupate.
V enem trenutku je prenosnik v pisarniškem Wi-Fi, v naslednjem je priključen na telefon, indikator predora pa je spet zelen, preden končate s preklapljanjem oken. Zelena lučka sporoča le, da se je predor znova povezal; kaj je med vrzeljo počela politika usmerjanja in blokiranja, je drugo vprašanje. Ta politika je niz pogojev ujemanja, prevedenih ob zadnji namestitvi, in poimenuje vmesnik, naslov in družino naslovov, ki jih je prehod pravkar odstranil. Isti preklop zato da tri izide, ki so videti enaki: blokiranje se nadaljuje, politika blokira lastno obnovitev ali se odpre pot, ki je nič ne pokriva.
Nič na zaslonu ne loči teh treh stanj, zato vprašajte, na katere identifikatorje so bila pravila pripeta, in ne, kakšno barvo kaže indikator. V Linuxu lahko pravilo poimenuje vmesnik ali ipset, napolnjen z njega; v Androidu lahko VpnServiceu prek setUnderlyingNetworks poveste, katerim osnovnim omrežjem naj sledi. Vsaka vezava kaže na povezavo, ki bo kmalu zamenjana, in vsako je treba nato znova ovrednotiti.
Kaj prehod v resnici prepiše
Ko stara povezava izgine, jedro odstrani njene naslove, umakne poti, ki so šle skoznjo, in znova sestavi izbiro izvornega naslova iz tega, kar ostane. Privzeta pot se premakne na novo prehodno točko, indeks vmesnika, na katerega so se sklicevala stara pravila, pa je izginil ali je recikliran za drugo napravo. Tudi razreševalniki na povezavo se osvežijo, čeprav ne v istem trenutku kot poti. Vse to se dogaja pod odjemalcem VPN, zato odjemalec, ki spremlja le stanje svojega predora, od tega ne vidi nič.
Težava je v tem, da pravilo kodira določen identifikator namesto namere za njim. Pravilo, ki zavrže vse, kar ne odide skozi vmesnik predora, kodira ime vmesnika; pravilo, ki dovoli končno točko, kodira naslov, ki ga lahko novo omrežje usmeri drugam. Ko identifikator izgine, pravilo ne postane vidno napačno: bodisi preneha ujemati s čimer koli bodisi začne ujemati z napačno stvarjo.
Ponovna zgraditev zunanjega predora brez izbijanja luknje
Zunanji transport je bil vezan na stari izvorni naslov, zato mora odpreti novo vtičnico z novega. Ko je končna točka ime gostitelja in ne dobesedni naslov, mora iskanje uspeti, dokler blokada še velja. To je past vrstnega reda: politika, dovolj stroga, da zavrže vse razen končne točke, bo zavrgla tudi iskanje, potrebno za njeno najdbo, razen če se razrešitev zgodi pred dvigom blokade ali se prenese skozi še živi predor. Oba vrstna reda lahko delujeta, a le če odjemalec ve, v katerem je.
Odjemalci se tu razlikujejo na način, ki je pri diagnosticiranju pomemben. Nekateri najprej razrešijo in nato namestijo pravila, zato prehod stane vidno prekinitev in se nato sam obnovi; drugi držijo blokado in se zanašajo na preživeli predor, da prenese iskanje, kar popolnoma odpove, ko predor umre skupaj s povezavo. Dodajanje široke neposredne privzete poti za obnovitev povezljivosti vedno spusti test skozi in vedno pusti uhajanje, ki ste ga preprečevali.
Pot, ki še vedno kaže na staro prehodno točko, da enako zataknjeno obnovitev iz drugega vzroka, zato preberite tabelo, preden obtožite odjemalca. Spodnji ukazi poimenujejo vmesnik in izvorni naslov, ki bi ju jedro res uporabilo, in to v eni vrstici razreši, ali je stara pot še nameščena.
ip route get 1.1.1.1
ip -6 route get 2606:4700:4700::1111Ko nova povezava prinese IPv6, pravila pa ne
Mobilna in gostujoča omrežja pogosto dodelijo globalno predpono IPv6, tudi ko se žični LAN pisarne tega ni nikoli storil. Politika, napisana samo kot pravila IPv4, privzeta oblika večine ročno izdelanih receptov za iptables in nftables, od tega ne pokrije ničesar. Predor ostane povezan, aplikacije z dosegljivostjo IPv6 odidejo zunaj njega, indikator pa razlike ne more pokazati, ker predor res deluje. Zrcalni primer je prav tako pogost: nabor pravil samo za IPv6 ne naredi ničesar v omrežju, ki ne ponuja v6.
Primerjajte, kaj ponuja povezava, s tem, kar omenja politika, na obeh straneh prehoda. Ti ukazi natisnejo ista dejstva, s katerimi dela odjemalec:
ip -4 route show default
ip -6 route show default
sudo nft list ruleset | grep -c 'ip6 'Če drugi ukaz natisne privzeto pot, tretji pa vrne nič, lahko nova povezava pelje stroj ven prek IPv6, ne da bi katero koli pravilo pazilo nanj. Zaženite vse tri znova po preklopu, ker je zanimivo število razlika med obema zagonoma. Če drugi ne natisne ničesar, velja obratni primer in vsaka politika, težka na v6, je tam le okras.
Razreševalnik zamenja roke sredi seje
V sodobnih sistemih so razreševalniki vezani na povezave, zato nova povezava pride z novim naborom razreševalnikov in morda z drugačnim pogledom split-DNS. systemd-resolved drži en obseg na povezavo in izbira med njimi po poti, medtem ko macOS bere razreševalnike z obsegom iz dinamičnega skladišča in spoštuje vrstni red vmesnikov. Odjemalec, ki namesti svoj razreševalnik, tekmuje s tistim na povezavi, in pravila prednosti, ki jih nihče ne spremlja, odločijo zmagovalca. Takrat se razreševanje imen lahko zlomi, medtem ko filtriranje paketov dela točno to, za kar je bilo napisano.
Berite razreševalnik, ki je aktiven, ne tistega, ki je konfiguriran. Na gostitelju systemd podukaz status pokaže, s katere povezave je prišel vsak obseg in ali velja ime private-DNS:
resolvectl status --no-pager
resolvectl query intranet.example.comČe poizvedba odide skozi fizično povezavo in ne skozi predor, je odjemalec izgubil tekmovanje prednosti in nobena nastavitev požarnega zidu ne bo popravila poimenovanja. Primerjajte pot poizvedbe na obeh straneh prehoda, da vidite, katera se je premaknila. Ime, ki se razreši v zasebni naslov, ki ga novo omrežje ne more usmeriti, je tretji primer in se pokaže kot časovna omejitev, ne kot napaka.
Vadite prehod in vodite zapis
Reproducirajte spremembo namenoma, namesto da bi čakali nanjo. Dvignite predor na prvi povezavi, zaženite dolg prenos in ponavljajoče se iskanje, nato zamenjajte povezavo in opazujte, katera preživi. Zapišite interval med izginotjem stare povezave in sporočilom predora, da je povezan, ker je v tem oknu politika zdržala ali ne. Zaženite zaporedje tudi v nasprotno smer, da izid ne bo enostranski.
Izjeme potrebujejo svoj krog, ker obhod, upravičen v starem omrežju, ni samodejno upravičen v novem. Tiskalnik, NAS ali captive portal v domačem LAN-u nima para v mobilnem omrežju, izjema, ki je prišla do njih, pa postane pravilo brez para.
Zapišite imena vmesnikov, ponujene družine, veljavni razreševalnik in trajanje prekinitve za vsako smer. Ponovna povezava dokaže, da se je transport obnovil, ne da je blokada med vrzeljo zdržala, in to sta ločeni trditvi za zahtevek. S tem zapisom se naslednji prehod primerja z znanim stanjem in ne s spominom.