Ein Raspberry Pi, der nur seinen eigenen ausgehenden Datenverkehr schützen muss, hat zwei realistische Entwürfe: den Netzwerkmanager den Tunnel besitzen lassen oder ein Skript behalten, das ihn besitzt. Beide können Verkehr transportieren. Sie versagen an unterschiedlichen Stellen, und der Fehler, den Sie um zwei Uhr morgens aus der Ferne diagnostizieren können, ist der, den es zu wählen lohnt. Vergleichen Sie sie nach Besitz, danach, was ein Full Tunnel bedeutet, sobald IPv6 und DNS im Spiel sind, und danach, was in dem Moment passiert, in dem der Tunnel wegfällt.

Zwei Besitzer für einen Tunnel

Entwurf A ist ein Profil innerhalb des Netzwerkmanagers des Systems: ein importiertes OpenVPN-Profil oder eine native WireGuard-Verbindung, beim Start aktiviert von demselben Dienst, der Ethernet und Wi-Fi hochbringt. Entwurf B ist eine eigene Unit, die den Client direkt startet, die Resolver-Konfiguration bearbeitet und eigene Routen und Firewall-Regeln installiert. Beide sind legitime Entwürfe; sie unterscheiden sich darin, wer die Routing-Tabelle ändern darf.

Die Fehler unterscheiden sich, weil die Besitzer sich unterscheiden. Bei A hinterlässt ein Profil, das nicht aktiviert wird, die Schnittstelle oben und den Tunnel unten, und die Logs des Managers sagen, warum. Bei B hinterlässt ein Skript, das halb erfolgreich ist, Routen, die den Prozess überleben, der sie erzeugt hat. Beides zugleich zu betreiben ist der schlechteste Ausgang: zwei Prozesse schreiben die Standardroute, zwei Resolver-Bearbeitungen konkurrieren beim Start, und zwei Sätze Geheimnisse müssen rotiert werden.

Wählen Sie einen Besitzer pro Tunnel und deaktivieren Sie den anderen, bevor Sie irgendetwas testen. Zwei Besitzer bedeuten auch zwei Stellen zum Nachsehen, wenn der Tunnel steht und nichts aufgelöst wird. Diese eine Regel verhindert die meisten der verwirrenden Zustände, die in Pi-VPN-Threads beschrieben werden.

Was ein Import erzeugt und was nicht

Unter Raspberry Pi OS Bookworm und später ist das Standardwerkzeug zur Netzwerkkonfiguration NetworkManager, ein Profil ist also das natürliche Zuhause für einen Client-Tunnel. Der Import erfordert das passende Plugin; ohne es schlägt er mit einer Meldung über einen nicht unterstützten Verbindungstyp fehl, was das ehrliche Signal ist, anzuhalten und das Plugin zu installieren.

nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name

Der Import speichert ein Profil. Er beweist nicht, dass die Gegenseite erreichbar ist, und garantiert nicht, dass jede Direktive in der Datei die Konvertierung überlebt hat. Lesen Sie die resultierende Verbindung zurück und prüfen Sie die Teile, die Identität und Vertrauen tragen: das Zertifikat, den entfernten Host und Port und ob ein Passwort abgefragt oder gespeichert wird.

Die Aktivierung mit --ask hält eine Passphrase aus der Shell-Historie auf einer geteilten Maschine heraus. Für einen unbeaufsichtigten Pi wollen Sie das Profil irgendwann beim Start hochkommen lassen, was eine separate Entscheidung vom einmaligen manuellen Hochbringen ist.

Full Tunnel im Vergleich beider Entwürfe

Ein Full Tunnel ist eine Aussage über Routen, nicht über Absichten, und die beiden Entwürfe drücken das unterschiedlich aus. Der Profilansatz bittet den Manager, eine Standardroute und seine Resolver-Einstellungen zu installieren; der Skriptansatz tut, was das Skript sagt, einschließlich nichts. Keiner der Entwürfe deckt IPv6 ab, sofern es ihm nicht gesagt wird, und eine unberührte IPv6-Standardroute befördert fröhlich Verkehr außerhalb des Tunnels, während IPv4 perfekt aussieht.

ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org

Verwenden Sie eine Dokumentationsadresse für die Routenabfrage und setzen Sie einen Host ein, den Sie prüfen dürfen. Der erste Befehl zeigt, welche Schnittstelle der Pi für ein gewöhnliches Ziel verwenden würde; der zweite zeigt, ob eine IPv6-Standardroute noch existiert; der dritte belegt, welcher Resolver geantwortet hat. Lesen Sie alle drei, bevor Sie irgendeiner Aussage über einen Full Tunnel glauben.

Wenn die Anweisungen des Anbieters einen Full Tunnel versprechen, aber die IPv6-Standardroute überlebt, leckt der Pi. Deaktivieren Sie IPv6 am Uplink oder bitten Sie das Profil, es zu beanspruchen, und entscheiden Sie bewusst, statt es später zu entdecken.

Fail-open gegen Fail-closed

Wenn der Tunnel wegfällt, fällt eine Routing-Tabelle, die ihre Standardroute verliert, einfach auf den physischen Uplink zurück, und der Verkehr läuft im Klartext weiter. Das ist Fail-open, und es ist das Standardverhalten beider Entwürfe, sofern nichts es verhindert. Die meisten entdecken es Wochen später beim Lesen eines Firewall-Logs.

Fail-closed kostet Sie den Fernzugriff, wenn der Tunnel unten ist, also braucht es eine bewusste Ausnahme für den Verwaltungspfad. Ein Weg ist eine Regel, die außerhalb des Tunnels nur die Adresse des VPN-Peers erlaubt:

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

Vergleichen Sie die Betriebskosten ehrlich. Ein Profil kann diese Regel meist nicht ausdrücken, also drängt Fail-closed Sie zum Skriptentwurf oder zu einer kleinen Unit, die die Regel unabhängig vom Tunnel installiert. In jedem Fall sollten Sie die Ablehnungen eine Woche lang protokollieren: Eine stille Ablehnung sieht identisch aus wie ein defekter Dienst, und Sie werden den Zähler brauchen, wenn ein Benutzer meldet, dass eine Seite nicht mehr lädt.

Auswahl für einen Pi ohne Bildschirm

Wenn das Image bereits NetworkManager ausführt, der Tunnel nichts Exotisches braucht und er dem Uplink automatisch folgen soll, nehmen Sie das Profil. Wenn Sie Policy-Routing brauchen, mehrere pro Ziel gewählte Tunnel oder eine Fail-closed-Regel, die existieren muss, bevor der Tunnel hochkommt, nehmen Sie das Skript und besitzen Sie jeden Teil davon, einschließlich Boot-Reihenfolge und Aufräumen. Beide Entwürfe zu mischen kostet mehr als jeder für sich.

Die Migration zwischen ihnen ist vor allem eine Frage der Reihenfolge: Deaktivieren Sie den alten Besitzer, bestätigen Sie, dass keine veraltete Route und kein Resolver-Eintrag überlebt, aktivieren Sie dann den neuen und starten Sie zweimal neu. Ein einzelner Neustart kann ein Rennen verbergen, das ein zweiter aufdeckt. Beenden Sie mit dem Test des Pi statt des Tunnels: Lösen Sie einen Namen auf, holen Sie etwas über IPv4, holen Sie über IPv6, wenn Sie es behalten haben, fallen Sie dann den Tunnel und bestätigen Sie, dass das gewählte Verhalten tatsächlich eintritt. Eine Schnittstelle in ip link ist der Anfang des Tests, nicht das Ende.

Ähnliche Artikel