Dig + trace est-il toujours précis?

Lorsque la précision d'un cache DNS est en question, la dig +trace tend à être la manière recommandée de déterminer la réponse autorisée pour un enregistrement DNS face à l'Internet. Cela semble être particulièrement utile lorsqu'il est également associé à +additional , ce qui montre également les enregistrements de colle.

Parfois, il semble y avoir un désaccord sur ce point – certaines personnes disent qu'elles reposent sur le résolveur local pour rechercher les adresses IP des serveurs de noms intermédiaires, mais la sortie de la commande n'indique pas que cela se passe au-delà de la liste initiale de la racine Serveurs de noms. Il semble logique de supposer que ce ne serait pas le cas si le but de +trace est de commencer sur les serveurs racine et de suivre votre chemin vers le bas. (Au moins si vous avez la bonne liste de serveurs de noms racine)

Does dig +trace utilise-t-il vraiment le résolveur local pour tout ce qui est passé par les serveurs de noms racine?

2 Solutions collect form web for “Dig + trace est-il toujours précis?”

Il s'agit évidemment d'une Q & A mise en scène, mais cela tend à confondre souvent les gens et je ne peux pas trouver une question canonique sur 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 interrogé est obtenue à partir de votre bibliothèque de résolveurs . Ceci est très facilement négligé et souvent ne finit par devenir un problème lorsque votre cache local a la mauvaise réponse pour un serveur de noms mis en cache.


Analyse détaillée

C'est plus facile à décomposer avec un échantillon de sortie; J'arrêterai tout après la première délégation NS.

 ; <<>> 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 . IN NS (root nameservers) frappe le résolveur local, qui dans ce cas est Comcast. ( 75.75.75.75 ) C'est facile à repérer.
  • La prochaine requête concerne serverfault.com. IN A serverfault.com. IN A et fonctionne contre e.root-servers.net. , Sélectionnés au hasard dans la liste des serveurs de noms racine que nous venons de recevoir. Il a une adresse IP de 192.203.230.10 , et comme nous avons +additional activée, cela semble provenir de la colle.
  • Comme il n'est pas autorisé pour serverfault.com, cela devient délégué à la com. TLD nameservers.
  • Ce qui n'est pas évident à partir de la sortie ici, c'est que la dig n'a pas dérivé l'adresse IP de e.root-servers.net. De la colle.

En arrière-plan, c'est ce qui s'est réellement passé:

 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 sauts au lieu de consulter la colle. Sournois!

C'est généralement «assez bon» et ne causera aucun problème à la plupart des gens. Malheureusement, il existe des cas de bord. Si, pour quelque raison que ce soit, votre cache DNS en amont fournit une mauvaise réponse pour le serveur de noms, ce modèle se décompose entièrement.

Exemple du monde réel:

  • Le domaine expire
  • La colle est remplacée par des serveurs de noms de redirection d'enregistreurs
  • Les fausses adresses IP sont mises en cache pour ns1 et ns2.yourdomain.com
  • Le domaine est renouvelé avec une colle restaurée
  • Tous les caches avec les IP de serveur de noms faux continuent d'envoyer des personnes à un site Web qui dit que le domaine est en vente

Dans le cas ci-dessus, +trace suggère que les propriétaires de noms propres du propriétaire de domaine sont à l'origine du problème et vous êtes à l'écart d'indiquer incorrectement à un client que ses serveurs sont mal configurés. Que ce soit quelque chose que vous pouvez (ou que vous désirez) de faire est une autre histoire, mais il est important d'avoir les bonnes informations.

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


Modifier:

Il convient également de noter que dig +trace ne vous avertit pas des enregistrements NS qui indiquent les alias CNAME . Il s'agit d'une violation de la RFC que ISC BIND (et peut-être d'autres) ne tentera pas de corriger. +trace sera complètement heureux d'accepter l'enregistrement A qu'il obtient de votre serveur de noms configuré localement, alors que si BIND devait effectuer une récursion complète, il rejetterait la zone entière avec un SERVFAIL.

Cela peut être délicat pour résoudre si la colle est présente; Cela fonctionnera bien jusqu'à ce que les enregistrements NS soient rafraîchis , puis se cassent soudainement. Les délégations sans gluten vont toujours casser la récurrence de BIND lorsqu'un enregistrement NS pointe sur un alias.

Une autre façon de tracer la résolution DNS sans utiliser le résolveur local pour tout autre chose que la recherche des serveurs de noms racine, utilise dnsgraph (divulgation complète: j'ai écrit ceci). Il dispose d'un outil de ligne de commande et d'une version web, dont vous pouvez trouver une instance à http://ip.seveas.net/dnsgraph/

Exemple pour serverfault.com, qui présente actuellement un problème de DNS:

Entrez la description de l'image ici

  • Sous-domaine DreamHost hôte sur DigitalOcaen
  • Système de files Windows et son problème de vitesse
  • Suppression sécurisée des files sur Linux Journaled Filesystem
  • Que faut-il pour qu'un server de noms soit enregistré?
  • Sauvegarde incrémentielle du système de files - idéalement sans time d'arrêt pour le site Web
  • Comment déchiffrer en toute security un file d'un RAID 6?
  • synchronisation en time réel pour les servers partageant les files
  • Tout système de files de version disponible comme VMS avait l'habitude d'avoir
  • Version automatisée du système FileSystem sur (Linux) Server
  • Permet l'access RDP à Azure VM après Sysprep
  • La meilleure façon d'empêcher le remplissage du système racine lorsqu'un assembly échoue?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.