27 Punkte von GN⁺ 2025-11-09 | 1 Kommentare | Auf WhatsApp teilen
  • Eine interaktive Seite, die den Weg der Pakete eines Nutzers über das Internet bis zum Server einer Website in Echtzeit visualisiert
  • Das selbst entwickelte traceroute-Programm ktr nutzt den TTL-Wert von ICMP-Paketen, um Informationen zu jedem Netzwerk-Hop zu sammeln
  • Die Website funktioniert auch ohne JavaScript, wobei der Server die traceroute-Ergebnisse als Stream in das HTML einfließen lässt
  • Für die Pfadanalyse werden WHOIS- und PeeringDB-Daten verwendet, um das Autonome System (AS) und die Unternehmensinformationen zu jeder IP anzuzeigen
  • Durch die Kombination von traceroute und der BGP-basierten Internetstruktur wird gezeigt, dass das Internet aus einer Sammlung von Netzwerken besteht, die über Peering-Beziehungen zwischen Unternehmen verbunden sind

Die Reise Ihres Pakets

  • Das traceroute am Seitenanfang zeigt den Weg der Pakete vom Computer des Nutzers bis zum Server
    • Es durchläuft nacheinander Netzwerke wie Router, ISP, Amazon, NTT Global IP Network und Hetzner
    • Einige Abschnitte werden als „(no response)“ angezeigt, was auf Server zurückzuführen ist, die nicht antworten
  • Innerhalb des Hetzner-Netzwerks erreicht es über mehrere Router schließlich den Zielserver
  • Die IP-Adresse 213.239.252.10 wird über eine Reverse-DNS-Abfrage als core0.fra.hetzner.com angezeigt

Behind the Scenes

  • Wenn die Website eine Anfrage des Nutzers erhält, führt der Server traceroute aus und sendet die Ergebnisse in Echtzeit
  • traceroute verwendet das ICMP-Protokoll und sammelt Antworten von jedem Hop, indem der TTL-Wert (Time To Live) schrittweise um 1 erhöht wird
  • Wenn der TTL-Wert 0 erreicht, gibt der betreffende Router eine Fehlermeldung zurück, wodurch sich der vom Paket durchlaufene Pfad nachverfolgen lässt
  • ktr streamt die traceroute-Ergebnisse und fragt gleichzeitig zu jedem Hop IP-, ASN- und Netzwerkbesitzinformationen ab

Frontend Fun

  • Es funktioniert auch ohne JavaScript, und der Browser erkennt es einfach als langsam ladende Seite
  • Der Server hält die HTTP-Verbindung offen und fügt die traceroute-Ergebnisse nacheinander in das HTML ein
  • Bei jedem Update wird ein CSS-Block eingefügt, um vorherige Ergebnisse auszublenden, wodurch ein Echtzeit-Aktualisierungseffekt entsteht

Front to Back, Back to Front

  • Tatsächlich führt der Server traceroute zur IP des Nutzers aus und zeigt die Ergebnisse in umgekehrter Reihenfolge an
  • Das ist ein „reverse traceroute“; auch wenn der Pfad in beide Richtungen nicht vollständig identisch ist, zeigt es im Großen und Ganzen einen ähnlichen Weg

Netzwerke und Autonome Systeme (AS)

  • Das Internet ist ein Verbund von Netzwerken auf Unternehmensebene, die als Autonome Systeme (Autonomous System, AS) bezeichnet werden
  • Jedes AS besitzt eine eindeutige ASN (Autonomous System Number) und tauscht über Peering Traffic mit anderen aus
  • Das Internet ist kein Besitz einzelner Personen, sondern eine Sammlung von Netzwerken im Besitz von Unternehmen, deren Verbindungen durch finanzielle Verträge und administrative Verfahren bestimmt werden
  • Eine ASN kann über eine der fünf Regional Internet Registries (RIR) beantragt werden

