Wie wird die DNS-Suchreihenfolge bestimmt?

20

Beispiel: Wir haben den Domainnamen domain.com registriert und Nameserver-Einträge auf dem Registrarserver hinzugefügt:
ns1.domain.com.
ns2.domain.com.
ns3.domain.com.

Dann suchen wir nach domain.com . Wir bekommen alle 3 Nameserver Adressen.
1. Welcher dieser Server wird weiter abgefragt und warum?
2. Ist die Reihenfolge der NS-Einträge in der Zonendatei von Bedeutung?
3. Wird es in einem RFC ermittelt ?

Vitaly Kuznetsov
quelle

Antworten:

20

Leider lautet die Antwort hier "es kommt darauf an". Die Faktoren, von denen es abhängt, hängen von der Domäne und der Einrichtung der besitzenden Server sowie der Einrichtung Ihres eigenen lokalen DNS ab.

Zunächst zum Beispiel zu den zurückgegebenen NS-Datensätzen: Die Reihenfolge, in der diese Datensätze zurückgegeben werden, kann beliebig gewählt werden, sodass die Reihenfolge bei jeder Anforderung unterschiedlich sein kann. Da dies jedoch nicht bei allen DNS-Implementierungen der Fall ist, erhalten Sie möglicherweise eine statisch geordnete Liste. Der Punkt ist, dass Sie nicht sicher sein können.

Als Nächstes fragen einige DNS-Implementierungen jeden NS parallel ab und verwenden denjenigen, der zuerst antwortet. Andere schlagen jeweils zu, ermitteln über eine bestimmte Anzahl von Anforderungen die schnellste und verwenden diese. Oder es könnte nur ein Round-Robin sein.

Es gibt mehrere RFCs für DNS. Zwei der nützlicheren, die ich gefunden habe, sind:

http://www.faqs.org/rfcs/rfc1912.html

http://www.faqs.org/rfcs/rfc1033.html

Mir ist klar, dass dies eine Art Nicht-Antwort ist, ohne dass Sie etwas Bestimmtes wegnehmen müssen. Angesichts der obigen Ausführungen müssen Sie das Verhalten für eine bestimmte Domain jedoch nur testen.

Adam C
quelle
Ich habe Ihre Antwort gebilligt. Ich wollte dasselbe sagen, aber du hast mich geschlagen.
Tonny
Auch Clients, die getaddrinfo verwenden, erhalten sortierte Ergebnisse, während Aufrufe von gethostbyname scheinbar zufällig waren. Kunden, die dieses Verhalten nicht erwarten, brechen daher in mancher Hinsicht Round-Robin-DNS ab.
Matt
5

