J'ai une question apparemment simple mais je n'ai pas pu trouver la réponse à cette question précisément après une recherche:
Je sais que, si je veux rechercher l'adresse IP d'un nom de domaine, je tape, par exemple:
nslookup google.de
et obtenir
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: google.de
Address: 172.217.18.3
Cependant, je ne sais pas d'où j'ai obtenu cette réponse. Pour autant que je sache au début, mon résolveur essaie de demander à mon serveur DNS local (qui est sur Ubuntu dnsmasq) et si celui-ci n'a pas la réponse, il demande au serveur suivant et ainsi de suite. Mais je veux savoir quel serveur exact avait finalement la réponse. Est-ce possible?
J'ai aussi essayé
Dig +trace www.google.com
qui fournit toutes les informations sur les serveurs émis mais effectue une recherche entièrement itérative. Je voudrais essentiellement une réponse comme ça, mais avec une recherche normale.
Je veux savoir quel serveur exact avait finalement la réponse. Est-ce possible?
Ce n'est pas réalisable. Vous ne trouverez pas le serveur faisant autorité spécifique qui a été consulté nommé n'importe où dans la charge utile d'une réponse DNS. Il existe des requêtes CHAOS qui visent à identifier le serveur récursif spécifique qui vous a répondu, mais aucun équivalent pour extraire le nom du serveur faisant autorité dont un récurseur a obtenu les données.
Le Q&A StackOverflow auquel Phillip a lié fournit des instructions sur la façon d'identifier la liste des enregistrements NS
qui étaient présents dans la section d'autorité d'une réponse DNS récursive. C'est la liste complète des serveurs, pas le serveur spécifique. Même si elles étaient suffisantes pour vos utilisations, ces informations sont considérées comme facultatives par les normes DNS et il est de plus en plus rare de les voir dans des réponses récursives afin de réduire la taille de la charge utile des attaques par réflexion de source interne.
Si vous connaissez le nom de la zone, vous pouvez demander la liste complète des enregistrements NS
via une demande explicite pour eux. Cela nécessite de savoir que vous êtes au sommet de la zone; une demande de example.com
NS renverront la réponse souhaitée mais www.example.com
ne le sera pas, sauf si www
a été délégué à un autre ensemble de serveurs. Dans ce cas, vous n'avez pas d'autre choix que de travailler en arrière de manière itérative jusqu'à ce que vous découvriez le sommet de la zone.
Pour faire court, il n'y a pas de chemin court fiable (c'est-à-dire une seule requête) pour obtenir des informations sur tout l'autorité en amont d'un serveur récursif, et il y a no moyen d'apprendre le serveur faisant autorité spécifique qui a répondu à une requête sans également contrôler le serveur faisant autorité et créer des données uniques sur chaque serveur. (si vous faites cela, veuillez créer une zone unique à cet effet afin qu'elle n'interfère pas avec vos transferts de zones de production plus sensibles)
en bref, nslookup définit le type de requête sur SOA
une seule ligne:
nslookup -querytype=soa google.de
nslookup -d2 -type=ANY google.de
nslookup -d2 -type=ANY google.de 8.8.8.8
recherchez: serveur de noms principal
command line> nslookup
> set querytype=soa
> google.de
Server: google-public-dns-a.google.com
Address: 8.8.8.8
Non-authoritative answer:
google.de
primary name server = ns2.google.com
responsible mail addr = dns-admin.google.com
serial = 160093636
refresh = 900 (15 mins)
retry = 900 (15 mins)
expire = 1800 (30 mins)
default TTL = 60 (1 min)
>
MODIFIER:
On me dit que l'enregistrement SOA n'est peut-être pas la meilleure méthode. Qu'il peut même ne pas être défini correctement. Ainsi, l'enregistrement NS aurait été un meilleur choix:
Où se trouve le serveur nameserver
pour le domaine ...
nslookup -type=NS google.de
Ou avec beaucoup d'informations de débogage pour trouver le nameserver
nslookup -d2 -type=NS google.de
Lorsque vous utilisez Dig
dans la réponse par défaut, vous aurez l'IP du serveur de noms répondant, qui devrait être le serveur de noms récursif configuré dans votre système (/etc/resolv.conf
généralement).