Analysons cet outil en profondeur.
Voici un exemple de sortie de la commande dig:
> DiG 9.11.3-1ubuntu1.11-Ubuntu> howtogeek.com ;; options globales: +cmd ;; Réponse reçue: ;; - >> EN-TÊTE
Décryptons ensemble ce que chaque ligne signifie :
Première ligne : Elle indique la version de dig utilisée et le nom de domaine interrogé.
Options globales : Cette ligne affiche les options appliquées à toutes les requêtes. dig permet d’interroger plusieurs domaines en même temps. Dans cet exemple, l’option par défaut +cmd est utilisée.
Opcode : « Query » signifie que l’opération demandée est une requête DNS. Cette valeur peut aussi être « IQuery » pour une requête inverse, ou « Status » pour tester l’état du serveur DNS.
Statut : « Noerror » indique que la requête a été traitée sans erreur.
ID : Cet identifiant aléatoire permet de lier la requête à la réponse correspondante.
Indicateurs : Ces lettres (qr rd ra) représentent la requête, la récursivité souhaitée et la récursivité disponible. La récursivité est une méthode de recherche DNS (l’autre étant itérative). « AA » signifie « Réponse faisant autorité », ce qui indique qu’un serveur de noms autoritaire a fourni la réponse.
Requête : Il s’agit du nombre de requêtes dans la session, qui ici est de 1.
Réponse : Il indique le nombre de réponses reçues, qui est de 4 dans ce cas.
Autorité : Ce nombre représente les réponses provenant d’un serveur de noms faisant autorité, ici 0. La réponse provient du cache d’un serveur DNS intermédiaire.
Supplémentaire : La présence d’une information supplémentaire est indiquée ici, mais elle n’est affichée que si sa valeur est supérieure ou égale à 2.
La section Pseudosection Opt
Observons maintenant la section Opt :
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494
Décortiquons cela :
EDNS: version 0 : Il s’agit de la version du mécanisme d’extension pour DNS (EDNS) utilisé. EDNS permet la transmission de données et d’indicateurs étendus en augmentant la taille des paquets UDP. Ceci est indiqué par un drapeau de taille variable.
Flags : Aucun indicateur n’est utilisé ici.
udp : La taille du paquet UDP utilisé est de 4096.
La section Question
La section « Question » est la suivante:
;; QUESTION SECTION: ;howtogeek.com. IN A
Voici ce que cela signifie :
howtogeek.com : C’est le nom de domaine que nous recherchons.
IN : Cela signifie que c’est une requête de classe Internet.
A : Sauf indication contraire, dig demandera un enregistrement de type A (adresse) au serveur DNS.
La section Réponse
La section Réponse contient les quatre réponses reçues du serveur DNS :
howtogeek.com. 3551 IN A 151.101.194.217 howtogeek.com. 3551 IN A 151.101.130.217 howtogeek.com. 3551 IN A 151.101.66.217 howtogeek.com. 3551 IN A 151.101.2.217
Explication de ces réponses :
3551 : Il s’agit du temps de vie (TTL), un entier sur 32 bits qui indique la durée pendant laquelle un enregistrement peut être mis en cache. Une fois ce délai expiré, les données doivent être réactualisées par le serveur DNS.
IN : Cela indique une requête de classe Internet.
A : Nous avons demandé un enregistrement de type A au serveur DNS.
La section Statistiques
La section « Statistiques » est la dernière et contient les informations suivantes :
;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sun Mar 22 07:44:37 EDT 2020 ;; MSG SIZE rcvd: 106
Voici ce que ces données signifient :
Temps de requête : Le temps nécessaire pour obtenir la réponse (ici 0 millisecondes).
SERVER : L’adresse IP et le port du serveur DNS qui a répondu. Dans ce cas, il s’agit du résolveur de stub de mise en cache local. Il relaie les requêtes DNS vers les serveurs DNS configurés en amont. Sur la machine de test Manajro, l’adresse était 8.8.8.8 # 53, qui correspond au DNS public de Google.
QUAND : L’horodatage de la requête.
MSG SIZE rcvd : La taille du message reçu du serveur DNS.
Personnaliser l’affichage
La commande dig permet de personnaliser les résultats en incluant ou en excluant certaines sections.
Les options de requête suivantes permettent de supprimer des sections:
+nocomments
: Supprime les lignes de commentaires.+noauthority
: Supprime la section Autorité.+noadditional
: Supprime la section Supplémentaire.+nostats
: Supprime la section Statistiques.+noanswer
: Supprime la section Réponse.+noall
: Supprime toutes les sections.
L’option +noall
est généralement utilisée avec les options suivantes pour inclure des sections spécifiques. Plutôt que de taper plusieurs options pour supprimer les sections, utilisez +noall
pour tout désactiver, puis ajoutez celles que vous souhaitez voir.
Les options suivantes servent à afficher des sections:
+comments
: Affiche les lignes de commentaires.+authority
: Affiche la section Autorité.+additional
: Affiche la section Supplémentaire.+stats
: Affiche la section Statistiques.+answer
: Affiche la section Réponse.+all
: Affiche toutes les sections.
Voici un exemple pour faire une requête sans afficher les lignes de commentaires :
dig howtogeek.com +nocomments
Si on utilise l’option +noall
seule, cela ne donne aucun résultat utile :
dig howtogeek.com +noall
Ajoutons maintenant la section Réponse avec la commande suivante :
dig howtogeek.com +noall +answer
Pour activer la section statistiques en plus, tapez la commande suivante :
dig howtogeek.com +noall +answer +stats
La combinaison +noall +answer
est fréquente. Vous pouvez ajouter des sections supplémentaires au besoin. Pour éviter de taper +noall +answer
à chaque utilisation de dig, vous pouvez les enregistrer dans un fichier de configuration nommé « .digrc » dans votre répertoire personnel.
La commande suivante permet de créer ce fichier :
echo "+noall +answer" > $HOME/.digrc
Et pour vérifier son contenu, utilisez la commande :
cat .digrc
Ces options seront désormais utilisées pour toutes les commandes dig suivantes :
dig ubuntu.org
dig linux.org
dig github.com
Ce fichier de configuration sera utilisé pour les prochains exemples.
Les Enregistrements DNS
Les informations renvoyées par dig proviennent de différents types d’enregistrements stockés sur les serveurs DNS. Par défaut, dig interroge l’enregistrement de type A (adresse). Voici une liste des types d’enregistrements les plus courants:
- Enregistrement A : Associe un domaine à une adresse IP version 4.
- Enregistrement MX : Dirige les emails envoyés à un domaine vers le serveur de messagerie approprié.
- Enregistrement NS : Délègue un domaine (ou sous-domaine) à un ensemble de serveurs DNS.
- Enregistrement TXT : Stocke des informations textuelles sur un domaine, souvent utilisées pour prévenir l’usurpation d’identité par e-mail.
- Enregistrement SOA : Contient des informations sur le domaine comme le serveur de noms principal, la partie responsable, un horodatage des changements et des délais pour les tentatives et les abandons.
- TTL : Le temps de vie spécifie la durée durant laquelle un serveur DNS intermédiaire peut conserver un enregistrement DNS en cache.
- ANY : Demande à dig de renvoyer tous les types d’enregistrement DNS disponibles.
Spécifier le type A ne change rien car c’est l’action par défaut :
dig redhat.com A
Pour interroger les enregistrements MX (échange de courrier) :
dig yahoo.com MX
Pour connaitre les serveurs de noms associés à un domaine :
dig fedora.com NS
Voici comment interroger le début de l’autorité :
dig manjaro.com SOA
Le drapeau TTL affiche le temps de vie des données en cache sur le serveur DNS. Si on fait plusieurs requêtes, le temps de vie diminuera avant de revenir à sa valeur initiale :
dig usa.gov TTL
Pour afficher les enregistrements de texte :
dig usa.gov TXT
Spécifier un serveur DNS
Pour utiliser un serveur DNS particulier, vous pouvez utiliser le signe « @ » suivi de son adresse IP :
Par défaut (voir ci-dessous), dig utilise le résolveur local (127.0.0.53) :
dig usa.gov +stats
La commande suivante utilise le serveur DNS public de Google à l’adresse 8.8.8.8:
dig @8.8.8.8 usa.gov +stats
Utiliser dig avec plusieurs domaines
La commande dig peut interroger plusieurs domaines en même temps :
dig ubuntu.org fedora.org manjaro.com
Pour interroger régulièrement une liste de domaines, vous pouvez les enregistrer dans un fichier texte et utiliser l’option -f de dig. Chaque domaine sera interrogé à son tour.
Voici un exemple avec un fichier appelé « domaines.txt », affiché avec la commande cat et passé à dig avec l’option -f :
cat domaines.txt
dig -f domaines.txt
Recherches DNS inversées
Une recherche DNS inversée permet de trouver le nom de domaine à partir d’une adresse IP. Pour cela, il faut qu’il existe un enregistrement PTR (enregistrement de pointeur) qui fait correspondre l’adresse IP à un nom de domaine complet. Cependant, ces enregistrements ne sont pas obligatoires.
Pour voir si l’adresse IP 209.51.188.148 pointe vers un domaine, utilisez l’option -x :
dig -x 209.51.188.148
L’adresse IP est associée au domaine gnu.org.
Comme un PTR est un enregistrement DNS, il est possible d’utiliser dig pour faire une requête spécifique de type PTR. Cependant, la syntaxe est un peu plus compliquée. Il faut inverser l’adresse IP et ajouter « .in-addr.arpa » à la fin :
dig ptr 148.188.51.209.in-addr.arpa
Le résultat est le même, mais l’opération est plus laborieuse.
Conclusion
La commande dig est un outil très utile pour explorer le fonctionnement du DNS. Elle permet de mieux comprendre les mécanismes qui permettent de passer d’un nom de domaine à une adresse IP.