web-dev-qa-db-fra.com

DIG + TRACE est-il toujours précis?

Lorsque la précision d'un cache DNS est en question, Dig +trace a tendance à être la manière recommandée de déterminer la réponse faisant autorité pour un enregistrement DNS sur Internet. Cela semble être particulièrement utile lorsqu'il est également associé à +additional, qui montre également les enregistrements de colle.

De temps en temps, il semble y avoir un certain désaccord sur ce point - certaines personnes disent que cela s'appuie sur le résolveur local pour rechercher les adresses IP des serveurs de noms intermédiaires, mais la sortie de commande n'offre aucune indication que cela se produit au-delà de la liste initiale de la racine. noms de noms. Il semble logique de supposer que cela ne serait pas le cas si le but de +trace est de démarrer sur les serveurs racines et de vous retrouver. (au moins si vous avez la bonne liste de noms de noms de racine)

Fait Dig +trace Utilisez vraiment le résolveur local pour que quelque chose a passé les serveurs de noms de racine?

30
Andrew B

Ceci est évidemment un Q & A mis en scène, mais cela tend à confondre souvent les gens et je ne trouve pas une question canonique couvrant le sujet.

Dig +trace est un excellent outil de diagnostic, mais un aspect de sa conception est largement mal compris: L'adresse IP de chaque serveur qui sera interrogée est obtenue à partir de votre bibliothèque de résolveur. Ceci est très facilement négligé et finit souvent seulement de devenir un problème lorsque votre cache local a le faux Réponse pour un serveur de noms de noms de noms de noms.


Analyse détaillée

Cela est plus facile à décomposer avec un échantillon de la sortie; Je omettrai tout au-delà du premier NS Délégation.

; <<>> Dig 9.7.3 <<>> +trace +additional serverfault.com                                                                      

;; global options: +cmd
.                   121459  IN      NS      d.root-servers.net.
.                   121459  IN      NS      e.root-servers.net.
.                   121459  IN      NS      f.root-servers.net.
.                   121459  IN      NS      g.root-servers.net.
.                   121459  IN      NS      h.root-servers.net.
.                   121459  IN      NS      i.root-servers.net.
.                   121459  IN      NS      j.root-servers.net.
.                   121459  IN      NS      k.root-servers.net.
.                   121459  IN      NS      l.root-servers.net.
.                   121459  IN      NS      m.root-servers.net.
.                   121459  IN      NS      a.root-servers.net.
.                   121459  IN      NS      b.root-servers.net.
.                   121459  IN      NS      c.root-servers.net.
e.root-servers.net. 354907  IN      A       192.203.230.10
f.root-servers.net. 100300  IN      A       192.5.5.241
f.root-servers.net. 123073  IN      AAAA    2001:500:2f::f
g.root-servers.net. 354527  IN      A       192.112.36.4
h.root-servers.net. 354295  IN      A       128.63.2.53
h.root-servers.net. 108245  IN      AAAA    2001:500:1::803f:235
i.root-servers.net. 355208  IN      A       192.36.148.17
i.root-servers.net. 542090  IN      AAAA    2001:7fe::53
j.root-servers.net. 354526  IN      A       192.58.128.30
j.root-servers.net. 488036  IN      AAAA    2001:503:c27::2:30
k.root-servers.net. 354968  IN      A       193.0.14.129
k.root-servers.net. 431621  IN      AAAA    2001:7fd::1
l.root-servers.net. 354295  IN      A       199.7.83.42
;; Received 496 bytes from 75.75.75.75#53(75.75.75.75) in 10 ms

