Чи _ (підкреслення) незаконне в записі CNAME?


9

У нас виникають проблеми зі створенням довгого запису TXT для ключа DKIM у веб-інтерфейсі нашого хостеру.

Кожен рядок може приймати лише 256 символів.

Ми спробували кілька рядків, потім спробували додати ("спочатку та ")після останнього, як деякі підказують. Ні один не працює.

Потім ми спробували внести ім’я до запису на іншому хостері, де ми можемо робити записи DKIM TXT.

Але зараз вебінтерфейс скаржиться на незаконне ім’я у CNAMEзаписі.

mail._domainkey.example.com TXTце нормально,
mail._domainkey.example.com CNAMEце не добре,
mail.domainkey.example.com CNAMEце нормально, але не те, що ми хочемо.

Чи веб-інтерфейс просто визначений для того, щоб нас звести з розуму, чи насправді "незаконно" мати підкреслення CNAME?


1
Провайдер виправляє веб-інтерфейс, коли я це пишу!
Ленна

Відповіді:


18

Так, імена DNS (сюди також належить A / AAAA) можуть містити лише те [0-9], [a-z], -, що підкреслення недійсне. Зауважте, що запис TXT не є ім'ям хоста, і це обмеження не застосовується до нього. І остання редакція: -також не може використовуватися як перший символ, тому mail.-domainkey.our.domне буде дійсною.

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


Остаточна редакція: Я частково помилявся. Якщо CNAME використовується як ім'я хоста, застосовуються вищевказані обмеження. Здається, CNAME не вважається іменем хоста в контексті DKIM, і в цьому випадку він _повинен бути дійсною частиною запису CNAME. Дивіться /programming/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491


Але чи є ім'я хоста CNAME? Деяка документація показує, що в імені використовується підкреслення, тому воно працює. kb.mailchimp.com/accounts/email-authentication/…
Ленне

Крім того, підкреслення відображається у записах DNS в зонах, інтегрованих у MS Windows Active Directory, що лежать в основі доменів Windows, принаймні в інструменті управління DNS Microsoft, але я не впевнений, що ці підкреслення насправді є частиною назви та Windows підтримує підкреслення в DNS запити або якщо підкреслення відображаються лише в оснастці управління DNS і насправді не є частиною імен.
Тодд Вількокс

Зауважте, що цитований запис у Вікіпедії пов'язаний з іменами Інтернету, а не DNS.
Jim B

@ Lenne: CNAME - дійсне ім'я хоста, оскільки це псевдонім для хоста. @ToddWilcox: так, це відомо, і це (навмисне?) Специфікаційне порушення з боку MS, що не спричиняло інших систем без проблем, оскільки вони з'являються в DNS, DHCP,… пакетах, незважаючи на те, що вони не є законними.
mirabilos

