Commande dig

Commande dig

Notes › Linux cli scripts

La commande dig

dig (Domain Information Groper) est un outil en ligne de commande qui interroge les serveurs DNS. Il fait partie du paquet BIND (dnsutils sous Debian/Ubuntu, bind-utils sous RHEL/Fedora). On l’utilise surtout pour diagnostiquer la résolution de noms.

Syntaxe générale

1
dig [@serveur] [nom] [type] [classe] [options] [+options_de_requête]
  • @serveur : le serveur DNS à interroger (par défaut, celui de /etc/resolv.conf)
  • nom : le domaine recherché
  • type : le type d’enregistrement (A par défaut)
  • classe : presque toujours IN (Internet)

Exemples courants

1
2
3
4
5
6
7
8
9
10
11
dig exemple.fr                 # Enregistrement A (IPv4)
dig exemple.fr AAAA            # IPv6
dig exemple.fr MX              # Serveurs de messagerie
dig exemple.fr NS              # Serveurs de noms faisant autorité
dig exemple.fr TXT             # SPF, DKIM, vérifications diverses
dig exemple.fr SOA             # Informations de zone
dig exemple.fr CNAME           # Alias
dig exemple.fr ANY             # Tout (souvent refusé par les serveurs modernes)
dig @1.1.1.1 exemple.fr        # Interroger Cloudflare
dig @8.8.8.8 exemple.fr        # Interroger Google
dig -x 93.184.216.34           # Résolution inverse (PTR)

Lire la sortie

1
2
3
4
5
6
7
8
9
10
11
12
; <<>> DiG 9.18 <<>> exemple.fr
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;exemple.fr.            IN  A

;; ANSWER SECTION:
exemple.fr.     3600    IN  A   192.0.2.10

;; Query time: 24 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
  • status : NOERROR (succès), NXDOMAIN (domaine inexistant), SERVFAIL (erreur du serveur), REFUSED (requête refusée)
  • flags : qr = réponse, aa = réponse faisant autorité, rd = récursion demandée, ra = récursion disponible, ad = données authentifiées par DNSSEC
  • ANSWER SECTION : nom, TTL en secondes, classe, type, valeur
  • AUTHORITY / ADDITIONAL : serveurs faisant autorité et données complémentaires

Options utiles

Option Effet
+short Affiche seulement la valeur
+noall +answer Affiche seulement la section réponse
+trace Suit la résolution depuis les serveurs racine
+nocmd +nostats Retire l’en-tête et les statistiques
+tcp Force le TCP au lieu de l’UDP
+dnssec Demande les signatures DNSSEC (RRSIG)
+norecurse Désactive la récursion
+time=N / +tries=N Délai d’attente et nombre d’essais
+multiline Affiche les longs enregistrements (SOA, DNSKEY) de façon lisible
+https / +tls DNS-over-HTTPS / DNS-over-TLS (BIND 9.18 et plus)
-4 / -6 Force IPv4 ou IPv6 pour le transport
-p 5353 Port personnalisé
-f fichier Traite une liste de requêtes depuis un fichier

Cas pratiques

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# IP seule, pratique dans un script
dig +short exemple.fr

# Vérifier la propagation DNS sur plusieurs résolveurs
for s in 1.1.1.1 8.8.8.8 9.9.9.9; do echo "$s: $(dig @$s +short exemple.fr)"; done

# Interroger directement le serveur faisant autorité (contourne le cache)
dig @$(dig +short NS exemple.fr | head -1) exemple.fr

# Diagnostiquer une délégation cassée
dig +trace exemple.fr

# Vérifier l'enregistrement SPF ou DMARC
dig +short TXT exemple.fr
dig +short TXT _dmarc.exemple.fr

# Vérifier une clé DKIM
dig +short TXT selecteur._domainkey.exemple.fr

# Tenter un transfert de zone (doit normalement être refusé)
dig @ns1.exemple.fr exemple.fr AXFR

# Afficher le TTL restant dans le cache du résolveur
dig +noall +answer exemple.fr

Fichier de configuration

Vous pouvez enregistrer des options par défaut dans ~/.digrc, par exemple :

1
+noall +answer

Alternatives

  • nslookup : plus ancien et moins précis
  • host : sortie plus simple (host exemple.fr)
  • drill (ldns) et kdig (Knot) : équivalents modernes de dig
  • doggo / dog : versions modernes avec sortie colorée et prise en charge de DoH et DoT

Si par « développer » vous vouliez dire écrire votre propre version de dig (en Python, Go ou Rust, par exemple), dites-le-moi et je vous fournis une implémentation.