Dies ist eine kanonische Frage zu CNAMEs an den Spitzen (oder Wurzeln) von Zonen
Es ist relativ allgemein bekannt, dass CNAME
Aufzeichnungen am Scheitelpunkt einer Domain tabu sind.
Beispiel:
example.com. IN CNAME ithurts.example.net.
Im besten Fall verweigert die Nameserver-Software möglicherweise das Laden der Konfiguration, und im schlimmsten Fall akzeptiert sie diese Konfiguration und macht die Konfiguration für example.com ungültig.
Kürzlich ließ ich von einem Webhosting-Unternehmen Anweisungen an eine Geschäftseinheit weitergeben, die wir brauchten, um den Scheitelpunkt unserer Domain mit einem neuen Datensatz zu versehen. Da ich wusste, dass dies eine Selbstmord-Konfiguration sein würde, wenn sie an BIND weitergeleitet wurde, riet ich ihnen, dass wir nicht in der Lage sein würden, dies zu befolgen, und dass dies im Allgemeinen ein Ratschlag für Kojen war. Das Webhosting-Unternehmen vertrat die Ansicht, dass es durch standardmäßige Definition von RFCs nicht völlig verboten ist und dass ihre Software dies unterstützt. Wenn wir den Apex nicht CNAMEN könnten, war ihr Rat, überhaupt keinen Apex-Datensatz zu haben, und sie würden keinen umleitenden Webserver bereitstellen. ...Was?
Die meisten von uns wissen, dass RFC1912 darauf besteht A CNAME record is not allowed to coexist with any other data.
, aber seien wir ehrlich, dass RFC nur informativ ist. Das Wort, das meiner Kenntnis nach der Praxis am nächsten kommt und das diese Praxis verbietet, stammt aus RFC1034 :
Wenn ein CNAME RR an einem Knoten vorhanden ist, sollten keine anderen Daten vorhanden sein. Dadurch wird sichergestellt, dass die Daten für einen kanonischen Namen und seine Aliase nicht unterschiedlich sein können.
Leider war ich lange genug in der Branche, um zu wissen, dass "sollte nicht" nicht dasselbe ist wie "darf nicht", und das ist genug Seil, mit dem sich die meisten Software-Designer abhängen können. Da ich wusste, dass eine kurze Verknüpfung mit einem Slam Dunk eine Verschwendung meiner Zeit wäre, ließ ich das Unternehmen schimpfen, um Konfigurationen zu empfehlen, die häufig verwendete Software ohne ordnungsgemäße Offenlegung beschädigen könnten.
Dies bringt uns zu den Fragen und Antworten. Diesmal möchte ich, dass wir uns wirklich technisch mit dem Wahnsinn von Apex-CNAMEs auseinandersetzen und das Problem nicht so umgehen, wie wir es normalerweise tun, wenn jemand Beiträge zu diesem Thema verfasst. RFC1912 ist tabu , ebenso wie alle anderen hier anwendbaren Informations-RFCs, an die ich nicht gedacht habe. Lassen Sie uns dieses Baby herunterfahren.
quelle
Antworten:
CNAME
Ursprünglich wurden Datensätze erstellt, um zu ermöglichen, dass mehrere Namen, die dieselbe Ressource bereitstellen, zu einem einzigen "kanonischen Namen" für die Ressource zusammengefasst werden. Mit dem Aufkommen des namensbasierten virtuellen Hostings ist es mittlerweile üblich geworden, diese als generische Form des IP-Adress-Aliasing zu verwenden. Leider erwarten die meisten Leute, die aus einem Webhosting-Umfeld stammen, dassCNAME
Aufzeichnungen eine Äquivalenz im DNS anzeigen , was nie beabsichtigt war. Der Apex enthält Datensatztypen, die eindeutig nicht für die Identifizierung einer kanonischen Host-Ressource (NS
,SOA
) verwendet werden. Sie können nicht mit Alias versehen werden, ohne den Standard auf einer fundamentalen Ebene zu brechen. (insbesondere in Bezug auf Zonenschnitte )Unglücklicherweise wurde der ursprüngliche DNS-Standard geschrieben, bevor die Normungsgremien erkannten, dass eine explizite Aussprache erforderlich ist, um ein konsistentes Verhalten zu definieren ( RFC 2119 ). Es war notwendig, RFC 2181 zu erstellen , um mehrere Eckfälle aufgrund einer vagen Formulierung zu klären, und die aktualisierte Formulierung verdeutlicht, dass ein
CNAME
nicht verwendet werden kann, um ein Apex-Aliasing zu erreichen, ohne den Standard zu brechen.Dies legt fest, dass
SOA
undNS
Aufzeichnungen obligatorisch sind, aber es sagt nichts überA
oder andere Arten, die hier erscheinen. Es mag überflüssig erscheinen, dass ich das dann zitiere, aber es wird in einem Moment relevanter.RFC 1034 war etwas vage über die Probleme, die auftreten können, wenn a
CNAME
neben anderen Datensatztypen vorhanden ist. RFC 2181 beseitigt die Mehrdeutigkeit und gibt explizit die Datensatztypen an, die neben ihnen existieren dürfen:"Aliasname" bezieht sich in diesem Zusammenhang auf die linke Seite des
CNAME
Datensatzes. Die Liste mit Aufzählungszeichen macht explizit deutlich, dass die Datensätze aSOA
,NS
undA
an einem Knoten, an demCNAME
auch ein angezeigt wird, nicht sichtbar sind . Wenn wir dies mit Abschnitt 6.1 kombinieren, ist es unmöglich, dass aCNAME
am Scheitelpunkt existiert, da es neben obligatorischenSOA
undNS
Aufzeichnungen leben müsste .(Dies scheint die Aufgabe zu erfüllen, aber wenn jemand einen kürzeren Weg zum Beweis hat, versuchen Sie es bitte.)
Aktualisieren:
Es scheint, dass die jüngste Verwirrung von Cloudflares jüngster Entscheidung herrührt, die Definition eines illegalen CNAME-Datensatzes am Scheitelpunkt von Domänen zuzulassen, für die sie A-Datensätze synthetisieren werden. "RFC-konform", wie im verlinkten Artikel beschrieben, bezieht sich auf die Tatsache, dass die von Cloudflare synthetisierten Datensätze gut mit DNS kompatibel sind. Dies ändert nichts an der Tatsache, dass es sich um ein vollständig benutzerdefiniertes Verhalten handelt.
Meiner Meinung nach ist dies ein Nachteil für die größere DNS-Community: Es handelt sich nicht um einen CNAME-Eintrag, und es führt die Leute in die Irre, zu glauben, dass andere Software nicht in der Lage ist, dies zuzulassen. (wie meine frage zeigt)
quelle
SOA
+NS
Datensätze, 2.CNAME
Datensätze dürfen nicht mit anderen Daten koexistieren.)CNAME
Datensatz tatsächlich bedeutet, da dies wahrscheinlich der am häufigsten missverstandene Datensatztyp ist. Auch wenn dies etwas über den Punkt hinausgeht, denke ich, dass dies eine häufig gestellte Frage ist, die direkt darauf zurückzuführen ist, dass viele (die meisten?) Kein angemessenes Verständnis dafür habenCNAME
.SRV
stattdessen hätten übernommen werden sollen, was dies ebenfalls zu einem unproblematischen Ergebnis gemacht hätte . Das Problem ist nicht auf das beschränkt, was hier diskutiert wird.CNAME
ist entgegen der landläufigen Meinung keine gute Ergänzung zu dem, was gebraucht wird. Letztendlich scheint es wahrscheinlicher zu sein, dass die "Alias" -Funktionalität für HTTP (Datensatztyp-spezifisch) häufiger eingesetzt wird , daCNAME
dies nicht wie erwartet funktioniert (!) Und nicht rückwirkend neu gestaltet werden kann und HTTP-Implementierungen nicht verwendet werdenSRV
Aliasing wurde hinter den Kulissen implementiert und nicht als sichtbarer Aufnahmetyp.)Das Internet Systems Consortium hat kürzlich einen Bericht über CNAME am Scheitelpunkt einer Zone veröffentlicht , in dem dargelegt wird , warum diese Einschränkung besteht, sowie eine Reihe von Alternativen. Es ist unwahrscheinlich, dass sich dies bald ändern wird.
Aber es gibt Hoffnung:
quelle
Wenn Sie eine gesamte Zone umleiten, sollten Sie DNAME verwenden. Laut RFC 6672 ,
quelle