2
@mirabilos "CNAME - дійсне ім'я хоста" немає, ціль (RDATA) CNAME - це доменне ім'я, а не ім'я хоста (доменне ім'я - це сукупність усіх можливих імен хостів). _foo CNAME _barце повністю законно, ви можете протестувати named-checkzone.
Патрік Мевзек

2

У DNS допускаються будь-які дійсні символи. Дивіться https://tools.ietf.org/html/rfc2181#section-11

"DNS сам розміщує лише одне обмеження на конкретні мітки, які можна використовувати для ідентифікації записів ресурсів. Це одне обмеження стосується довжини мітки та повного імені. Довжина будь-якої мітки обмежена від 1 до 63 октетів. "

Клієнт повинен перевірити значення імені EG, запис MX може містити значення "Alice", але після пошуку це значення слід відхилити, оскільки "Alice" не є дійсною адресою електронної пошти.

У цьому випадку схоже, що ваш хостинг "перевіряє" ваш вклад, і вони повинні мати можливість ввести його вручну.


"Будь-які дійсні символи дозволені в DNS", це трохи складніше, ніж це. Є доменні імена та імена хостів. За винятком випадків, коли ви сказали інакше, скрізь у вас є мітки, які є доменними іменами, що означає справді будь-який символ, так _чи будь-який інший, який ви теж хочете. Але для деяких записів можна використовувати лише імена хостів, а не доменні імена. Імена хостів - це лише літери, цифри та дефіси, нічого іншого. Наприклад, власником Aабо AAAAзаписом є ім'я хоста, а не доменне ім'я. RDATA (ціль) NSзапису - це також ім'я хоста, а не доменне ім'я.
Патрік Мевзек

1
"запис MX може містити значення" Alice ", але після пошуку це значення слід відхилити, оскільки" Alice "не є дійсною адресою електронної пошти." З якого часу MX RR посилаються на адреси електронної пошти?
CVn

0

RFC 1034: Мітки повинні відповідати правилам імен хостів ARPANET. Вони повинні починатися з літери, закінчуватися буквою або цифрою і мати як внутрішні символи лише букви, цифри та дефіс. Існують також деякі обмеження щодо довжини. Мітки повинні містити 63 символи або менше.


У мене також є проблеми з Arduino, де деякі libs дають ім'я хоста, як ESP_245537, це ім'я відхиляється, коли DHCPserver намагається оновити DNS.
Ленн

Це неправильно. Мітка CNAME не обов'язково є ім'ям хоста, тому всі символи дійсні тут, включаючи _.
Патрік Мевзек

1
І навіть без цього це старі правила. Вони забороняли імена хостів, починаючи з цифри, але для розміщення, 3com.comнаприклад, цього правила було послаблено, див. Tools.ietf.org/html/rfc1123#page-13 "Один аспект синтаксису імені хоста змінюється: обмеження на перший символ розслаблений, щоб дозволити або літеру, або цифру ".
Патрік Мевзек

@Lenne, якщо esp_245537використовується як ім'я хоста, тоді від оновлення DNS потрібно відмовитись, оскільки це не дійсне ім'я хоста. Якщо це використовується в якості доменного імені, то оновлення DNS має бути успішним (інакше це помилка), оскільки це дійсна мітка DNS.
Патрік Мевзек

Я бачив підказки про те, що можна перевести недійсні символи з DHCP в DNS, але ніколи це не працювало.
Ленн

0

@ Відповідь Свена, з редагуванням, вже правильна, але просто для прямого формулювання речей.

TL; DR так підкреслення дійсне в CNAMEзаписі з обох сторін, читайте нижче, чому.

RFC 1034 та інші визначають записи на основі "доменних імен", які є мітками з будь-яким символом, у тому числі _.

Але деякі записи мають більш жорсткі правила щодо імені власника та / або даних ресурсу (RDATA). Там буде прийнято лише ім'я хоста, і справді зараз правила (вони були розслаблені в минулому, коли ім'я хоста не можна було починати з цифри), що ви можете використовувати будь-яку літеру ASCII (без чутливості до регістру), будь-які цифри ASCII та дефіси , а також деякі додаткові правила позиції: відсутність дефісів на початку чи в кінці та відсутність подвійних дефісів у позиціях 3 та 4 (через "бронювання" для IDN, які мають форму, xn--яка дозволена лише у випадку).

Наприклад, ім'я власника Aабо AAAAзапису - це ім'я хоста, а не доменне ім'я. Так test.example.com A 192.0.2.1справедливо, чому все це не:

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

Тестувати речі можна за допомогою named-checkzoneпрограми (частина bindпрограмного забезпечення серверів імен, але може використовуватися та встановлюватися окремо; інші сервери імен можуть мати подібні інструменти перевірки, і, мабуть, для цього теж є Інтернет-інтерфейси), просто покладіть записи у файл та запустіть це на:

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

(число перед INTTL є, це не пов'язане з нашою проблемою тут, а потрібно просто для перевірки синтаксису запису).

Для інших записів - навпаки: для NSвласника немає обмежень, а обмеження щодо "цілі", що є даними. Дані можуть бути лише ім'ям хоста, а не доменним іменем, оскільки вам потрібно вказати на авторитетних серверів імен, які є фізичними хостами, які відповідають на запити DNS.

Тепер про CNAME, ось відповідні цитати з RFC 1034, у розділі 3.6:

"власник: яке доменне ім'я, де знайдено RR." що означає за замовчуванням будь-яке ім'я, а не лише ім'я хоста (як джерело запису CNAME)

"RDATA: це тип, а іноді і залежні від класу дані, що описують ресурс:"

"CNAME доменне ім'я."

Отже, як власник CNAME(те, що знаходиться зліва від нього), так і дані про ресурси, що додаються до нього, його призначення / ціль (те, що знаходиться праворуч від нього) - це доменні імена, а не лише імена хостів. В основному будь-який символ, тому включення _дозволено з обох сторін.

Знову ж таки, легко перевірити за допомогою 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.

Ніяких помилок щодо CNAME(інші помилки очікуються, оскільки в моїй фальшивій зоні я не поставив жодної SOAабо NSзаписів, як справжня зона)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.