Im Moment nehme ich an einem Online-Kurs für Linux-Systemadministrator teil und mir wurde eine Frage gestellt, die ich im Allgemeinen nicht verstehe. Ich weiß, wie man nach einem Nameserver sucht. Wenn ich richtig bin, verwendet er zumindest den Befehl dig, um die im zusätzlichen Abschnitt angegebene Adresse zu finden, aber ich habe mich etwas verlaufen, als mir die folgende Frage gestellt wurde.
Angenommen, Ihr konfigurierter Nameserver verfügt über keine zwischengespeicherten Ergebnisse. Wie viele Nameserver muss Ihr Nameserver abfragen, um maps.google.com aufzulösen? Mit welchen Befehlen würden Sie alle diese Nameserver finden? Listen Sie eine von jeder Ebene auf und erklären Sie, warum diese Ebene benötigt wird.
Ich möchte die Antwort nicht, ich möchte nur wissen, was ich genau tun soll.
dig +trace
, bin mir aber nicht sicher, was unter Levels zu verstehen ist. Dies könnte eine Frage für Serverfehler sein.Antworten:
Nun, lassen Sie uns dieses auseinander nehmen.
"Vorausgesetzt, Ihr konfigurierter Nameserver verfügt über keine zwischengespeicherten Ergebnisse" - Wenn er überhaupt keine zwischengespeicherten Daten hat, kann er zunächst nichts auflösen. Um den Cache des Resolvers zu füllen, benötigen Sie die NS- und Adressdatensätze (A, AAAA) für die
.
Zone (AKA root). Das sind die Root-Nameserver, die sich in derroot-servers.net.
Zone befinden. Diese Zone oder diese DNS-Server haben nichts Magisches. Diese Daten werden dem DNS-Resolver jedoch häufig "außerhalb des Bandes" zur Verfügung gestellt, um den Cache des Resolvers zu aktivieren. Nur autorisierende Nameserver benötigen diese Daten nicht, das Auflösen von Nameservern jedoch.Auch "auflösen", was? Irgendein RR-Typ mit diesem Namen? Eine
A
RR? Oder etwas anderes? Welche Klasse (CH
/ Chaosnet,IN
/ Internet, ...)? Der genaue Prozess wird anders sein, aber die allgemeine Idee bleibt dieselbe.Wenn wir davon ausgehen können, dass wir wissen, wie man die Root-Nameserver findet, aber nicht mehr, und dass wir mit "Auflösen" den Inhalt aller
IN A
mit dem Namen verknüpften RRs abrufen, wird dies viel praktischer.Um einen DNS-Namen aufzulösen, teilen Sie den Namen grundsätzlich in Labels auf und arbeiten sich dann von rechts nach links vor. Vergiss das
.
am Ende nicht; Sie würden wirklich eher lösenmaps.google.com.
alsmaps.google.com
. Das lässt uns eine Lösung brauchen (wir wissen das, aber eine DNS-Resolver-Implementierung wird es wahrscheinlich nicht):.
com.
google.com.
maps.google.com.
Beginnen Sie damit, herauszufinden, wo Sie nach dem Inhalt von fragen können
.
. Das ist leicht; Wir haben bereits diese Informationen: die Namen der Root-Nameserver und die IP-Adressen . Wir haben also einen Root-Nameserver. Angenommena.root-servers.net
, wir verwenden 198.41.0.4 ( ebenfalls 2001: 503: ba3e :: 2: 30), um die Namensauflösung fortzusetzen. In der Praxis wird einer der ersten Schritte des Resolvers wahrscheinlich darin bestehen, die bereitgestellten Root-Server-Daten zu verwenden, um einen der Root-Zone-Server nach einer genauen Liste der Nameserver für die Root-Zone zu fragen, um sicherzustellen, dass einer der Server vorhanden ist Die Namen und IP-Adressen sind gültig und erreichbar. Zu Beginn der Auflösung enthält es einen vollständigen Datensatz für die Stammzone.Schießen Sie eine DNS-Abfrage für
maps.google.com. IN A
bis 198.41.0.4 ab. Es wird Ihnen als Antwort sagen: "Nein, ich werde es nicht tun, aber hier ist jemand, der es vielleicht weiß." Das ist eine Überweisung. Es enthältNS
Datensätze für die nächstgelegene Zone, die dem betreffenden Server bekannt ist, sowie alle Klebesätze, die dem Server zufällig zur Verfügung stehen. Wenn keine Klebedaten verfügbar sind, müssen Sie zuerst den Host auflösen, der in dem von Ihnen ausgewählten NS-Datensatz angegeben ist. Erstellen Sie daher eine separate Namensauflösung, um die IP-Adresse zu erhalten. Wenn Klebedaten verfügbar sind, haben Sie die IP-Adresse eines Nameservers, die mindestens "näher" an der Antwort liegt. In diesem Fall sind dies die Server für diecom.
Zone, und es werden auch Klebedaten bereitgestellt.Wiederholen Sie den Vorgang und stellen Sie einem der
com.
Nameserver dieselbe Frage. Sie wissen es auch nicht, verweisen Sie jedoch auf die maßgeblichen Nameserver von Google. An diesem Punkt wird im allgemeinen Fall getroffen oder verfehlt, ob Klebedaten bereitgestellt werden oder nicht; Nichts hindert einecom
Domain daran, nur Nameserver zu haben.nl
In diesem Fall ist es unwahrscheinlich, dass Klebedaten von den gTLD-Servern verfügbar sind. Die bereitgestellten Kleberdaten sind möglicherweise auch unvollständig, oder wenn Sie wirklich Pech haben, sind sie möglicherweise sogar falsch! Sie müssen immer bereit sein, diese separate Namensauflösung zu erzeugen, die ich oben erwähnt habe.Grundsätzlich machen Sie so lange weiter, bis Sie eine Antwort mit dem
aa
Flag (maßgebliche Antwort) erhalten. Diese Antwort sagt Ihnen, wonach Sie fragen oder dass die von Ihnen angeforderte RR nicht vorhanden ist (entwederNXDOMAIN
oderNOERROR
mit Datensätzen ohne Antwort). Halten Sie Ausschau nach Antworten wieSERVFAIL
(und ziehen Sie sich einen Schritt zurück und versuchen Sie es mit einem anderen Server, wenn Sie einen erhalten. Wenn alle benannten Server zurückkehrenSERVFAIL
, schlagen Sie den Namensauflösungsprozess fehl und kehrenSERVFAIL
Sie zum Client zurück).Die Alternative zum Abfragen des vollständigen RR-Namens von jedem Server (was als schlechte Vorgehensweise angesehen werden kann) besteht darin, die zuvor ermittelte Aufteilungsliste der Labels zu verwenden und die vom Server angegebenen Nameserver weiter in Richtung Stamm für
IN NS
undIN A
/IN AAAA
RRs zu fragen für dieses Etikett und verwenden Sie diese, um den Prozess der Namensauflösung voranzutreiben. Das ist in der Praxis nur unwesentlich anders, und der gleiche Prozess gilt immer noch.Sie können diesen gesamten Prozess simulieren, indem Sie die
+trace
Option für dasdig
Dienstprogramm verwenden, das Teil von BIND ist, oderset debug
innslookup
.Es ist auch zu bedenken , dass einige RRtypes (vor allem
NS
,MX
und ein paar anderen, auch,A6
waren vernünftig für eine Weile gut genutzt , aber sind veraltet) tun können und Referenz andere RRs. In diesem Fall müssen Sie möglicherweise einen weiteren Prozess zur Namensauflösung starten , um Ihrem Kunden eine vollständige und nützliche Antwort zu geben.quelle
dig
für den Namen ns1.google.com einen Verweis darauf erhalten, der keine IP-Adresse in den bereitgestellten Kleberdatensätzen enthält. Dann würden Sie mit dem vorherigen Namensauflösungsprozess fortfahren.Es gibt einen
dnstracer
Befehl (möglicherweise müssen Sie ihn installieren, zumindest unter Debian, das ist auch der Paketname), der die Namensauflösung verfolgt. Sie können auch (wie Koveras in einem Kommentar hervorhebt) verwendendig
.Hier ist mit dnstracer.
-s .
bedeutet, mit der Wurzel zu beginnen;-4
bedeutet, IPv4 zu verwenden (v6 ist hier kaputt ...);-o
bedeutet, die aufgelösten IP-Adressen am Ende tatsächlich anzuzeigen (ich habe diesen Teil der Ausgabe weggelassen, es gibt viele davon).Diese Ausgabe wird fortgesetzt, da dnstracer alle Pfade verfolgt (sodass Sie sehen können, ob beispielsweise einige der Nameserver eine veraltete Zone haben).
Sie sehen also, dass eine Abfrage an den Root-Nameserver, dann eine an die gtld-Server (den Server für die .com-Zone) und schließlich eine an einen Google-Nameserver gesendet werden muss.
Mit
dig
ist die Ausgabe viel ausführlicher (also werde ich viel schneiden):dig
Zeigt außerdem an, dass eine Abfrage durchgeführt wurde, um die aktuelle Liste der Root-Nameserver abzurufen. Dies ist etwas, was ein DNS-Server normalerweise sehr selten tut. Ich bin mir also nicht sicher, ob Sie es in Ihrem Cold-Cache-Fall zählen.Sie können natürlich auch die eigentlichen Abfragen auf der Leitung mit z
wireshark
.quelle
dig
wenn Sie nicht habendnstracer
(oder wenn Siedig
die Formatierung mögen ). Die IP-Adressen, die dnstracer ausgibt, sind die IP-Adressen der Nameserver. ihre Namen sind auf der linken Seite. a.root-servers.net ist 198.41.0.4 usw. Dies sind die Server, die abgefragt werden, und es wird in eckigen Klammern angegeben, für welche Zone. Ich vermute, die erste Ebene ist * .root-servers.net (für.
), die zweite ist * .gtld-servers.net (für.com
) usw.