Ist _ (Unterstrich) in einem CNAME-Datensatz illegal?

9

Wir haben Probleme beim Erstellen des langen TXT-Datensatzes für den DKIM-Schlüssel auf der Weboberfläche unseres Hosters.

Jede Zeile kann nur 256 Zeichen aufnehmen.

Wir haben mehrere Zeilen ausprobiert und dann versucht, ("die erste und ")die letzte Zeile hinzuzufügen, wie einige vorschlagen. Beides funktioniert nicht.

Dann haben wir versucht, einen C-Namen für einen Datensatz auf einem anderen Hoster zu erstellen, wo wir die DKIM TXT-Datensätze erstellen können .

Aber jetzt beschwert sich das Webinterface über illegale Namen in der CNAMEAufzeichnung.

mail._domainkey.example.com TXTist ok
mail._domainkey.example.com CNAMEist nicht ok
mail.domainkey.example.com CNAMEist ok, aber nicht was wir wollen.

Ist das Webinterface nur entschlossen, uns verrückt zu machen, oder ist es wirklich "illegal", Unterstriche zu haben CNAME?

Lenne
quelle
1
Der Anbieter repariert das Webinterface, während ich dies schreibe!
Lenne

Antworten:

18

Ja, DNS-Namen (dies schließt auch A / AAAA ein) dürfen nur enthalten [0-9], [a-z], -, daher ist der Unterstrich nicht gültig. Beachten Sie, dass ein TXT-Datensatz kein Hostname ist und diese Einschränkung für ihn nicht gilt. Und noch eine letzte Änderung: -Kann auch nicht als erstes Zeichen verwendet werden, mail.-domainkey.our.domwäre also nicht gültig.

https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames


Endgültige Bearbeitung: Ich habe mich teilweise geirrt. Wenn ein CNAME als Hostname verwendet wird, gelten die oben genannten Einschränkungen. Es scheint, dass ein CNAME im DKIM-Kontext nicht als Hostname betrachtet wird und in diesem Fall _ein gültiger Teil eines CNAME-Eintrags sein sollte. Siehe /programming/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491

Sven
quelle
Aber ist ein CNAME ein Hostname? In einigen Dokumentationen wird die Verwendung von Unterstrichen in einem c-Namen gezeigt, sodass dies anscheinend funktioniert. kb.mailchimp.com/accounts/email-authentication/…
Lenne
Außerdem werden Unterstriche in den DNS-Einträgen in in MS Windows Active Directory integrierten Zonen angezeigt, die Windows-Domänen zugrunde liegen, zumindest im DNS-Verwaltungstool von Microsoft. Ich bin mir jedoch nicht sicher, ob diese Unterstriche tatsächlich Teil des Namens sind und Windows Unterstriche in DNS unterstützt Anforderungen oder wenn die Unterstriche nur im DNS-Verwaltungs-Snap-In angezeigt werden und tatsächlich nicht Teil der Namen sind.
Todd Wilcox
Beachten Sie, dass der zitierte Wikipedia-Eintrag mit Internetnamen und nicht mit DNS zu tun hat.
Jim B
@ Lenne: Ein CNAME ist ein gültiger Hostname, da er ein Alias ​​für einen Host ist. @ToddWilcox: Ja, dies ist bekannt, und dies ist eine (absichtliche?) Spezifikationsverletzung durch MS, die anderen Systemen keine großen Probleme bereitete, da sie in DNS-, DHCP-, ... Paketen auftreten, obwohl sie nicht legal sind.
Mirabilos
2
@mirabilos "Ein CNAME ist ein gültiger Hostname" Nein, Ziel (RDATA) eines CNAME ist ein Domänenname, kein Hostname (ein Domänenname ist eine Obermenge aller möglichen Hostnamen). _foo CNAME _barist völlig legitim, können Sie mit testen named-checkzone.
Patrick Mevzek
2

Alle gültigen Zeichen sind in DNS zulässig. Siehe https://tools.ietf.org/html/rfc2181#section-11

