Kill switch užblokuoja VPN serverį dar neprasidėjus jokiam srautui
Kurią stadiją blokuoja kill switch: pabaigos taško paieška, išorinis maršrutas, grįžimo kelias ir pasenusios partnerių išimtys — skaitikliais, o ne spėjimais.
Kill switch nepavyksta ta kryptimi, kurios žmonės nesitiki: jie skirti blokuoti srautą, kol tunelis yra išjungtas, o tunelį statantys paketai patys yra srautas. Tai ir yra visa klaida. Taisyklių rinkinys, kuris numeta viską, kas neišeina per tunelį, numeta ir tą rankos paspaudimą, kuris turėtų jį pakelti, todėl klientas kartoja cikle, o klaida priskiriama tai stadijai, kuri tikrinama pirmoji. Prieš platinant užkardą, išsiaiškinkite, kuri iš trijų stadijų atmetama: vardo paieška, išorinis paketas partneriui ar grįžtantis atsakymas.
Kaip tunelis ir jo paties transportas priklauso vienas nuo kito
Skaitykite VPN klientą kaip dvi tinklo būsenas, kurios dalijasi vienu lizdo keliu. Kol tunelio nėra, klientas atidaro lizdą fiziniame adapteryje ir siunčia užšifruotus kadrus partnerio adresu ir prievadu. Tik po to, kai šis apsikeitimas pavyksta, jis sukuria tunelio įrenginį ir įdiegia maršrutus. Kill switch yra politika apie antrąją būseną, parašyta taip plačiai, kad galioja abiem.
Taisyklės pagal sąsają yra įprasta forma: priimkite tai, kas išeina per tun0 arba wg0, numeskite likusį išėjimo kelią. Tokia formuluotė negali išskirti paties kliento ryšio su serveriu, todėl teisingas įgyvendinimas tą išimtį prideda aiškiai, ir jūs taip pat, kai rašote taisykles ranka. Taisyklės pagal programą „Windows“ ir „macOS“ apeina dalį to, suderindamos procesą, o ne sąsają, bet procesas vis tiek turi išeiti, kol tunelio dar nėra.
Trys stadijos, ta tvarka, kokia įvyksta
Pirmoji stadija yra sprendimas. Kai profilis saugo prieglobos vardą, o ne pažodinį adresą, klientui reikia DNS atsakymo, prieš siunčiant ką nors. Profilis, nukreipiantis DNS į tunelio sprendiklį, sukuria aklavietę: sprendiklis pasiekiamas tik per tunelį, kurį paieška turėtų įjungti. Sprendimas už tunelio arba pabaigos taško priskyrimas adresui pašalina šį neaiškumą.
Antroji stadija yra išorinis paketas, kuris šia tvarka pirmiausia turi atlaikyti maršrutizavimą, o paskui užkardą. wireguard-tools atlieka maršrutizavimo pusę WireGuard atveju: pažymi savo paketus ir prideda politikos taisyklę, kad jie praleistų ką tik įdiegtą numatytąjį maršrutą; wg-quick vadovo puslapis aprašo tą taisyklę ir lentelę, kurią ji naudoja. Atstatykite tą maršrutizavimą ranka arba leiskite antram įrankiui perrašyti taisykles, ir pažymėti paketai gali būti išsiųsti atgal į tunelį, kurį jie turėtų sukurti.
Trečioji stadija yra grįžimo kelias. Rankos paspaudimas be atsakymo neįrodo numetimo išėjime; jis vienodai suderinamas su serverio įėjimo taisykle arba NAT įrenginiu, kuris pamiršo susiejimą. Atskirkite tai, prieš liesdami klientą.
| What you see | Stage | Where to look |
|---|---|---|
| The client log repeats a resolve step and no packets appear on the wire | 1, name lookup | Resolver path while the tunnel is down |
| The send counter on the physical adapter stays flat | 2, routing | Peer route and policy rules |
| The send counter rises and a firewall drop counter rises | 2, firewall | Rule order, mark, and interface match |
| Packets leave and nothing comes back | 3, return path | Server input rules, NAT, listening port |
Klientai registruoja aptiktą simptomą, o ne nepavykusią stadiją, todėl lentelė paprastai greitesnė už žurnalą.
Skaitikliai nusprendžia greičiau nei žurnalai
Linux, nft list ruleset arba iptables -vnL OUTPUT spausdina paketų skaitiklį kiekvienai taisyklei. Prisijunkite vieną kartą, leiskite nepavykti, tada vėl perskaitykite skaitiklius. Taisyklė, kurios skaitiklis pajudėjo, yra taisyklė, į kurią pataikė rankos paspaudimas; jei niekur niekas nepajudėjo, paketas niekada nepasiekė užkardos. Mačiau, kaip taisyklių rinkinys numetė savo paties rankos paspaudimą, ir tai pasakė tik skaitikliai.
Norėdami atskirti niekada nepasiekė užkardos nuo niekada neišėjo iš prieglobos, stebėkite pačią sąsają. ip -s link show dev wlan0 praneša apie išsiųstus paketus, o tcpdump -ni wlan0 udp port 51820 rodo kadrus. Jei jis lieka plokščias, kol klientas kartoja, gedimas yra aukščiau netfilter: trūksta partnerio maršruto, politikos taisyklė rodo į įrenginį, kurio dar nėra, arba lizdo klaida, kurią klientas praryja.
Bandykite išimtis su dokumentacijos adresais, pavyzdžiui, 203.0.113.10, kad apsirikimas negalėtų tikrinti kito prieglobos.
Pasenusi pabaigos taško išimtis skaitoma kaip serverio sutrikimas
Labiausiai klaidinanti versija pasirodo po to, kai pasikeičia partnerio adresas: dinaminio adreso tarnyba jį perkėlė, priegloba buvo perstatyta arba jūsų tinklo išėjimo adresas kitas. Išimtis vis dar nurodo seną adresą, todėl paketai į naują patenka į numetimo taisyklę. Ta pati konfigūracija vakar veikė, todėl žmonės pradeda nuo serverio diagnostikos.
Prieglobos vardas užkardos taisyklėje neišgelbės. nftables atveju vardas išsprendžiamas įkeliant taisyklių rinkinį, todėl jis įtvirtina tą adresą, kuris tuo metu egzistavo, ir pasensta kaip pažodinis. Ilgalaikis sprendimas yra atnaujinti išimtį, kai pasikeičia pabaigos taškas, ir laikyti ją siaurą: vienas partnerio adresas, vienas transporto prievadas. Diapazonas, pakankamai platus, kad atlaikytų adreso pasikeitimą, yra pakankamai platus ir nepriklausomam srautui išleisti.
Kai kill switch veikia serverio priegloboje
Ta pati priklausomybė yra kitame gale, ir ten ją lengviau praleisti. Jei mašina, kuri tarnauja kaip jūsų VPN serveris, taip pat vykdo darbalaukio klientą su kill switch arba užkardos profilį, nukopijuotą iš nešiojamojo kompiuterio, jos numetimo taisyklės galioja tarnybai, kuri baigia tunelius. Atsakymai į kliento rankos paspaudimą numetami, todėl kiekvienas klientas negali prisijungti, kol serveris atrodo sveikas, o jo tunelio sąsaja stovi nenaudojama.
Tai prieglobai prieš numetimą reikia trijų siaurų priėmimų: klausymo prievado fizinėje sąsajoje, tunelio sąsajos iššifruotam srautui ir persiuntimo iš tunelio į tai, ką klientai turi pasiekti. Skaitykite įdiegtą rinkinį su nft list ruleset, iptables -S, arba pfctl -sr , prieš ką nors keisdami, ir atminkite, kad išsaugotas taisyklių rinkinys išlieka po perkrovimo, todėl klaida ten išlieka ilgiau nei ją sukūręs procesas.
Atkūrimo tvarka, kuri laiko mašiną uždarytą
Dirbkite nuo profilio į išorę. Perskaitykite partnerio adresą ir prievadą, kuriuos naudoja klientas, patvirtinkite, kad prieglobos vardas išsprendžiamas be tunelio, tada pridėkite vieną išimtį tam adresui ir prievadui tik fiziniame adapteryje. Prisijunkite iš naujo ir stebėkite siuntimo skaitiklį; užbaigtas rankos paspaudimas yra ženklas, kad antroji stadija sutvarkyta.
Palikite likusią numetimo politiką vietoje bandymo metu. Nekvailas patikrinimas yra pabandyti ryšį su nesusijusiu dokumentacijos adresu ir patvirtinti, kad jis vis dar baigiasi laiku, o tai rodo, kad kill switch veikia, o ne išjungtas. Susiaurinkite išimtį, kai tunelis stabilizuosis, ir nepalikite nuolatinio visko leidimo kliento programai vien todėl, kad tai patogu.
Jei tunelis pakyla, o programa vis tiek nepavyksta, likusios stadijos nėra ši: padalytas DNS, MTU ir maršrutizavimas pagal programas kiekvienas sukuria prijungtą tunelį su sugedusiu srautu, ir kiekvienas turi skirtingą pirmą patikrinimą.