Pi kao VPN klijent: jedan upravljač ili sopstvena skripta?
Uporedite profil u NetworkManager-u sa ručno napisanom klijentskom skriptom na Raspberry Pi, uključujući pun tunel, DNS, IPv6 i ponašanje kada tunel padne.
Raspberry Pi kome treba da štiti samo sopstveni odlazni saobraćaj ima dva realistična dizajna: prepustite tunel mrežnom upravljaču ili zadržite skriptu koja ga poseduje. Oba mogu da nose saobraćaj. Padaju na različitim mestima, a kvar koji možete da dijagnostikujete na daljinu u dva sata ujutru je onaj koji vredi izabrati. Uporedite ih po vlasništvu, po tome šta pun tunel znači kada su uključeni IPv6 i DNS, i po tome šta se dešava u trenutku kada tunel padne.
Dva vlasnika za jedan tunel
Dizajn A je profil unutar mrežnog upravljača sistema: uvezeni profil OpenVPN ili izvorna WireGuard veza, koju pri podizanju aktivira ista usluga koja podiže Ethernet i Wi-Fi. Dizajn B je vaša sopstvena jedinica koja direktno pokreće klijent, menja konfiguraciju rezolvera i instalira sopstvene rute i pravila zaštitnog zida. Oba su legitimna dizajna; razlikuju se po tome kome je dozvoljeno da menja tabelu rutiranja.
Kvarovi se razlikuju jer se vlasnici razlikuju. Kod A profil koji se ne aktivira ostavlja interfejs podignut a tunel spušten, i upravljačevi dnevnici kažu zašto. Kod B skripta koja napola uspe ostavlja rute koje nadžive proces koji ih je stvorio. Pokretati oboje je najgori ishod: dva procesa pišu podrazumevanu rutu, dve izmene rezolvera se takmiče pri podizanju i dva skupa tajni treba rotirati.
Izaberite jednog vlasnika po tunelu i onemogućite drugog pre nego što bilo šta testirate. Dva vlasnika znače i dva mesta za proveru kada je tunel podignut a ništa se ne razrešava. To jedno pravilo sprečava većinu zbunjujućih stanja opisanih u raspravama o Pi VPN-u.
Šta uvoz stvara, a šta ne
Na Raspberry Pi OS Bookworm i novijim, podrazumevani alat za mrežnu konfiguraciju je NetworkManager, pa je profil prirodno mesto za klijentski tunel. Uvoz zahteva instaliran odgovarajući dodatak; bez njega uvoz ne uspeva uz poruku o nepodržanoj vrsti veze, što je iskren signal da se zaustavite i instalirate dodatak.
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
Uvoz čuva profil. On ne dokazuje da je druga strana dostupna i ne garantuje da je svaka direktiva u datoteci preživela konverziju. Pročitajte dobijenu vezu i proverite delove koji nose identitet i poverenje: sertifikat, udaljeni host i port, i da li se lozinka traži ili čuva.
Aktiviranje sa --ask drži frazu za lozinku izvan istorije ljuske na deljenoj mašini. Za Pi bez nadzora na kraju ćete želeti da se profil podigne pri podizanju sistema, što je odvojena odluka od ručnog podizanja jednom.
Pun tunel, upoređen kroz oba dizajna
Pun tunel je tvrdnja o rutama, ne o nameri, a dva dizajna ga izražavaju različito. Pristup sa profilom traži od upravljača da instalira podrazumevanu rutu i svoja podešavanja rezolvera; pristup sa skriptom radi šta skripta kaže, uključujući ništa. Nijedan dizajn ne pokriva IPv6 ako mu se ne kaže, a netaknuta podrazumevana ruta IPv6 rado će nositi saobraćaj izvan tunela dok IPv4 izgleda besprekorno.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Koristite dokumentacionu adresu za proveru rute i zamenite je hostom koji vam je dozvoljeno da proveravate. Prva komanda pokazuje koji bi interfejs Pi koristio za obično odredište; druga pokazuje da li podrazumevana ruta IPv6 još postoji; treća dokazuje koji je rezolver odgovorio. Pročitajte sve tri pre nego što poverujete bilo kojoj tvrdnji o punom tunelu.
Ako uputstva provajdera obećavaju pun tunel ali podrazumevana ruta IPv6 ostane, Pi curi. Onemogućite IPv6 na uzlaznoj vezi ili zamolite profil da ga zatraži, i odlučite svesno umesto da to otkrijete kasnije.
Otvoren kvar nasuprot zatvorenom
Kada tunel padne, tabela rutiranja koja izgubi podrazumevanu rutu jednostavno se vrati na fizičku uzlaznu vezu, a saobraćaj nastavlja otvoreno. To je otvoren kvar i to je podrazumevano ponašanje oba dizajna ako nešto ne spreči. Većina ljudi to otkrije nedeljama kasnije čitajući dnevnik zaštitnog zida.
Zatvoren kvar vas košta udaljenog pristupa kada je tunel spušten, pa mu treba svestan izuzetak za put upravljanja. Jedan način je pravilo koje dozvoljava samo adresu VPN partnera izvan tunela:
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
Uporedite operativni trošak iskreno. Profil obično ne može da izrazi ovo pravilo, pa zatvoren kvar gura prema dizajnu sa skriptom ili prema maloj jedinici koja instalira pravilo nezavisno od tunela. U svakom slučaju, beležite odbijanja nedelju dana: tiho odbijanje izgleda isto kao pokvarena usluga, a brojač će vam trebati kada korisnik prijavi da je jedna stranica prestala da se učitava.
Izbor za Pi bez ekrana
Ako slika već pokreće NetworkManager, tunel ne zahteva ništa egzotično i želite da prati uzlaznu vezu automatski, uzmite profil. Ako vam treba rutiranje po politikama, nekoliko tunela biranih po odredištu ili pravilo zatvorenog kvara koje mora postojati pre nego što se tunel podigne, uzmite skriptu i posedujte svaki njen deo, uključujući redosled podizanja i čišćenje. Mešanje dva dizajna košta više od bilo kog samog.
Migracija između njih uglavnom je pitanje reda: onemogućite starog vlasnika, potvrdite da nije ostala zastarela ruta ili unos rezolvera, zatim omogućite novog i dva puta se restartujte. Jedan restart može sakriti trku koju drugi otkrije. Završite testiranjem Pi-ja, a ne tunela: razrešite ime, preuzmite nešto preko IPv4, preuzmite preko IPv6 ako ste ga zadržali, zatim spustite tunel i potvrdite da se ponašanje koje ste izabrali zaista dešava. Interfejs u ip link je početak testa, ne kraj.