Always-on VPN ar kill switch: ką iš tikrųjų įjungėte?
Always-on VPN vėl prijungia tunelį; kill switch nusprendžia, kas gali išeiti be jo. Penki patikrinimai prieš pasitikint etikete.
Always-on ir kill switch yra dviem eilutėmis vienas nuo kito tame pačiame nustatymų ekrane, todėl žmonės juos skaito kaip du vienos funkcijos pavadinimus. Jie tokie nėra. Always-on yra prisijungimo iš naujo politika: paleisti tunelį įjungiant, grąžinti jį po avarijos ar tinklo pakeitimo ir kartoti, kol nepavyksta. Kill switch yra srauto politika: jis nurodo, kurie paketai dar gali palikti mašiną, kai tunelio nėra. Pirmąjį galite įjungti be antrojo, o daugumoje platformų numatytasis rezultatas vis tiek išleidžia srautą per tą spragą.
1 patikrinimas: ar blokavimas yra atskiras jungiklis?
Nuo Android 10 versijos išsaugotas VPN profilis atidaro du nepriklausomus jungiklius už krumpliaračio piktogramos: Always-on VPN ir Block connections without VPN. Tik antrasis yra kill switch. Vien tik su always-on tunelis tikrai grįžta po nutrūkimo, o bet kuri programa, kurios užklausa vykdoma, gali pasiekti tinklą per Wi-Fi arba mobiliojo ryšio duomenis, kol tai įvyks.
Valdomi įrenginiai išlaiko tą patį atskyrimą politikos API: setAlwaysOnVpnPackage() priima paketo pavadinimą ir lockdownEnabled vėliavėlę; administratorius, kuris nustato paketą ir palieka vėliavėlę false, sukūrė nuolatinį tunelį, o ne uždarą įrenginį. Konsolės formuluotė tą skirtumą retai padaro matomą.
Būseną skaitykite iš įrenginio, o ne iš konsolės: adb shell settings get global always_on_vpn_app ir adb shell settings get global always_on_vpn_lockdown. Jei pirmasis grąžina null, platformos lygiu joks paketas neįgyvendinamas; jei antrasis grąžina 0, platforma nieko neblokuoja. Android VPN vadovas aprašo tai kaip atskiras galimybes, o ne vieną režimą.
2 patikrinimas: kuris sluoksnis valdo blokavimą?
Etiketės gyvena kliente, o blokavimas paprastai ugniasienėje, todėl tas pats žodis kiekvienoje platformoje reiškia ką kita. Žemiau esančios eilutės yra tos, kurias verta patvirtinti prieš pasitikint bet kuria iš jų.
| Where you see the label | What the label promises | What actually blocks |
|---|---|---|
| Android VPN profile | Always-on VPN | Block connections without VPN |
| Android device policy | Always-on package | lockdownEnabled flag |
| Windows built-in VPN | Always On tunnel | Outbound firewall rules |
| WireGuard for Windows | Tunnel service | Block untunneled traffic option |
| wg-quick on Linux | Route via AllowedIPs | Your own nftables or iptables rules |
Windows yra aiškiausias neblokuojančios etiketės pavyzdys. Ten Always On apibūdina tunelio pastovumą: įrenginio tunelį mašinos autentifikavimui ir naudotojo tunelį prisijungusiai paskyrai, sukonfigūruotus profilio XML arba Add-VpnConnection. Niekas tame profilyje nesustabdo išeinančio paketo, kai tunelio nėra, o išeinančio srauto filtravimas pagal numatytuosius nustatymus neįjungtas, todėl nešiojamasis kompiuteris su Wi-Fi veikia toliau, kai VPN yra išjungta.
WireGuard skyla taip pat, bet pagal klientą. WireGuard for Windows turi kiekvieno tunelio parinktį Block untunneled traffic, kuri įdiegia filtro taisykles; Linux įrankiai neturi tokio jungiklio. wg-quick prideda maršrutą kiekvienam AllowedIPs įrašui ir fwmark taisyklę, o wg-quick down pašalina abu, todėl fizinis numatytasis maršrutas vėl perima darbą neprarandant nė vieno paketo.
Apple platformose always-on ateina kaip valdymo profilio funkcija prižiūrimiems įrenginiams ir išreiškiama on-demand taisyklėmis, o ne žymės langeliu. Klausimas, į kurį reikia atsakyti iš naudingosios apkrovos, yra ar nepavykęs tunelis draudžia srautą, ar tik prašo kito ryšio. Meniu pavadinimas to nepasakys.
3 patikrinimas: matuokite spragą, o ne piktogramą
Svarbūs keturi perėjimai, ir jie nepavyksta skirtingai: įjungimas prieš kam nors prisijungiant, miegojimas ir pabudimas, perėjimas iš Wi-Fi į mobiliojo ryšio duomenis ir kliento avarija, paliekanti tunelio sąsają pusiau sukonfigūruotą. Tvarkingas prisijungimas iš naujo viename iš jų nieko neįrodo apie kitus tris.
Pigiausias bandymas sąmoningai sustabdo tunelį ir tada bando išeiti. Kai tunelio nėra, curl -m 5 -sS -o /dev/null -w '%{http_code}' https://example.com grąžinantis 200 reiškia, kad politika yra fail-open; laiko limitas arba atmestas ryšys reiškia, kad kažkas dar blokuoja. ip route get 1.1.1.1 nurodo sąsają, kuri neštų paketą, o tai paprastai informatyviau už dėklo piktogramą, ir systemctl status wg-quick@wg0 parodo, ar sąsaja buvo tvarkingai pašalinta.
Tą patį bandymą paleiskite antrame lange, kol tinklas keičiasi, o ne tik jam nusistovėjus. Intervalas tarp nutrūkimo ir kito bandymo yra tai, kas svarbu, o vardų skaidymas yra greičiausias būdas pastebėti, kad srautas pabėgo: jei vietinis skaidytuvas atsako, kai tunelio nėra, blokavimas nėra išsamus.
4 patikrinimas: išimtis nuspręskite prieš užrakindami
Dvi išimtys yra struktūrinės. Klientas turi pasiekti patį VPN serverį, todėl taisyklių rinkinys, kuris viską meta, taip pat sutrukdo prisijungimą iš naujo, kuris atkurtų apsaugą. Captive portal taip pat nepasiekiamas per tunelį, kuris nepakeltas, todėl užrakintam įrenginiui viešbučio Wi-Fi tinkle reikia dokumentuoto būdo atidaryti portalą, o ne improvizuoto.
Minimali forma: galinis taškas leidžiamas, visa kita metama:
table inet vpnlock {
chain output {
type filter hook output priority 0; policy drop;
oifname "lo" accept
ip daddr 203.0.113.10 udp dport 51820 accept
oifname "wg0" accept
}
}
Tą galinio taško eilutę traktuokite kaip kintamąjį, o ne konstantą. Tiekėjai keičia adresus, o pasenusi išimtis yra įprasta priežastis, kodėl veikiantis kill switch tampa įrenginiu, kuris nebegali prisijungti. Vietiniai spausdintuvai, NAS bendriniai ir kūrimo paslaugos priklauso tam pačiam rašytiniam sąrašui, kitaip jos atrandamos po vieną palaikymo užklausą.
5 patikrinimas: užrašykite, ką iš tikrųjų įrodėte
Laikykite keturių stulpelių lentelę ir pildykite ją bandymais: būsena, laukiamas elgesys, stebėtas elgesys, įrodymas. Eilutės yra 3 patikrinimo perėjimai plius viena tyčinė klaida. Eilutė, kurios negalite užpildyti komandos išvestimi, yra neišbandyta eilutė, o įrenginys, kuris praeina prisijungimo iš naujo eilutę ir nepavyksta įjungimo eilutėje, yra pakankamai dažnas, kad vertėtų papildomų dešimties minučių.
Prieš pavadindami tai baigtu:
- Patvirtinkite, kad blokavimo nustatymas atskiras nuo prisijungimo iš naujo nustatymo, ir perskaitykite jo reikšmę įrenginyje.
- Žinokite, kuris sluoksnis įgyvendina blokavimą - kliento parinktis, įrenginio politika ar ugniasienė - ir kur tas sluoksnis konfigūruojamas.
- Išsaugokite vieną patikros komandą, kuri įrodo blokavimą, ir vykdykite ją perėjimo metu, o ne po jo.
- Užrašykite išimčių sąrašą, įskaitant galinį tašką, ir pažymėkite, kas jį atnaujina.
- Valdomoje techninėje įrangoje palikite įgyvendintą politiką ramybėje; blokavimo pašalinimas pakeičia reikalavimą, o ne taiso tunelį.