"DNS selbst legt nur eine Einschränkung für die bestimmten Labels fest, mit denen Ressourceneinträge identifiziert werden können. Diese eine Einschränkung bezieht sich auf die Länge des Labels und den vollständigen Namen. Die Länge eines Labels ist auf 1 bis 63 Oktette begrenzt. ""

Der Client muss Namenswerte validieren. EG Ein MX-Datensatz enthält möglicherweise den Wert "Alice". Nach der Suche sollte dieser Wert jedoch abgelehnt werden, da "Alice" keine gültige E-Mail-Adresse ist.

In diesem Fall sieht es so aus, als würde Ihr Hoster Ihre Eingabe "validieren" und er sollte sie manuell für Sie eingeben können.

Jim B.
quelle
"Alle gültigen Zeichen sind in DNS erlaubt" ist etwas komplizierter. Es gibt Domain- und Hostnamen. Sofern nicht anders angegeben, haben Sie überall Labels, bei denen es sich um Domain-Namen handelt, was in der Tat jedes Zeichen bedeutet, also _oder was auch immer Sie möchten. Für einige Datensätze können Sie jedoch nur Hostnamen und keine Domänennamen verwenden. Hostnamen sind nur Buchstaben, Ziffern und Bindestriche, sonst nichts. Beispielsweise ist der Eigentümer eines Aoder eines AAAADatensatzes ein Hostname und kein Domänenname. Das RDATA (Ziel) eines NSDatensatzes ist ebenfalls ein Hostname, kein Domänenname.
Patrick Mevzek
1
"Ein MX-Datensatz enthält möglicherweise den Wert" Alice ". Nach der Suche sollte dieser Wert jedoch abgelehnt werden, da" Alice "keine gültige E-Mail-Adresse ist." Seit wann verweisen MX-RRs auf E-Mail-Adressen?
ein CVn
0

RFC 1034: Die Labels müssen den Regeln für ARPANET-Hostnamen entsprechen. Sie müssen mit einem Buchstaben beginnen, mit einem Buchstaben oder einer Ziffer enden und als innere Zeichen nur Buchstaben, Ziffern und Bindestriche enthalten. Es gibt auch einige Einschränkungen hinsichtlich der Länge. Beschriftungen dürfen maximal 63 Zeichen lang sein.

micmav
quelle
Ich habe auch Probleme mit Arduino, wo einige Bibliotheken einen Hostnamen wie ESP_245537 angeben. Dieser Name wird abgelehnt, wenn der DHCP-Server versucht, das DNS zu aktualisieren.
Lenne
Das ist falsch. Die Bezeichnung eines CNAME ist nicht unbedingt ein Hostname, daher sind hier alle Zeichen gültig, einschließlich der _.
Patrick Mevzek
1
Und auch ohne das sind das die alten Regeln. Sie untersagten Hostnamen, die mit einer Ziffer beginnen, aber 3com.comum beispielsweise dieser Regel Rechnung zu tragen , siehe locks.ietf.org/html/rfc1123#page-13 "Ein Aspekt der Syntax von Hostnamen wird hiermit geändert: die Einschränkung des ersten Zeichens ist entspannt, um entweder einen Buchstaben oder eine Ziffer zuzulassen. "
Patrick Mevzek
@Lenne Wenn esp_245537als Hostname verwendet wird, muss das DNS-Update abgelehnt werden, da es kein gültiger Hostname ist. Wenn dies als Domänenname verwendet wird, sollte das DNS-Update erfolgreich sein (andernfalls handelt es sich um einen Fehler), da es sich um eine gültige DNS-Bezeichnung handelt.
Patrick Mevzek
Ich habe Hinweise gesehen, dass es möglich ist, ungültige Zeichen von DHCP in DNS zu übersetzen, aber es hat nie funktioniert.
Lenne
0

@ Svens Antwort mit der Bearbeitung ist bereits richtig, aber nur um die Dinge direkt zu formulieren.

TL; DR Ja Unterstrich ist in einem CNAMEDatensatz auf beiden Seiten gültig. Lesen Sie unten, warum.

RFC 1034 und andere definieren Datensätze basierend auf "Domänennamen", die Bezeichnungen mit einem beliebigen Zeichen sind, einschließlich _.