com.                        172800  IN      NS      m.gtld-servers.net.
com.                        172800  IN      NS      k.gtld-servers.net.
com.                        172800  IN      NS      f.gtld-servers.net.
com.                        172800  IN      NS      g.gtld-servers.net.
com.                        172800  IN      NS      b.gtld-servers.net.
com.                        172800  IN      NS      e.gtld-servers.net.
com.                        172800  IN      NS      j.gtld-servers.net.
com.                        172800  IN      NS      c.gtld-servers.net.
com.                        172800  IN      NS      l.gtld-servers.net.
com.                        172800  IN      NS      d.gtld-servers.net.
com.                        172800  IN      NS      i.gtld-servers.net.
com.                        172800  IN      NS      h.gtld-servers.net.
com.                        172800  IN      NS      a.gtld-servers.net.
a.gtld-servers.net. 172800  IN      A       192.5.6.30
a.gtld-servers.net. 172800  IN      AAAA    2001:503:a83e::2:30
b.gtld-servers.net. 172800  IN      A       192.33.14.30
b.gtld-servers.net. 172800  IN      AAAA    2001:503:231d::2:30
c.gtld-servers.net. 172800  IN      A       192.26.92.30
d.gtld-servers.net. 172800  IN      A       192.31.80.30
e.gtld-servers.net. 172800  IN      A       192.12.94.30
f.gtld-servers.net. 172800  IN      A       192.35.51.30
g.gtld-servers.net. 172800  IN      A       192.42.93.30
h.gtld-servers.net. 172800  IN      A       192.54.112.30
i.gtld-servers.net. 172800  IN      A       192.43.172.30
j.gtld-servers.net. 172800  IN      A       192.48.79.30
k.gtld-servers.net. 172800  IN      A       192.52.178.30
l.gtld-servers.net. 172800  IN      A       192.41.162.30
;; Received 505 bytes from 192.203.230.10#53(e.root-servers.net) in 13 ms
  • La requête initiale pour . IN NS (noms de noms de racine) frappe le résolveur local, lequel dans ce cas est COMAST. (75.75.75.75) C'est facile à repérer.
  • La prochaine requête est pour serverfault.com. IN A et fonctionne contre e.root-servers.net., sélectionné au hasard dans la liste des serveurs de noms de racine que nous venons de recevoir. Il a une adresse IP de 192.203.230.10, et puisque nous avons +additional activé IT apparaît pour venir de la colle.
  • Comme il n'est pas faisant autorité pour serverfault.com, cela se déléguait à la com. TLD de noms de noms.
  • Ce qui n'est pas évident de la production ici est que Dig n'a pas dérivé l'adresse IP de e.root-servers.net. de la colle.

À l'arrière-plan, c'est ce qui s'est passé vraiment:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
02:03:43.301022 IP 192.0.2.1.59900 > 75.75.75.75.53: 63418 NS? . (17)
02:03:43.327327 IP 75.75.75.75.53 > 192.0.2.1.59900: 63418 13/0/14 NS k.root-servers.net., NS l.root-servers.net., NS m.root-servers.net., NS a.root-servers.net., NS b.root-servers.net., NS c.root-servers.net., NS d.root-servers.net., NS e.root-servers.net., NS f.root-servers.net., NS g.root-servers.net., NS h.root-servers.net., NS i.root-servers.net., NS j.root-servers.net. (512)
02:03:43.333047 IP 192.0.2.1.33120 > 75.75.75.75.53: 41110+ A? e.root-servers.net. (36)
02:03:43.333096 IP 192.0.2.1.33120 > 75.75.75.75.53: 5696+ AAAA? e.root-servers.net. (36)
02:03:43.344301 IP 75.75.75.75.53 > 192.0.2.1.33120: 41110 1/0/0 A 192.203.230.10 (52)
02:03:43.344348 IP 75.75.75.75.53 > 192.0.2.1.33120: 5696 0/1/0 (96)
02:03:43.344723 IP 192.0.2.1.37085 > 192.203.230.10.53: 28583 A? serverfault.com. (33)
02:03:43.423299 IP 192.203.230.10.53 > 192.0.2.1.37085: 28583- 0/13/14 (493)

+trace Triché et consulté le résolveur local pour obtenir l'adresse IP du prochain serveur de noms de hop au lieu de consulter la colle. Sournois!

Ceci est généralement "assez bon" et ne posera pas de problème pour la plupart des gens. Malheureusement, il y a des cas de bord. Si, pour une raison quelconque, votre cache DNS en amont fournit une mauvaise réponse du serveur de noms, ce modèle se décompose entièrement.

Exemple de monde réel:

  • domaine expire
  • la colle est réparée aux serveurs de noms de redirection du registraire
  • bogus ips sont mis en cache pour NS1 et NS2.Yourdomaine.com
  • le domaine est renouvelé avec une colle restaurée
  • toute mise en cache avec le Bogus Nameerver IPS continue d'envoyer des personnes à un site Web indiquant que le domaine est à vendre

