Zašto kill switch obara promet kad promijenite poslužitelj
Zašto kill switch blokira saobraćaj tokom promjene servera, šta klijent radi u tom intervalu i kako razlikovati normalnu pauzu od zaglavljene blokade.
Odaberete server koji izgleda bliže, pritisnete poveži i pregledač prestane da učitava prije nego što novi tunel bude spreman. Ikona pređe u stanje povezivanja i ostane tamo dok svaki tab ne istekne. Ta pauza je obično kill switch koji radi kako je predviđeno: saobraćaj je blokiran dok klijent nema tunel kroz koji bi ga poslao. Da li je pauza prihvatljiva zavisi od toga šta klijent radi u tim sekundama i da li se blokada ukida kada tvrdi da jeste.
Šta klijent radi između dva servera
Promjena krajnje tačke je nekoliko koraka, a ne jedan prekidač. Klijent ruši trenutni tunel, ažurira svoja pravila blokiranja, razrješava novu krajnju tačku i dolazi do nje izvan tunela, zatim postavlja nove rute i ukida blokadu. Praznina koju osjetite nalazi se između prvog i posljednjeg koraka.
Redoslijed je ovdje važniji od brzine. Ako pravila blokiranja stupe na snagu prije izuzetka za novu krajnju tačku, klijent ne može dovršiti rukovanje i ostaje u stanju povezivanja do isteka vremena. Ako je izuzetak kopija adrese starog servera, novo rukovanje izgleda kao bilo koji drugi odlazni paket i biva odbačeno. Oba slučaja iz pregledača izgledaju isto, zato promjena koja se oporavi nakon šest sekundi i ona koja se nikad ne oporavi mogu imati isti uzrok.
Nova krajnja tačka traži rupu u blokadi
Da bi izgradio tunel, klijent mora slati pakete na adresu i port novog servera preko fizičkog interfejsa, na primjer UDP 51820 za tipičan WireGuard profil ili 1194 i 443 za OpenVPN, šta god vaš profil propisuje. Taj saobraćaj nije unutar tunela koji tek treba nastati, pa blokada za cijeli uređaj proguta ga osim ako postoji odgovarajuće pravilo dozvole.
Profili zasnovani na imenu hosta dodaju drugi uslov: samo razrješavanje. Ako klijent razriješi krajnju tačku prije nego što se blokada podigne, može koristiti keširanu adresu, ali kada profil promijeni adrese ili keširani zapis ostari, rukovanje kreće prema adresi koju pravilo dozvole ne pokriva. IPv6 to čini vidljivim, jer krajnja tačka sa dva steka može objaviti i A i AAAA zapis, a pravilo dozvole koje pokriva samo adresu v4 ostavlja klijenta da iznova pokušava protiv blokirane adrese v6.
Nazivi opcija i zadane vrijednosti razlikuju se po klijentu i verziji, zato pročitajte dokumentovanu listu za svoj umjesto da nagađate sa snimaka ekrana. Referenca postavki OpenVPN Connect na openvpn.net/connect-docs/app-settings-windows je jedan primjer kako klijent opisuje svoje opcije blokiranja i podijeljenog tunela.
Fail-closed je mašina stanja, a ne prekidač
Većina klijenata izražava blokadu kao firewall politiku u tri stanja: tunel podignut, saobraćaj ide kroz tunel i blokade nema; tunel spušten, blokada je aktivna; i tranzicija, kada je blokada aktivna plus privremeni izuzeci za krajnju tačku. U trećem stanju žive greške, jer se ono mora promijeniti dvaput u nekoliko sekundi, a nemogućnost izlaska iz njega izgleda tačno kao trajna blokada.
Mehanizam se razlikuje po platformi, a i kvar. Filteri Windows Filtering Platform nose težine, pa blok filter koji nadjačava vašu dozvolu nastavlja odbacivati pakete iako dozvola postoji, a filteri koje je ostavio ubijeni proces klijenta mogu držati mašinu van mreže nakon što aplikacije nema. macOS klijenti obično upisuju pf pravila u anchor, gdje redoslijed pravila i brze odluke određuju koje pravilo važi. Linux klijenti obično upravljaju nftables ili iptables lancem sa drop politikom i izričitim dozvolama za krajnju tačku, interfejs tunela i loopback. Androidov always-on VPN sa opcijom blokiranja veza bez VPN-a najstroži je u grupi, jer OS primjenjuje blokadu na cijeli uređaj, a ne po aplikaciji.
WireGuard zaslužuje posebnu napomenu, jer AllowedIPs je birač ruta, a ne blokator. On odlučuje koje destinacije idu u tunel; ništa ne čini da spriječi paket koji još nema tunel da izađe preko Wi-Fi mreže. U postavci samo sa WireGuardom i bez firewall pravila kill switch je zapravo odsustvo rute, a nakon odbačenog rukovanja može slijediti stvarni paket koji izlazi preko fizičkog interfejsa.
Izmjerite prazninu umjesto da gledate ikonu
Pratite pakete, a ne lampicu stanja. Na Linuxu pokrenite spori ping prema javnoj adresi u jednom terminalu i uhvatite transportni port tunela na fizičkom interfejsu u drugom:
ping -i 0.2 -c 100 1.1.1.1 | tail -5
sudo tcpdump -ni eth0 'udp port 51820'
Mijenjajte servere u klijentu dok oba rade. Tri stvari su važne: koliko dugo pingovi stanu, da li snimak pokazuje da rukovanje stiže do nove krajnje tačke i da li se saobraćaj vraća prije ili poslije nego što stanje klijenta pređe u povezano. Ako praznina u pingovima završi prva, ili je blokada ukinuta rano ili je tunel podignut prije nego što indikator to prizna. Ako praznina završi kasnije, indikator je previše optimističan.
Na Windowsu netsh wfp show state upisuje snimak u kojem možete tražiti blok filtere koji su još prisutni dok klijent tvrdi da je prekinut. Na macOSu sudo pfctl -sr ispisuje učitana pravila i njihov redoslijed. Spojite bilo koji snimak sa klijentovim vlastitim logom; vremenska linija iz vašeg pinga kaže da li je blokada završila kasno ili nikad.
Normalno zamračenje nasuprot zaglavljenoj blokadi
Određeni prekid je svrha te funkcije, zato procijenite stanje prije nego što promijenite bilo koju postavku:
| What you see | Usually means | Next check |
|---|---|---|
| Two or three seconds of timeouts, then normal browsing | Expected fail-closed gap | Nothing to fix |
| State says connected, traffic stays dead | Block filter or route left behind | Firewall snapshot, client log |
| One app dead while others work | TCP session bound to the old exit address | Restart the app |
| LAN devices unreachable after the switch | LAN exception not reapplied | Allow-LAN or split-tunnel setting |
| New server hangs, the old one reconnects | Permit covers only the old address | Resolved address of the new host, including AAAA |
Ako završite u drugom ili petom redu, ne isključujte kill switch radi testa, jer to pretvara grešku ruta u curenje. Ponovo pokrenite klijentovu uslugu ili restartujte mašinu tamo gdje filteri preživljavaju ubijanje procesa, pa provjerite da li se blokada čisti. Ako se očisti, kvar je u čišćenju tokom promjene, a ne u blokadi samoj.
Prije sljedeće promjene potvrdite četiri stvari: dozvola za krajnju tačku pokriva svaku familiju adresa koju vaš profil razrješava, klijentov log pokazuje dovršenu tranziciju, vaš ping test mjeri prazninu a ne ikonu, i zatvaranje klijenta vraća normalnu povezanost. Kill switch koji drži tokom promjene i otpusti poslije radi svoj posao. Onaj koji otpusti rano ili nikad, vrijedi debagovati.