- Explication, dans l’article, de la manière dont Linux effectue la traduction d’adresses réseau (NAT) pour la commande
ping, qui utilise le protocole ICMP (Internet Control Message Protocol)
- L’auteur a exploré le code réseau de Linux pour comprendre comment le NAT fonctionne pour les paquets ICMP, qui ne comportent pas de champ de port
- Mise en place expérimentale où l’auteur utilise des espaces de noms réseau pour simuler plusieurs appareils sur une seule machine Linux, et emploie la commande
ping pour tester le processus de NAT
- L’expérience consiste à créer deux clients connectés à un bridge, avec une connexion vers une box NAT et un serveur, en incluant le routage et la configuration NAT
- L’auteur capture les paquets ICMP dans les espaces de noms réseau du client et du serveur, puis analyse les données des paquets
- L’auteur constate que chaque client possède un champ
id différent, ce qui permet à la box NAT de distinguer les paquets de réponse destinés à chaque client
- L’auteur explore le code source de Linux ainsi que la RFC 792, qui définit le protocole ICMP, afin de comprendre comment l’ID est choisi
- L’auteur découvre que la commande
ping choisit aléatoirement un identifiant et que, si deux processus ping sur des hôtes différents choisissent le même ID, le noyau Linux sélectionne aléatoirement un port libre, lequel est alors utilisé comme ID du paquet ICMP
- L’auteur suit les fonctions du noyau et utilise un outil appelé
bpftrace pour vérifier sa compréhension du code netfilter
- La conclusion de l’article est que Linux applique le NAT aux pings en créant une connexion pour chaque client, en réécrivant l’adresse IP source et/ou le champ d’ID ICMP dans les paquets sortants, puis en inversant ensuite ces modifications dans les paquets de réponse
- L’article fournit une explication détaillée, étape par étape, du processus, de manière accessible à des ingénieurs logiciel débutants disposant de connaissances techniques de base
1 commentaires
Commentaire Hacker News