Символ подчёркивания в DNS-именах

dns - domain name systemВышел у нас небольшой спор с коллегами по поводу допустимости использования символа “_” (подчёркивание, underscore) в доменных именах. Сначала мне в руки попала машина со странным hostname suse_trans. Самое интересное, что конфигуратор Yast имена с подчёркиваниями считает недопустимыми и такое назначать отказывается. Как машина получила имя — неизвестно. То есть, известно, но чем руководствовались при его выборе, вот вопрос… Тогда я начал гугление. В первую очередь вышел на RFC1033, в котором говорится: “Доменная система позволяет использовать в именах любые 8-битовые символы. Хотя доменная система не вносит ограничений,другие протоколы (типа SMTP) ограничивают использование символов в именах. В силу таких ограничений рекомендуется использовать для имен хостов только следующие символы (и точки,в качестве разделителей): “A-Z”, “a-z”, “0-9″, дефис (-) и подчеркивание (_)” Вот как! “Грибы есть можно. Только отравишься”. Получается, (во всяком случае в данном RFC) прямого запрета нет.

А вот мой любимый O’Reilly-вский “DNS и Bind” (Пол Альбитц, Крикет Ли, четвёрное издание, глава 4, страница 106) сурово порицает практику подчёркивания в -именах хостов. И даже выделяет абзац с запретом и рисует индюка напротив него. Правда, ничем не аргументируя свой запрет.

Кроме того, использовать подчёркивание не велит народный опыт… Ох, как не велит: “Символ подчеркивания _ в имени домена/поддомена использовать нельзя, это некорректный адрес и большинство -ов не дадут вам создать такую запись  … IE будет нормально ходить по такому сайту, но не будет посылать куки”.

Далее, в Википедии выдаётся следующая информация (статья Hostname в англоязычном разделе, русского аналога, к сожалению, нет): “The Internet standards (Request for Comments) for protocols mandate that component hostname labels may contain only the ASCII letters ‘a’ through ‘z’ (in a case-insensitive manner), the digits ‘0’ through ‘9’, and the hyphen (‐). The original specification of hostnames in RFC 952, mandated that labels could not start with a digit or with a hyphen, and must not end with a hyphen. However, a subsequent specification (RFC 1123) permitted hostname labels to start with digits. No other symbols, punctuation characters, or blank spaces are permitted.

While a hostname may not contain other characters, such as the underscore character (_), other names may contain the underscore. Systems such as DomainKeys and service records use the underscore as a means to assure that their special character is not confused with hostnames. For example, _http._sctp.www.example.com specifies a service pointer for an SCTP capable webserver host (www) in the domain example.com.”

То есть, в именах хостов (A-записи) — “ни-ни”. В других записях (например, TXT) — “может быть”. Чему свидетельствуют результаты выполнения команд:

$ dig _domainkey.yahoo.com TXT
_domainkey.yahoo.com. 2H IN TXT "t=y; o=~; n=http://antispam.yahoo.com/domainkeys"

$ dig beta._domainkey.google.com TXT
beta._domainkey.google.com. 1D IN TXT "g=; k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMs93oc95ObA7OEQEbqjIy6YvRj1u3yVGTzQ3wkwRQTWx1fhvNQenPNFklaL+Tw9XFYUc3f8eY0hs3WUNQ+t+I0CAwEAAQ=="

$ dig _domainkey.ebay.com TXT
_domainkey.ebay.com. 1H IN TXT "t=y; o=~; n=http://pages.ebay.com/securitycenter"

$ dig _spf-a.microsoft.com TXT
_spf-a.microsoft.com. 1H IN TXT "v=spf1 ip4:213.199.128.139 ip4:213.199.128.145 ip4:207.46.50.72 ip4:207.46.50.82 ip4:131.107.3.116 ip4:131.107.3.117 ip4:131.107.3.100 ip4:131.107.3.108 a:delivery.pens.microsoft.com a:mh.microsoft.m0.net mx:microsoft.com ~all"

$ dig _domainkey.cern.ch TXT
_domainkey.cern.ch. 3H IN TXT "t=y; o=~; n=CERN DomainKeys, see http://www.cern.ch/mmms/AntiSpam; [email protected]"

$ dig _domainkey.sendmail.com TXT
_domainkey.sendmail.com. 300 IN TXT "t=y\; o=~"

$ dig _domainkey.earthlink.com TXT
_domainkey.sendmail.com. 1800 IN TXT "t=y\; o=~"

Yast был всё же прав, ну и я вместе с ним 😉

Символ подчёркивания в DNS-именах: 5 комментариев

    • Угловые скобки порезались. Предыдущий комментарий читать так:

      Есть же еще rfc1034 и rfc1035, где говорится, что имя может состоять из “let-dig-hyp”, “буквы-цифры-тире”

Добавить комментарий

Ваш адрес email не будет опубликован.