Pi kao VPN klijent: jedan menadžer ili vlastita skripta?
Uporedite profil u NetworkManageru sa ručno napisanom klijentskom skriptom na Raspberry Pi, uključujući puni tunel, DNS, IPv6 i ponašanje kada tunel padne.
Raspberry Pi koji treba da štiti samo sopstveni odlazni saobraćaj ima dva realistična dizajna: neka mrežni menadžer posjeduje tunel, ili zadržite skriptu koja ga posjeduje. Oba mogu nositi saobraćaj. Oni padaju na različitim mjestima, a kvar koji možete dijagnostikovati na daljinu u dva sata ujutro je onaj koji vrijedi izabrati. Uporedite ih po vlasništvu, po tome šta puni tunel znači kada su IPv6 i DNS uključeni, i po tome šta se dešava u trenutku kada tunel padne.
Dva vlasnika za jedan tunel
Dizajn A je profil unutar sistemskog mrežnog menadžera: uvezeni profil OpenVPN ili izvorna WireGuard veza, aktivirana pri podizanju od strane iste usluge koja podiže Ethernet i Wi-Fi. Dizajn B je vaša vlastita jedinica koja direktno pokreće klijent, mijenja konfiguraciju rezolvera i instalira vlastite rute i pravila firewall-a. Oba su legitimna dizajna; razlikuju se po tome kome je dozvoljeno mijenjati tabelu rutiranja.
Kvarovi se razlikuju jer se vlasnici razlikuju. Kod A, profil koji se ne aktivira ostavlja interfejs podignut a tunel spušten, a menadžerovi logovi kažu zašto. Kod B, skripta koja napola uspije ostavlja rute koje nadžive proces koji ih je stvorio. Pokretati oboje najgori je ishod: dva procesa pišu podrazumijevanu rutu, dvije izmjene rezolvera se utrkuju pri podizanju i dva skupa tajni za rotaciju.
Izaberite jednog vlasnika po tunelu i onemogućite drugog prije nego što bilo šta testirate. Dva vlasnika takođe znače dva mjesta za provjeru kada je tunel podignut a ništa se ne razrješava. To jedino pravilo sprječava većinu zbunjujućih stanja opisanih u Pi VPN diskusijama.
Šta uvoz stvara, a šta ne
Na Raspberry Pi OS Bookworm i novijim, podrazumijevani alat za mrežnu konfiguraciju je NetworkManager, pa je profil prirodno mjesto za klijentski tunel. Uvoz zahtijeva instaliran odgovarajući dodatak; bez njega uvoz ne uspijeva 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živjela konverziju. Pročitajte dobijenu vezu i provjerite dijelove koji nose identitet i povjerenje: certifikat, udaljeni host i port, i da li se lozinka traži ili čuva.
Aktiviranje sa --ask drži frazu za lozinku izvan historije ljuske na dijeljenoj mašini. Za Pi bez nadzora na kraju ćete željeti da se profil podigne pri podizanju sistema, što je odvojena odluka od ručnog podizanja jednom.
Puni tunel, upoređen kroz oba dizajna
Puni tunel je tvrdnja o rutama, ne o namjeri, a dva dizajna ga izražavaju različito. Pristup sa profilom traži od menadžera da instalira podrazumijevanu 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 podrazumijevana ruta IPv6 rado će nositi saobraćaj izvan tunela dok IPv4 izgleda besprijekorno.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Koristite dokumentacionu adresu za provjeru rute i zamijenite je hostom koji vam je dozvoljeno provjeravati. Prva komanda pokazuje koji bi interfejs Pi koristio za obično odredište; druga pokazuje da li podrazumijevana ruta IPv6 još postoji; treća dokazuje koji je rezolver odgovorio. Pročitajte sve tri prije nego što povjerujete bilo kojoj tvrdnji o punom tunelu.
Ako uputstva provajdera obećavaju puni tunel ali podrazumijevana ruta IPv6 ostane, Pi curi. Onemogućite IPv6 na uzlaznoj vezi ili zamolite profil da ga preuzme, i odlučite svjesno umjesto da to otkrijete kasnije.
Otvoreni kvar nasuprot zatvorenom
Kada tunel padne, tabela rutiranja koja izgubi podrazumijevanu rutu jednostavno se vrati na fizičku uzlaznu vezu, a saobraćaj nastavlja otvoreno. To je otvoreni kvar i to je podrazumijevano ponašanje oba dizajna ako nešto ne spriječi. Većina ljudi to otkrije sedmicama kasnije čitajući log firewall-a.
Zatvoreni kvar vas košta udaljenog pristupa kada je tunel spušten, pa mu treba svjesni 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 izraziti ovo pravilo, pa zatvoreni kvar gura prema dizajnu sa skriptom ili prema maloj jedinici koja instalira pravilo nezavisno od tunela. U svakom slučaju, bilježite odbijanja sedmicu: tiho odbijanje izgleda identično pokvarenoj usluzi, 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 zahtijeva ništa egzotično, i želite da prati uzlaznu vezu automatski, uzmite profil. Ako vam treba rutiranje po politici, nekoliko tunela biranih po odredištu, ili pravilo zatvorenog kvara koje mora postojati prije nego se tunel podigne, uzmite skriptu i posjedujte svaki njen dio, uključujući redoslijed podizanja i čišćenje. Miješanje dva dizajna košta više od bilo kojeg samog.
Migracija između njih uglavnom je pitanje reda: onemogućite starog vlasnika, potvrdite da nije ostala zaostala ruta ili unos rezolvera, zatim omogućite novog i dva puta se restartujte. Jedan restart može sakriti utrku koju drugi otkrije. Završite testiranjem Pi-ja, a ne tunela: razriješ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.