WHOIS und PeeringDB

  • Um das AS zu finden, zu dem jede IP in traceroute gehört, werden das WHOIS-Protokoll und die PeeringDB-Datenbank verwendet
  • WHOIS hat eine einfache Struktur: Nach dem Aufbau einer TCP-Verbindung wird eine Anfrage gesendet, und der Server gibt die Informationen zurück
  • Da sich Feldnamen und Formate je nach Server unterscheiden, ist der Parser als einfache Simulation umgesetzt, die eher der menschlichen Leseweise ähnelt
  • PeeringDB liefert Unternehmensinformationen für etwa ein Drittel aller AS

BGP (Border Gateway Protocol)

  • BGP ist das zentrale Protokoll, das die Form des Internets bestimmt, indem es Pfadinformationen zwischen AS austauscht
  • Border Router pflegen eine BGP-Routing-Tabelle und speichern die ASN-Listen für jeden Pfad
  • Wenn zwei AS Peering betreiben, bauen ihre Router eine BGP-Session auf und tauschen Route Advertisements aus
  • Router wählen unter mehreren Wegen den kürzesten oder bevorzugten Pfad aus und leiten Pakete entsprechend weiter

Die Geschichte von BGP

  • Netzwerkexperimente, die 1969 im ARPANET begannen, führten 1989 mit RFC 1105 von Cisco und IBM zur Einführung von BGP v1
  • Danach wurden BGP v2 (1990) und v4 (1994) veröffentlicht; v4 wird bis heute verwendet
  • BGP etablierte sich als Standardprotokoll zur Bestimmung der Verbindungswege zwischen allen Netzwerken im Internet

Die Beziehung zwischen Traceroute und BGP

  • Beispielpfad: AS16509 → AS2914 → AS24940
    • In der Reihenfolge Amazon (AS16509) → NTT Global IP Network (AS2914) → Hetzner (AS24940)
  • Auch innerhalb derselben ASN gibt es mehrere Hops; diese werden über interne Routing-Protokolle oder statische Pfade verarbeitet
  • Peering-Beziehungen zwischen AS bestimmen die tatsächliche Erreichbarkeit im Internet

Zusammenfassung

  • Die Website führt traceroute zur IP des Nutzers aus und überträgt das Ergebnis als HTTP-Stream
  • traceroute nutzt den TTL-Wert von ICMP-Paketen, um Pfade zwischen Routern zu visualisieren
  • Jeder Router gehört zu einem Autonomen System (AS) und ist über BGP mit anderen verbunden
  • Peering-Beziehungen bestimmen Erreichbarkeit und Struktur des Internets

Epilog

  • Der Autor stellte fest, dass ihm ein tieferes Verständnis der Internetstruktur fehlte, und erstellte deshalb einen interaktiven, protokollzentrierten Lehrtext
  • Statt auf ein großes, hochpoliertes Projekt zu warten, entschied er sich, auch in kleiner Form etwas zu veröffentlichen
  • Das Projekt wurde durch die Ermutigung der Hack-Club-Community vollendet und nutzt ein Open-Source-traceroute-Programm
  • Mit der Botschaft „Auch etwas Kleines ist besser, wenn es fertig ist“ hofft er, dass es als nachhaltiger Webinhalt bestehen bleibt

