Der Linux-Befehl `traceroute` ist ein nützliches Werkzeug, um Engstellen in Netzwerkverbindungen zu identifizieren und Probleme mit langsamen Routen zu beheben. Hier erfahren Sie, wie Sie ihn effektiv nutzen können.
Grundlagen von Traceroute
Das Verständnis der Funktionsweise von Traceroute ist entscheidend, um seine Ergebnisse richtig zu interpretieren. Je komplexer der Pfad eines Netzwerkpakets zu seinem Ziel ist, desto schwieriger kann es sein, Verzögerungen zu lokalisieren.
In einem kleinen lokalen Netzwerk (LAN) ist die Struktur meist übersichtlich, mit einem oder zwei Routern und Servern. Bei einem Weitverkehrsnetz (WAN), das sich über mehrere Standorte oder das Internet erstreckt, steigt die Komplexität erheblich. Netzwerkpakete durchlaufen dabei zahlreiche Router und Gateways.
Die Header von Datenpaketen enthalten Metadaten wie Länge, Herkunft, Ziel und das verwendete Protokoll. Die Spezifikation des Protokolls definiert diese Header. Durch die Identifikation des Protokolls können Anfang und Ende jedes Feldes im Header bestimmt und die Metadaten gelesen werden.
Traceroute nutzt die TCP/IP Protokollfamilie und sendet User Datagram Protocol (UDP)-Pakete. Der Header enthält das Feld Time To Live (TTL), einen 8-Bit-Integerwert, der – entgegen seines Namens – eine Anzahl darstellt, keine Zeitspanne.
Ein Paket durchläuft auf seinem Weg zum Ziel mehrere Router. Bei jedem Router wird der TTL-Zähler um eins reduziert. Erreicht der TTL-Wert eins, verwirft der Router das Paket, da der Wert nun null ist. Das Paket wird nicht weitergeleitet, da es eine „Zeitüberschreitung“ erreicht hat.
Der Router sendet eine Internet Control Message Protocol (ICMP) Zeitüberschreitung-Nachricht an den Ursprung des Pakets zurück. Diese Nachricht beinhaltet den ursprünglichen Header und die ersten 64 Bit der ursprünglichen Daten. Die Spezifikation ist im Request for Comments 792 definiert.
Wenn `traceroute` ein Paket mit einem TTL-Wert von eins sendet, erreicht es nur den ersten Router und wird dort verworfen. Die erhaltene ICMP-Zeitüberschreitungsnachricht gibt `traceroute` die Möglichkeit, die Zeit für den Hin- und Rückweg zu messen.
Dieser Vorgang wird mit TTL-Werten von zwei, drei usw. wiederholt, bis das Ziel erreicht ist oder die maximale Anzahl von Hops (standardmäßig 30) getestet wurde.
Spezielle Aspekte bei Routern
Nicht alle Router verhalten sich erwartungsgemäß. Einige versuchen fälschlicherweise, Pakete mit einem TTL-Wert von null weiterzuleiten, anstatt sie zu verwerfen und eine ICMP-Nachricht zu senden.
Laut Cisco begrenzen einige Internetdienstanbieter (ISPs) die Anzahl der ICMP-Nachrichten, die ihre Router weiterleiten.
Manche Geräte sind so konfiguriert, dass sie generell keine ICMP-Pakete senden, um eine ungewollte Teilnahme an verteilten Denial-of-Service-Angriffen, wie z.B. Smurf-Attacken, zu vermeiden.
`traceroute` hat ein Standardzeitlimit von fünf Sekunden für Antworten. Bleibt eine Antwort innerhalb dieser Zeit aus, wird der Versuch abgebrochen. Dadurch werden Antworten von sehr langsamen Routern ignoriert.
Installation von Traceroute
Unter Fedora 31 ist `traceroute` bereits vorinstalliert. Bei Manjaro 18.1 und Ubuntu 18.04 ist eine Installation erforderlich. Verwenden Sie folgende Befehle für die Installation:
Für Manjaro:
sudo pacman -Sy traceroute
Für Ubuntu:
sudo apt-get install traceroute
Anwendung von Traceroute
Das Ziel von `traceroute` ist, von jedem Router auf dem Weg zu Ihrem Ziel eine Antwort zu erhalten. Einige Router sind zurückhaltend, während andere bereitwillig Informationen preisgeben.
Als Beispiel führen wir eine Traceroute zur Blarney Castle Webseite in Irland durch, bekannt für den Blarney Stone. Der Legende nach wird man durch einen Kuss des Steins mit der Gabe der Eloquenz gesegnet. Wir hoffen, dass die Router auf dem Weg ebenso gesprächig sind.
Der Befehl lautet:
traceroute www.blarneycastle.ie
Die erste Zeile enthält:
- Das Ziel und seine IP-Adresse.
- Die Anzahl der Hops, die `traceroute` versucht.
- Die Größe der gesendeten UDP-Pakete.
Die folgenden Zeilen informieren über die einzelnen Hops. Zwischen Ihrem Computer und der Blarney Castle Webseite gibt es 11 Hops. Hop 11 zeigt an, dass das Ziel erreicht wurde.
Jede Hop-Zeile ist wie folgt aufgebaut:
- Der Name des Geräts oder, wenn dieser nicht verfügbar ist, die IP-Adresse.
- Die IP-Adresse.
- Die Zeit, die für jeden der drei Tests benötigt wurde. Ein Sternchen zeigt an, dass dieser Test unbeantwortet blieb. Wenn das Gerät nicht antwortet, erscheinen drei Sternchen ohne Gerätenamen oder IP-Adresse.
Hier ist, was wir beobachtet haben:
- Hop 1: Der erste Router im lokalen Netzwerk ist ein DrayTek Vigor. Hier verlassen die UDP-Pakete das LAN in Richtung Internet.
- Hop 2: Dieses Gerät hat nicht geantwortet. Es könnte so konfiguriert sein, dass es keine ICMP-Pakete sendet, oder seine Antwort war zu langsam.
- Hop 3: Ein Gerät antwortete, aber nur mit der IP-Adresse, nicht dem Namen. Ein Sternchen deutet auf einen Paketverlust hin.
- Hops 4 und 5: Weitere anonyme Hops.
- Hop 6: Hier gibt es viele Informationen, da jede der drei UDP-Anfragen von einem anderen Gerät bearbeitet wurde. Die Namen und IP-Adressen jedes Geräts sind aufgeführt. Dies tritt oft in „stark frequentierten“ Netzwerken auf. Dieser Hop liegt im Netzwerk eines großen britischen ISPs.
- Hop 7: Hier verlassen die Pakete das ISP-Netzwerk.
- Hop 8: Wieder eine IP-Adresse ohne Gerätenamen. Alle drei Tests waren erfolgreich.
- Hops 9 und 10: Zwei weitere anonyme Hops.
- Hop 11: Die Blarney Castle Webseite ist erreicht. Das Schloss befindet sich in Cork, Irland, aber die Webseite wird laut Geolocation der IP-Adresse von London aus bereitgestellt.
Die Ergebnisse sind also gemischt. Manche Geräte antworten, manche sind anonym und andere bleiben völlig stumm.
Das Ziel wurde erreicht, es sind 11 Hops und die Reisezeit betrug 13.773 und 14.715 Millisekunden.
Gerätenamen ausblenden
Die Anzeige von Gerätenamen kann sehr unübersichtlich sein. Um die Daten besser zu erfassen, können Sie die Option `-n` (keine Namensauflösung) verwenden.
Der Befehl lautet:
traceroute -n blarneycastle.ie
Dies vereinfacht das Erkennen von längeren Antwortzeiten, die auf ein Problem hindeuten könnten.
Hop 3 erscheint verdächtig langsam. Er hat beim letzten Mal nur zweimal und dieses Mal nur einmal geantwortet. Dies liegt natürlich außerhalb unseres Einflusses.
Wenn Sie jedoch ein internes Firmennetzwerk untersuchen, kann es sinnvoll sein, sich diesen Knoten genauer anzusehen.
Anpassen des Zeitlimits
Manchmal ist es hilfreich, das Standardzeitlimit (fünf Sekunden) zu erhöhen. Dazu kann die Option `-w` (Wartezeit) benutzt werden, z.B. um das Zeitlimit auf sieben Sekunden zu setzen. (Beachten Sie, dass es sich um eine Gleitkommazahl handelt).
Der Befehl lautet:
traceroute -w 7.0 blarneycastle.ie
Das hat keinen großen Unterschied gemacht, die Antworten gehen wohl trotzdem verloren. Die anonymen Hops bleiben wahrscheinlich absichtlich verborgen.
Anzahl der Tests einstellen
Standardmäßig sendet `traceroute` drei UDP-Pakete an jeden Hop. Mit der Option `-q` (Anzahl der Anfragen) kann dies angepasst werden.
Um den Test zu beschleunigen, senden wir nur ein Paket:
traceroute -q 1 blarneycastle.ie
Den Startwert von TTL festlegen
Der anfängliche TTL-Wert kann verändert werden, um bestimmte Hops zu überspringen. Normalerweise startet er bei eins, dann zwei usw. Wenn der Wert auf fünf gesetzt wird, versucht der erste Test Hop 5 direkt zu erreichen.
Da die Blarney Castle Webseite 11 Hops entfernt ist, kann man mit folgendem Befehl direkt zum 11. Hop springen:
traceroute -f 11 blarneycastle.ie
Dies liefert eine komprimierte Auskunft über die Verbindung zum Ziel.
Umsichtiges Vorgehen
`traceroute` ist ein wertvolles Werkzeug zur Analyse von Netzwerkpfaden, zum Prüfen von Verbindungsgeschwindigkeiten und zur Identifizierung von Engpässen. Windows hat mit `tracert` einen ähnlichen Befehl.
Es ist jedoch wichtig, fremde Geräte nicht mit UDP-Paketen zu überfluten und die Nutzung von `traceroute` in Skripten oder unbeaufsichtigten Jobs zu vermeiden.
Die Belastung, die `traceroute` für ein Netzwerk darstellt, kann die Leistung beeinträchtigen. Außer in Notfällen ist es empfehlenswert, `traceroute` außerhalb der Stoßzeiten zu verwenden.