Router-VPN funktioniert, aber LAN-Clients haben kein Internet
Der Router erreicht das Internet über seinen Tunnel, die Geräte dahinter nicht. Weiterleitung, Übersetzung und Rückwege sind getrennte Berechtigungen.
Der Status meldet, der Tunnel stehe, ein Browser auf dem Router selbst lädt Seiten, und jedes Gerät dahinter läuft weiterhin in einen Timeout. Diese Kombination engt das Problem auf eine Schicht ein, die die meisten VPN-Anleitungen nie erwähnen: Der Router ist nicht der einzige Host, dessen Pakete den Tunnel überleben müssen. Lokal erzeugter Verkehr und weitergeleiteter Verkehr nehmen unterschiedliche Wege durch dasselbe Gerät. Testen Sie von einem Client aus, und der Unterschied ist nicht mehr theoretisch.
Den Fehler von einem LAN-Host aus lesen
Beginnen Sie an dem Gerät, das scheitert, denn eine Diagnose auf dem Router beantwortet eine andere Frage. Bestätigen Sie, dass das Standard-Gateway des Clients dieser Router ist, notieren Sie seine Quelladresse und sein Subnetz, und schauen Sie dann, was die Tunnel-Schnittstelle des Routers verlässt.
Wird die Adresse des Clients übersetzt, sieht die Gegenseite die Tunneladresse, und von dort sieht alles gesund aus, während der Client weiterhin scheitert. Wird sie nicht übersetzt, muss die Gegenseite eine Route zurück zum Client-Subnetz kennen, und viele Gateways haben standardmäßig keine solche Route. In beiden Fällen ist der Erfolg des Routers selbst irrelevant, weil seine Pakete lokal erzeugt wurden und nie den Weiterleitungspfad durchlaufen haben.
Lokaler und weitergeleiteter Verkehr sind verschieden
Linux und die meiste Router-Firmware behandeln Pakete, die das Gerät selbst erzeugt, anders als Pakete, die es durchlaufen. Die Output-Kette sieht die erste Art, die Forward-Kette die zweite, und eine Richtlinie, die auf den eigenen Verkehr des Routers zugeschnitten ist, kann die Weiterleitung unberührt lassen.
sysctl net.ipv4.ip_forward
ip -4 address show br-lan
ip route get 203.0.113.9
nft list ruleset | grep -A 6 'chain forward'
Prüfen Sie, ob Weiterleitung überhaupt aktiviert ist, und lesen Sie dann die Forward-Kette statt der Output-Kette. Eine Regel, die die verschlüsselte äußere Verbindung erlaubt, ist keine Regel, die entschlüsselte Pakete weiterleiten darf, und die Verwechslung beider erzeugt genau dieses Symptom. Dass der Tunnel steht, beweist nur das Erste.
Der Rückweg muss ebenfalls existieren
Die Quellübersetzung entscheidet, ob ein Rückweg nötig ist. Mit Masquerading auf der Tunnel-Schnittstelle kommen Antworten an die Tunneladresse zurück, und der Router hebt die Übersetzung auf. Ohne sie braucht das entfernte Gateway eine ausdrückliche Route zum Client-Subnetz, und seine eigene Richtlinie muss diese Richtung zulassen.
Halten Sie vor jeder Änderung fest, welches der beiden Designs der Einsatz verwendet, denn die Reparaturen weisen in entgegengesetzte Richtungen. Übersetzung hinzuzufügen verbirgt einen fehlenden Rückweg und bricht Anwendungen, die die ursprüngliche Quelladresse brauchen. Einen Rückweg ohne Übersetzung hinzuzufügen scheitert still, wenn die entfernte Firewall die unbekannte Quelle verwirft. Wählen Sie eines, dokumentieren Sie es, und bringen Sie die andere Seite in Übereinstimmung.
Client-DNS gehört zur selben Prüfung. Der Resolver des Routers kann antworten, während ein Client, der auf einen anderen Server zeigt, gar nichts bekommt.
Einen erlaubten und einen verweigerten Fluss prüfen
Testen Sie nach der Korrektur eine neue Verbindung von einem Client statt einer bestehenden Router-Sitzung. Bestätigen Sie dann, dass ein Segment, das den Tunnel nicht nutzen soll, ihn weiterhin nicht nutzt.
curl -sS --max-time 8 https://api.ipify.org
ip route get 203.0.113.9
dig +short intranet.example.net
Prüfen Sie die beobachtete Quelladresse am fernen Ende, denn sie sagt Ihnen, welches Design tatsächlich läuft. Prüfen Sie auch eine Namensauflösung und nicht nur eine Adresse, denn das Verhalten des Resolvers ist ein eigener Weg durch dasselbe Gerät.
Begrenzen Sie Regeln auf die Client-Netze, die den Tunnel brauchen, und widerstehen Sie der Versuchung, den Weiterleitungsfilter abzuschalten, damit ein Test durchläuft. Diese Änderung repariert den Test und entfernt die Grenze, die der Tunnel bieten sollte. Schreiben Sie Quelladresse, Übersetzungsentscheidung und Rückweg in eine Notiz, mit Datum.