1 Kommentare

 
GN⁺ 2025-11-09
Hacker-News-Kommentar
  • Ich denke, diese Reverse-Traceroute-Funktion ist immer noch nützlich. In der Praxis sind die Peering-Punkte aber fast immer unterschiedlich, selbst wenn der AS-Pfad gleich ist. Die meisten AS verwenden Hot-Potato Routing und übergeben Pakete am Peering-Punkt, der dem Ursprung des Traffics am nächsten liegt. Selbst bei Cold-Potato bleibt es asymmetrisch. Außerdem kann bei gleicher AS-Path-Länge wegen der Hot-Potato-Policy ein anderer Pfad gewählt werden. (Bearbeitung: Verwechslung von hot/cold korrigiert)

    • Ich habe traceroute und reverse traceroute mehrfach laufen lassen, und meistens sah der AS-Pfad ähnlich aus. Allerdings zeigte traceroute manchmal mehr vom internen Pfad des ISP. Insgesamt hast du recht, und ich würde später gern ausführlicher auf den Unterschied zwischen Hot-Potato- vs. Cold-Potato-Routing eingehen. Trotzdem denke ich, dass schon allein dieses Reverse-Traceroute-Ergebnis ausreicht, um die Struktur des Internets zu erklären.
    • Nur zur Klarstellung: Genau das, was du beschreibst, ist Hot-Potato Routing. Jedes AS versucht dabei, Pakete so schnell wie möglich weiterzugeben. Das mag unfair wirken, ist aber eine vernünftige Entscheidung, weil man die detaillierten Pfade innerhalb des Ziel-AS nicht kennt. Wenn du zum Beispiel ein Netzwerk in Berlin und Hamburg hast und die Gegenseite in beiden Städten peert, dann vermeidet die Übergabe am nächstgelegenen Punkt unnötige Umwege.
  • Ich fand die Erklärung interessant, warum traceroute von unten nach oben Zeile für Zeile geladen wird. Dass dafür ohne JavaScript regelmäßig CSS-Blöcke eingefügt werden, um den vorherigen Zustand zu verbergen, ist wirklich hacky und kreativ.

    • Auch ohne JavaScript kann man mit Declarative Shadow DOM HTML-Streaming in ungeordneter Reihenfolge umsetzen. Beispiele und Erklärungen sind in diesem Blogpost gut zusammengefasst.
  • Die Formulierung „This is not my beautiful website.“ fand ich ziemlich witzig.

    • Die Antwort „This is not my beautiful home-page.“ hatte auch Stil.
  • Falls du es noch nicht ausprobiert hast:

    tracepath -m60 bad.horse
    

    und dann

    openssl s_client -connect signed.bad.horse:443 -servername signed.bad.horse
    

    würde ich empfehlen.

    • Großartig! Das wirkt wie eine nerdige Hommage an Dr. Horrible. Die tracepath-Ausgabe beginnt bei „bad.horse“ und geht dann mit „he.rides.across.the.nation“ usw. weiter, was wirklich unterhaltsam ist.
    • Es gibt auch noch das hier:
      ssh funky.nondeterministic.computer
      
    • Und
      ssh watch.ascii.theater
      
      ist ebenfalls einen Versuch wert.
  • Dieses Projekt landete erneut auf der Hacker-News-Startseite, wodurch der Server kurzzeitig ins Stocken geriet. Lexi kündigte an, man solle „morgen noch mal nachsehen“.

    • Inzwischen sei es etwas besser. Concurrency wurde ein wenig erhöht, und als Lehre fürs nächste Mal wolle man Tokio verwenden.
  • Beim Titel dachte ich, es würde ein Song von Talking Heads kommen.

    • Mir kam sofort die Zeile „letting the days go by“ in den Kopf.
    • Wenn man sich das HTML ansieht, ist vielleicht noch etwas versteckt :)
  • Der Link zu „Once in a Lifetime“ fühlt sich an, als wäre er direkt ins Gehirn eingebrannt. Schon beim Titel läuft diese Basslinie automatisch ab.

    • Bei mir setzte auch sofort eine existenzielle Krise ein.
  • Ich habe es selbst ausprobiert und dabei festgestellt, dass meine primäre Internetverbindung ausgefallen war und auf die Backup-Leitung umgeschaltet wurde. Heute gab es einen Stromausfall, und dank dieses Tools habe ich das bemerkt. Ziemlich nützlich.

    • Du hast also wirklich die weniger bereiste Route entdeckt.
  • Manchmal sieht die obere Info „You are here“ so aus:

    Host               ASN   Network         Region
    123-456-789-101.static.kc.net.uk AS19905 UltraDDoS Protect    Global
    

    Und ein anderes Mal dann so:

    Host               ASN   Network         Region
    123-456-789-101.static.kc.net.uk AS12390 Kingston Communications Europe
    

    Das wechselt sich ab. Es ist dieselbe IP, daher frage ich mich, warum sich die ASN im 50:50-Verhältnis ändert. Es wirkt zufällig.

  • Die Seite funktionierte anfangs ohne JavaScript problemlos, aber später wurde das ersetzte HTML als Text encodiert.

    
     #strYQt8 { display: none; }
    
    

    So sah es dann kaputt aus. Ich habe dazu einen Fix-PR auf GitHub eingereicht.