Un service ne répond pas ? Une connexion timeout ? Avant de blâmer le réseau, appliquez une méthode de diagnostic systématique. Ce guide synthétise tout ce que vous avez appris dans les modules précédents et vous donne un arbre de décision, une checklist rapide et un tableau des outils par symptôme. L'objectif : identifier en quelques minutes si le problème vient du réseau ou de l'application.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Appliquer une méthode systématique : diagnostiquer du plus proche au plus loin.
- Suivre un arbre de décision réseau : localhost, passerelle, Internet, DNS, service.
- Interpréter les erreurs courantes : refused, timeout, name not found, no route.
- Choisir le bon outil selon le symptôme (
ip,ping,dig,nc,traceroute,mtr). - Éviter les pièges du diagnostic : redémarrage réflexe, changer plusieurs variables à la fois.
Prérequis
Section intitulée « Prérequis »- Avoir suivi les modules précédents (IP, DNS, TCP/UDP, ICMP, HTTP)
- Un terminal Linux, macOS ou WSL
- Connaissances des commandes :
ip,ping,dig,nc,curl,ss
La méthode en 5 étapes
Section intitulée « La méthode en 5 étapes »Le diagnostic réseau suit toujours la même logique : du plus proche au plus loin. On vérifie d'abord la machine locale, puis la passerelle, puis Internet, puis le DNS, puis le service distant.
-
Vérifier la connectivité locale
Votre machine a-t-elle une adresse IP ? L'interface réseau est-elle active ?
Fenêtre de terminal ip addr showping -c 2 127.0.0.1Si ça échoue : Interface down, pas d'IP (DHCP ?)
-
Vérifier la passerelle
Pouvez-vous atteindre votre routeur (gateway) ?
Fenêtre de terminal ip route | grep defaultping -c 2 $(ip route | grep default | awk '{print $3}')Si ça échoue : Route manquante, passerelle down, câble débranché
-
Vérifier Internet
Pouvez-vous atteindre une IP publique connue ?
Fenêtre de terminal ping -c 2 8.8.8.8Si ça échoue : Problème de routage Internet, firewall, FAI
-
Vérifier le DNS
La résolution de noms fonctionne-t-elle ?
Fenêtre de terminal dig google.com +shortSi ça échoue : Problème DNS,
/etc/resolv.confmal configuré -
Vérifier le service distant
Le port du service est-il ouvert et répond-il ?
Fenêtre de terminal nc -zv <host> <port>curl -I https://<host>/Si ça échoue : Service arrêté, firewall applicatif, erreur applicative
Les questions clés à se poser
Section intitulée « Les questions clés à se poser »Avant de lancer des commandes, posez-vous ces questions qui orientent le diagnostic :
| Question | Implication |
|---|---|
| Est-ce que ça marchait avant ? | Si oui, qu'est-ce qui a changé ? (mise à jour, config, firewall) |
| Est-ce que ça marche en local ? | Distingue problème réseau vs applicatif |
| Est-ce que ça marche depuis une autre machine ? | Distingue problème client vs serveur |
| D'autres services sont-ils affectés ? | Problème global (réseau) vs isolé (service) |
| L'erreur est-elle immédiate ou après un délai ? | Immédiate = refusé, Délai = filtré/timeout |
Checklist de diagnostic rapide
Section intitulée « Checklist de diagnostic rapide »Copiez-collez cette checklist pour un diagnostic express :
#!/bin/bash# Checklist diagnostic réseau
echo "=== 1. Interface et IP ==="ip addr show | grep -E "state|inet "
echo -e "\n=== 2. Route par défaut ==="ip route show | grep default
echo -e "\n=== 3. Ping passerelle ==="GATEWAY=$(ip route | grep default | awk '{print $3}')ping -c 2 $GATEWAY
echo -e "\n=== 4. Ping Internet ==="ping -c 2 8.8.8.8
echo -e "\n=== 5. Résolution DNS ==="dig google.com +short
echo -e "\n=== 6. Test port (modifier host/port) ==="# nc -zv <host> <port>echo "Exécuter : nc -zv <host> <port>"Résultat attendu : chaque étape doit réussir. La première qui échoue indique la zone du problème.
Interprétation des erreurs courantes
Section intitulée « Interprétation des erreurs courantes »« Connection refused »
Section intitulée « « Connection refused » »Le service écoute mais refuse la connexion, ou le port est fermé.
| Cause probable | Vérification | Solution |
|---|---|---|
| Service non démarré | systemctl status <service> | Démarrer le service |
| Port mal configuré | ss -tuln | grep <port> | Vérifier la config du service |
| Firewall local | iptables -L ou nft list ruleset | Ouvrir le port |
« Connection timed out »
Section intitulée « « Connection timed out » »Le paquet ne revient jamais. Souvent un firewall qui drop silencieusement.
| Cause probable | Vérification | Solution |
|---|---|---|
| Firewall distant | traceroute <host> | Contacter l'admin du firewall |
| Routage incorrect | ip route get <ip> | Vérifier les routes |
| FAI bloquant | Tester depuis un autre réseau | VPN ou contacter le FAI |
« Name or service not known »
Section intitulée « « Name or service not known » »La résolution DNS a échoué.
| Cause probable | Vérification | Solution |
|---|---|---|
| Serveur DNS down | dig @8.8.8.8 example.com | Utiliser un DNS alternatif |
/etc/resolv.conf vide | cat /etc/resolv.conf | Ajouter nameserver 8.8.8.8 |
| Domaine inexistant | dig example.com | Vérifier l'orthographe |
| Cache DNS | resolvectl flush-caches (systemd-resolved) | Vider le cache |
« No route to host »
Section intitulée « « No route to host » »La machine ne sait pas comment atteindre la destination.
| Cause probable | Vérification | Solution |
|---|---|---|
| Pas de route par défaut | ip route | Ajouter la gateway |
| Gateway down | ping <gateway> | Vérifier le routeur |
| VLAN/subnet incorrect | ip addr | Vérifier l'adresse IP |
« Host unreachable »
Section intitulée « « Host unreachable » »La destination est connue mais inaccessible (souvent ICMP unreachable reçu).
| Cause probable | Vérification | Solution |
|---|---|---|
| Machine éteinte | ip neigh (présence dans la table de voisinage ?) | Allumer la machine |
| Firewall bloquant | traceroute <host> | Vérifier les règles firewall |
| Problème réseau intermédiaire | mtr <host> | Identifier le routeur défaillant |
Outils par symptôme
Section intitulée « Outils par symptôme »| Symptôme | Outils à utiliser | Ce qu'on cherche |
|---|---|---|
| Pas d'IP | ip addr, dhclient -v | Interface UP, adresse assignée |
| Pas de route | ip route, traceroute | Route par défaut, chemin vers destination |
| DNS KO | dig, nslookup, /etc/resolv.conf | Résolution fonctionnelle, serveur DNS accessible |
| Port fermé/filtré | nc -zv, ss -tuln, nmap | Port ouvert, service écoutant |
| Latence élevée | ping, mtr, traceroute | RTT, routeur lent identifié |
| Paquets perdus | ping -c 100, mtr | % de perte, localisation |
| Erreur HTTP | curl -v, logs serveur | Code de statut, message d'erreur |
| Certificat TLS | curl -v, openssl s_client | Validité, chaîne de confiance |
Cas pratiques de diagnostic
Section intitulée « Cas pratiques de diagnostic »Cas 1 : « curl timeout »
Section intitulée « Cas 1 : « curl timeout » »Un curl https://api.example.com/health ne répond pas.
-
Tester la résolution DNS
Fenêtre de terminal dig api.example.com +shortRésultat :
203.0.113.42✅ -
Tester la connectivité IP
Fenêtre de terminal ping -c 2 203.0.113.42Résultat : timeout ❌
-
Tester le port directement
Fenêtre de terminal nc -zv 203.0.113.42 443Résultat : timeout ❌
-
Tracer le chemin
Fenêtre de terminal traceroute 203.0.113.42Résultat : s'arrête à un routeur intermédiaire
-
Conclusion
Firewall ou problème de routage entre vous et le serveur. Contacter l'admin réseau.
Cas 2 : « Connection refused »
Section intitulée « Cas 2 : « Connection refused » »Un curl http://localhost:8080/api retourne "Connection refused".
-
Vérifier si le service écoute
Fenêtre de terminal ss -tuln | grep 8080Résultat : rien ❌
-
Vérifier l'état du service
Fenêtre de terminal systemctl status mon-apiRésultat :
inactive (dead)❌ -
Démarrer le service
Fenêtre de terminal sudo systemctl start mon-api -
Revérifier
Fenêtre de terminal ss -tuln | grep 8080curl http://localhost:8080/apiRésultat :
LISTENsur 8080 ✅, réponse API ✅
Cas 3 : « Name resolution failed »
Section intitulée « Cas 3 : « Name resolution failed » »Un curl https://mon-service.internal/ échoue avec "Could not resolve host".
-
Tester avec dig
Fenêtre de terminal dig mon-service.internal +shortRésultat : rien ❌
-
Vérifier le serveur DNS configuré
Fenêtre de terminal cat /etc/resolv.confRésultat :
nameserver 10.0.0.1 -
Tester ce serveur DNS
Fenêtre de terminal dig @10.0.0.1 mon-service.internal +shortRésultat : timeout ❌
-
Tester un DNS public
Fenêtre de terminal dig @8.8.8.8 mon-service.internal +shortRésultat : rien (domaine .internal non public)
-
Conclusion
Le DNS interne (10.0.0.1) est down ou le domaine n'y est pas configuré. Contacter l'admin DNS.
Bonnes pratiques de diagnostic
Section intitulée « Bonnes pratiques de diagnostic »- Toujours tester du plus proche au plus loin
- Noter ce qui fonctionne ET ce qui échoue
- Tester une seule variable à la fois
- Vérifier les logs (
journalctl,/var/log/) - Comparer avec une machine qui fonctionne
- Documenter le problème et la solution
- Blâmer "le réseau" sans vérification
- Changer plusieurs choses en même temps
- Ignorer les messages d'erreur exacts
- Oublier de vérifier le firewall local
- Supposer que "ça marchait" sans vérifier
- Redémarrer en espérant que ça se règle
Validation des acquis
Section intitulée « Validation des acquis »Testez votre méthodologie avec ces exercices :
-
Simuler un problème DNS
Modifiez temporairement
/etc/resolv.confpour pointer vers un serveur inexistant, puis diagnostiquez. -
Bloquer un port avec iptables
Fenêtre de terminal sudo iptables -A INPUT -p tcp --dport 22 -j DROPDiagnostiquez pourquoi SSH ne répond plus (depuis une autre session !), puis retirez la règle.
-
Arrêter un service
Arrêtez un service web et utilisez la checklist pour identifier le problème.
Dépannage rapide (table de référence)
Section intitulée « Dépannage rapide (table de référence) »| Symptôme | Première commande | Si ça échoue |
|---|---|---|
| Pas de réseau du tout | ip addr | Interface down, pas d'IP |
| Ping gateway échoue | ip route | Route manquante |
| Ping 8.8.8.8 échoue | traceroute 8.8.8.8 | Routage/firewall intermédiaire |
| DNS ne résout pas | dig @8.8.8.8 domain | Problème DNS local |
| Port timeout | nc -zv host port | Firewall distant |
| Port refused | ss -tuln | grep port | Service non démarré |
| HTTP 5xx | curl -v URL | Logs serveur |
| Certificat invalide | openssl s_client -connect host:443 | Date/CN/CA |
À retenir
Section intitulée « À retenir »- Toujours diagnostiquer du plus proche au plus loin : localhost → gateway → Internet → DNS → service
- « Connection refused » = port fermé ou service arrêté → vérifier
ss -tuln - « Connection timeout » = firewall qui drop silencieusement → vérifier avec
traceroute - « Name not found » = problème DNS → vérifier
/etc/resolv.confetdig - Les logs sont vos meilleurs amis :
journalctl -u service,/var/log/ - Documenter le problème ET la solution pour la prochaine fois
- Le redémarrage masque le problème, le diagnostic le résout
FAQ : questions fréquentes sur le diagnostic réseau
Section intitulée « FAQ : questions fréquentes sur le diagnostic réseau »Du plus proche au plus loin
La méthode fiable consiste à remonter les couches dans l'ordre, de votre machine vers le service distant :ip addr show # 1. interface active, IP presente ?
ip route | grep default # 2. passerelle definie ?
ping -c2 8.8.8.8 # 3. Internet joignable ?
dig google.com +short # 4. DNS resout ?
nc -zv <host> <port> # 5. service distant ouvert ?
La première étape qui échoue localise la zone du problème : pas d'IP (étape 1), passerelle injoignable (étape 2), routage/firewall (étape 3), DNS (étape 4), service ou pare-feu applicatif (étape 5). Cette logique divide and conquer évite de chercher au hasard.Réponse active ou silence
| Erreur | Signification | Outil |
|---|---|---|
| Connection refused | la machine répond par un RST : port fermé, service arrêté, ou pare-feu en REJECT | ss -tuln |
| Connection timed out | aucune réponse : pare-feu qui DROP, ou hôte injoignable | traceroute |
ss -tuln | grep <port> que le service tourne.Connection timed out signifie que le paquet part sans retour : un pare-feu le jette en silence (DROP), ou la route est cassée. Tracez le chemin avec traceroute ou mtr pour voir où ça bloque.Isoler la variable
Quelques tests tranchent vite entre réseau et application :- Ça marche en local ?
curl http://localhost:<port>etss -tuln. Si le service répond en local mais pas à distance, le problème est dans le réseau (pare-feu, routage, binding sur127.0.0.1). - Ça marche depuis une autre machine ? Distingue un souci client d'un souci serveur.
- D'autres services sont-ils touchés ? Si oui, c'est un problème réseau global ; si un seul service est affecté, c'est plutôt applicatif.
- L'erreur est-elle immédiate ou après un délai ? Immédiate =
refused(couche réseau OK) ; délai =timeout(filtrage).
Un outil par symptôme
| Symptôme | Outils | On cherche |
|---|---|---|
| Pas d'IP | ip addr |
interface UP, adresse assignée |
| Pas de route | ip route, traceroute |
passerelle, chemin |
| DNS KO | dig, resolvectl |
résolution, serveur joignable |
| Port fermé/filtré | nc -zv, ss -tuln |
port ouvert, service écoutant |
| Latence / pertes | ping, mtr |
RTT, % de perte |
| Erreur HTTP | curl -v |
code de statut |
| TLS | openssl s_client |
validité, chaîne |
ip, ss) qui remplacent les anciens net-tools (ifconfig, netstat, arp, route), souvent absents par défaut. mtr combine traceroute et ping en continu, idéal pour localiser une perte intermittente.Le redémarrage efface les preuves
Redémarrer un service ou une machine masque le problème au lieu de le résoudre :- La cause reste présente et le problème reviendra.
- Vous perdez l'état qui permettait de diagnostiquer : connexions en cours (
ss), logs en mémoire, processus, table de routage.
journalctl -u <service> --since "-10 min"
ss -tunap
ip route
Le redémarrage doit être la solution de dernier recours, une fois la cause comprise, pas le premier geste. Le bon réflexe d'ouverture reste : qu'est-ce qui a changé ? (mise à jour, config, règle de pare-feu, DNS).