Warum traceroute in einer Richtung durch einen VPN-Tunnel stirbt
Ein Trace, der in eine Richtung vollständig ist und in der anderen Sterne ausgibt, ist meist ein Diagnoseproblem. Vergleichen Sie Sondenmethoden, Rückwege und eine echte Anfrage.
Traceroute-Ausgaben, die in einer Richtung vollständig sind und in der anderen Reihen von Sternchen ausgeben, sehen nach asymmetrischer Weiterleitung aus, und meistens sind sie es nicht. Jeder angezeigte Hop verlangt, dass die Sonde ankommt, dass ein Router sich zum Antworten entscheidet und dass die Antwort zurückreist und der Sonde zugeordnet wird. Bricht eines dieser Glieder, wird die Zeile zum Sternchen, während der Tunnel weiter Daten trägt.
Der Trace ist ein Beleg über die Diagnose, bevor er ein Beleg über den Transport ist. Die Frage, die sich lohnt, ist, welches der drei Glieder versagt hat, und die Antwort kommt aus den Paketen, nicht aus der Form der Ausgabe.
Ein Sternchen ist eine fehlende Antwort, kein fehlender Hop
Traceroute läuft nach außen, indem es Sonden sendet, deren TTL in jeder Runde einen Router weiter abläuft. Ein Router, der eine abgelaufene Sonde verwirft, soll eine ICMP-Time-Exceeded-Meldung mit seinem eigenen Namen zurücksenden, und das Werkzeug gibt diesen Namen aus. Worauf das Werkzeug tatsächlich wartet, ist, dass diese Meldung innerhalb eines Timeouts ankommt. Antwortet der Router von einer anderen Quelladresse, begrenzt er, wie oft er Fehler erzeugt, oder verwirft er die Sonde wortlos, liefert die Runde nichts Druckbares.
Keines dieser Ergebnisse sagt, dass der Hinweg kaputt ist. Ein Sternchen ist ein Bericht über unbeantwortete Post, nicht über eine leere Straße.
Die Sondenmethode entscheidet, welchem Filter Sie begegnen
Die Standardmethode unter Linux ist meist ein UDP-Zielport mit hoher Nummer, tracert unter Windows sendet ICMP-Echos, und Linux kann angewiesen werden, stattdessen ICMP oder TCP zu verwenden. Jede davon sieht für eine zustandsbehaftete Firewall oder eine Cloud-Sicherheitsgruppe wie eine andere Art von Verkehr aus. Einen UDP-Trace von einer Seite mit einem ICMP-Trace von der anderen zu vergleichen, vergleicht zwei verschiedene Experimente. Fixieren Sie Methode, Adressfamilie, Quelladresse und Timeout, bevor Sie die Ergebnisse einen Unterschied nennen.
Für einen fairen Vergleich starten Sie den Trace auf den Hosts, die den Verkehr tatsächlich tragen, statt auf einem Gateway, das für sie weiterleitet. Ein routererzeugter Trace nutzt die eigene Quelladresse und Ausgangspolitik des Routers, die strenger sein können als alles, was ein Client sieht. Notieren Sie den genauen Aufruf, damit die nächste Person ihn wiederholen kann.
Der Timeout-Wert ist die andere Hälfte des Experiments und geht in den Notizen leicht verloren. Zwei Sekunden Wartezeit auf einem überlasteten Pfad melden Sternchen, wo fünf Sekunden Wartezeit Hops melden. Halten Sie den Wert über alle Läufe gleich, damit der Vergleich beim Netzwerk bleibt.
Der Rückweg ist eine eigene Route
Ein ICMP-Fehler ist ein gewöhnliches Paket mit eigener Quelle und eigenem Ziel, und er braucht eine Route zurück zum Tracer. Trägt die Tunnelrichtlinie die LAN-Präfixe, aber nicht die Routeradresse, die den Fehler erzeugt hat, verlässt die Meldung einen Pfad, der Sie nicht erreichen kann. Antwortfilterung kann sie verwerfen, selbst wenn die Route existiert, weil das Paket von einer unerwarteten Adresse auf einer unerwarteten Schnittstelle ankommt. Das ist eine Unstimmigkeit in der Diagnoseebene und kein Anwendungsfehler.
Jeden Selektor zu erweitern, bis der Trace vollständig ist, macht das Bild hübscher und die Richtlinie schlechter. Reparieren Sie die konkrete Diagnoseadresse, oder akzeptieren Sie das Sternchen und testen Sie die Anwendung anders.
Bestätigen Sie den Tunnel mit einer echten Anfrage
Ein TCP-Handshake auf dem eigenen Port des Dienstes prüft Weiterleitung, Rückrouting und Filterung in der Richtung, auf die es ankommt. Die Befehle unten laufen an beiden Enden und vergleichen, was jede Seite öffnen kann. Ersetzen Sie Dienstport und Namen der Tunnelschnittstelle durch Ihre eigene Konfiguration.
traceroute -I -n -w 2 203.0.113.40
traceroute -T -p 443 -n -w 2 203.0.113.40
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 5 http://203.0.113.40:8080/health
ss -tan state established
Lesen Sie zuerst die beiden traceroute-Läufe: Zeigt der ICMP-Lauf Hops und der TCP-Lauf nicht, liegt der Unterschied in der Methode, nicht im Pfad. Nehmen Sie dann das curl-Ergebnis als Antwort auf Anwendungsebene, denn ein abgeschlossener Austausch mit sinnvollem Statuscode bedeutet, dass Hin- und Rückweg für echten Verkehr funktionieren. Die Socket-Liste zeigt, ob die Verbindung überhaupt besteht, was kein Trace Ihnen sagen kann.
Ein Tunnel, der eine interaktive Sitzung in beide Richtungen trägt, während ein traceroute Sternchen ausgibt, ist gesund und lediglich unfotogen. Bewahren Sie die Befehlsausgabe jeder Seite als Protokoll auf, und behandeln Sie fehlende Hops als offene Frage zur Diagnose statt als Urteil über das VPN.