Czy _ (podkreślenie) jest nielegalne w rekordzie CNAME?

9

Mamy problem z utworzeniem długiego rekordu TXT dla klucza DKIM w interfejsie internetowym na naszym serwerze.

Każda linia może zaakceptować tylko 256 znaków.

Próbowaliśmy wielu linii, a następnie próbowaliśmy dodawać ("na początku i ")po ostatnim, jak sugerują niektórzy. Żadne nie działa.

Następnie staraliśmy dokonywania cname do rekordu na innym dostawcą usług hostingowych, gdzie można dokonać DKIM rekordy TXT.

Ale teraz interfejs sieciowy skarży się na nielegalną nazwę w CNAMErejestrze.

mail._domainkey.example.com TXTjest ok
mail._domainkey.example.com CNAMEnie jest ok
mail.domainkey.example.com CNAMEjest ok, ale nie to, czego chcemy.

Czy interfejs sieciowy jest po prostu zdeterminowany, aby doprowadzić nas do szaleństwa, czy też jest naprawdę „nielegalne”, aby mieć podkreślenia CNAME?

Lenne
źródło
1
Dostawca naprawia interfejs WWW, pisząc to!
Lenne

Odpowiedzi:

18

Tak, nazwy DNS (obejmuje to również A / AAAA) mogą zawierać tylko [0-9], [a-z], -, dlatego podkreślenie jest niepoprawne. Pamiętaj, że rekord TXT nie jest nazwą hosta i nie dotyczy to ograniczenie. I ostatnia edycja: -nie może być również użyty jako pierwszy znak, więc mail.-domainkey.our.domnie będzie poprawny.

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


Ostateczna edycja: częściowo się myliłem. Gdy CNAME jest używana jako nazwa hosta, obowiązują powyższe ograniczenia. Wygląda na to, że CNAME nie jest uważany za nazwę hosta w kontekście DKIM iw takim przypadku _powinien być prawidłową częścią wpisu CNAME. Zobacz /programming/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491

Sven
źródło
Ale czy CNAME jest nazwą hosta? Niektóre dokumenty pokazują użycie podkreślenia w nazwie, więc najwyraźniej to działa. kb.mailchimp.com/accounts/email-authentication/…
Lenne
Ponadto podkreślenia pojawiają się we wpisach DNS w strefach zintegrowanych z MS Windows Active Directory, które leżą u podstaw domen Windows, przynajmniej w narzędziu Microsoft do zarządzania DNS, ale nie jestem pewien, czy te podkreślenia są częścią nazwy, a Windows obsługuje podkreślenia w DNS żądań lub jeśli podkreślenia pojawiają się tylko w przystawce zarządzania DNS i nie są w rzeczywistości częścią nazw.
Todd Wilcox
Pamiętaj, że cytowany wpis w Wikipedii dotyczy nazw internetowych, a nie DNS.
Jim B
@ Lenne: CNAME jest prawidłową nazwą hosta, ponieważ jest to alias hosta. @ToddWilcox: tak, jest to znane i jest to (celowe?) Naruszenie specyfikacji przez MS, które spowodowało, że inne systemy nie mają żadnych kłopotów, ponieważ pojawiają się w pakietach DNS, DHCP,… mimo że nie są legalne.
mirabilos
2
@mirabilos „CNAME jest prawidłową nazwą hosta” nie, celem (RDATA) CNAME jest nazwa domeny, a nie nazwa hosta (nazwa domeny jest nadzbiorem wszystkich możliwych nazw hostów). _foo CNAME _barjest całkowicie uzasadniony, możesz go przetestować named-checkzone.
Patrick Mevzek
2

Wszelkie prawidłowe znaki są dozwolone w DNS. Zobacz https://tools.ietf.org/html/rfc2181#section-11

„Sam DNS nakłada tylko jedno ograniczenie na poszczególne etykiety, które można wykorzystać do identyfikacji rekordów zasobów. To jedno ograniczenie dotyczy długości etykiety i pełnej nazwy. Długość dowolnej etykiety jest ograniczona od 1 do 63 oktetów. „

Klient musi zweryfikować wartości nazw. Np. Rekord MX może zawierać wartość „Alice”, ale po wyszukaniu wartość ta powinna zostać odrzucona, ponieważ „Alice” nie jest prawidłowym adresem e-mail.

W takim przypadku wygląda na to, że Twój host „weryfikuje” dane wejściowe i powinien być w stanie wprowadzić je ręcznie.

Jim B.
źródło
„Wszelkie poprawne znaki są dozwolone w DNS” jest to nieco bardziej skomplikowane. Istnieją nazwy domen i nazwy hostów. O ile nie zaznaczono inaczej, wszędzie masz etykiety, które są nazwami domen, co oznacza w rzeczywistości dowolny znak, a więc _cokolwiek innego, co lubisz. Ale w przypadku niektórych rekordów możesz używać tylko nazw hostów, a nie nazw domen. Nazwy hostów to tylko litery, cyfry i łączniki, nic więcej. Na przykład właścicielem rekordu Alub AAAArekordu jest nazwa hosta, a nie nazwa domeny. RDATA (cel) NSrekordu jest również nazwą hosta, a nie nazwą domeny.
Patrick Mevzek,
1
„rekord MX może zawierać wartość„ Alice ”, ale po wyszukaniu wartość ta powinna zostać odrzucona, ponieważ„ Alice ”nie jest prawidłowym adresem e-mail.” Od kiedy MX RR odwołuje się do adresów e-mail?
CVn
0

