Pi ako VPN klient: jeden správca alebo vlastný skript?
Porovnajte profil v NetworkManagere s ručne napísaným klientskym skriptom na Raspberry Pi, vrátane plného tunela, DNS, IPv6 a správania pri páde tunela.
Raspberry Pi, ktoré má chrániť iba svoju vlastnú odchádzajúcu prevádzku, má dva realistické návrhy: nechajte tunel vlastniť správcu siete, alebo si ponechajte skript, ktorý ho vlastní. Oba dokážu prenášať prevádzku. Zlyhávajú na rôznych miestach a porucha, ktorú dokážete diagnostikovať na diaľku o druhej ráno, je tá, ktorú sa oplatí vybrať. Porovnajte ich podľa vlastníctva, podľa toho, čo znamená plný tunel, keď do hry vstúpia IPv6 a DNS, a podľa toho, čo sa stane v momente, keď tunel padne.
Dvaja vlastníci jedného tunela
Návrh A je profil vnútri systémového správcu siete: importovaný profil OpenVPN alebo natívne pripojenie WireGuard, aktivované pri štarte tou istou službou, ktorá dvíha Ethernet a Wi-Fi. Návrh B je vaša vlastná jednotka, ktorá spúšťa klienta priamo, upravuje konfiguráciu resolvera a inštaluje vlastné trasy a pravidlá firewallu. Oba sú legitímne; líšia sa tým, kto smie meniť smerovaciu tabuľku.
Poruchy sa líšia, pretože sa líšia vlastníci. Pri A profil, ktorý sa neaktivuje, nechá rozhranie hore a tunel dole, a logy správcu povedia prečo. Pri B skript, ktorý uspeje na polovicu, zanechá trasy, ktoré prežijú proces, ktorý ich vytvoril. Prevádzkovať oboje je najhorší výsledok: dva procesy zapisujú predvolenú trasu, dve úpravy resolvera pretekajú sa pri štarte a dve sady tajomstiev treba rotovať.
Vyberte jedného vlastníka na tunel a druhého pred akýmkoľvek testom vypnite. Dvaja vlastníci znamenajú aj dve miesta, kam sa pozerať, keď je tunel hore a nič sa nerozlišuje. To jediné pravidlo zabráni väčšine mätúcich stavov opísaných vo vláknach o Pi VPN.
Čo import vytvorí a čo nie
V Raspberry Pi OS Bookworm a novšom je predvoleným nástrojom konfigurácie siete NetworkManager, takže profil je prirodzeným domovom klientskeho tunela. Import vyžaduje nainštalovaný zodpovedajúci plugin; bez neho import zlyhá so správou o nepodporovanom type pripojenia, čo je čestný signál zastaviť sa a plugin nainštalovať.
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
Import uloží profil. Nedokazuje, že druhá strana je dostupná, a nezaručuje, že každá direktíva v súbore prežila konverziu. Prečítajte si výsledné pripojenie a skontrolujte časti, ktoré nesú identitu a dôveru: certifikát, vzdialeného hostiteľa a port a či sa heslo pýta alebo ukladá.
Aktivácia s --ask udrží prístupovú frázu mimo histórie shellu na zdieľanom stroji. Pri Pi bez dohľadu nakoniec budete chcieť, aby sa profil zdvihol pri štarte, čo je samostatné rozhodnutie od ručného zdvihnutia raz.
Plný tunel v porovnaní oboch návrhov
Plný tunel je tvrdenie o trasách, nie o úmysle, a oba návrhy ho vyjadrujú rôzne. Prístup s profilom žiada správcu, aby nainštaloval predvolenú trasu a svoje nastavenia resolvera; prístup so skriptom robí, čo skript povie, vrátane ničoho. Ani jeden návrh nepokrýva IPv6, ak sa mu to nepovie, a nedotknutá predvolená trasa IPv6 ochotne prenesie prevádzku mimo tunela, zatiaľ čo IPv4 vyzerá bezchybne.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Na zistenie trasy použite dokumentačnú adresu a nahraďte ju hostiteľom, ktorý smiete testovať. Prvý príkaz ukáže, ktoré rozhranie by Pi použilo pre bežný cieľ; druhý ukáže, či predvolená trasa IPv6 ešte existuje; tretí dokáže, ktorý resolver odpovedal. Prečítajte si všetky tri, než uveríte akémukoľvek tvrdeniu o plnom tuneli.
Ak pokyny poskytovateľa sľubujú plný tunel, ale predvolená trasa IPv6 prežije, Pi presakuje. Vypnite IPv6 na vzostupnom spoji alebo požiadajte profil, aby si ju nárokoval, a rozhodnite sa vedome, namiesto aby ste to zistili neskôr.
Otvorené zlyhanie proti zatvorenému
Keď tunel padne, smerovacia tabuľka, ktorá stratí predvolenú trasu, sa jednoducho vráti k fyzickému vzostupnému spoju a prevádzka pokračuje otvorene. To je otvorené zlyhanie a je to predvolené správanie oboch návrhov, ak mu niečo nezabráni. Väčšina ľudí to zistí až po týždňoch čítaním logu firewallu.
Zatvorené zlyhanie vás pri spadnutom tuneli stojí vzdialený prístup, takže potrebuje vedomú výnimku pre cestu správy. Jedným spôsobom je pravidlo, ktoré mimo tunela povoľuje iba adresu VPN partnera:
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
Porovnajte prevádzkové náklady čestne. Profil zvyčajne nedokáže toto pravidlo vyjadriť, takže zatvorené zlyhanie vás tlačí k návrhu so skriptom alebo k malej jednotke, ktorá pravidlo nainštaluje nezávisle od tunela. V každom prípade týždeň logujte odmietnutia: tiché odmietnutie vyzerá rovnako ako pokazená služba a počítadlo sa vám bude hodiť, keď používateľ nahlási, že sa jedna stránka prestala načítavať.
Voľba pre Pi bez obrazovky
Ak image už prevádzkuje NetworkManager, tunel nepotrebuje nič exotické a chcete, aby automaticky nasledoval vzostupný spoj, vezmite profil. Ak potrebujete politické smerovanie, niekoľko tunelov vyberaných podľa cieľa alebo pravidlo zatvoreného zlyhania, ktoré musí existovať pred zdvihnutím tunela, vezmite skript a vlastnite každú jeho časť, vrátane poradia štartu a čistenia. Miešanie oboch návrhov stojí viac než ktorýkoľvek z nich sám.
Migrácia medzi nimi je hlavne otázka poradia: vypnite starého vlastníka, potvrďte, že neprežila žiadna zastaraná trasa ani záznam resolvera, potom zapnite nového a dvakrát reštartujte. Jediný reštart môže skryť pretek, ktorý druhý odhalí. Skončite testovaním Pi, nie tunela: vyriešte meno, stiahnite niečo cez IPv4, stiahnite cez IPv6, ak ste ho ponechali, potom zhoďte tunel a potvrďte, že zvolené správanie naozaj nastane. Rozhranie v ip link je začiatok testu, nie koniec.