Wenn ich die Hosts example.com
und leaf.intermediate.example.com
DNS-Einträge für habe example.com
, aber keine Einträge für sich intermediate.example.com
selbst habe, verursacht dies in einigen Situationen ein Problem oder ist es aus irgendeinem Grund ein schlechter Stil oder eine schlechte Etikette? Ich habe Webserver so eingerichtet und alles scheint gut zu funktionieren, wollte aber nur prüfen, ob etwas fehlt.
27
Antworten:
TL; DR: Ja, Zwischendomänen müssen vorhanden sein, zumindest wenn sie gemäß der Definition des DNS abgefragt werden. Sie sind jedoch möglicherweise nicht in der Zonendatei vorhanden.
Eine mögliche Verwirrung zuerst zu beseitigen; Definition von "Empty Non-Terminal"
Sie können zwei Dinge verwirren, da andere Antworten ebenfalls zu tun scheinen. Was passiert, wenn Sie nach Namen fragen, und wie konfigurieren Sie Ihren Nameserver und den Inhalt des Zonefiles?
Das DNS ist hierarchisch. Damit ein Blattknoten existiert, MÜSSEN alle zu ihm führenden Komponenten existieren, in dem Sinne, dass der zuständige autorisierende Nameserver auf diese Komponenten ohne Fehler antworten muss, wenn sie abgefragt werden.
Wie in RFC 8020 erläutert (dies ist nur eine Wiederholung der Regel, aber nur einige DNS-Anbieter benötigten eine Erinnerung), antwortet ein autorisierender Nameserver bei jeder Abfrage auf NXDOMAIN (dh, dieser Ressourceneintrag ist nicht vorhanden). dann bedeutet dies, dass auch keine Bezeichnung "unterhalb" dieser Ressource vorhanden ist.
In Ihrem Beispiel, wenn eine Abfrage für
intermediate.example.com
ErträgeNXDOMAIN
, dann ist jeder richtiger rekursiven Name - Server wird sofort antwortenNXDOMAIN
fürleaf.intermediate.example.com
, weil dieser Satz nicht existieren kann , wenn alle Etikett in es existieren nicht als Datensätze.Dies wurde bereits in der Vergangenheit im RFC 4592 über Wildcards (die hier nicht zusammenhängen) angegeben:
Ein praktisches Beispiel für .US-Domainnamen
Nehmen wir ein funktionierendes Beispiel von einer TLD mit vielen Labels, also historisch gesehen
.US
. Wenn Sie ein Beispiel online auswählen, verwenden wir eswww.teh.k12.ca.us
.Natürlich, wenn Sie nach diesem Namen fragen, oder sogar
teh.k12.ca.us
Sie könnenA
Datensätze zurückbekommen . Für unseren Zweck hier nichts Bestimmtes (es gibt sogar einen CNAME in der Mitte, aber das interessiert uns nicht):Fragen wir jetzt nach
k12.ca.us
(Ich frage nicht den autorisierenden Nameserver davon ab, aber das ändert nichts an dem tatsächlichen Ergebnis):Was lernen wir aus dieser Antwort?
Erstens ist es ein Erfolg, weil der Status ist
NOERROR
. Wenn es irgendetwas war anders und speziellNXDOMAIN
dannteh.k12.ca.us
, nochwww.teh.k12.ca.us
existieren könnte.Zweitens ist der Abschnitt ANTWORT leer. Es gibt keine
A
Aufzeichnungen fürk12.ca.us
. Dies ist kein Fehler. Dieser Typ (A
) existiert nicht für diesen Datensatz. Möglicherweise gibt es jedoch andere Datensatztypen für diesen Datensatz. Oder dieser Datensatz ist eine HNO-Datei, auch bekannt als "Empty Non Terminal": Er ist leer, aber kein Blatt. Es gibt Dinge "darunter" (siehe Definition in RFC 7719) ), wie wir bereits wissen (aber normalerweise ist die Auflösung von oben nach unten, also werden wir diesen Schritt erreichen, bevor wir eine Ebene darunter gehen und nicht das Gegenteil, wie wir es hier zu Demonstrationszwecken tun Zweck).Aus diesem Grund wird als Abkürzung der Statuscode folgendermaßen angegeben
NODATA
: Dies ist kein echter Statuscode, sondern bedeutet lediglichNOERROR
+ leerer Abschnitt ANTWORT. Dies bedeutet, dass für diesen bestimmten Datensatztyp keine Daten vorhanden sind, für andere möglicherweise jedoch Daten.Sie können dasselbe Experiment für dasselbe Ergebnis wiederholen, wenn Sie mit der nächsten Beschriftung "up" (d. H. Dem Namen) abfragen
ca.us
.Ergebnisse von Abfragen im Vergleich zu Zonefile-Inhalten
Woher kann nun die Verwirrung kommen? Ich glaube, es könnte eine falsche Vorstellung sein, dass jeder Punkt in einem DNS-Namen bedeutet, dass es eine Delegation gibt. Das ist falsch. Anders gesagt, Ihr
example.com
Zonefile kann so aussehen, und es ist absolut gültig und funktioniert:Wenn Sie mit einem solchen Zonefile diesen Nameserver abfragen, erhalten Sie genau das oben beschriebene Verhalten: Eine Abfrage für
intermediate.example.com
gibtNOERROR
eine leere Antwort zurück. Sie müssen es nicht speziell in der Zonendatei erstellen (wenn Sie es aus anderen Gründen nicht benötigen), der autorisierende Nameserver kümmert sich um die Synthese der "Zwischen" -Antworten, da er feststellt, dass dieses leere Nicht-Terminal (und eines davon) benötigt wird andere "dazwischen", wenn es andere Bezeichnungen gegeben hätte), da sie den Blattnamen sehenleaf.intermediate.example.com
.Beachten Sie, dass dies in einigen Bereichen tatsächlich weit verbreitet ist, Sie es jedoch möglicherweise nicht sehen, da es auf mehr "Infrastruktur" -Datensätze abzielt, denen Personen nicht ausgesetzt sind:
in-addr.arp
oderip6.arpa
und speziell der letzten. Sie haben Aufzeichnungen wie1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.a.1.d.e.1.6.8.0.0.0.0.0.0.2.6.2.ip6.arpa. 1h IN PTR text-lb.eqiad.wikimedia.org.
und es gibt offensichtlich keine Delegierung an jedem Punkt, noch Ressourcenaufzeichnungen, die an jedem Etikett angehängt sindSRV
Datensätzen kann_nicname._tcp.fr. 12h IN SRV 0 0 43 whois.nic.fr.
eine Domain viele_proto._tcp.example.com
und_proto._udp.example.com
SRV
Datensätze haben, da sie von Entwurf her dieses Formular haben müssen, aber gleichzeitig_tcp.example.com
und_udp.example.com
leer bleiben, da sie nie als Datensätze verwendet werdenwhatever._domainkey.example.com
, diese werden jedoch offensichtlich_domainkey.example.com
nie für sich genommen verwendet, sodass sie leer bleiben. Dies ist das gleiche fürTLSA
Aufzeichnungen in DANE (ex:_25._tcp.somehost.example.com. TLSA 3 1 1 BASE64==
) oderURI
Aufzeichnungen (zB:_ftp._tcp IN URI 10 1 "ftp://ftp1.example.com/public"
)Nameserver Verhalten und Generierung von Zwischenantworten
Warum synthetisiert der Nameserver solche Zwischenantworten automatisch? Der Kernauflösungsalgorithmus für das DNS, wie in RFC 1034, Abschnitt 4.3.2 beschrieben, ist der Grund dafür. Nehmen wir ihn und fassen ihn in unserem Fall zusammen, wenn wir den oben genannten autorisierenden Nameserver nach dem Namen abfragen
intermediate.example.com
(dies ist dasQNAME
unten stehende In-Protokoll):Der Nameserver findet zone
example.com
als nächsten Vorfahren von QNAME, sodass wir mit Schritt 3 fortfahren können.Wir haben jetzt folgendes:
Wir können die Fälle b und c eliminieren, da unser Zonefile keine Delegierung hat (daher wird es nie eine Verweisung auf andere Nameserver geben, keinen Fall b), noch Platzhalter (also keinen Fall c).
Wir müssen uns hier nur mit Fall a befassen.
Wir fangen an, Label für Label in der Zone zu vergleichen. Selbst wenn wir einen langen
sub.sub.sub.sub.sub.sub.sub.sub.example.com
Namen hatten, kommen wir irgendwann zu Fall a: Wir haben weder eine Empfehlung noch einen Platzhalter gefunden, aber am Ende haben wir den endgültigen Namen gefunden, für den wir ein Ergebnis wollten.Dann wenden wir den Rest des Inhalts von Fall a an:
Nicht unser Fall, das überspringen wir.
Was auch immer QTYPE wir wählen (
A
,AAAA
,NS
, usw.) wir haben keine RRs fürintermediate.example.com
da es nicht in der Zonendatei erscheint. Die Kopie hier ist also leer. Jetzt beenden wir bei Schritt 6:Für uns hier nicht relevant, daher schließen wir mit Erfolg ab.
Dies erklärt genau das beobachtete Verhalten: Solche Abfragen werden zurückgegeben,
NOERROR
aber auch keine Daten.Nun fragen Sie sich vielleicht: "Aber wenn ich dann irgendeinen Namen verwende, wie
another.example.com
damals durch den obigen Algorithmus, sollte ich die gleiche Antwort bekommen (kein Fehler)", aber Beobachtungen würdenNXDOMAIN
in diesem Fall stattdessen berichten .Warum?
Da der gesamte Algorithmus wie erklärt mit folgendem beginnt:
Dies bedeutet, dass die obige Zonendatei in diesen Baum umgewandelt wird:
Wenn Sie also dem Algorithmus von oben folgen, können Sie in der Tat einen Pfad finden:
com > example > intermediate
(weil der Pfadcom > example > intermediate > leaf
existiert) Aberanother.example.com
nachdemcom > example
Sie dieanother
Bezeichnung im Baum nicht gefunden haben, als Kinderknoten vonexample
. Daher fallen wir von oben in einen Teil von Wahl c:Label
*
existiert nicht und wir sind keinem gefolgtCNAME
, daher sind wir für den Fallset an authoritative name error in the response and exit
:, akaNXDOMAIN
.Beachten Sie, dass all dies in der Vergangenheit zu Verwirrung geführt hat. Dies wird in einigen RFCs gesammelt. Sehen Sie sich zum Beispiel diesen unerwarteten Ort an (die Freude daran, dass DNS-Spezifikationen so undurchdringlich sind), der Platzhalter definiert: RFC 4592 "Die Rolle von Platzhaltern im Domain Name System" und insbesondere Abschnitt 2.2 "Existenzregeln", der ebenfalls teilweise am Anfang von zitiert wurde meine antwort aber hier ist es vollständiger:
Und dann ist die Definition im nächsten Abschnitt der Absatz, den ich am Anfang zitiert habe.
Beachten Sie, dass RFC 8020 (auf
NXDOMAIN
wirklich bedeutetNXDOMAIN
, dass , wenn Sie antworten istNXDOMAIN
fürintermediate.example.com
, dannleaf.intermediate.example.com
nicht existieren kann) teil beauftragt wurde , weil verschiedene DNS - Anbieter diese Interpretation nicht folgen hat und dass erstellt Chaos, oder sie waren nur Bugs, siehe zum Beispiel dieses 2013 in einem autorisierenden OpenSource-Nameserver-Code behoben: https://github.com/PowerDNS/pdns/issues/127Die Leute mussten dann spezielle Gegenmaßnahmen nur für sie treffen: Das ist kein aggressives Caching,
NXDOMAIN
denn für diese Anbieter kannNXDOMAIN
es bedeuten, dass SieNXDOMAIN
an einem bestimmten Knoten noch etwas anderes als an einem anderen Knoten darunter erhalten.Dies machte es unmöglich, eine QNAME-Minimierung (RFC 7816) zu erhalten (weitere Informationen finden Sie unter https://indico.dns-oarc.net/event/21/contributions/298/attachments/267/487/qname-min.pdf ). , während es die Privatsphäre erhöhen wollte. Das Vorhandensein leerer Nicht-Terminals im Falle von DNSSEC hat in der Vergangenheit ebenfalls Probleme hinsichtlich der Behandlung von Nicht-Existenz verursacht (siehe https://indico.dns-oarc.net/event/25/contributions/403/attachments/378/647) /AFNIC_OARC_Dallas.pdf wenn Sie interessiert sind, aber Sie brauchen wirklich ein gutes Verständnis von DNSSEC, bevor Sie).
Die folgenden zwei Meldungen geben ein Beispiel für Probleme, bei denen ein Anbieter in der Lage sein musste, diese Regel für leere Nicht-Terminals ordnungsgemäß durchzusetzen. Sie geben einen Überblick über die Probleme und warum wir dort waren:
quelle
Es ist möglich, dass ich Khaleds Antwort falsch verstehe, aber das Fehlen von Zwischenaufzeichnungen sollte keinesfalls ein Problem mit der Auflösung des untergeordneten Namens sein. Beachten Sie, dass diese Dig-Ausgabe nicht von einem autorisierenden DNS-Server
teaparty.net
oder einer Subzone davon stammt oder an diesen gerichtet ist:In der Tat sollten Sie in der Lage sein, dies
dig
selbst zu tun und diese Antwort zu erhalten - diesteaparty.net
ist eine echte Domäne, die unter meiner Kontrolle steht und dieseA
Aufzeichnung wirklich enthält . Sie können überprüfen, ob für eine dieser Zonen zwischenvery
und Datensätze vorhanden sindteaparty.net
und ob dies keinen Einfluss auf die Auflösung des oben genannten Hostnamens hat.quelle
teaparty.net
überfordert zu sein, aber basierend auf Patricks Antwort funktioniert dies wahrscheinlich, weil Sie alle Datensätze in einem einzigen Zonendatei haben, sodass leere Datensätze für die dazwischenliegenden Domänen synthetisiert werden. Kann jemand erklären, was passieren würde, wennparents.teaparty.net
es sich um eine Delegation handelt und nurvery.deep.host.with.no.immediate
ein Datensatz im Zonefile der Delegierten vorhanden ist?teaparty.net
ist eine delegierte Unterdomäne vonnet
; Wenn der einzige A-Datensatz in seiner Zonendateivery.deep...
wäre, wäre das egal.Wenn Sie den autorisierenden DNS-Server direkt abfragen, erhalten Sie problemlos Antworten.
Sie erhalten jedoch keine gültige Antwort, wenn Sie über einen anderen DNS-Server abfragen, der keinen gültigen Cache hat. Abfragen nach
intermediate.example.com
führen zuNXDOMAIN
Fehlern.quelle
NXDOMAIN
, es sollte zu einemNOERROR
Code und einem leeren Antwortabschnitt führen.intermediate.example.com
wenn es für nichts verwendet wird. Welchen Unterschied macht es also, selbst wenn es einen Fehler zurückgibt (nicht)?NXDOMAIN
, Sie bekommenNOERROR
. Dies ist die Antwort für einen Knoten, der in der DNS-Hierarchie vorhanden ist, jedoch keine Datensätze des angeforderten Typs enthält.NS
Aufzeichnungen gibt, Sie aber nachA
Aufzeichnungen fragen , erhalten SieNOERROR
eine leere Antwort.NXDOMAIN
fürintermediate.example.com
dann bedeutet es , es gibt nichts , „unten“ , und dannleaf.intermediate.example.com
kann es nicht geben. Einige aggressive rekursive Resolver können das sogar zwischenspeichern und Dinge von sich ableiten.Um die Frage direkt zu beantworten, müssen Sie keine Datensätze für Zwischennamen hinzufügen, die Sie nicht tatsächlich verwenden. Dies bedeutet jedoch nicht, dass diese Namen nicht vorhanden sind.
Ob es diese Namen gibt oder nicht, das ist eigentlich eine ganz eigene Frage, auf die ich hoffentlich eine kurze und eher intuitive Antwort geben kann.
Alles läuft darauf hinaus, dass DNS eine Baumstruktur ist, bei der jede Bezeichnung in einem Domänennamen ein Baumknoten ist. Eg
www.example.com.
hat , die Etikettenwww
,example
,com
und `` (Wurzelknoten), die den Baum - Knoten sind, die den Weg den ganzen Weg zur Wurzel bilden.Was diese grundlegende Natur von DNS möglicherweise nicht offensichtlich macht, ist, dass fast immer beim Verwalten von DNS-Daten kein Baum zu sehen ist und wir im Allgemeinen nicht direkt mit den Baumknoten selbst arbeiten, sondern in der Regel eine abgeflachte Liste mit welchen Datensätzen haben Daten, die unter verschiedenen Domainnamen existieren sollten (effektiv Baumpfade, wie oben).
Was passiert , wenn diese abgeflachte Liste verwendet wird , ist , dass der DNS - Server - Software den Baum auf den vorhandenen Datensätzen basiert konstruiert, und wenn es Lücken zwischen den Knoten , die Datensätze (zB gibt es Aufzeichnungen für
foo.bar.example.com.
undexample.com.
aber nichtbar.example.com.
) , werden diese einfach leer Baum betrachtet Knoten. Das heißt, dies sind Domänennamen / Knoten, die tatsächlich existieren, der Baum ist nicht beschädigt, diesen Knoten sind lediglich keine Daten zugeordnet.Wenn Sie einen dieser leeren Knoten abfragen, erhalten Sie folglich eine
NODATA
Antwort (NOERROR
Status +SOA
im Berechtigungsabschnitt), die besagt, dass der angeforderte Datensatztyp auf diesem Knoten nicht vorhanden war. Wenn Sie stattdessen einen Namen abfragen, der tatsächlich nicht vorhanden ist, erhalten Sie eineNXDOMAIN
Antwort, dass der angeforderte Domänenname in der Struktur nicht vorhanden ist.Wenn Sie die Details genau wissen möchten, lesen Sie die sehr gründliche Antwort von Patrick Mevzek.
quelle