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?
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.
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
. 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.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.com.
TLD de noms de noms.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:
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 CNAME
aliases. 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.
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:
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
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.