web-dev-qa-db-fra.com

Comment fonctionne réellement Dig + trace?

Lorsque je regarde la page de manuel de Dig, je reçois le texte suivant:

+[no]trace
  Toggle tracing of the delegation path from the root name servers for the name
  being looked up. Tracing is disabled by default. When tracing is enabled, Dig
  makes iterative queries to resolve the name being looked up. It will follow
  referrals from the root servers, showing the answer from each server that was
  used to resolve the lookup.

Alors, comment ça marche, en pratique? Quelle serait la série équivalente de commandes Dig (sans + trace) qui serait fonctionnellement équivalente?

14
Doktor J

Dig +trace fonctionne en prétendant que c'est un serveur de noms et en descendant dans l'arborescence de l'espace de noms à l'aide de requêtes itératives commençant à la racine de l'arborescence, en suivant les renvois en cours de route.

La première chose à faire est de demander au serveur DNS normal du système pour NS enregistrements pour "."

Après avoir reçu une réponse, qui sera la liste actuelle des serveurs de noms racine, il en choisira un, puis demandera l'enregistrement A pour ce nom s'il ne l'a pas reçu dans la section des enregistrements supplémentaires la première fois. une adresse IP à laquelle envoyer la requête suivante. Disons qu'il choisit f.root-servers.net dont l'adresse IP est 192.5.5.241.

À ce stade, utilisons Dig +trace www.google.co.uk. comme commande avec un nom de domaine pour lequel nous souhaitons tracer le chemin de résolution.

La prochaine requête en coulisse sera la suivante:

$ Dig +norecurse @192.5.5.241 www.google.co.uk

   ; <<>> Dig 9.9.4 <<>> +norecurse @192.5.5.241 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8962
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 11, ADDITIONAL: 15

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk.              IN      A

;; AUTHORITY SECTION:
uk.                     172800  IN      NS      ns5.nic.uk.
uk.                     172800  IN      NS      ns6.nic.uk.
uk.                     172800  IN      NS      ns4.nic.uk.
uk.                     172800  IN      NS      nsc.nic.uk.
uk.                     172800  IN      NS      ns2.nic.uk.
uk.                     172800  IN      NS      ns3.nic.uk.
uk.                     172800  IN      NS      nsd.nic.uk.
uk.                     172800  IN      NS      nsa.nic.uk.
uk.                     172800  IN      NS      ns7.nic.uk.
uk.                     172800  IN      NS      nsb.nic.uk.
uk.                     172800  IN      NS      ns1.nic.uk.

;; ADDITIONAL SECTION:
ns1.nic.uk.             172800  IN      A       195.66.240.130
ns2.nic.uk.             172800  IN      A       217.79.164.131
ns3.nic.uk.             172800  IN      A       213.219.13.131
ns4.nic.uk.             172800  IN      A       194.83.244.131
ns5.nic.uk.             172800  IN      A       213.246.167.131
ns6.nic.uk.             172800  IN      A       213.248.254.130
ns7.nic.uk.             172800  IN      A       212.121.40.130
nsa.nic.uk.             172800  IN      A       156.154.100.3
nsb.nic.uk.             172800  IN      A       156.154.101.3
nsc.nic.uk.             172800  IN      A       156.154.102.3
nsd.nic.uk.             172800  IN      A       156.154.103.3
ns1.nic.uk.             172800  IN      AAAA    2a01:40:1001:35::2
ns4.nic.uk.             172800  IN      AAAA    2001:630:181:35::83
nsa.nic.uk.             172800  IN      AAAA    2001:502:ad09::3

;; Query time: 45 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Tue Feb 11 19:19:14 MST 2014
;; MSG SIZE  rcvd: 507

Wow, nous savons maintenant qu'il existe des serveurs de noms pour uk et c'est la seule chose que le serveur racine connaisse. Ceci est une référence , car nous n'avons pas demandé de récursivité (+norecurse le désactive).

Génial, on rince et répète. Cette fois, nous choisissons l’un des serveurs de noms uk et lui posons la même question .

$ Dig +norecurse @195.66.240.130 www.google.co.uk

