2 Punkte von GN⁺ 2023-09-11 | 1 Kommentare | Auf WhatsApp teilen
  • Erklärung eines Artikels darüber, wie Linux Network Address Translation (NAT) für den Ping-Befehl durchführt, der das Internet Control Message Protocol (ICMP) verwendet
  • Der Autor untersucht den Linux-Networking-Code, um zu verstehen, wie NAT für ICMP-Pakete funktioniert; ICMP-Pakete haben kein Port-Feld
  • Der Autor richtet ein Experiment ein, das mithilfe von Netzwerk-Namespaces mehrere Geräte auf einer einzelnen Linux-Maschine simuliert, und verwendet den Ping-Befehl, um den NAT-Prozess zu testen
  • Das Experiment umfasst die Erstellung von zwei Clients, die mit einer Bridge verbunden sind, sowie die Verbindung einer NAT-Box und eines Servers, einschließlich Routing- und NAT-Konfiguration
  • Der Autor erfasst ICMP-Pakete in den Netzwerk-Namespaces der Clients und des Servers und analysiert die Paketdaten
  • Der Autor stellt fest, dass jeder Client ein anderes id-Feld hat, sodass die NAT-Box die an jeden Client weitergeleiteten Antwortpakete unterscheiden kann
  • Der Autor untersucht den Linux-Quellcode und RFC 792, das ICMP-Protokoll definiert, um zu verstehen, wie die ID ausgewählt wird
  • Der Autor findet heraus, dass der Ping-Befehl den Identifikator zufällig auswählt und dass, wenn zwei Ping-Prozesse auf unterschiedlichen Hosts dieselbe ID wählen, der Linux-Kernel zufällig einen freien Port auswählt, der dann als ID im ICMP-Paket verwendet wird
  • Der Autor verfolgt Kernel-Funktionen und verwendet ein Tool namens bpftrace, um sein Verständnis des netfilter-Codes zu überprüfen
  • Das Fazit des Artikels ist, dass Linux Ping per NAT verarbeitet, indem für jeden Client eine Verbindung erstellt, in ausgehenden Paketen die Quell-IP-Adresse und/oder das ICMP-id-Feld umgeschrieben und diese Änderungen anschließend in den Antwortpaketen rückgängig gemacht werden
  • Der Artikel bietet eine detaillierte Schritt-für-Schritt-Erklärung des Prozesses, die auch für Software Engineers auf Einsteigerniveau mit grundlegenden technischen Kenntnissen zugänglich ist

1 Kommentare

 
GN⁺ 2023-09-11
Hacker-News-Kommentar
  • Ein Artikel darüber, wie Linux-Network Address Translation (NAT) Ping-Anfragen verarbeitet
  • Der Server sendet ICMP-Echo-Request-Pakete mit einer festen Quelladresse an eine feste Adresse; es wird nicht erwartet, dass diese zurückkommen
  • Wenn der Client versucht, eine Verbindung herzustellen, sendet er ein ICMP-Time-Exceeded-Paket an den Server, das das „ursprüngliche“ feste Paket enthält, das der Server gesendet hatte
  • Der Client verhält sich wie ein Hop im Internet und teilt dem Server mit, dass das ursprüngliche Paket nicht zugestellt werden konnte
  • Das NAT-Gerät leitet das ICMP-Time-Exceeded-Paket einschließlich des vollständigen IP-Headers des Clients an den Server hinter dem NAT weiter, sodass der Server die IP-Adresse des Clients erkennen kann
  • Wenn in einem lokalen Netzwerk ein Ping an ein Gerät im Internet gesendet wird, schreibt der NAT-ausführende Router die Quelladresse des Pings auf seine öffentliche IP-Adresse um und setzt das ID-Feld des ICMP-Pakets auf einen eindeutigen Wert um
  • Der Router verwendet diesen eindeutigen ID-Wert, um die Antwort an das richtige Gerät im lokalen Netzwerk weiterzuleiten
  • Der Beitrag bietet außerdem Material zu einem Tool namens Netfilter, das zum Verstümmeln von Paketen, für Network Address Translation und für Paketfilterung verwendet wird
  • Der Artikel wird dafür gelobt, die Analyse tief durch alle Abstraktionsebenen bis hin zum Source Code voranzutreiben
  • Da ICMP keine Ports hat, muss NAT nicht das Problem lösen, ICMP-Echo-Antworten an den richtigen Port zurückzusenden
  • ICMP-Echo-Requests haben eine ID, die faktisch einer Source-Port-Nummer entspricht
  • Die NAT-Behandlung von ICMP-Echo muss die ID in beide Richtungen umschreiben, ähnlich wie UDP Source-Ports neu zuordnet
  • Einige Nutzer äußern Unmut darüber, dass im Blogbeitrag auf bestimmte Codezeilen verlinkt wird, da sich diese im Lauf der Zeit ändern
  • Einige Nutzer kritisieren NAT als schlechte Abstraktion und fordern das Ende von IPv4
  • Spekulationen über die Möglichkeit, per Ping über UDP ohne zentralen Server kurze Nachrichten für Peer-to-Peer-Networking zu senden
  • Zusammengefasst erklärt der Artikel, dass ICMP-Pakete ein ID-Feld haben und Netfilter ICMP-Pakete als „Sonderfall“ behandelt