Pi kā VPN klients: viens pārvaldnieks vai pašu skripts?
Salīdziniet NetworkManager profilu ar ar roku rakstītu klienta skriptu Raspberry Pi, tostarp pilnu tuneli, DNS, IPv6 un uzvedību, kad tunelis nokrīt.
Raspberry Pi, kuram jāaizsargā tikai sava izejošā plūsma, ir divi reālistiski risinājumi: ļaut tīkla pārvaldniekam piederēt tuneli vai turēt skriptu, kas tam pieder. Abi var pārvadāt plūsmu. Tie neizdodas dažādās vietās, un tā kļūme, ko varat diagnosticēt attālināti pulksten divos naktī, ir tā, ko ir vērts izvēlēties. Salīdziniet tos pēc īpašumtiesībām, pēc tā, ko nozīmē pilns tunelis, kad iesaistīti IPv6 un DNS, un pēc tā, kas notiek tajā brīdī, kad tunelis nokrīt.
Divi īpašnieki vienam tunelim
Risinājums A ir profils sistēmas tīkla pārvaldniekā: importēts OpenVPN profils vai vietējais WireGuard savienojums, ko startēšanas laikā aktivizē tas pats pakalpojums, kas paceļ Ethernet un Wi-Fi. Risinājums B ir jūsu pašu vienība, kas palaiž klientu tieši, rediģē resolvera konfigurāciju un instalē savus maršrutus un ugunsmūra noteikumus. Abi ir likumīgi risinājumi; tie atšķiras ar to, kam ir atļauts mainīt maršrutēšanas tabulu.
Kļūmes atšķiras, jo īpašnieki atšķiras. Ar A profils, kas neaktivizējas, atstāj saskarni augšā un tuneli apakšā, un pārvaldnieka žurnāli pasaka, kāpēc. Ar B skripts, kas izdodas uz pusi, atstāj maršrutus, kas pārdzīvo to radījušo procesu. Palaist abus ir sliktākais iznākums: divi procesi raksta noklusējuma maršrutu, divas resolvera rediģēšanas sacenšas startēšanas laikā, un divi slepenu kopumi ir jāmaina.
Izvēlieties vienu īpašnieku katram tunelim un atspējojiet otru, pirms kaut ko testējat. Divi īpašnieki nozīmē arī divas vietas, kur skatīties, kad tunelis ir augšā un nekas netiek atrisināts. Šis vienīgais noteikums novērš lielāko daļu mulsinošo stāvokļu, kas aprakstīti Pi VPN diskusijās.
Ko imports rada un ko ne
Raspberry Pi OS Bookworm un jaunākās versijās noklusējuma tīkla konfigurācijas rīks ir NetworkManager, tāpēc profils ir dabiskā klienta tuneļa mājvieta. Importam nepieciešams instalēts atbilstošais spraudnis; bez tā imports neizdodas ar ziņojumu par neatbalstītu savienojuma veidu, un tas ir godīgais signāls apstāties un instalēt spraudni.
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
Imports saglabā profilu. Tas nepierāda, ka otra puse ir sasniedzama, un negarantē, ka katra faila direktīva pārdzīvoja konvertēšanu. Izlasiet iegūto savienojumu un pārbaudiet daļas, kas nes identitāti un uzticību: sertifikātu, attālo resursdatoru un portu, un vai parole tiek prasīta vai glabāta.
Aktivizēšana ar --ask tur frāzi ārpus čaulas vēstures koplietotā mašīnā. Neuzraudzītam Pi jūs galu galā gribēsiet, lai profils startēšanas laikā paceltos, un tas ir atsevišķs lēmums no vienreizējas pacelšanas ar roku.
Pilns tunelis, salīdzināts abos risinājumos
Pilns tunelis ir apgalvojums par maršrutiem, nevis par nodomu, un abi risinājumi to izsaka atšķirīgi. Profila pieeja lūdz pārvaldniekam instalēt noklusējuma maršrutu un tā resolvera iestatījumus; skripta pieeja dara to, ko saka skripts, ieskaitot neko. Neviens risinājums neaptver IPv6, ja tam netiek pateikts, un neskarts noklusējuma IPv6 maršruts labprāt pārvadās plūsmu ārpus tuneļa, kamēr IPv4 izskatās nevainojami.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Maršruta meklēšanai izmantojiet dokumentācijas adresi un aizstājiet to ar resursdatoru, kuru drīkstat pārbaudīt. Pirmā komanda parāda, kuru saskarni Pi izmantotu parastam galamērķim; otrā parāda, vai noklusējuma IPv6 maršruts vēl pastāv; trešā pierāda, kurš resolvers atbildēja. Izlasiet visus trīs, pirms ticat jebkuram apgalvojumam par pilnu tuneli.
Ja pakalpojumu sniedzēja norādes sola pilnu tuneli, bet noklusējuma IPv6 maršruts paliek, Pi noplūst. Atspējojiet IPv6 augšupējā posmā vai lūdziet profilam to pieprasīt, un izlemiet apzināti, tā vietā lai to atklātu vēlāk.
Atvērta kļūme pret aizvērtu
Kad tunelis nokrīt, maršrutēšanas tabula, kas zaudē noklusējuma maršrutu, vienkārši atgriežas pie fiziskā augšupējā posma, un plūsma turpinās atklāti. Tā ir atvērta kļūme, un tā ir abu risinājumu noklusējuma uzvedība, ja vien kaut kas netraucē. Lielākā daļa cilvēku to atklāj pēc nedēļām, lasot ugunsmūra žurnālu.
Aizvērta kļūme atņem attālinātu piekļuvi, kad tunelis ir apakšā, tāpēc tai vajag apzinātu izņēmumu pārvaldības ceļam. Viens veids ir noteikums, kas ārpus tuneļa atļauj tikai VPN partnera adresi:
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
Salīdziniet ekspluatācijas izmaksas godīgi. Profils parasti nevar izteikt šo noteikumu, tāpēc aizvērta kļūme virza jūs uz skripta risinājumu vai uz mazu vienību, kas instalē noteikumu neatkarīgi no tuneļa. Jebkurā gadījumā nedēļu reģistrējiet noraidījumus: kluss noraidījums izskatās tieši tāpat kā salauzts pakalpojums, un jums būs vajadzīgs skaitītājs, kad lietotājs ziņo, ka viena vietne pārstājusi ielādēties.
Izvēle Pi bez ekrāna
Ja attēls jau palaiž NetworkManager, tunelim nav vajadzīgs nekas eksotisks un jūs vēlaties, lai tas automātiski sekotu augšupējam posmam, ņemiet profilu. Ja jums vajadzīga politikas maršrutēšana, vairāki pēc galamērķa izvēlēti tuneļi vai aizvērtas kļūmes noteikums, kam jāpastāv pirms tuneļa pacelšanas, ņemiet skriptu un pārvaldiet katru tā daļu, ieskaitot startēšanas kārtību un tīrīšanu. Abu risinājumu sajaukšana izmaksā vairāk nekā jebkurš atsevišķi.
Pāreja starp tiem galvenokārt ir kārtības jautājums: atspējojiet veco īpašnieku, pārliecinieties, ka nav palicis novecojis maršruts vai resolvera ieraksts, pēc tam ieslēdziet jauno un divreiz restartējiet. Viena restartēšana var paslēpt sacensību, ko atklāj otrā. Pabeidziet, testējot Pi, nevis tuneli: atrisiniet vārdu, iegūstiet kaut ko pa IPv4, iegūstiet pa IPv6, ja to paturējāt, pēc tam nometiet tuneli un pārliecinieties, ka izvēlētā uzvedība patiešām notiek. Saskarne komandā ip link ir testa sākums, nevis beigas.