Utiliser l’outil dig
I. Présentation
L’utilitaire dig (Domain Information Groper) est un programme de débogage et de recherche d’informations des serveurs DNS. Il est plus récent que son prédécesseur, nslookup. Il est également utilisable en ligne de commande, pour interroger le ou les serveurs de résolution de noms de son choix.
REMARQUE : par défaut, dig utilise le serveur mentionné en premier dans le fichier /etc/resolv.conf. Mais, tout comme nslookup, il est possible de lui faire changer d’horizon.
II. Utilisation de dig
L’outil est fourni avec le package bind-tools sur n’importe quel Unix/Linux qui se respecte. Sur une distribution Debian (ou dérivé), le package s’appelle dnsutils, mais l’outil s’appelle toujours dig. Là aussi, le mode d’affichage par défaut s’applique aux recherches des enregistrements de type A (adresse IPv4). Ainsi, pour interroger un nom de domaine on exécutera :
# dig mydmn.org. ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> cluster. ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61704 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;mydmn.org. IN A ;; AUTHORITY SECTION: mydmn.org. 3600 IN SOA dnsmaster.mydmn.org. root.mydmn.org. 2014102848 10800 3600 604800 86400 ;; Query time: 0 msec ;; SERVER: 192.168.1.172#53(192.168.1.172) ;; WHEN: Thu Jun 1 10:04:40 2017 ;; MSG SIZE rcvd: 74
L’interrogation du serveur de noms pour la recherche du ou des serveurs de messagerie s’effectue alors de la façon suivante :
# dig MX mydmn.org.
ATTENTION : il faut bien spécifier le "." final après le nom du domaine, car il s’agit de la notation FQDN propre aux serveurs de noms DNS. Par ailleurs, comme on peut le constater, dig est beaucoup plus bavard que son homologue nslookup. Si l’on souhaite afficher un résultat plus court, on peut préciser l’option +short :
# dig MX mydmn.org. +short
Lorsque l’on souhaite designer un serveur de noms particulier pour permettre d’effectuer la recherche, il faut le faire en le préfixant du symbole "@" :
# dig @dnsmaster.mydmn.org NS mydmn.org.
Exemple : pour interroger les serveurs de noms du domaine.fr connus par les serveurs racine :
% dig @f.root-servers.net NS fr. ... ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51518 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 9, ADDITIONAL: 12 ... ;; AUTHORITY SECTION:
-
172800 IN NS B.EXT.NIC.fr.
-
172800 IN NS B.NIC.fr.
-
172800 IN NS C.EXT.NIC.fr.
-
172800 IN NS C.NIC.fr.
…
Dans une réponse retournée aux clients, parmi les indicateurs (généralement affiché dans la première colonne du résultat), le plus important est celui mentionnant l’étiquette "aa". Il s’agit en fait du serveur faisant autorité. Lorsque cet enregistrement est présent, cela signifie que la réponse vient en droite ligne d’une machine d’autorité (type SOA).
De même, dans le résultat renvoyé, le champ "état" (en anglais status), indique si la requête renvoyée a trouvé réponse (NOERROR) ou non. Dans ce dernier cas, on peut avoir plusieurs catégories d’erreur :
- NXDOMAIN signifie que le nom n’existe pas
- SERVFAIL signifie que le serveur de noms est mal configuré.
REMARQUE : on peut également avoir un retour NOERROR, mais pas de réponse. C’est généralement le cas lorsque le nom interrogé existe mais ne contient aucun enregistrement du type (MX, NS, SOA…), demandé. Par ailleurs, dans les requêtes on peut écrire le type en majuscule ou en minuscule : ‘MX’ ou ‘mx’ de façon indifférente.
Dans sa façon de travailler, l’utilitaire dig ne se limite pas aux recherches dans le monde IPv4. On peut effectuer des requêtes sur des adresses IPv6 (ou des noms de domaines configurés avec des adresses IPv6) :
# dig -6 @k.root-servers.net . ns +bufsize=1024
Cette commande permet d’afficher les noms des serveurs avec leur adresse IPv6 en tenant compte uniquement des requêtes dont les paquets UDP font 1024 bytes. Il existe ainsi de nombreuses options que l’on peut ou non préciser. On peut forcer le port (option –p), le type (option –t)…
ASTUCE : l’utilitaire dig possède également un mode batch permettant alors d’exécuter différentes requêtes en renvoyant le résultat. Pour se faire, il suffit d’utiliser l’option –f suivi du nom du fichier de requêtes à passer. De plus, on peut forcer certains comportements de l’outil en les plaçant dans le script $HOME/.digrc qui sera lu avant toute exécution de commande dig.
Lorsque l’on souhaite signer la requête dig et les réponses qui pourraient être renvoyées au client en utilisant une signature de transaction TSIG, on peut le mentionner en spécifiant l’option –k. Il est alors possible de préciser la clé TSIG elle-même via l’option –y.
III. Dig et l'option +trace
Il existe une option particulière de la commande dig permettant de suivre le chemin parcouru par la requête. Il s’agit de l’option +trace, sorte de "traceroute" de la commande. Ceci peut s’avérer très pratique pour détecter une anomalie de routage:
# dig mydmn.org +trace
Afin de visualiser la totalité des possibilités (quasi infinie) de l’outil, je vous suggère de lire attentivement le manuel en ligne de la commande dig. On peut, par exemple récupérer le n° de serial d’un domaine (cela aurait pu servir, par exemple dans le script d’automatisation des signatures, présenté dans le module 2) :
# dig mydmn.org +nssearch | cut -d’ ‘ -f4,11 2014102848 192.168.1.172 2014102848 192.168.1.173
Il existe de nombreux sites d’explications de l’outil dig. Il y a même un site en ligne où il est possible d’interroger le ou les hôtes, sans avoir installé l’outil sur son environnement : Dig Online