Pi kiel VPN-kliento: unu administranto aŭ propra skripto?
Komparu NetworkManager-profilo kontraŭ permane farita klienta skripto sur Raspberry Pi, inkluzive de plena tunelo, DNS, IPv6 kaj konduto kiam la tunelo falas.
Raspberry Pi, kiu bezonas protekti nur sian propran elirantan trafikon, havas du realismajn dezajnojn: lasi la retan administranton posedi la tunelon, aŭ teni skripton, kiu posedas ĝin. Ambaŭ povas porti trafikon. Ili malsukcesas en malsamaj lokoj, kaj la fiasko, kiun vi povas diagnozi malproksime je la dua matene, estas tiu inda je elekto. Komparu ilin laŭ posedo, laŭ tio, kion signifas plena tunelo kiam IPv6 kaj DNS estas implikitaj, kaj laŭ tio, kio okazas en la momento, kiam la tunelo falas.
Du posedantoj por unu tunelo
Dezajno A estas profilo ene de la reta administranto de la sistemo: importita OpenVPN-profilo aŭ denaska WireGuard-konekto, aktivigita ĉe ŝarĝo de la sama servo, kiu levas Ethernet kaj Wi-Fi. Dezajno B estas via propra unuo, kiu rulas la klienton rekte, redaktas la agordon de la solvilo kaj instalas siajn proprajn itinerojn kaj fajroŝirmilajn regulojn. Ambaŭ estas legitimaj dezajnoj; ili diferencas laŭ tio, kiu rajtas ŝanĝi la enrutan tabelon.
La fiaskoj diferencas ĉar la posedantoj diferencas. Kun A, profilo, kiu ne aktivigas, lasas la interfacon supre kaj la tunelon malsupre, kaj la protokoloj de la administranto diras kial. Kun B, skripto, kiu duone sukcesas, lasas itinerojn, kiuj postvivas la procezon, kiu kreis ilin. Ruli ambaŭ estas la plej malbona rezulto: du procezoj skribas la defaŭltan itinero, du redaktoj de la solvilo konkursas ĉe ŝarĝo, kaj du aroj da sekretoj por rotacii.
Elektu unu posedanton por tunelo kaj malŝaltu la alian antaŭ ol vi testi ion ajn. Du posedantoj ankaŭ signifas du lokojn por rigardi, kiam la tunelo estas supre kaj nenio solviĝas. Tiu sola regulo malhelpas la plej multajn el la konfuzaj statoj priskribitaj en Pi VPN-fadenoj.
Kion importo kreas, kaj kion ĝi ne kreas
En Raspberry Pi OS Bookworm kaj poste la defaŭlta ilo por reta agordo estas NetworkManager, do profilo estas la natura hejmo por klienta tunelo. Importo bezonas la koncernan kromaĵon instalita; sen ĝi la importo malsukcesas kun mesaĝo pri ne-subtenata konektotipo, kio estas la honesta signalo halti kaj instali la kromaĵon.
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
Importo konservas profilon. Ĝi ne pruvas, ke la alia flanko estas atingebla, kaj ĝi ne garantias, ke ĉiu direktivo en la dosiero postvivis la konvertiĝon. Legu la rezultan konekton returne kaj kontrolu la partojn, kiuj portas identecon kaj fidon: la atestilo, la fora gastiganto kaj pordo, kaj ĉu pasvorto estas petata aŭ konservata.
Aktivigo kun --ask tenas pasfrazon ekster la ŝela historio sur komuna maŝino. Por Pi sen prizorgo vi fine volos, ke la profilo leviĝu ĉe ŝarĝo, kio estas aparta decido de levi ĝin unufoje permane.
Plena tunelo, komparita tra ambaŭ dezajnoj
Plena tunelo estas aserto pri itineroj, ne pri intenco, kaj la du dezajnoj esprimas ĝin malsame. La profila aliro petas la administranton instali defaŭltan itinero kaj ĝiajn solvilajn agordojn; la skripta aliro faras tion, kion diras la skripto, inkluzive nenion. Neniu dezajno kovras IPv6 krom se oni diras al ĝi, kaj netuŝita defaŭlta itinero IPv6 volonte portos trafikon ekster la tunelo dum IPv4 aspektas perfekte.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Uzu dokumentadan adreson por la itinera serĉo kaj anstataŭigu gastiganton, kiun vi rajtas sondi. La unua komando montras, kiun interfacon la Pi uzus por ordinara celo; la dua montras, ĉu defaŭlta itinero IPv6 ankoraŭ ekzistas; la tria pruvas, kiu solvilo respondis. Legu ĉiujn tri antaŭ ol kredi iun ajn aserton pri plena tunelo.
Se la instrukcioj de la provizanto promesas plenan tunelon sed la defaŭlta itinero IPv6 postvivas, la Pi likas. Malŝaltu IPv6 sur la suprenligo aŭ petu la profilon postuli ĝin, kaj decidu konscie anstataŭ malkovri ĝin poste.
Malferma fiasko kontraŭ fermita
Kiam la tunelo falas, enruta tabelo, kiu perdas sian defaŭltan itineron, simple reiras al la fizika suprenligo, kaj trafiko daŭras malkaŝe. Tio estas malferma fiasko, kaj ĝi estas la defaŭlta konduto de ambaŭ dezajnoj krom se io malhelpas ĝin. Plej multaj homoj malkovras ĝin semajnojn poste legante fajroŝirmilan protokolon.
Fermita fiasko kostas al vi malproksiman aliron kiam la tunelo estas malsupre, do ĝi bezonas konscian escepton por la administra vojo. Unu maniero estas regulo, kiu permesas nur la adreson de la VPN-kunulo ekster la tunelo:
sudo nft add table inet vpnkill
sudo nft 'add chain inet vpnkill out { type filter hook output priority 0; policy accept; }'
sudo nft add rule inet vpnkill out oifname != "tun0" ip daddr != 203.0.113.24 reject
Komparu la operacian koston honeste. Profilo kutime ne povas esprimi ĉi tiun regulon, do fermita fiasko puŝas vin al la skripta dezajno aŭ al malgranda unuo, kiu instalas la regulon sendepende de la tunelo. Ĉiukaze, protokolu la rifuzojn dum semajno: silenta rifuzo aspektas idente al rompita servo, kaj vi volos la nombrilon kiam uzanto raportas, ke unu retejo ĉesis ŝargiĝi.
Elekti por Pi sen ekrano
Se la bildo jam rulas NetworkManager, la tunelo bezonas nenion ekzotikan, kaj vi volas, ke ĝi aŭtomate sekvu la suprenligon, prenu la profilon. Se vi bezonas politikan enrutadon, plurajn tunelojn elektitajn laŭ celo, aŭ fermitan fiaskan regulon, kiu devas ekzisti antaŭ ol la tunelo leviĝas, prenu la skripton kaj posedu ĉiun ĝian parton, inkluzive de ŝarĝa ordo kaj purigado. Miksi la du dezajnojn kostas pli ol ĉiu el ili sola.
Migri inter ili estas plejparte afero de ordo: malŝaltu la malnovan posedanton, konfirmu, ke neniu kaduka itinero aŭ solvila ero postvivas, poste ŝaltu la novan kaj restartigu dufoje. Unu restartigo povas kaŝi konkurson, kiun dua malkovras. Finu per testado de la Pi anstataŭ de la tunelo: solvu nomon, elŝutu ion per IPv4, elŝutu per IPv6 se vi konservis ĝin, poste faligu la tunelon kaj konfirmu, ke la konduto, kiun vi elektis, efektive okazas. Interfaco en ip link estas la komenco de la testo, ne la fino.