Die häufigste Implementierung, die ich auf Client-Ebene gesehen habe, wie z. B. die ISPs auf der ganzen Welt, lautet wie folgt:

  1. Jemand (wie ein Breitbandteilnehmer) bittet die DNS-Server des Internetdienstanbieters, den A-Eintrag für foo.example.com aufzulösen.
  2. Der Internetdienstanbieter überprüft seinen eigenen Cache. Wenn dieser Datensatz zwischengespeichert und immer noch als "frisch" eingestuft wird, wird er sofort über den Cache zurückgegeben. ( So funktionieren alle DNS-Caches, damit die DNS-Server der betreffenden Site nicht unnötig belastet werden. )
  3. Wenn der Datensatz nicht zwischengespeichert wurde oder der Cache als "veraltet / veraltet" eingestuft wird, weiß der Internetdienstanbieter, dass der neueste Datensatz erneut aufgelöst werden muss.
  4. Nun muss der ISP wissen, welche Nameserver den neuesten Datensatz abfragen sollen.
  5. Der ISP überprüft zunächst die zwischengespeicherte Liste der autorisierenden Nameserver für die Domain (dies sind ns1.example.com, ns2.example.com usw. zusammen mit ihren IP-Adressen). Wenn diese Datensätze noch als frisch angesehen werden, wird mit Schritt 8 fortgefahren.
  6. Wenn die zwischengespeicherten Nameserver-Einträge als abgelaufen angesehen wurden oder keine zwischengespeicherten Einträge für diese Domäne vorhanden waren, fragt der ISP die Root-Nameserver der TLD (z. B. die .com-Registrierung, wenn es sich um eine .com-Domäne handelt) ab, um die zu erhalten Die aktuellsten Nameserver Name / IP Paare für example.com. ( Sie können dies selbst über "dig @ b.gtld-servers.net example.com" versuchen, um zu sehen, was die Root-Nameserver für Ihre TLD über Ihre Domain wissen - wenn Ihre Domain zu den üblichen com / net / etc-TLDs gehört. Andere TLDs müssten ihre jeweiligen Root-Server abfragen. )
  7. Der Root - Nameserver für die TLD immer gibt den Name - Server in der genauen Reihenfolge sie von Ihnen angegeben wurden; Es findet keine Randomisierung statt. Sie geben auch die IPs für jeden Nameserver zurück. Dies ist als "GLUE" bekannt und ermöglicht es dem Internet, das "Chicken and Egg" -Problem zu lösen, bei dem es darum geht, einen Nameserver-Hostnamen in eine IP-Adresse aufzulösen, bevor überhaupt etwas über eine Domain bekannt ist. Darüber hinaus verwenden die meisten von ihnen (wie die com / net / etc-Registries, die die größten sind) eine Cache-Zeit von 2 Tagen, damit sie nicht ständig mit "Was ist die Liste der Nameserver für Domain X?" Anfragen. Dies ist die Quelle des Allgemeinwissens, dass Sie 2 Tage warten MÜSSEN, bis Sie sicher sagen können, dass Ihre neuen Nameserver weltweit bekannt sind, nachdem Sie
  8. Wenn der ISP die Nameserver von example.com und ihre IPs kennt, wie z. B. ns1.example.com, ns2.example.com, ns3.example.com, wählt der ISP nun einen zufälligen Server aus dieser Liste aus und sendet die Abfrage ab. ( Das ist nett von ihnen, sie hämmern nicht unnötigerweise alle DNS-Server der fraglichen Site und sie helfen weiter beim Lastausgleich, indem sie nicht immer den ersten aufgelisteten Nameserver abfragen. )
  9. Wenn der ISP innerhalb eines festgelegten Zeitraums keine Antwort von diesem Nameserver erhält, fragt er einen anderen in der Liste ab.
  10. Wenn es eine Antwort hat, speichert der ISP diese nun in seinem eigenen lokalen Cache. Wie lange wird es zwischengespeichert bleiben? Mit jedem Datensatz, der von einem DNS-Server zurückgegeben wird, ist auch eine "weiche Ablaufzeit" (in Sekunden) verknüpft. Dies gibt an, wie lange der abfragende Client (z. B. der DNS-Server des Internetdienstanbieters) diesen Datensatz zwischenspeichern darf, bevor er berücksichtigt wird. " noch verwendbar, aber möglicherweise veraltet, sollte jetzt eine neue Abfrage erfolgen, WENN MÖGLICH, nur um sicherzugehen, dass sich nichts geändert hat. " Es gibt auch eine "harte Ablaufzeit", die im "SOA" -Datensatz (Start of Authority) jedes einzelnen Nameservers angegeben ist (Sie können Ihre über "dig @ ns1.example.com example.com -t soa" anzeigen) gibt ein globales "festes Limit" für alle von diesem Server zurückgegebenen Datensätze an, Danach SOLLTE EIN Cache DEN zwischengespeicherten Datensatz AUCH LÖSCHEN, WENN die Nameserver ausgefallen sind und es unmöglich ist, die Datensätze erneut nachzuschlagen. Normalerweise beträgt der weiche Verfall 30 Minuten bis 5 Stunden und der harte Verfall 1-3 Wochen.
  11. Nach diesem umfassenden Job hat der ISP endlich den neuesten DNS-Eintrag und kann ihn an den abfragenden Breitband-Abonnenten zurücksenden. Kein Wunder, dass hinter den Kulissen ein riesiger Job stattgefunden hat!

