- 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
Hacker-News-Kommentar