Chapitre 1414 minIntermédiaire
Dépanner DNS et DHCP : nslookup, dig, ipconfig, Wireshark
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- suivre une méthode de dépannage du bas vers le haut ;
- choisir le bon outil de résolution et connaître ses pièges ;
- capturer et filtrer le trafic DNS et DHCP ;
- relier un symptôme à sa cause la plus probable.
4 exercices corrigés
Dépanner un service réseau, c'est suivre le chemin d'une requête, étape par étape, jusqu'à trouver celle qui échoue, en vérifiant chaque hypothèse par une commande plutôt qu'en devinant. Pour DNS et DHCP, une dizaine de commandes suffit : ipconfig, Resolve-DnsName et nslookup sous Windows, ip, dig et getent sous Linux, tcpdump et Wireshark pour voir ce qui passe vraiment sur le réseau. Ce chapitre donne la méthode, les outils, les pièges des outils eux-mêmes et les symptômes types, puis la déroule sur des cas concrets.
La méthode : du bas vers le haut, une hypothèse à la fois
Devant « Internet ne marche pas » ou « l'intranet est inaccessible », la tentation est de redémarrer quelque chose. Résiste. Suis le chemin :
- Reformuler et délimiter. Qui est touché : un poste, un VLAN, tout le monde ? Depuis quand ? Qu'est-ce qui a changé ? Un seul poste en panne oriente vers le poste ; tout un VLAN, vers ce qui est commun au VLAN (relais, passerelle, étendue) ; tout le monde, vers un serveur.
- La configuration IP. Le poste a-t-il une adresse, la bonne passerelle, les bons DNS ? (
ipconfig /all) - La connectivité. La passerelle répond-elle ? Le serveur répond-il par son adresse ? (
ping,Test-NetConnection) - La résolution de noms. Le nom se résout-il, vers la bonne adresse, auprès du bon serveur ? (
Resolve-DnsName,nslookup,dig) - Le service. Le port du service répond-il ? (
Test-NetConnection -Port,curl) - L'application. Le service répond-il correctement ? (journaux, codes HTTP)
À chaque étape, une commande confirme ou élimine une hypothèse. Note ce que tu fais et ce que tu observes : c'est ce qu'on attend de toi en épreuve, et c'est ce qui permet à un collègue de reprendre le dossier (cours ITIL et support).
Les commandes du poste
| Besoin | Windows (cmd ou PowerShell) | Linux (Debian 13) |
|---|---|---|
| Configuration complète | ipconfig /all, Get-NetIPConfiguration | ip a, ip r, cat /etc/resolv.conf |
| Libérer et renouveler le bail | ipconfig /release puis ipconfig /renew | sudo ifdown ens18 && sudo ifup ens18 (ifupdown, le défaut d'un serveur Debian) ou nmcli connection up <nom> (NetworkManager) |
| Voir et vider le cache DNS | ipconfig /displaydns, ipconfig /flushdns | resolvectl flush-caches si systemd-resolved est utilisé |
| Réenregistrer le nom du poste dans le DNS | ipconfig /registerdns | — |
| Résoudre comme les applications | Resolve-DnsName nom | getent hosts nom |
| Interroger un serveur DNS précis | Resolve-DnsName nom -Server 192.168.10.177, nslookup nom 192.168.10.177 | dig @192.168.10.177 nom |
| Tester un port | Test-NetConnection nom -Port 443 | nc -zv nom 443 |
| Suivre la route | tracert, Test-NetConnection nom -TraceRoute | traceroute, mtr |
Le piège des outils : qui résout quoi ?
Les outils de diagnostic ne passent pas tous par le même chemin que les applications.
| Outil | Passe par le fichier hosts et le cache du poste ? |
|---|---|
Navigateur, applications, ping | Oui : c'est la résolution du système |
Resolve-DnsName nom | Oui : il montre ce que voient les applications |
Resolve-DnsName nom -Server 192.168.10.177 | Non : il interroge directement ce serveur |
nslookup | Non : il interroge directement le serveur DNS |
dig | Non |
getent hosts nom (Linux) | Oui : il suit /etc/nsswitch.conf, comme les applications |
D'où un grand classique : nslookup intranet.sorbier.example donne la bonne adresse, mais le navigateur va ailleurs. nslookup interroge directement le serveur DNS ; le navigateur, lui, lit d'abord le fichier hosts, où un ancien test a laissé une ligne. Pour savoir ce que voient les applications, utilise Resolve-DnsName (sans -Server) ou getent hosts.
Lire dig et Resolve-DnsName
$ dig @192.168.10.177 intranet.sorbier.example +noall +answer +comments
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50211
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
intranet.sorbier.example. 3600 IN A 192.168.21.10
PS> Resolve-DnsName intranet.sorbier.example -Server 192.168.10.177
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
intranet.sorbier.example A 3600 Answer 192.168.21.10
Les options de dig qui servent le plus :
| Option | Effet |
|---|---|
@serveur | Interroger ce serveur au lieu de celui du système |
+short | La réponse seule, une ligne par valeur |
-x 192.168.10.178 | Résolution inverse (PTR) |
+trace | Refaire toute la résolution depuis la racine, en montrant chaque délégation |
+norec | Ne pas demander la récursion : tester un serveur faisant autorité |
+dnssec | Afficher les signatures et le drapeau ad |
nom MX, nom TXT, nom SOA, nom NS | Demander un type précis |
dig +trace www.sorbier.example est l'outil qui répond à « la délégation est-elle correcte ? » : il montre quels serveurs la racine, puis .example, annoncent pour la zone, et ce que ces serveurs répondent.
Côté serveurs
| Vérification | DNS de Windows Server | DHCP de Windows Server |
|---|---|---|
| Le service tourne | Get-Service DNS | Get-Service DHCPServer |
| L'état | Get-DnsServerZone, Get-DnsServerForwarder | Get-DhcpServerv4ScopeStatistics (adresses libres, taux d'occupation) |
| Le détail | Get-DnsServerResourceRecord -ZoneName … | Get-DhcpServerv4Lease -ScopeId 192.168.10.64 |
| Les journaux | Observateur d'événements > Journaux des applications et des services > DNS Server ; journal de débogage du serveur DNS, à activer temporairement | C:\Windows\System32\dhcp\DhcpSrvLog-<Jour>.log ; journal Microsoft-Windows-DHCP Server |
| Le test global | dcdiag /test:dns | Get-DhcpServerv4Failover (état du basculement) |
Sous Debian avec BIND : sudo rndc status, sudo rndc zonestatus <zone>, sudo rndc querylog on (journalise chaque requête, à couper ensuite), journalctl -u named. Sur pfSense : Status > DHCP Leases pour les baux distribués, Status > System Logs, onglets DHCP et DNS Resolver.
Capturer pour voir ce qui passe vraiment
Quand les commandes ne suffisent pas, capture le trafic : tu vois si la requête part, si elle arrive, et ce que le serveur répond.
# Sur un serveur Debian : le DHCP, en détail
sudo tcpdump -ni ens18 -vv 'udp port 67 or udp port 68'
# Le DNS, en enregistrant la capture pour l'ouvrir ensuite dans Wireshark
sudo tcpdump -ni ens18 -w /tmp/dns.pcap 'port 53'
# Sous Windows, sans rien installer : pktmon, fourni avec le système
pktmon start --capture --file-name C:\Temp\capture.etl
# ... reproduire le problème ...
pktmon stop
pktmon etl2pcap C:\Temp\capture.etl --out C:\Temp\capture.pcapng
Sur pfSense, Diagnostics > Packet Capture capture sur une interface choisie, avec un filtre sur l'hôte et le port, et propose le fichier au téléchargement.
Dans Wireshark, les filtres d'affichage à connaître :
| Filtre | Ce qu'il montre |
|---|---|
dhcp | Tout le DHCP (l'ancien nom du filtre était bootp) |
dhcp.option.dhcp == 1 | Les DISCOVER (2 : OFFER, 3 : REQUEST, 5 : ACK, 6 : NAK) |
dns | Tout le DNS |
dns.flags.response == 0 | Les questions seulement |
dns.flags.rcode == 3 | Les réponses NXDOMAIN (2 : SERVFAIL, 5 : REFUSED) |
dns.time > 0.5 | Les réponses qui ont mis plus d'une demi-seconde |
ip.addr == 192.168.10.177 | Tout le trafic de ou vers srv-ad |
Les filtres d'affichage (dhcp, dns) ne s'écrivent pas comme les filtres de capture de tcpdump (udp port 67), qui décident de ce qui est enregistré. La lecture d'une capture couche par couche est expliquée dans le chapitre Wireshark du cours Réseaux fondamentaux.
Les symptômes types
| Symptôme | Cause la plus probable | Vérification |
|---|---|---|
Adresse 169.254.x.x (APIPA) | Aucune réponse DHCP : relais manquant pour ce VLAN, étendue pleine ou inactive, serveur arrêté, VLAN non transporté jusqu'au relais | Get-DhcpServerv4ScopeStatistics, configuration du relais, capture sur le relais |
Adresse d'un réseau inconnu (192.168.1.x) | Serveur DHCP pirate | MAC de la passerelle reçue, table MAC des switchs |
| Tout fonctionne par adresse IP, rien par nom | DNS injoignable ou mal configuré sur le poste | ipconfig /all, Resolve-DnsName nom -Server … |
| Les noms d'Internet se résolvent, pas les noms internes | Le poste utilise un DNS public | ipconfig /all : un serveur autre que .177 et .181 |
| Les noms internes se résolvent, pas ceux d'Internet | Redirecteurs du serveur DNS injoignables, DNS sortant bloqué par le pare-feu | Resolve-DnsName www.service-public.fr -Server 192.168.10.177, journaux du pare-feu |
| Un nom donne une ancienne adresse | Cache (poste ou serveur), enregistrement périmé, ligne dans hosts | ipconfig /displaydns, Resolve-DnsName nom -Server 192.168.10.177, fichier hosts |
| Ça marche une fois sur deux | Les deux serveurs DNS ne donnent pas la même réponse (réplication, zone absente sur l'un) | Interroger chacun avec -Server et comparer |
| Ouverture de session lente, GPO non appliquées | Le poste ne trouve pas les SRV des contrôleurs : mauvais DNS | nltest /dsgetdc:ad.sorbier.example |
| Le nom se résout, le service ne répond pas | Ce n'est plus le DNS : pare-feu, service arrêté, mauvais port | Test-NetConnection nom -Port … |
Un cas complet
Mardi, 9 h 10. Plusieurs magasiniers de l'entrepôt signalent que leurs terminaux de scan « n'ont plus le réseau ». Les postes des bureaux fonctionnent.
- Délimiter. Seul le VLAN 30 est touché, depuis ce matin. Hier soir, Moussa Diallo a remplacé le switch de l'entrepôt. Hypothèse : un problème commun au VLAN 30, lié au nouveau switch.
- Configuration IP. Sur un terminal : adresse
169.254.12.40. Aucune réponse DHCP. - Le serveur.
Get-DhcpServerv4ScopeStatisticssursrv-ad: l'étendue192.168.10.128est active, occupée à 59 %. Le serveur n'est pas en cause. - Le relais. Sur SW-COEUR, l'interface
Vlan30porte bienip helper-address 192.168.10.177et.181. - Le chemin. Une capture sur SW-COEUR ne montre aucun DISCOVER venant du VLAN 30. Les demandes n'arrivent pas jusqu'au relais. Sur le nouveau switch,
show interfaces trunk: le lien vers SW-COEUR n'autorise que les VLAN 10 et 99. - Correction.
switchport trunk allowed vlan add 30sur le port du trunk ;ipconfig /renew(ou le redémarrage du Wi-Fi des terminaux) : ils reçoivent une adresse en192.168.10.1xx. Le dossier est documenté : la configuration du switch de remplacement doit être reprise de la sauvegarde de l'ancien (cours Routage et commutation).
L'erreur aurait été de redémarrer le serveur DHCP, ou de recréer l'étendue : ni l'un ni l'autre n'étaient en cause, et la capture l'a prouvé en une minute.
Exercices
Exercice 1 sur 4 nslookup répond, le navigateur non Réussi À revoir
Karim tape https://intranet.sorbier.example et arrive sur une page d'erreur. nslookup intranet.sorbier.example répond 192.168.21.10, la bonne adresse. ping intranet.sorbier.example répond… 192.168.10.99.
- Pourquoi les deux commandes ne donnent-elles pas la même adresse ?
- Où chercher, et avec quelle commande vérifier ce que voient les applications ?
Voir la réponseMasquer la réponse de l'exercice 1
nslookupinterroge directement le serveur DNS, sans lire le fichierhostsni le cache.ping, comme le navigateur, utilise la résolution du système, qui lit d'abord le fichierhostset le cache du client DNS.- Dans
C:\Windows\System32\drivers\etc\hosts: une ligne192.168.10.99 intranet.sorbier.example, laissée par un ancien test.Resolve-DnsName intranet.sorbier.example(sans-Server) montre ce que voient les applications. Supprimer la ligne, puisipconfig /flushdns.
Tu avais trouvé ?
Exercice 2 sur 4 Une fois sur deux Réussi À revoir
Depuis la création de l'enregistrement gestion-stock dans la zone ad.sorbier.example, la moitié des postes le trouvent et les autres reçoivent « nom inexistant ». Les postes reçoivent par DHCP les DNS 192.168.10.177 et 192.168.10.181.
- Quelles commandes lances-tu pour localiser le problème ?
- Quelles sont les deux causes possibles ?
- Pourquoi certains postes continuent-ils à échouer même après la correction ?
Voir la réponseMasquer la réponse de l'exercice 2
- Interroger chaque serveur séparément :
Resolve-DnsName gestion-stock.ad.sorbier.example -Server 192.168.10.177, puis-Server 192.168.10.181. L'un répond, l'autre non. - La réplication de l'annuaire entre
srv-adetsrv-ad2n'a pas encore eu lieu ou échoue (repadmin /replsummary), ou la zone n'est pas intégrée à AD sur l'un des serveurs (une zone principale classique sur l'un, sans transfert vers l'autre). - Le cache négatif : les postes qui ont reçu NXDOMAIN le gardent pendant la durée fixée par le SOA de la zone.
ipconfig /flushdnssur ces postes, ou attendre l'expiration.
Tu avais trouvé ?
Exercice 3 sur 4 Lire une capture DHCP Réussi À revoir
Une capture sur le port de srv-ad, filtrée avec dhcp, montre des dizaines de DISCOVER venant du relais 192.168.10.158 (VLAN 30), et pour chacun un OFFER de srv-ad. Aucun REQUEST ne suit. Les terminaux restent en APIPA.
- Que sait-on du trajet aller ? Et du retour ?
- Propose deux causes, et la vérification de chacune.
Voir la réponseMasquer la réponse de l'exercice 3
- L'aller fonctionne : les DISCOVER arrivent au serveur par le relais, et le serveur répond par des OFFER. C'est le retour qui échoue : les terminaux ne reçoivent pas l'OFFER (sinon ils enverraient un REQUEST).
- Une ACL ou une règle de pare-feu bloque les réponses du serveur vers le relais (UDP 67 vers
192.168.10.158) : vérifier les ACL de SW-COEUR et le pare-feu, capturer sur SW-COEUR pour voir si les OFFER y arrivent. Ou la surveillance DHCP du switch de l'entrepôt jette les OFFER, parce que son port vers SW-COEUR n'est pas déclaré de confiance :show ip dhcp snoopinget ses statistiques de paquets rejetés.
Tu avais trouvé ?
Exercice 4 sur 4 Les noms d'Internet ne répondent plus Réussi À revoir
Depuis ce matin, tous les postes ouvrent l'intranet et les partages, mais aucun site d'Internet. ping 9.9.9.9 répond depuis un poste.
- Que concluent ces deux observations ?
- Quelle commande lances-tu sur
srv-ad, et qu'en déduis-tu selon le résultat ? - Où regardes-tu ensuite ?
Voir la réponseMasquer la réponse de l'exercice 4
- Le réseau et l'accès à Internet fonctionnent (le ping vers une adresse publique passe), et le DNS interne aussi. Le problème est la résolution des noms externes.
Resolve-DnsName www.service-public.fr -Server 192.168.10.177. S'il échoue, c'est le chemin desrv-advers ses redirecteurs. EnsuiteGet-DnsServerForwarderpour vérifier les redirecteurs configurés, etResolve-DnsName www.service-public.fr -Server 9.9.9.9depuis srv-ad pour savoir s'il les joint.- Dans les journaux du pare-feu : une règle modifiée qui bloque UDP/TCP 53 sortant depuis
srv-adetsrv-ad2. Une capture sursrv-ad(pktmon) montre des requêtes sortantes sans réponse.
Tu avais trouvé ?