Wie funktioniert die DNS-Namensauflösung im Prinzip?

10

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.

linux8807
quelle
Ich habe nachgedacht dig +trace, bin mir aber nicht sicher, was unter Levels zu verstehen ist. Dies könnte eine Frage für Serverfehler sein.
Big McLargeHuge
Hallo linux8807. Ich habe Ihre Frage bearbeitet, um sie hoffentlich klarer zu machen. Insbesondere habe ich versucht, einen besseren Titel darauf zu setzen. Wenn Sie der Meinung sind, dass ich Ihre Absicht geändert habe, können Sie die Bearbeitung rückgängig machen (klicken Sie auf den Link "bearbeitet" und dann auf "Rollback" über der ursprünglichen Revision).
Ein Lebenslauf
Ich denke, dieses Video erklärt es: youtube.com/watch?v=2ZUxoi7YNgs

Antworten:

13

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.

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 der root-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 ARR? 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 Amit 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ösen maps.google.com.als maps.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. Angenommen a.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 Abis 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ält NSDatensä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 die com.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 eine comDomain daran, nur Nameserver zu haben. nlIn 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 aaFlag (maßgebliche Antwort) erhalten. Diese Antwort sagt Ihnen, wonach Sie fragen oder dass die von Ihnen angeforderte RR nicht vorhanden ist (entweder NXDOMAINoder NOERRORmit Datensätzen ohne Antwort). Halten Sie Ausschau nach Antworten wie SERVFAIL(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ückkehren SERVFAIL, schlagen Sie den Namensauflösungsprozess fehl und kehren SERVFAILSie 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 NSund IN A/ IN AAAARRs 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 +traceOption für das digDienstprogramm verwenden, das Teil von BIND ist, oder set debugin nslookup.

Es ist auch zu bedenken , dass einige RRtypes (vor allem NS, MXund ein paar anderen, auch, A6waren 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.

ein CVn
quelle
1
Ich denke, dass diese Antwort ganz im Einklang mit der Forderung des OP steht, die Konzepte und nicht nur das Verfahren zu verstehen.
111 ---
Also grabe ich maps.google.com IN A, dann würde ich genauso graben, aber mit ns1.google.com, wenn das richtig ist, wenn das so ist, über welche Ebenen spricht der Lehrer und warum sollten sie gebraucht werden?
Linux8807
@ linux8807 Sie würden digfü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.
Ein Lebenslauf
@ MichaelKjörling Alle ns1-4.google.com-Datensätze haben eine IP-Adresse in den Kleberdatensätzen. i.imgur.com/o79aIGB.png
linux8807
@ linux8807 Dies ist sehr häufig der Fall, wenn sich die Klebedatensätze unter derselben TLD befinden wie die Domäne, nach der abgefragt wird. Sie können nicht vertrauen auf sie im allgemeinen Fall jedoch.
Ein Lebenslauf
7

Es gibt einen dnstracerBefehl (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) verwenden dig.

Hier ist mit dnstracer. -s .bedeutet, mit der Wurzel zu beginnen; -4bedeutet, IPv4 zu verwenden (v6 ist hier kaputt ...); -obedeutet, die aufgelösten IP-Adressen am Ende tatsächlich anzuzeigen (ich habe diesen Teil der Ausgabe weggelassen, es gibt viele davon).

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

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 digist die Ausgabe viel ausführlicher (also werde ich viel schneiden):

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

digZeigt 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.

derobert
quelle
Ich könnte nichts installieren, da es in einem Terminal eingerichtet ist, aber sobald ich von der Arbeit nach Hause komme, werde ich den dnstracer ausprobieren und prüfen, ob das funktioniert, und sie fragt nach * (216.239.38.10) (216.239.36.10) ( 216.239.32.10) (216.239.34.10) * dies? Wenn ja, bin ich in gewissem Sinne bereits in der Lage, darauf zuzugreifen, aber nicht mit einer maßgeblichen Antwort. Bezieht sie sich auch auf diese Ebenen?
Linux8807
@ linux8807 Sie können verwenden, digwenn Sie nicht haben dnstracer(oder wenn Sie digdie 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.
derobert