; <<>> Dig 9.9.4 <<>> +norecurse @195.66.240.130 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 618
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk.              IN      A

;; AUTHORITY SECTION:
google.co.uk.           172800  IN      NS      ns1.google.com.
google.co.uk.           172800  IN      NS      ns3.google.com.
google.co.uk.           172800  IN      NS      ns2.google.com.
google.co.uk.           172800  IN      NS      ns4.google.com.

;; Query time: 354 msec
;; SERVER: 195.66.240.130#53(195.66.240.130)
;; WHEN: Tue Feb 11 19:22:47 MST 2014
;; MSG SIZE  rcvd: 127

Génial, nous avons découvert que le serveur de noms uk de premier niveau savait qu'il existe une zone appelée google.co.uk et nous demandait d'aller poser notre question à ces serveurs de noms. Ceci est une autre référence.

Rincez, répétez.

Cette fois, cependant, nous n'avons pas obtenu d'enregistrements A dans la section des enregistrements supplémentaires de la réponse. Nous en avons donc choisi un, disons ns2.google.com, et nous devons aller chercher son adresse. Nous relançons une requête (à la racine à nouveau) et poursuivons l'arborescence pour rechercher l'adresse IP de ns2.google.com. Je vais sauter cette partie pour plus de brièveté, mais nous apprenons que l'adresse IP utilisée est 216.239.34.10.

Notre prochaine requête est donc:

$ Dig +norecurse @216.239.34.10 www.google.co.uk

; <<>> Dig 9.9.4 <<>> +norecurse @216.239.34.10 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33404
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.co.uk.              IN      A

;; ANSWER SECTION:
www.google.co.uk.       300     IN      A       74.125.225.216
www.google.co.uk.       300     IN      A       74.125.225.223
www.google.co.uk.       300     IN      A       74.125.225.215

;; Query time: 207 msec
;; SERVER: 216.239.34.10#53(216.239.34.10)
;; WHEN: Tue Feb 11 19:26:43 MST 2014
;; MSG SIZE  rcvd: 82

Et nous avons fini! (enfin) Comment savons-nous que nous avons fini? Nous avons reçu une réponse à notre requête, à savoir les enregistrements A pour www.google.co.uk. Vous pouvez également savoir, car ce n’est plus une référence, le bit aa est défini dans la dernière réponse, ce qui signifie qu’il s’agit de la réponse faisant autorité pour votre requête.

C'est donc ce qui se passe à chaque étape du processus lorsque vous utilisez Dig +trace.

Notez que si vous avez une version de Dig compatible avec DNSSEC et que vous ajoutez +dnssec à la commande, vous risquez de voir apparaître plusieurs enregistrements. Ce que sont ces enregistrements supplémentaires reste un exercice pour le lecteur ... mais nous expliquons comment fonctionne Dig +sigchase.

32
milli

Disons que vous leviez les yeux

www.domain.co.uk

Le DNS est une hiérarchie, commençant par les serveurs racine qui savent quels serveurs font autorité pour les TLD (la dernière partie du nom de domaine). Donc l'équivalent de

Dig subdomain.domain.co.uk

Pas à pas serait:

Dig SOA @g.root-servers.net uk

(c.-à-d. interrogez l'un des serveurs racine pour savoir qui fait autorité pour .uk)

Cela répond avec une série de serveurs britanniques faisant autorité, nous leur demandons donc qui a co.uk

Dig SOA @ns6.nic.uk co.uk

Et on nous dit que la SOA (autorité) se trouve sur les mêmes serveurs

Laisse donc la requête ns1.nic.uk pour voir qui a domain.co.uk

Dig SOA @ns1.nic.uk domain.co.uk

Cela revient et indique que l'autorité du domaine est située à l'adresse dns.dns1.de (plus les sauvegardes);

Alors maintenant, nous pouvons demander l'enregistrement A:

Dig  A @dns.dns2.de www.domain.co.uk

;; QUESTION SECTION:
;www.domain.co.uk.              IN      A

;; ANSWER SECTION:
www.domain.co.uk.       86400   IN      CNAME   domain.co.uk.
domain.co.uk.           86400   IN      A       95.130.17.36
1
Paul