8. Lire et analyser une requête DNS

Couche application

Pour simplifier, on peut dire que le service Internet Domain Name System ou DNS fonctionne sur le même mode qu'un annuaire téléphonique dans lequel le numéro de téléphone est remplacé par l'adresse IP et le nom d'abonné est remplacé par le nom d'hôte.

DNS est un service de type client/serveur dont la fonction clé est la résolution entre des enregistrements et des adresses IP. Les enregistrements sont distribués entre les serveurs qui ont chacun autorité sur une partie de l'arborescence des noms de domaines.

Dans le contexte de ce document, on ne s'intéresse qu'à la partie cliente du service appelée resolver.

Comment visualiser la configuration du resolver ?

Généralement, la configuration du resolver d'un poste client est mise en place automatiquement grâce à des services tels que DHCP (Dynamic Host Configuration Protocol) ou RDNSS (Recursive DNS Server) et DNSSL (DNS Search List).

Sur les systèmes GNU/Linux, il existe des paquets tels que resolvconf qui gèrent dynamiquement la configuration du resolver en choisissant les paramètres en fonction des services d'autoconfiguration disponibles.

Voici une description des fichiers de configuration système qui jouent un rôle dans la résolution des noms de domaines. La liste des sources d'information puis l'ordre dans lequel on consulte ces sources sont les facteurs les plus importants.

/etc/resolv.conf

Le rôle de ce fichier est de désigner le serveur DNS qui doit prendre en charge les requêtes du système. Tout programme qui fait référence à un nom d'hôte sollicite cette ressource.

$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.0.2.1

Ici l'adresse IP du serveur DNS est 192.0.2.1. Dans un contexte domestique, on retrouve les mêmes informations via l'interface Web d'une «box ADSL».

/etc/nsswitch.conf

Le rôle du Name Service Switch dépasse le cadre de la simple résolution des noms d'hôtes. Tous les programmes font appel à la bibliothèque standard glibc. Lors des appels à cette bibliothèque, ce fichier est consulté pour connaître la liste des sources à utiliser.

$ grep ^hosts /etc/nsswitch.conf 
hosts:          files mdns_minimal [NOTFOUND=return] dns mdns

Dans l'exemple ci-dessus, la scrutation des sources débute avec les fichiers locaux, la version minimale du service multicast DNS, le service DNS tel que configuré dans le fichier ci-dessus et enfin le service multicast DNS.

La syntaxe '[NOTFOUND=return]', implique que si l'un des deux services qui suivent dans la liste déclare que l'hôte est introuvable, la recherche s'arrête là.

/etc/host.conf

Ce dernier fichier est présent pour des raisons de compatibilité avec les anciennes versions de la bibliothèque standard.

$ cat /etc/host.conf 
multi on

Comment analyser les résultats d'une requête DNS ?

Sur un système GNU/Linux, les deux commandes de référence sont dig et host. Elles servent à qualifier le bon fonctionnement du resolver sur le système en isolant le service DNS des autres traitements. Voici quelques exemples de requêtes.

Résolution complète d'un nom d'hôte

La question posée est : quelle sont les enregistrements DNS relatifs au nom de serveur Web www.nic.fr ?

$ host www.nic.fr
www.nic.fr is an alias for lb01-1.nic.fr.
lb01-1.nic.fr has address 192.134.5.24
lb01-1.nic.fr has IPv6 address 2001:67c:2218:30::24

Cet exemple illustre le fait que plusieurs questions ont été posées via la commande host puisque les adresses IPv4 et IPv6 ont été obtenues en retour.

Résolution simple d'un nom d'hôte

La question posée est : quelle est l'adresse IPv4 correspondant au nom de serveur Web www.nic.fr ?

$ dig +short www.nic.fr
lb01-1.nic.fr.
192.134.5.24
Résolution inverse d'une adresse IP

La question posée est : quel est le nom d'hôte correspondant à l'adresse IPv4 192.134.5.24 ?

$ dig +short -x 192.134.5.24
lb01-1.nic.fr.
Requête DNS complète sur un nom d'hôte
$ dig www.iana.org

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> www.iana.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60063
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:1
;www.iana.org.                  IN      A

;; ANSWER SECTION:2
www.iana.org.           600     IN      CNAME   ianawww.vip.icann.org.
ianawww.vip.icann.org.  30      IN      A       192.0.32.8

;; AUTHORITY SECTION:3
vip.icann.org.          3600    IN      NS      gtm1.dc.icann.org.
vip.icann.org.          3600    IN      NS      gtm1.lax.icann.org.

;; ADDITIONAL SECTION:4
gtm1.dc.icann.org.      21600   IN      A       192.0.47.252
gtm1.dc.icann.org.      21600   IN      AAAA    2620:0:2830:296::252
gtm1.lax.icann.org.     21600   IN      A       192.0.32.252
gtm1.lax.icann.org.     21600   IN      AAAA    2620:0:2d0:296::252

;; Query time: 562 msec5
;; SERVER: 192.0.2.1#53(192.0.2.1)6
;; WHEN: Thu Jan 30 10:37:46 2014
;; MSG SIZE  rcvd: 211

1

Le champ QUESTION reprend les termes de la requête DNS soumise au serveur.

2

Le champ ANSWER liste les éléments de réponse à la requête. Ici, le nom d'hôte www.iana.org est en fait un alias de ianawww.vip.icann.org. Cet alias a pour adresse IP : 192.0.32.8.

3

Le champ AUTHORITY donne la liste des serveurs de noms qui ont autorité sur les enregistrements DNS. Ce sont les seuls serveurs aptes à fournir une réponse aux requêtes sur le domaine concerné.

4

Le champ ADDITIONAL donne les adresses IP des serveurs DNS de référence du domaine.

5

Le champ Query time donne le temps de traitement de la requête. La valeur obtenue permet de déduire si le serveur interrogé a déjà la réponse en mémoire cache ou non.

6

Le champ SERVER identifie le serveur qui a pris la requête DNS en charge.

Pour aller plus loin dans l'étude du fonctionnement du service de noms de domaines, il est conseillé de lire le support Introduction au service DNS.