RFC 1034: Etykiety muszą być zgodne z regułami dla nazw hostów ARPANET. Muszą zaczynać się od litery, kończyć literą lub cyfrą i mieć jako znaki wewnętrzne tylko litery, cyfry i łączniki. Istnieją również pewne ograniczenia dotyczące długości. Etykiety muszą mieć maksymalnie 63 znaki.

micmav
źródło
Mam również problemy z Arduino, gdzie niektóre biblioteki lib dają nazwę hosta, taką jak ESP_245537, ta nazwa zostaje odrzucona, gdy serwer DHCP próbuje zaktualizować DNS.
Lenne
To jest źle. Etykieta CNAME niekoniecznie jest nazwą hosta, więc wszystkie znaki są tutaj poprawne, w tym _.
Patrick Mevzek
1
I nawet bez tego są to stare zasady. Zabraniali nazw hostów zaczynających się od cyfry, ale aby dostosować się 3com.comna przykład ta zasada została złagodzona, patrz tools.ietf.org/html/rfc1123#page-13 „Jeden aspekt składni nazwy hosta zostaje zmieniony: ograniczenie pierwszego znaku jest zrelaksowany, aby zezwolić na literę lub cyfrę. ”
Patrick Mevzek,
@ Lenne, jeśli esp_245537jest używana jako nazwa hosta, należy odrzucić aktualizację DNS, ponieważ nie jest to poprawna nazwa hosta. Jeśli jest to używane jako nazwa domeny, aktualizacja DNS powinna się powieść (w przeciwnym razie jest to błąd), ponieważ jest to poprawna etykieta DNS.
Patrick Mevzek
Widziałem wskazówki, że możliwe jest tłumaczenie nieprawidłowych znaków z DHCP na DNS, ale nigdy nie działało.
Lenne
0

Odpowiedź Svena z edycją jest już słuszna, ale wystarczy sformułować rzeczy bezpośrednio.

TL; DR tak podkreślenie jest ważne w CNAMEzapisie po obu stronach, przeczytaj poniżej, dlaczego.

RFC 1034 i inne definiują rekordy na podstawie „nazw domen”, które są etykietami z dowolnym znakiem, a więc także _.

Jednak niektóre rekordy mają bardziej rygorystyczne reguły dla nazwy właściciela i / lub danych zasobów (RDATA). Akceptowana będzie tylko nazwa hosta, a zasady są teraz (w przeszłości były luźniejsze, gdy nazwa hosta nie mogła zaczynać się cyfrą), że możesz użyć dowolnej litery ASCII (bez rozróżniania wielkości liter), dowolnych cyfr ASCII i łączników , plus dodatkowe reguły pozycji: brak łącznika na początku i na końcu oraz brak podwójnych łączników na pozycjach 3 i 4 (z powodu „rezerwacji” dla domen IDN, które są w formie, xn--która jest dozwolona tylko w przypadku).

Na przykład nazwa właściciela Alub AAAArekordu jest nazwą hosta, a nie nazwą domeny. test.example.com A 192.0.2.1Jest więc ważne, dlaczego nie wszystkie z nich są:

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

Program jest łatwy do testowania named-checkzone(część bindoprogramowania serwera nazw, ale można go używać i instalować osobno, a inne serwery nazw mogą mieć podobne narzędzia do sprawdzania i prawdopodobnie są do tego również interfejsy online), wystarczy umieścić rekordy w pliku i uruchomić to na:

$ 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)

(liczba przed INjest TTL, nie ma to związku z naszym problemem tutaj, ale wystarczyło tylko przekazać poprawność składniową rekordu).

W przypadku innych rekordów jest odwrotnie: NSnie ma żadnych ograniczeń dotyczących właściciela, ale ograniczenia dotyczące „celu”, czyli danych. Dane mogą być tylko nazwą hosta, a nie nazwą domeny, ponieważ musisz wskazać autorytatywne serwery nazw, które są fizycznymi hostami, które odpowiadają na zapytania DNS.

Teraz o CNAME, tutaj są odpowiednie cytaty z RFC 1034, w sekcji 3.6:

„właściciel: to nazwa domeny, na której znajduje się RR.” co oznacza domyślnie dowolną nazwę, nie tylko nazwę hosta (jako źródło rekordu CNAME)

„RDATA: który typ danych, a czasem dane zależne od klasy, które opisują zasób:”

„CNAME nazwa domeny”.

Tak więc zarówno właściciel CNAME(po lewej), jak i dołączone do niego dane zasobu, jego miejsce docelowe / cel (po prawej) to nazwy domen, a nie tylko nazwy hostów. Zasadniczo dowolna postać, więc włączenie _jest dozwolone po obu stronach.

Ponownie, łatwe do przetestowania za pomocą 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.

Żadnych błędów w CNAME(inne błędy są spodziewane, ponieważ w mojej fałszywej strefie nie umieściłem żadnych SOAlub NSzapisy takie jak w prawdziwej strefie)

Patrick Mevzek
źródło