Dieser Vorgang wird für JEDE Datensatzsuche wiederholt. Nur die erste Abfrage erledigt jedoch den gesamten Job. Danach werden die Nameserver-IPs zwischengespeichert, und nachfolgende Abfragen an den DNS-Cache-Server des Internetdienstanbieters können schnell zu Schritt 8 übergehen.

Was nun die Randomisierung von Schritt 8 betrifft, so funktioniert dies auf Rekordebene. Angenommen, der Breitband-Abonnent dieses Internetdienstanbieters hat nach den folgenden Aufzeichnungen gefragt:

  • Ein foo.example.com
  • Ein example.com
  • Ein www.example.com
  • MX example.com (ein ISP-Kunde sollte nicht nach diesem Datensatz fragen, aber es ist nur ein Beispiel)

Jeder Datensatz wird als eigene "Entität" behandelt, unabhängig zwischengespeichert und nachgeschlagen. Nehmen wir also an, der Abonnent und der ISP sind noch nie zuvor auf die Domain gestoßen, und beide haben vollständig keine zwischengespeicherten Datensätze. Die Suchanfragen könnten wie folgt lauten:

  • Ein foo.example.com über ns1.example.com, das dann im ISP-Cache gespeichert wird
  • Ein example.com über ns3.example.com, das dann im ISP-Cache gespeichert wird
  • Ein www.example.com über ns2.example.com, das dann im ISP-Cache gespeichert wird
  • MX example.com über ns3.example.com, dann im ISP-Cache gespeichert

Immer wenn die zwischengespeicherten Datensätze vorübergehend abgelaufen sind, wird der Vorgang wiederholt, sodass Sie nicht einmal wissen, dass nachfolgende Anforderungen für diesen Datensatz denselben Server erneut verwenden.

Es ist daher Ihr höchstes Ziel, sicherzustellen, dass alle Ihre DNS-Server vollständig miteinander synchronisiert sind und jeden DNS-Eintrag auf jedem Server perfekt widerspiegeln . Sie wissen nie , auf welchen Server ein DNS-Client zugreifen wird, und können sich auf keinerlei Reihenfolge verlassen. Es gibt keine solche Sache.

Wie von Adam C erwähnt, könnten die DNS-Server auf Serverebene (example.com) selbst NS-Einträge zurückgeben und deren Reihenfolge nach dem Zufallsprinzip bestimmen. Bei normalen DNS-Servern kommt es häufig vor, dass sie ihre NS-Einträge zufällig auswählen, da es unwahrscheinlich ist, dass eine schlechte DNS-Implementierung immer den ersten zurückgegebenen Nameserver auswählt. Die zuvor erwähnten ROOT TLD-Nameserver werden die Liste jedoch niemals zufällig sortieren, und ihre Liste ist das, was für die Auflösung der Domäne wirklich wichtig ist. Aus diesem Grund wählen die meisten Implementierungen einen zufälligen Server aus den Nameserver-Listen aus, um zu vermeiden, dass immer derselbe Server erreicht wird und dieser überlastet wird.

Okay, das ist Ihre Grundlage für die Funktionsweise von DNS und für das, woran Sie sich erinnern sollten.

  • Kurz gesagt: Behandeln Sie alle Ihre DNS - Server , als ob sie Server nur eine waren, es Ihr höchstes Ziel im Leben zu machen , um sicherzustellen , dass sie alle gleich sind in der Lage zu beantworten jede Abfrage , die auf sie geworfen werden könnten.

Haftungsausschluss: Höhere Lebensziele als die Verwaltung von DNS sind möglicherweise verfügbar, werden jedoch separat verkauft. Verwenden Sie Ihre Vorstellungskraft. ;-)

DELETEDACC
quelle