Quand un service ne répond pas, 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. Les commandes sont organisées par scénario d’incident, pas par ordre alphabétique.
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 »Avant de diagnostiquer efficacement, maîtrisez 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 ? »Identifiez votre symptôme et suivez le parcours correspondant :
| 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 timeout, ping sans réponse, connexion refusée).
-
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 »# 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).
-
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 firewall local (sur le serveur)
Fenêtre de terminal sudo iptables -L -n -v | grep -E "22|ssh"# Ou avec nftables :sudo nft list ruleset | grep -E "22|ssh"Chercher : Une règle DROP ou REJECT sur le port concerné.
-
Vérifier le pare-feu UFW (si installé)
Fenêtre de terminal sudo ufw status verbose# Vérifier que le port est autorisé -
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.
Commandes ss essentielles
Section intitulée « Commandes ss essentielles »# 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.
-
Tester la connectivité au serveur DNS
Fenêtre de terminal nc -zvu 192.168.1.1 53# DNS utilise UDP port 53 -
Vérifier le cache DNS local
Fenêtre de terminal # Avec systemd-resolvedresolvectl statisticsresolvectl flush-caches
Commandes dig essentielles
Section intitulée « Commandes dig essentielles »# 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.
-
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 »# 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.
-
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 -
Tester avec un autre DNS
Fenêtre de terminal curl --resolve example.com:443:93.184.216.34 https://example.com
Commandes curl pour le diagnostic
Section intitulée « Commandes curl pour le diagnostic »# 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
# Avec timing détaillécurl -w "@curl-timing.txt" -o /dev/null -s https://example.comBoîte à outils par intention
Section intitulée « Boîte à outils par intention »”Je veux voir…”
Section intitulée « ”Je veux voir…” »| 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 iptables -L -n -v | - |
”Je veux tester…”
Section intitulée « ”Je veux tester…” »| 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…” »| 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 |
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é »Recettes prêtes à l’emploi
Section intitulée « Recettes prêtes à l’emploi »Diagnostic complet d’un hôte
Section intitulée « Diagnostic complet d’un hôte »#!/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 $HOSTDiagnostic DNS complet
Section intitulée « Diagnostic DNS complet »#!/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 »#!/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 -20Contrôle de connaissances
Section intitulée « Contrôle de connaissances »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