Pi kaip VPN klientas: vienas valdytojas ar savas scenarijus?
Palyginkite NetworkManager profilį su ranka rašytu kliento scenarijumi Raspberry Pi, įskaitant pilną tunelį, DNS, IPv6 ir elgseną, kai tunelis nutrūksta.
Raspberry Pi, kuriam reikia apsaugoti tik savo paties išeinantį srautą, turi du realistiškus sprendimus: leisti tinklo valdytojui valdyti tunelį arba laikyti scenarijų, kuris jį valdo. Abu gali perduoti srautą. Jie sugenda skirtingose vietose, o tas gedimas, kurį galite diagnozuoti nuotoliniu būdu antrą valandą nakties, yra tas, kurį verta pasirinkti. Palyginkite juos pagal nuosavybę, pagal tai, ką reiškia pilnas tunelis, kai dalyvauja IPv6 ir DNS, ir pagal tai, kas nutinka tą akimirką, kai tunelis nukrenta.
Du šeimininkai vienam tuneliui
Sprendimas A yra profilis sistemos tinklo valdytojo viduje: importuotas OpenVPN profilis arba vietinis WireGuard ryšys, kurį paleidžiant aktyvuoja ta pati paslauga, kuri pakelia Ethernet ir Wi-Fi. Sprendimas B yra jūsų paties įrenginys, kuris tiesiogiai paleidžia klientą, redaguoja resolverio konfigūraciją ir įdiegia savo maršrutus bei ugniasienės taisykles. Abu yra teisėti sprendimai; jie skiriasi tuo, kam leidžiama keisti maršrutizavimo lentelę.
Gedimai skiriasi, nes skiriasi šeimininkai. Su A profilis, kuris neaktyvuojamas, palieka sąsają pakeltą, o tunelį nuleistą, ir valdytojo žurnalai pasako kodėl. Su B scenarijus, kuris pasiseka pusiau, palieka maršrutus, kurie išgyvena jį sukūrusį procesą. Vykdyti abu yra blogiausias rezultatas: du procesai rašo numatytąjį maršrutą, du resolverio redagavimai lenktyniauja paleidžiant, ir du slaptųjų duomenų rinkiniai turi būti keičiami.
Pasirinkite vieną šeimininką vienam tuneliui ir išjunkite kitą prieš ką nors testuodami. Du šeimininkai taip pat reiškia dvi vietas, kur žiūrėti, kai tunelis pakeltas ir niekas nesprendžiama. Ši viena taisyklė užkerta kelią daugumai painių būsenų, aprašytų Pi VPN diskusijose.
Ką sukuria importas, o ko ne
Raspberry Pi OS Bookworm ir naujesnėse versijose numatytasis tinklo konfigūravimo įrankis yra NetworkManager, todėl profilis yra natūralūs kliento tunelio namai. Importui reikia įdiegto atitinkamo papildinio; be jo importas nepavyksta su pranešimu apie nepalaikomą ryšio tipą, o tai yra sąžiningas signalas sustoti ir įdiegti papildinį.
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
Importas išsaugo profilį. Jis neįrodo, kad kita pusė pasiekiama, ir negarantuoja, kad kiekviena failo direktyva išgyveno konvertavimą. Perskaitykite gautą ryšį ir patikrinkite dalis, kurios neša tapatybę ir pasitikėjimą: sertifikatą, nuotolinį hostą ir prievadą bei ar slaptažodis klausiamas, ar saugomas.
Aktyvavimas su --ask laiko slaptafrazę už shell istorijos ribų bendrame kompiuteryje. Neprižiūrimam Pi galiausiai norėsite, kad profilis pakiltų paleidžiant, o tai yra atskiras sprendimas nuo vienkartinio pakėlimo ranka.
Pilnas tunelis, palygintas abiejuose sprendimuose
Pilnas tunelis yra teiginys apie maršrutus, o ne apie ketinimą, ir du sprendimai jį išreiškia skirtingai. Profilio metodas prašo valdytojo įdiegti numatytąjį maršrutą ir jo resolverio nustatymus; scenarijaus metodas daro tai, ką sako scenarijus, įskaitant nieko. Nė vienas sprendimas neapima IPv6, jei jam nepasakoma, o neliestas numatytasis IPv6 maršrutas mielai perduos srautą už tunelio ribų, kol IPv4 atrodo nepriekaištingai.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Maršruto paieškai naudokite dokumentacijos adresą ir pakeiskite jį hostu, kurį leidžiama tikrinti. Pirmoji komanda parodo, kurią sąsają Pi naudotų įprastam tikslui; antroji parodo, ar dar egzistuoja numatytasis IPv6 maršrutas; trečioji įrodo, kuris resolveris atsakė. Perskaitykite visus tris prieš tikėdami bet kokiu teiginiu apie pilną tunelį.
Jei tiekėjo instrukcijos žada pilną tunelį, bet numatytasis IPv6 maršrutas išlieka, Pi nuteka. Išjunkite IPv6 viršutinėje grandyje arba paprašykite profilio jo reikalauti, ir nuspręskite sąmoningai, o ne atrasdami tai vėliau.
Atviras gedimas prieš uždarą
Kai tunelis nukrenta, maršrutizavimo lentelė, kuri praranda numatytąjį maršrutą, tiesiog grįžta prie fizinės viršutinės grandies, ir srautas tęsiasi atvirai. Tai atviras gedimas, ir tai yra numatytoji abiejų sprendimų elgsena, jei niekas netrukdo. Dauguma žmonių tai atranda po savaičių skaitydami ugniasienės žurnalą.
Uždaras gedimas atima nuotolinę prieigą, kai tunelis nuleistas, todėl jam reikia sąmoningos išimties valdymo keliui. Vienas būdas yra taisyklė, kuri už tunelio ribų leidžia tik VPN partnerio adresą:
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
Palyginkite eksploatacines sąnaudas sąžiningai. Profilis paprastai negali išreikšti šios taisyklės, todėl uždaras gedimas stumia jus prie scenarijaus sprendimo arba prie mažo įrenginio, kuris taisyklę įdiegia nepriklausomai nuo tunelio. Bet kuriuo atveju savaitę registruokite atmetimus: tylus atmetimas atrodo lygiai taip pat kaip sugedusi paslauga, ir jums prireiks skaitiklio, kai naudotojas praneš, kad viena svetainė nustojo krautis.
Pasirinkimas Pi be ekrano
Jei atvaizdas jau vykdo NetworkManager, tuneliui nereikia nieko egzotiško ir norite, kad jis automatiškai sektų viršutinę grandį, imkite profilį. Jei jums reikia politinio maršrutizavimo, kelių pagal paskirtį pasirenkamų tunelių ar uždaros gedimo taisyklės, kuri turi egzistuoti prieš tuneliui pakylant, imkite scenarijų ir valdykite kiekvieną jo dalį, įskaitant paleidimo tvarką ir valymą. Abiejų sprendimų maišymas kainuoja daugiau nei bet kuris atskirai.
Perėjimas tarp jų pirmiausia yra tvarkos klausimas: išjunkite senąjį šeimininką, patvirtinkite, kad neliko pasenusio maršruto ar resolverio įrašo, tada įjunkite naująjį ir dukart paleiskite iš naujo. Vienas paleidimas iš naujo gali paslėpti lenktynes, kurias atskleidžia antras. Baigkite testuodami Pi, o ne tunelį: išspręskite vardą, atsisiųskite ką nors per IPv4, atsisiųskite per IPv6, jei jį pasilikote, tada numeskite tunelį ir patvirtinkite, kad pasirinkta elgsena tikrai vyksta. Sąsaja komandoje ip link yra testo pradžia, o ne pabaiga.