En ce moment, je prends un cours en ligne pour l'administrateur système Linux et on m'a posé une question que je ne comprends généralement pas. Je sais comment rechercher un serveur de noms, si j'ai raison, au moins, il utilise la commande dig pour trouver l'adresse dans la commande de section supplémentaire, mais je me suis un peu perdu quand on m'a posé la question suivante.
En supposant que votre serveur de noms configuré ne dispose pas de résultats mis en cache, combien de serveurs de noms votre serveur de noms doit-il interroger pour résoudre maps.google.com? Quelle (s) commande (s) utiliseriez-vous pour trouver tous ces serveurs de noms? Énumérez-en un de chaque niveau et expliquez pourquoi ce niveau est nécessaire.
Je ne veux pas de réponse, je voudrais juste savoir ce qu'on me demande de faire exactement.
dig +trace
, mais je ne suis pas sûr de ce que l'on entend par niveaux. Cela pourrait être une question pour Server Fault.Réponses:
Eh bien, choisissons celui-ci à part.
"En supposant que votre serveur de noms configuré n'a pas de résultats mis en cache à sa disposition" - tout d'abord, s'il n'a aucune donnée en cache, il ne peut rien résoudre. Afin d'amorcer le cache du résolveur, vous devez disposer des enregistrements NS et d'adresse (A, AAAA) pour la zone
.
(racine AKA). Ce sont les serveurs de noms racine, qui se trouvent dans laroot-servers.net.
zone. Il n'y a rien de magique dans cette zone ou ces serveurs DNS. Cependant, ces données sont souvent fournies «hors bande» au résolveur DNS, précisément pour amorcer le cache du résolveur. Les serveurs de noms faisant uniquement autorité n'ont pas besoin de ces données, mais les serveurs de noms de résolution en ont besoin.Aussi, "résoudre" quoi? Un RRtype à ce nom? Un
A
RR? Ou autre chose? Quelle classe (CH
/ Chaosnet,IN
/ Internet, ...)? Le processus exact sera différent, mais l'idée générale reste la même.Si nous pouvons supposer que nous savons comment trouver les serveurs de noms racine, mais rien de plus, et que par «résoudre», nous entendons obtenir le contenu de tous les
IN A
RR associés au nom, cela devient beaucoup plus pratique.Pour résoudre un nom DNS, vous divisez essentiellement le nom en étiquettes, puis vous progressez de droite à gauche. N'oubliez pas le
.
à la fin; vous résoudriez vraimentmaps.google.com.
plutôt quemaps.google.com
. Cela nous laisse avec le besoin de résoudre (nous le savons, mais une implémentation de résolveur DNS ne le fera probablement pas):.
com.
google.com.
maps.google.com.
Commencez par trouver où demander le contenu de
.
. C'est facile; nous avons déjà cette information: les noms de serveur racine et les adresses IP . Nous avons donc un serveur de noms racine. Disons que nous décidons d'utiliser 198.41.0.4 (a.root-servers.net
, également 2001: 503: ba3e :: 2: 30) pour continuer la résolution de nom. Dans la pratique, l'une des premières choses effectuées par le résolveur sera probablement d'utiliser les données du serveur racine fournies pour demander à l'un des serveurs de la zone racine une liste précise des serveurs de noms pour la zone racine, garantissant ainsi que si l'un des les noms et adresses IP sont valides et accessibles, ils auront un ensemble complet et complet de données pour la zone racine lorsque la résolution commencera.Arrêtez une requête DNS pour
maps.google.com. IN A
198.41.0.4. Il vous dira en réponse "non, je ne vais pas le faire, mais voici quelqu'un qui pourrait savoir"; c'est une référence. Il contient desNS
enregistrements pour la zone la plus proche connue du serveur en question, ainsi que tous les enregistrements de colle dont le serveur dispose. Si aucune donnée de collage n'est disponible, vous devez d'abord résoudre cet hôte nommé dans l'enregistrement NS que vous avez choisi, donc créez une résolution de nom distincte pour obtenir l'adresse IP; si des données de collage sont disponibles, vous aurez l'adresse IP d'un serveur de noms qui est au moins "plus proche" de la réponse. Dans ce cas, ce sera l'ensemble des serveurs de lacom.
zone, et les données de collage sont également fournies.Répétez le processus en posant
com.
la même question à l' un des serveurs de noms. Ils ne le savent pas non plus, mais vous orienteront vers les serveurs de noms faisant autorité de Google. À ce stade, dans le cas général, les données de colle seront fournies ou non; rien n'empêche uncom
domaine d'avoir des serveurs de noms uniquementnl
, par exemple, auquel cas il est peu probable que les données de collage soient disponibles à partir des serveurs gTLD. Les données de colle fournies peuvent également être incomplètes, ou si vous n'avez vraiment pas de chance, elles peuvent même être incorrectes! Vous devez toujours être prêt à engendrer cette résolution de nom distincte que j'ai mentionnée ci-dessus.Fondamentalement, vous continuez jusqu'à ce que vous obteniez une réponse avec l'
aa
indicateur (réponse faisant autorité) défini. Cette réponse vous dira ce que vous demandez, ou que le RR que vous avez demandé n'existe pas (non plusNXDOMAIN
, ouNOERROR
avec des enregistrements de données à réponse zéro). Continuez à chercher des réponses commeSERVFAIL
(et reculez d'une étape et essayez un autre serveur si vous en obtenez un; si tous les serveurs nommés reviennentSERVFAIL
, échouez au processus de résolution de nom et revenezSERVFAIL
vous-même au client).L'alternative à la demande du RRname complet de chaque serveur (ce qui pourrait être considéré comme une mauvaise pratique) consiste à utiliser la liste des étiquettes divisée que nous avons déterminée précédemment, à demander aux serveurs de noms donnés par le serveur plus loin vers la racine des
IN NS
etIN A
/IN AAAA
RR pour cette étiquette, et utilisez-les pour faire avancer le processus de résolution de nom. Ce n'est que légèrement différent dans la pratique, et le même processus s'applique toujours.Vous pouvez simuler l'ensemble de ce processus en utilisant l'
+trace
option de l'dig
utilitaire, qui fait partie de BIND, ouset debug
dansnslookup
.Il convient également de se rappeler que certains types de RR (notamment
NS
,MX
et quelques autres; également, ontA6
été raisonnablement bien utilisés pendant un certain temps mais ont été déconseillés) peuvent et font référence à d'autres RR. Dans ce cas, vous devrez peut-être générer un autre processus de résolution de noms pour donner une réponse complète et utile à votre client.la source
dig
saisir le nom ns1.google.com une fois que vous avez reçu une référence à celui-ci qui n'inclut pas d'adresse IP dans les enregistrements de collage fournis. Ensuite, vous poursuivriez le processus de résolution de nom précédent.Il y a une
dnstracer
commande (vous devrez peut-être l'installer, au moins sur Debian, c'est aussi le nom du paquet) qui tracera la résolution des noms. Vous pouvez également (comme le souligne Koveras dans un commentaire) utiliserdig
.Voici avec dnstracer.
-s .
signifie commencer par la racine;-4
moyens d'utiliser IPv4 (la v6 est cassée ici ...);-o
signifie afficher les adresses IP résolues à la fin (j'ai omis cette partie de la sortie, il y en a beaucoup).Cette sortie continue, car dnstracer trace tous les chemins (vous pouvez donc voir si, par exemple, certains des serveurs de noms ont une zone obsolète).
Ainsi, vous pouvez voir qu'il faut une requête au serveur de noms racine, puis une aux serveurs gtld (le serveur de la zone .com), la dernière à un serveur de noms Google.
Avec
dig
, la sortie est beaucoup plus verbeuse (donc je vais faire beaucoup de découpage):dig
montre en outre qu'il a effectué une requête pour obtenir la liste actuelle des serveurs de noms racine. C'est quelque chose qu'un serveur DNS fait généralement très rarement. Donc, je ne sais pas si vous le comptez dans votre cas de cache froid.Vous pouvez bien sûr aussi regarder les requêtes réelles sur le fil avec, par exemple,
wireshark
.la source
dig
si vous n'en avez pasdnstracer
(ou si vous aimezdig
le formatage de). Les adresses IP générées par dnstracer sont les adresses IP des serveurs de noms; leurs noms sont à gauche. a.root-servers.net est 198.41.0.4, etc. Ce sont les serveurs interrogés, et il vous indique également pour quelle zone entre crochets. Je soupçonne que le premier niveau est * .root-servers.net (pour.
), le deuxième est * .gtld-servers.net (pour.com
), etc.