Aber einige Datensätze haben strengere Regeln für den Eigentümer als Namen und / oder die Ressourcendaten (RDATA). Dort wird nur ein Hostname akzeptiert, und tatsächlich gelten jetzt (sie wurden in der Vergangenheit gelockert, als ein Hostname nicht mit einer Ziffer beginnen konnte), dass Sie einen beliebigen ASCII-Buchstaben (ohne Berücksichtigung der Groß- und Kleinschreibung), beliebige ASCII-Ziffern und die Bindestriche verwenden können , plus einige zusätzliche Positionsregeln: kein Bindestrich am Anfang oder Ende und keine doppelten Bindestriche an Position 3 und 4 (wegen "Reservierung" für IDNs in der Form, xn--die nur in Groß- und Kleinschreibung zulässig ist).

Beispielsweise ist der Eigentümername eines Aoder eines AAAADatensatzes ein Hostname und kein Domänenname. Es test.example.com A 192.0.2.1gilt also, warum all dies nicht der Fall ist:

_test.example.com A 192.0.2.1
-test.example.com A 192.0.2.1
test-.example.com A 192.0.2.1

Es ist einfach, Dinge mit dem named-checkzoneProgramm zu testen (Teil der bindNameserver-Software, kann jedoch separat verwendet und installiert werden, und andere Nameserver verfügen möglicherweise über ähnliche Überprüfungswerkzeuge, und wahrscheinlich gibt es auch dafür Online-Schnittstellen). Fügen Sie einfach Datensätze in eine Datei ein und führen Sie sie aus es auf:

$ cat z1.txt
test.example.com. 1 IN A 192.0.2.1
_test.example.com. 1 IN A 192.0.2.1
-test.example.com. 1 IN A 192.0.2.1
test-.example.com. 1 IN A 192.0.2.1
$ /usr/local/sbin/named-checkzone example.com z1.txt
z1.txt:2: _test.example.com: bad owner name (check-names)
z1.txt:3: -test.example.com: bad owner name (check-names)
z1.txt:4: test-.example.com: bad owner name (check-names)

(Die Zahl vor dem INist die TTL. Dies hängt nicht mit unserem Problem hier zusammen, sondern muss nur die Syntaxvalidierung eines Datensatzes bestehen.)

Bei anderen Datensätzen ist das Gegenteil der Fall: NSEs gibt keine Einschränkungen für den Eigentümer, sondern Einschränkungen für das "Ziel", das die Daten sind. Die Daten können nur ein Hostname sein, kein Domänenname, da Sie auf autorisierende Nameserver verweisen müssen, die physische Hosts sind, die auf DNS-Abfragen antworten.

Nun zu CNAME, hier sind die entsprechenden Zitate aus RFC 1034, in Abschnitt 3.6:

"Eigentümer: Dies ist der Domainname, unter dem die RR gefunden wird." Dies bedeutet standardmäßig einen beliebigen Namen, nicht nur einen Hostnamen (als Quelle des CNAME-Datensatzes).

"RDATA: Dies sind die typ- und manchmal klassenabhängigen Daten, die die Ressource beschreiben:"

"CNAME einen Domainnamen."

Sowohl der Eigentümer von a CNAME(was sich links davon befindet) als auch die damit verbundenen Ressourcendaten, sein Ziel / Ziel (was sich rechts davon befindet) sind Domänennamen und nicht nur Hostnamen. Grundsätzlich ist jedes Zeichen, also einschließlich _, auf beiden Seiten erlaubt.

Wieder einfach zu testen mit named-checkzone:

$ cat z2.txt
_foo 1 CNAME _bar
$ /usr/local/sbin/named-checkzone example.com z2.txt
zone example.com/IN: has 0 SOA records
zone example.com/IN: has no NS records
zone example.com/IN: not loaded due to errors.

Keine Fehler bezüglich der CNAME(die anderen Fehler werden erwartet, da ich in meiner gefälschten Zone keine SOAoder NSAufzeichnungen wie eine echte Zone platziert habe)

Patrick Mevzek
quelle