Quand le réseau ne répond plus, la question n'est pas « quelle commande utiliser ? » mais « à quelle couche se situe le problème ? ». Ce guide vous donne une méthodologie de diagnostic réseau structurée : vous partez du symptôme, suivez un parcours logique, et identifiez la cause racine. Les commandes sont organisées par scénario d'incident, pas par ordre alphabétique. Cette page applique au réseau la méthode générale de diagnostic du parcours Dépanner : observer avant d'agir, et ne changer qu'une chose à la fois.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Diagnostiquer méthodiquement un problème réseau en suivant les couches OSI
- Choisir la bonne commande selon le symptôme observé
- Interpréter les résultats pour identifier la cause racine
- Utiliser les outils modernes (
ip,ss,mtr) plutôt que les commandes dépréciées
Prérequis
Section intitulée « Prérequis »Diagnostiquer, c'est comparer ce que vous observez avec ce qui devrait se passer. Sans modèle mental du cheminement d'un paquet, les commandes de ce guide ne sont qu'une liste à recopier. Assurez-vous de maîtriser ces fondamentaux :
- Modèle OSI : comprendre les 7 couches et leur rôle
- Adressage IP : notation CIDR, masques, sous-réseaux
- Protocoles : TCP vs UDP, ICMP, DNS
- Routage : passerelle par défaut, tables de routage
Je suis en incident : quel parcours suivre ?
Section intitulée « Je suis en incident : quel parcours suivre ? »En situation de panne, le réflexe le plus coûteux est de lancer des commandes au hasard. Ce tableau vous oriente : identifiez votre symptôme, lancez la première commande pour qualifier le problème, puis suivez le parcours correspondant, détaillé plus bas.
| Symptôme | Parcours | Première commande |
|---|---|---|
| Machine distante injoignable | Hôte injoignable | ping -c 3 <ip> |
| Service/port ne répond pas | Port ne répond pas | nc -zv <ip> <port> |
| Résolution de nom échoue | DNS ne fonctionne pas | dig <domaine> |
| Connexion lente ou instable | Réseau lent | mtr <destination> |
| Requête HTTP en erreur | HTTP ne fonctionne pas | curl -I <url> |
Hôte distant injoignable
Section intitulée « Hôte distant injoignable »Symptôme : Impossible de joindre une machine distante (SSH en timeout, ping
sans réponse, connexion refusée). Si c'est spécifiquement votre accès SSH
qui est perdu, en particulier après une modification de sshd_config, suivez
plutôt le parcours dédié Retrouver l'accès SSH à un
serveur : le diagnostic
ci-dessous couvre le cas général d'un hôte injoignable.
-
Vérifier la connectivité de base
Fenêtre de terminal ping -c 3 192.168.1.100Si réponse → L'hôte est joignable, le problème est ailleurs (port, firewall applicatif).
Si timeout → Continuez le diagnostic (ICMP peut être bloqué).
-
Vérifier votre propre configuration IP
Fenêtre de terminal ip addr show# Chercher : inet 192.168.x.x/24 sur l'interface activeVérifier : L'interface a-t-elle une IP ? Est-elle dans le bon sous-réseau ?
-
Vérifier la route vers la destination
Fenêtre de terminal ip route get 192.168.1.100# Résultat attendu : via 192.168.1.1 dev eth0Si "unreachable" → Problème de routage, vérifier la passerelle.
-
Vérifier la passerelle par défaut
Fenêtre de terminal ip route show default# Résultat attendu : default via 192.168.1.1 dev eth0Si absente → Ajouter avec
ip route add default via <gateway>. -
Tester la passerelle elle-même
Fenêtre de terminal ping -c 3 192.168.1.1Si timeout → Problème entre vous et le routeur (câble, switch, VLAN).
-
Tracer le chemin complet
Fenêtre de terminal mtr -r -c 10 192.168.1.100Interpréter : À quel saut la perte de paquets commence-t-elle ?
Commandes de diagnostic IP essentielles
Section intitulée « Commandes de diagnostic IP essentielles »La commande ip regroupe tout ce que faisaient ifconfig, route et arp :
interfaces, adresses, routes et voisins ARP. Ces cinq
invocations couvrent l'essentiel d'un état des lieux réseau, à connaître par
cœur avant d'aller plus loin :
# Afficher toutes les interfaces et leurs IPip addr show
# Afficher uniquement les interfaces UPip link show up
# Afficher la table de routage complèteip route show
# Afficher les voisins ARP (résolution MAC)ip neigh show
# Afficher les statistiques d'interfaceip -s link show eth0Le port ne répond pas
Section intitulée « Le port ne répond pas »Symptôme : Connexion refusée ou timeout sur un port spécifique (SSH, HTTP,
base de données). La nature du refus est déjà un indice : Connection refused signifie que la machine répond mais que rien n'écoute, un timeout
pointe vers un pare-feu qui jette les paquets en silence.
-
Tester la connectivité au port
Fenêtre de terminal nc -zv 192.168.1.100 22# Succès : Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!# Échec : nc: connect to 192.168.1.100 port 22 (tcp) failed: Connection refusedConnection refused → Le port n'est pas en écoute côté serveur.
Timeout → Un firewall bloque le flux.
-
Vérifier que le service écoute (sur le serveur)
Fenêtre de terminal ss -tlnp | grep :22# Attendu : LISTEN 0 128 0.0.0.0:22 *:* users:(("sshd",pid=1234,fd=3))Si aucune ligne → Le service n'est pas démarré.
Si 127.0.0.1:22 → Le service n'écoute que sur localhost.
-
Vérifier le pare-feu de la distribution (sur le serveur)
Fenêtre de terminal # Ubuntu/Debian avec UFWsudo ufw status verbose# RHEL/AlmaLinux/Rocky avec firewalldsudo firewall-cmd --list-allVérifier : Le port ou le service concerné est-il autorisé ?
-
Inspecter les règles bas niveau (si aucun gestionnaire n'est actif)
Fenêtre de terminal sudo nft list ruleset | grep -E "22|ssh"# Ou sur les systèmes encore en iptables :sudo iptables -L -n -v | grep -E "22|ssh"Chercher : Une règle DROP ou REJECT sur le port concerné.
-
Tester depuis le serveur lui-même
Fenêtre de terminal nc -zv 127.0.0.1 22Si OK en local mais pas à distance → Firewall ou configuration d'écoute.
Si le test nc réussit mais que l'application ne renvoie aucune réponse
utile (la connexion s'ouvre puis reste muette, ou systemctl affiche active (running) alors que rien ne fonctionne), le problème n'est plus réseau : c'est
le processus lui-même qui est en cause. Poursuivez avec Un service actif qui
ne répond pas.
Commandes ss essentielles
Section intitulée « Commandes ss essentielles »ss remplace netstat pour inspecter les sockets : ports en écoute,
connexions établies, processus associés. Son langage de filtres évite de
tout afficher puis de trier avec grep, ce qui compte sur un serveur qui gère
des milliers de connexions :
# Tous les ports TCP en écoute avec le processusss -tlnp
# Tous les ports UDP en écoutess -ulnp
# Connexions TCP établiesss -tn state established
# Filtrer par portss -tn 'sport == :22'
# Filtrer par adresse distantess -tn 'dst 192.168.1.0/24'
# Statistiques détaillées des connexionsss -tiLe DNS ne fonctionne pas
Section intitulée « Le DNS ne fonctionne pas »Symptôme : Impossible de résoudre un nom de domaine (ping google.com échoue, mais ping 8.8.8.8 fonctionne).
-
Tester la résolution DNS
Fenêtre de terminal dig google.com +short# Attendu : 142.250.xxx.xxxSi vide ou SERVFAIL → Problème DNS.
-
Vérifier le serveur DNS configuré
Fenêtre de terminal cat /etc/resolv.conf# nameserver 192.168.1.1# ou nameserver 127.0.0.53 (systemd-resolved) -
Tester avec un DNS public
Fenêtre de terminal dig @8.8.8.8 google.com +shortSi ça marche → Votre DNS local est défaillant.
-
Interroger directement votre serveur DNS
Fenêtre de terminal dig @192.168.1.1 google.com +shortSi timeout → Le serveur DNS est injoignable ou le port 53 est filtré.
Si SERVFAIL ou REFUSED → Le serveur répond mais refuse ou échoue à résoudre.
-
Vérifier le cache DNS local
Fenêtre de terminal # Sur les systèmes utilisant systemd-resolved (Ubuntu par défaut)resolvectl statisticsresolvectl flush-caches
Commandes dig essentielles
Section intitulée « Commandes dig essentielles »dig interroge les serveurs DNS et affiche la réponse brute : type
d'enregistrement, TTL, serveur qui a répondu. C'est ce niveau de détail qui
manque à nslookup et qui permet de distinguer un cache périmé d'une zone mal
configurée :
# Requête simple (enregistrement A)dig google.com
# Réponse courte uniquementdig google.com +short
# Enregistrements MX (serveurs mail)dig google.com MX
# Résolution inverse (IP vers nom)dig -x 8.8.8.8
# Tracer la délégation DNS complètedig google.com +trace
# Utiliser un serveur DNS spécifiquedig @1.1.1.1 google.com
# Afficher uniquement la section réponsedig google.com +noall +answerLe réseau est lent
Section intitulée « Le réseau est lent »Symptôme : Latence élevée, connexions qui traînent, timeouts intermittents. C'est le diagnostic le plus délicat, parce que « lent » peut venir de la latence, de la perte de paquets ou d'une bande passante saturée : chaque cause a son outil.
-
Mesurer la latence et les pertes
Fenêtre de terminal mtr -r -c 20 google.comInterpréter :
- Loss% > 5% = problème de congestion ou de lien
- Avg > 100ms vers un serveur local = anormal
- StDev élevé = connexion instable
-
Identifier le goulot d'étranglement
Regarder à quel saut la latence augmente brusquement ou les pertes commencent.
-
Tester la bande passante
Fenêtre de terminal # Sur le serveur distantiperf3 -s# Sur votre machineiperf3 -c <serveur> -t 30 -
Surveiller le trafic en temps réel
Fenêtre de terminal # Vue globale par connexionsudo iftop -i eth0# Statistiques d'interfaceip -s link show eth0 -
Vérifier les erreurs d'interface
Fenêtre de terminal ip -s link show eth0 | grep -E "errors|dropped|overrun"# Tout doit être à 0
Commandes mtr essentielles
Section intitulée « Commandes mtr essentielles »mtr combine ping et traceroute en continu : il rejoue le trajet en
boucle et cumule les statistiques par saut, ce qui rend visibles les problèmes
intermittents qu'un traceroute unique rate. Le mode TCP est précieux
quand les routeurs filtrent ICMP :
# Rapport après 10 envoismtr -r -c 10 google.com
# Mode continu (interactif)mtr google.com
# Afficher les IP sans résolutionmtr -n google.com
# Utiliser TCP au lieu d'ICMPmtr --tcp -P 443 google.com
# Utiliser UDPmtr --udp google.comL'HTTP ne fonctionne pas
Section intitulée « L'HTTP ne fonctionne pas »Symptôme : Page web inaccessible, erreur 502/503/504, timeout sur une API.
curl permet de découper le temps de réponse étape par étape (DNS,
connexion TCP, négociation TLS, premier octet) et de désigner le maillon
fautif.
-
Tester la connectivité HTTP
Fenêtre de terminal curl -I https://example.com# HTTP/2 200 = OK -
Mesurer les temps de réponse
Fenêtre de terminal curl -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTLS: %{time_appconnect}s\nFirst byte: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null -s https://example.comInterpréter :
- DNS > 1s → Problème de résolution
- Connect > 1s → Problème réseau ou serveur saturé
- TLS > 2s → Négociation TLS lente
- First byte > 5s → Backend lent
-
Tester sans TLS (si applicable)
Fenêtre de terminal curl -I http://example.com -
Vérifier les en-têtes de réponse
Fenêtre de terminal curl -v https://example.com 2>&1 | head -50 -
Court-circuiter le DNS
Fenêtre de terminal # Récupérer l'IP réelle du serveurdig +short example.com# Forcer curl à utiliser cette IP sans passer par le DNScurl --resolve example.com:443:<ip> https://example.comSi ça marche avec l'IP directe → Le problème vient de la résolution DNS, pas du serveur web.
Commandes curl pour le diagnostic
Section intitulée « Commandes curl pour le diagnostic »curl est bien plus qu'un téléchargeur : ses options -v, -w et -I en
font une sonde HTTP complète, capable de mesurer chaque étape de la requête
et d'isoler un problème de certificat, de redirection ou de
timeout :
# En-têtes uniquementcurl -I https://example.com
# Verbose (détails connexion)curl -v https://example.com
# Ignorer les erreurs de certificat (test uniquement)curl -k https://example.com
# Timeout personnalisécurl --connect-timeout 5 --max-time 10 https://example.com
# Suivre les redirectionscurl -L https://example.com
# Code HTTP seul (pratique en script)curl -s -o /dev/null -w "%{http_code}\n" https://example.comBoîte à outils par intention
Section intitulée « Boîte à outils par intention »Une fois les parcours assimilés, ce qui reste en mémoire, c'est l'intention (« je veux voir mes routes », « je veux tester un port »), pas l'option exacte. Ces trois tableaux servent d'aide-mémoire : partez de ce que vous voulez faire, la commande suit.
"Je veux voir..."
Section intitulée « "Je veux voir..." »Ces commandes sont en lecture seule : elles affichent l'état du système sans rien modifier, vous pouvez les lancer sans risque même en production.
| Intention | Commande | Exemple |
|---|---|---|
| Mon IP et interfaces | ip addr show | ip a |
| Ma table de routage | ip route show | ip r |
| Les ports en écoute | ss -tlnp | - |
| Les connexions établies | ss -tn state established | - |
| Le trafic en temps réel | sudo iftop -i eth0 | - |
| Les voisins ARP | ip neigh show | ip n |
| Les règles firewall | sudo nft list ruleset | - |
"Je veux tester..."
Section intitulée « "Je veux tester..." »Ces commandes émettent du trafic actif vers une cible : réservez-les aux machines dont vous avez la responsabilité ou l'autorisation.
| Intention | Commande | Exemple |
|---|---|---|
| Si une machine répond | ping -c 3 <ip> | ping -c 3 8.8.8.8 |
| Si un port est ouvert | nc -zv <ip> <port> | nc -zv 192.168.1.1 22 |
| La route vers une destination | mtr -r <ip> | mtr -r google.com |
| La résolution DNS | dig <domaine> | dig google.com +short |
| La bande passante | iperf3 -c <serveur> | - |
| Un endpoint HTTP | curl -I <url> | curl -I https://api.example.com |
"Je veux identifier..."
Section intitulée « "Je veux identifier..." »Ces commandes croisent les informations pour remonter à la source : quel processus détient un port, à qui appartient une adresse.
| Intention | Commande | Exemple |
|---|---|---|
| Quel process utilise un port | ss -tlnp | grep :<port> | ss -tlnp | grep :80 |
| Les connexions d'une IP | ss -tn 'dst <ip>' | ss -tn 'dst 10.0.0.1' |
| Le propriétaire d'une IP | dig -x <ip> | dig -x 8.8.8.8 |
| Les serveurs DNS d'un domaine | dig <domaine> NS | dig google.com NS |
| La version d'un service | nmap -sV -p <port> <ip> | nmap -sV -p 22 192.168.1.1 |
Dépannage express
Section intitulée « Dépannage express »Ce tableau condense les pannes réseau les plus fréquentes avec leur cause probable et la solution à tenter en premier. Il ne remplace pas les parcours détaillés ci-dessus, mais il suffit souvent à débloquer les cas simples.
| Symptôme | Cause probable | Solution |
|---|---|---|
ping OK vers l'IP, échec vers le nom | DNS défaillant | Tester dig @8.8.8.8, vérifier /etc/resolv.conf |
Connection refused sur un port | Service arrêté ou en écoute sur 127.0.0.1 | ss -tlnp, redémarrer le service, corriger l'adresse d'écoute |
| Timeout sur un port précis, ping OK | Pare-feu qui jette les paquets | ufw status (Ubuntu), firewall-cmd --list-all (RHEL), nft list ruleset |
| Aucune IP sur l'interface | DHCP en échec ou interface DOWN | ip link set <iface> up, puis Netplan sur Ubuntu ou NetworkManager sur RHEL |
Destination Host Unreachable | Passerelle absente ou mauvaise route | ip route show default, ajouter la route par défaut |
| Latence élevée par intermittence | Congestion ou perte sur un saut | mtr -r -c 20 <cible> pour localiser le saut fautif |
Pièges courants du diagnostic réseau
Section intitulée « Pièges courants du diagnostic réseau »Le ping ne répond pas = machine éteinte ?
Section intitulée « Le ping ne répond pas = machine éteinte ? »Non. ICMP est souvent filtré. Une machine peut être parfaitement accessible
sur ses ports de service tout en ignorant les pings. Testez toujours avec nc -zv sur un port spécifique.
Le port est ouvert = le service fonctionne ?
Section intitulée « Le port est ouvert = le service fonctionne ? »Non. Un port peut être en écoute (LISTEN) sans que le service soit
fonctionnel. Par exemple, un serveur web peut écouter sur le port 80 mais
renvoyer des erreurs 500. Testez toujours le protocole applicatif (curl,
mysql -e "SELECT 1").
La résolution DNS fonctionne = pas de problème DNS ?
Section intitulée « La résolution DNS fonctionne = pas de problème DNS ? »Non. Le cache DNS peut masquer un problème. Videz le cache (resolvectl flush-caches) et retestez. Vérifiez aussi le TTL des enregistrements.
traceroute montre des * = routeur en panne ?
Section intitulée « traceroute montre des * = routeur en panne ? »Non. Les * * * signifient que le routeur ne répond pas aux paquets ICMP
TTL-exceeded, pas qu'il est en panne. Le trafic peut très bien passer. Seule une
perte de paquets constante à partir d'un saut indique un problème.
ss montre ESTABLISHED = connexion active ?
Section intitulée « ss montre ESTABLISHED = connexion active ? »Pas toujours. Une connexion peut rester en ESTABLISHED même si l'autre
extrémité est morte (half-open). Les keepalives TCP détectent ça, mais avec un
délai. Vérifiez les compteurs de trafic (ss -ti).
Avertissements de sécurité
Section intitulée « Avertissements de sécurité »Les outils de diagnostic réseau sont à double tranchant : les mêmes
commandes qui vous aident à localiser une panne servent aussi à cartographier
un réseau, intercepter du trafic ou obtenir une élévation de privilèges.
Avant de les installer partout et de distribuer des droits sudo, mesurez ce
que chacun permet réellement.
Au-delà de ces cas extrêmes, l'installation même de ces outils augmente la surface d'attaque d'un serveur : nmap peut déclencher des alertes de sécurité, tcpdump capture des données sensibles (mots de passe, tokens), netcat peut servir de backdoor et iftop exige des privilèges élevés pour capturer le trafic. Préférez des bastions de diagnostic dédiés plutôt que d'installer ces outils sur vos serveurs de production.
Recettes prêtes à l'emploi
Section intitulée « Recettes prêtes à l'emploi »Quand l'incident se répète, autant scripter le diagnostic : ces trois scripts enchaînent les vérifications des parcours précédents et produisent un état des lieux complet en une commande, pratique à archiver dans un post-mortem.
Diagnostic complet d'un hôte
Section intitulée « Diagnostic complet d'un hôte »Ce script combine ping, route, test des ports standards et traceroute : c'est le parcours « hôte injoignable » automatisé.
#!/bin/bash# diagnostic-host.sh <ip>HOST="$1"
echo "=== Diagnostic de $HOST ==="echo -e "\n--- Ping ---"ping -c 3 "$HOST"
echo -e "\n--- Route ---"ip route get "$HOST"
echo -e "\n--- Ports standards ---"for port in 22 80 443; do nc -zv -w 2 "$HOST" "$port" 2>&1done
echo -e "\n--- Traceroute ---"mtr -r -c 5 "$HOST"Diagnostic DNS complet
Section intitulée « Diagnostic DNS complet »Ce script interroge les enregistrements A, NS et MX d'un domaine, puis compare la réponse de deux DNS publics : une divergence signale un problème de propagation ou un résolveur local défaillant.
#!/bin/bash# diagnostic-dns.sh <domaine>DOMAIN="$1"
echo "=== Diagnostic DNS de $DOMAIN ==="
echo -e "\n--- Résolution A ---"dig "$DOMAIN" A +short
echo -e "\n--- Serveurs de noms ---"dig "$DOMAIN" NS +short
echo -e "\n--- Serveurs mail ---"dig "$DOMAIN" MX +short
echo -e "\n--- Test avec DNS publics ---"echo "Google (8.8.8.8):"dig @8.8.8.8 "$DOMAIN" +shortecho "Cloudflare (1.1.1.1):"dig @1.1.1.1 "$DOMAIN" +shortDiagnostic HTTP complet
Section intitulée « Diagnostic HTTP complet »Ce script mesure le timing détaillé d'une requête (DNS, connexion, TLS, premier octet) puis affiche les en-têtes de réponse : de quoi situer la lenteur avant d'accuser le backend.
#!/bin/bash# diagnostic-http.sh <url>URL="$1"
echo "=== Diagnostic HTTP de $URL ==="
echo -e "\n--- Timing ---"curl -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTLS: %{time_appconnect}s\nFirst byte: %{time_starttransfer}s\nTotal: %{time_total}s\nHTTP code: %{http_code}\n" -o /dev/null -s "$URL"
echo -e "\n--- En-têtes ---"curl -I -s "$URL" | head -20Mettre en pratique
Section intitulée « Mettre en pratique »Une méthode de diagnostic ne s'acquiert que face à une vraie panne. Le lab vous met devant une machine dont la connexion réseau est tombée : à vous de remonter les couches avec ip, ss et ping, de localiser la cause racine et de rétablir le trafic.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- Diagnostiquer par couche OSI : physique → liaison → réseau → transport → application
- Utiliser les commandes modernes :
ipremplaceifconfig/route,ssremplacenetstat - Un ping timeout ne prouve rien : ICMP est souvent filtré, testez le port réel
- Un port ouvert ≠ service fonctionnel : testez toujours le protocole applicatif
- mtr > traceroute : vision continue, statistiques, détection des problèmes intermittents
- dig > nslookup : sortie parsable, options avancées, trace complète
- Sécurité : tcpdump et nmap sont dangereux en production, utilisez des bastions dédiés
- Documenter les résultats : gardez une trace des commandes et sorties pour les post-mortems
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Un service actif qui ne répond pas : Quand le port répond mais que l'application reste muette.
- Retrouver l'accès SSH à un serveur : Connection refused, timeout, Permission denied : chaque symptôme a sa cause.
- Nmap : scan de réseau : Exploration avancée et audit de sécurité.
- Tcpdump : capture de trafic : Analyse des paquets réseau.
- Netcat : le couteau suisse : Tests de connectivité et transferts.
- Rappels juridiques : Ce que la loi autorise et interdit.