Dans le cas ci-dessus, +trace suggérera que les détenteurs de noms de noms du propriétaire du domaine sont à la source du problème et que vous appelez à l'abri de manière incorrecte à un client que leurs serveurs sont mal configurés. Que ce soit quelque chose que vous pouvez (ou êtes prêt à) faire quelque chose à propos d'une autre histoire, mais il est important d'avoir la bonne information.

Dig +trace est un excellent outil, mais comme n'importe quel outil, vous devez savoir ce qu'il fait et ne le fait pas et comment résoudre le problème manuellement lorsque cela s'avère insuffisant.


Éditer:

Il convient également de noter que Dig +trace ne vous avertira pas de NS enregistrements qui pointent sur CNAMEaliases. Il s'agit d'une violation RFC qui est liée (et éventuellement d'autres) ne tentera pas de corriger. +trace sera complètement heureux d'accepter l'enregistrement A It It It It Gets à partir de votre serveur de noms configuré localement, alors que si la liaison devait effectuer une récursion complète, elle rejeterait la zone entière avec un servfail.

Cela peut être difficile à résoudre si la colle est présente; Cela fonctionnera simplement bien jusqu'à ce que les enregistrements NS enregistrements soient actualisés , puis brisez soudainement. Des délégations sans gluë seront TOUJOURS Récursion de la liaison quand un NS points d'enregistrement dans un alias.

27
Andrew B

Très tard à ce fil, mais je pense que la question de la question de savoir pourquoi une trace de DIG + utilise des requêtes récursives aux résolvers locales n'a pas été expliquée directement et cette explication est pertinente pour la précision des résultats de Dig + Trace.

Après la requête récursive initiale pour les NS enregistrements de la zone racine, puis creuser peut émettre des requêtes ultérieures aux résolveurs locaux dans les conditions suivantes:

  1. une réponse de référence est tronquée en raison de la taille de la réponse supérieure à 512 octets pour la prochaine requête itérative

  2. DIG sélectionne un NS enregistrement de la section Autorité de la réponse de référence pour laquelle le record d'un correspondant (colle) est manquant dans la section supplémentaire

Étant donné que DIG n'a qu'un nom de domaine à partir de NS enregistrement, DIG doit résoudre le nom à une adresse IP en interrogeant le serveur DNS local. Ceci est la cause première (jeu de mots destiné à désolé).

Andrewb a un exemple qui n'est pas entièrement consonant avec ce que je viens de décrire, dans la zone racine NS enregistrement choisi:

. 121459 IN NS e.root-servers.net.

a un enregistrement correspondant:

e.root-servers.net. 354907 IN A 192.203.230.10

Notez toutefois qu'il n'y a pas d'enregistrement AAAA correspondant pour la racine électronique, ainsi qu'aucun enregistrement AAAA pour d'autres serveurs racines.

Aussi, notez la taille de la réponse:

;; Received 496 bytes from 75.75.75.75#53(75.75.75.75) in 10 ms

496 octets est une taille courante pour les réponses tronquées (c'est-à-dire l'enregistrement de colle suivant aurait été de> 16 octets, mettant la réponse sur 512 octets). En d'autres termes, dans une requête pour le NS enregistrements de racine, une autorité complète et complète (AAAA enregistrements supplémentaires) dépassera 512 octets, donc toute requête basée sur UDP qui ne fait pas Spécifiez une plus grande taille de requête via EDNS0 Options aura une réponse qui est coupée quelque part dans la section supplémentaire, car les émissions de trace ci-dessus (uniquement F, H, I, J et K ont des enregistrements de colle A et AAAA).

L'absence d'un enregistrement AAAAA pour e.root-servers.net et la taille de la réponse au "NS". La requête suggère fortement que la prochaine requête récursive a été faite pour la raison pour laquelle je prétends. Peut-être que le client O/S est capable IPv6 et préfère les enregistrements AAAA - ou une autre raison.

Mais dans tous les cas, après avoir lu ce fil, j'ai examiné le phénomène de DIG + TRACE effectuant des requêtes récursives à la suite de la première pour la racine. La correspondance entre sélectionner un NS enregistrement sans une collecte A/AAAA correspondante et DIG puis envoyant une requête récursive pour cet enregistrement sur le DNS local est de 100%, de mon expérience. Et l'inverse est VRAI - Je n'ai pas vu des requêtes récursives lorsque le NS enregistrement sélectionné à partir de la référence a un enregistrement de colle correspondant.

0
Binky