5. Validation ou dépannage d'une configuration

Les sections précédentes sur les types de requêtes fournissent déjà quelques éléments sur la validation ou le dépannage du service DNS.

  • Le temps de réponse à une requête (Query time:) renseigne sur l'utilisation ou non du cache mémoire.

  • En cas de panne, une requête itérative permet d'identifier le point de rupture dans la chaîne de résolution des noms.

Il reste deux options particulièrement utiles à la mise au point d'une configuration correcte.

Il est possible de désigner explicitement le serveur DNS qui doit prendre en charge la requête à l'aide de son adresse IP. Cette opération est très utile pour vérifier qu'un serveur primaire répond correctement aux demandes sur les enregistrements qu'il détient. Dans le contexte de la sécurisation du service, cette même opération sert à contrôler qu'un serveur ne répond qu'au requêtes qu'il est sensé traiter. Voici deux exemples utilisant respectivement la désignation du serveur interrogé par son adresse IP et la requête directe de transfert de zone.

Pour vérifier que le service DNS de la zone nic.fr fournit l'adresse du serveur Web ayant le nom www.nic.fr, on peut procéder comme suit.

  • On identifie un serveur de nom pour la zone.

    $ dig ns nic.fr
    
    ; <<>> DiG 9.8.1-P1 <<>> ns nic.fr
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23937
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 11
    
    ;; QUESTION SECTION:
    ;nic.fr.                                IN      NS
    
    ;; ANSWER SECTION:
    nic.fr.                 176789  IN      NS      ns1.ext.nic.fr.
    nic.fr.                 176789  IN      NS      ns3.nic.fr.
    nic.fr.                 176789  IN      NS      ns1.nic.fr.
    nic.fr.                 176789  IN      NS      ns4.ext.nic.fr.
    nic.fr.                 176789  IN      NS      ns2.nic.fr.
    nic.fr.                 176789  IN      NS      ns6.ext.nic.fr.
    
    ;; ADDITIONAL SECTION:
    ns1.ext.nic.fr.         176789  IN      A       193.51.208.13
    ns1.nic.fr.             176789  IN      A       192.134.4.1
    ns1.nic.fr.             176789  IN      AAAA    2001:660:3003:2::4:1
    ns2.nic.fr.             176789  IN      A       192.93.0.4
    ns2.nic.fr.             176789  IN      AAAA    2001:660:3005:1::1:2
    ns3.nic.fr.             176789  IN      A       192.134.0.49
    ns3.nic.fr.             176789  IN      AAAA    2001:660:3006:1::1:1
    ns4.ext.nic.fr.         176789  IN      A       193.0.9.4
    ns4.ext.nic.fr.         176789  IN      AAAA    2001:67c:e0::4
    ns6.ext.nic.fr.         176789  IN      A       130.59.138.49
    ns6.ext.nic.fr.         176789  IN      AAAA    2001:620:0:1b:5054:ff:fe74:8780
    
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Sun Oct  7 23:09:40 2012
    ;; MSG SIZE  rcvd: 372
  • On interroge directement le serveur primaire de la zone.

    $ dig @ns1.nic.fr www.nic.fr
    
    ; <<>> DiG 9.8.1-P1 <<>> @ns1.nic.fr www.nic.fr
    ; (2 servers found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33946
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 11
    ;; WARNING: recursion requested but not available
    
    ;; QUESTION SECTION:
    ;www.nic.fr.                    IN      A
    
    ;; ANSWER SECTION:
    www.nic.fr.             172800  IN      CNAME   web.nic.fr.
    web.nic.fr.             172800  IN      A       192.134.4.20
    
    ;; AUTHORITY SECTION:
    nic.fr.                 172800  IN      NS      ns3.nic.fr.
    nic.fr.                 172800  IN      NS      ns6.ext.nic.fr.
    nic.fr.                 172800  IN      NS      ns4.ext.nic.fr.
    nic.fr.                 172800  IN      NS      ns1.nic.fr.
    nic.fr.                 172800  IN      NS      ns1.ext.nic.fr.
    nic.fr.                 172800  IN      NS      ns2.nic.fr.
    
    ;; ADDITIONAL SECTION:
    ns1.ext.nic.fr.         172800  IN      A       193.51.208.13
    ns1.nic.fr.             172800  IN      A       192.134.4.1
    ns1.nic.fr.             172800  IN      AAAA    2001:660:3003:2::4:1
    ns2.nic.fr.             172800  IN      A       192.93.0.4
    ns2.nic.fr.             172800  IN      AAAA    2001:660:3005:1::1:2
    ns3.nic.fr.             172800  IN      A       192.134.0.49
    ns3.nic.fr.             172800  IN      AAAA    2001:660:3006:1::1:1
    ns4.ext.nic.fr.         172800  IN      A       193.0.9.4
    ns4.ext.nic.fr.         172800  IN      AAAA    2001:67c:e0::4
    ns6.ext.nic.fr.         172800  IN      A       130.59.138.49
    ns6.ext.nic.fr.         172800  IN      AAAA    2001:620:0:1b:5054:ff:fe74:8780
    
    ;; Query time: 40 msec
    ;; SERVER: 2001:660:3003:2::4:1#53(2001:660:3003:2::4:1)
    ;; WHEN: Sun Oct  7 23:11:33 2012
    ;; MSG SIZE  rcvd: 410

    On voit apparaître une indication selon laquelle le serveur interrogé ne prendra pas en charge les requêtes récursives pour le client utilisé. C'est tout à fait normal dans la mesure où ces tests de requêtes ne sont pas effectués depuis un poste client appartenant au domaine nic.fr.

    Pour autant, on obtient bien la réponse à la requête posée puisque l'enregistrement demandé appartient bien à la zone sur laquelle le serveur a autorité.

  • On interroge directement le même serveur avec une requête portant sur une autre zone.

    $ dig @ns1.nic.fr www.phrack.org
    
    ; <<>> DiG 9.8.1-P1 <<>> @ns1.nic.fr www.phrack.org
    ; (2 servers found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 16990
    ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    ;; WARNING: recursion requested but not available
    
    ;; QUESTION SECTION:
    ;www.phrack.org.                        IN      A
    
    ;; Query time: 39 msec
    ;; SERVER: 2001:660:3003:2::4:1#53(2001:660:3003:2::4:1)
    ;; WHEN: Sun Oct  7 23:14:58 2012
    ;; MSG SIZE  rcvd: 32

    Cette fois-ci la requête est refusée. Le serveur primaire ne veut pas prendre en charge la requête posée. C'est encore tout à fait normal dans la mesure le client n'appartient pas aux réseaux de la zone nic.fr.

  • Certains services sont très «ouverts» et acceptent de prendre en charge les requêtes de n'importe quel client. La même requête posée à un de ces services est traitée normalement.

    $ dig @dns1.gaoland.net www.phrack.org
    
    ; <<>> DiG 9.8.1-P1 <<>> @dns1.gaoland.net www.phrack.org
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19478
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
    
    ;; QUESTION SECTION:
    ;www.phrack.org.                        IN      A
    
    ;; ANSWER SECTION:
    www.phrack.org.         86400   IN      A       120.138.19.103
    
    ;; AUTHORITY SECTION:
    phrack.org.             86400   IN      NS      ns1.register-it.net.
    phrack.org.             86400   IN      NS      ns2.register-it.net.
    
    ;; ADDITIONAL SECTION:
    ns1.register-it.net.    86395   IN      A       83.246.76.254
    ns2.register-it.net.    86395   IN      A       83.246.77.10
    
    ;; Query time: 48 msec
    ;; SERVER: 212.94.162.1#53(212.94.162.1)
    ;; WHEN: Sun Oct  7 23:17:38 2012
    ;; MSG SIZE  rcvd: 145

    Sous toute réserve, il semble bien que le fait de répondre aux requêtes de n'importe quel client ne corresponde pas aux bonnes pratiques sur la configuration du service DNS de nos jours.

    Dans le cadre de ces travaux pratiques, on veillera donc à n'autoriser les requêtes récursives qu'aux clients appartenant aux réseaux définis dans le plan d'adressage IP de l'énoncé.

La requête directe de transfert de zone permet de valider les autorisations d'échanges entre le serveur primaire et les autres serveurs ayant autorité sur la même zone.

Dans l'exemple de requête ci-dessous on interroge le serveur primaire à partir du serveur secondaire.

$ dig @172.16.80.1 axfr lan-213.stri

; <<>> DiG 9.8.1-P1 <<>> @172.16.80.1 axfr lan-213.stri
; (1 server found)
;; global options: +cmd
lan-213.stri.           86400   IN      SOA     casper.infra.stri. root.casper.infra.stri. 2012090701 28800 7200 604800 86400
lan-213.stri.           86400   IN      MX      0 mail.stri.
lan-213.stri.           86400   IN      NS      casper.infra.stri.
lan-213.stri.           86400   IN      NS      cooper.lan-213.stri.
alderaan.lan-213.stri.  86400   IN      A       172.16.80.10
amethyste.lan-213.stri. 86400   IN      A       172.16.80.5
anison.lan-213.stri.    86400   IN      A       172.16.80.23
bespin.lan-213.stri.    86400   IN      A       172.16.80.11
casper.lan-213.stri.    86400   IN      A       172.16.80.2
centares.lan-213.stri.  86400   IN      A       172.16.80.12
cooper.lan-213.stri.    86400   IN      A       172.16.80.1
coruscant.lan-213.stri. 86400   IN      A       172.16.80.13
dagobah.lan-213.stri.   86400   IN      A       172.16.80.14
endor.lan-213.stri.     86400   IN      A       172.16.80.15
felucia.lan-213.stri.   86400   IN      A       172.16.80.16
geonosis.lan-213.stri.  86400   IN      A       172.16.80.17
hoth.lan-213.stri.      86400   IN      A       172.16.80.18
kamino.lan-213.stri.    86400   IN      A       172.16.80.19
mustafar.lan-213.stri.  86400   IN      A       172.16.80.20
naboo.lan-213.stri.     86400   IN      A       172.16.80.21
perle.lan-213.stri.     86400   IN      A       172.16.80.6
tatooine.lan-213.stri.  86400   IN      A       172.16.80.22
topaze.lan-213.stri.    86400   IN      A       172.16.80.4
lan-213.stri.           86400   IN      SOA     casper.infra.stri. root.casper.infra.stri. 2012090701 28800 7200 604800 86400
;; Query time: 1 msec
;; SERVER: 172.16.80.1#53(172.16.80.1)
;; WHEN: Sun Oct  7 23:24:57 2012
;; XFR size: 24 records (messages 1, bytes 619)

Pour éviter une «recensement trop facile» de l'identité des hôtes d'une zone, il est essentiel de n'autoriser ces requêtes de transfert qu'entre serveurs DNS. Cette configuration du contrôle d'accès est présentée dans la Section 9, « Sécurisation de premier niveau ».