Warum enthalten NS-Records keine IP-Adressen?

18

Der Zweck eines NS-Eintrags besteht darin, dem Client mitzuteilen, welcher Nameserver die tatsächliche IP-Adresse für einen Domainnamen sicher kennt. Die folgende Abfrage besagt beispielsweise, dass Sie Folgendes facebook.comfragen müssen, um eine verbindliche Antwort zu erhalten a.ns.facebook.com:

> dig ns facebook.com                                                                                                                                       19:58:27

; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> ns facebook.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32063
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;facebook.com.          IN  NS

;; ANSWER SECTION:
facebook.com.       65000   IN  NS  a.ns.facebook.com.
facebook.com.       65000   IN  NS  b.ns.facebook.com.

;; Query time: 13 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Sun Mar 20 19:58:40 CET 2016
;; MSG SIZE  rcvd: 65

Dies scheint cool und nützlich, aber ich frage mich, warum der ANSWERAbschnitt den Hostnamen und nicht die IP der maßgeblichen Quelle enthält? Wäre es nicht einfacher für den Client, die tatsächliche IP-Adresse der autorisierenden Quelle und nicht den Hostnamen zu ermitteln?

Ich meine, wenn es den Hostnamen bekommt, muss es eine weitere Abfrage machen, um diesen Hostnamen in eine IP aufzulösen, und dann diese neue IP nach der ursprünglichen facebook.comDomain fragen, nach der es gesucht hat. Ist das nicht ineffizient?

Mich würde eine Antwort interessieren, die mich auf einige Absätze in einem RFC verweist, die dieses Problem erklären.

Pawelmhm
quelle
"Das erklärt dieses Problem." welcher? Meinen Sie eine zusätzliche Abfrage?
ALex_hha
yeah @ALex_hha Ich meine zusätzliche Abfrage
Pawelmhm

Antworten:

17

Die Lösung des Problems sind DNS-Leimdatensätze, die unter Was ist ein Leimdatensatz? Beschrieben werden . .

RFC 1035 Abschnitt 3.3.11 besagt

Msgstr "... Beachten Sie, dass die Klasse möglicherweise nicht die Protokollfamilie angibt, mit der" mit dem Host kommuniziert werden soll, obwohl dies in der Regel ein starker Hinweis ist. "

Das Zurückgeben einer IP-Adresse ist gleichbedeutend mit der Angabe der Methode, mit der der Host kontaktiert werden kann, was gegen den RFC verstößt.

Jason Martin
quelle
Vielen Dank, Jason. Wenn ein NS-Datensatz eine IP enthalten würde, würde dies auf eine Protokollfamilie hinweisen, und RFC verbietet dies, ist das richtig? Bedeutet dies, dass der Client bei DNS-Abfragen verschiedene Protokollfamilien verwenden kann? Ich dachte, es kann nur UDP / TCP verwenden?
Pawelmhm
5
Die Protokollfamilie bezieht sich auf IPv4, IPv6
sendmoreinfo
Wenn Sie wissen, dass die Frage ein Duplikat ist, sollten Sie sie als solche kennzeichnen, da Sie nicht abstimmen können, um sie als Duplikat zu schließen.
user9517 unterstützt GoFundMonica
3
Ich denke, der RFC verwendet "darf nicht" im Sinne von "darf nicht", nicht im Sinne eines Verbots. (Es ist älter als RFC2119, das diese Art von Sprache standardisiert, um Mehrdeutigkeiten zu reduzieren.)
David
37

Jason hat den DNS-Mechanismus bereitgestellt, der das von Ihnen beschriebene Problem umgeht. Wir haben jedoch noch nicht untersucht, warum dies so ist.

Nehmen wir an, ich example.combesitze Content und habe einen Teil meiner Website-Inhalte an eine Content-Lieferfirma namens Contoso vergeben . Ihre Plattform erfordert, dass wir an sub.example.comihre Nameserver delegieren , damit sie steuern können, welche Antworten zurückgegeben werden.

; SOA and MX omitted from this example
$ORIGIN example.com.

@           IN      NS            ns1
@           IN      NS            ns2

; delegate sub.example.com to Contoso's nameservers
sub         IN      NS            ns1.cdn.contoso.com.
sub         IN      NS            ns2.cdn.contoso.com.

; this is ours, not Contoso's
www         IN      A             198.51.100.1

Wie Sie bereits bemerkt haben, haben wir die IP-Adressen der Contoso-Nameserver nicht angegeben. Alles, was unser Server weiß, ist, dem Internet mitzuteilen, "wir verwalten nicht sub.example.com, sondern fragen stattdessen Contoso" . Das ist sehr wichtig, weil:

  • Contoso.com gehört uns nicht.
  • Wir können nicht erwarten, dass Contoso eine Änderung der Nameserver-IPs mit allen Kunden koordiniert. Genau das müsste passieren, wenn unser Server diese IPs bereitstellen würde.

So weit, ist es gut. Ein Jahr vergeht, und ohne unser Wissen ändert Contoso die IP-Adressen seiner CDN-Nameserver. Da DNS so funktioniert, müssen sie nur die ADatensätze aktualisieren, die sie für ns1.cdnund zurückgeben ns2.cdn.contoso.com..

Dies bringt uns zu einem wichtigen Punkt: Die von Jason beschriebenen Leimaufzeichnungen existieren, um "Huhn und Ei" -Szenarien im DNS zu behandeln, beispielsweise google.comum der Welt mitzuteilen, dass ihre Nameserver ns1.google.comund sind ns2.google.com. Sie sollten niemals Verbindungsdatensätze erstellen, die auf eine Infrastruktur verweisen, die Sie nicht besitzen, es sei denn, diese existieren, um ein Problem wie das folgende zu lösen:

@           IN      NS            ns1
@           IN      NS            ns2

; delegate sub.example.com to ns1 and ns2.sub.example.com
sub         IN      NS            ns1.sub
sub         IN      NS            ns2.sub

; provide the IP addresses of ns1 and ns2 so that nameservers
; on the internet can find them.
;
; these IP addresses are owned by Contoso, not us, and they must
; coordinate changes to these IPs with us
ns1.sub     IN       A            203.0.113.10
ns1.sub     IN       A            203.1.113.10

Dies vermeidet das Henne-Ei-Szenario, macht es aber auch so, dass Contoso jede IP-Änderung dieser Nameserver mit uns abstimmen muss . Dies ist sehr riskant und unerwünscht.

Andrew B
quelle
Ah, das macht sehr viel Sinn, wenn die Nameserver nicht selbst gehostet sind.
Jason Martin