Debug réseau local : méthode hôte
La méthode Réseaux dit QUOI tester ; ici le COMMENT côté hôte : sockets, firewall local, namespaces/conteneurs, et les pièges specimens (localhost menteur, DNS local,…
Prérequis : Réseaux ch. 9 (méthode) + cours précédent.
Pourquoi
La méthode Réseaux dit QUOI tester ; ici le COMMENT côté hôte : sockets, firewall local, namespaces/conteneurs, et les pièges specimens (localhost menteur, DNS local, proxy env).
Concepts
- Écoute réelle :
ss -tlnp+ regarder L'ADRESSE (127.0.0.1 vs 0.0.0.0) et le processus. Service « démarré » ≠ service qui écoute (config, crash silencieux, port pris →Address already in usedans journalctl !). - Chaîne locale : appli → loopback ? → firewall local (nft/ufw +
iptables -Lrésiduel !) → réseau → … Chaque maillon testé :curl localhost:port,curl IP-lan:port, puis depuis dehors. - Namespaces/conteneurs :
ip netns(namespaces),docker network inspect(quel conteneur a quelle IP, quel réseau). « Injoignable » entre conteneurs = souvent pas le même réseau. - Variables proxy (
http_proxy/https_proxy/no_proxy) : shell qui passe par un proxy fossilisé →curlqui timeout bizarrement.env | grep -i proxyfait partie du rituel.
Exemple : rituel en 2 minutes
ss -tlnp | grep 3000 # écoute ? où ? quel pid ?
curl -s -o /dev/null -w "%{http_code}\n" localhost:3000 # local ?
curl -s -o /dev/null -w "%{http_code}\n" 192.168.1.10:3000 # LAN ?
sudo nft list ruleset | grep 3000 # firewall local ?
env | grep -i proxy # proxy fossilisé ?
Cas réel
API « down » : systemd green, port en LISTEN… sur ::1 (IPv6 localhost !) pendant que tout teste en IPv4. ss montrait ::1:3000, personne n'avait lu l'adresse. Fix : HOST=0.0.0.0. Depuis : toujours lire l'adresse, jamais juste le port.
Pièges
localhostqui résout en::1: pile v6 testée, v4 ignorée (ou l'inverse). Tester les deux explicitement.- Règles iptables résiduelles + nftables actif : deux firewalls qui se marchent dessus (migration iptables→nft incomplète).
- Conteneurs sur réseaux différents :
docker network inspectavant tout (le classique compose qui a changé de nom de projet !).
À retenir
Adresse lue toujours, maillons testés dans l'ordre, proxy env vérifié, namespaces inspectés.