Могу ли я использовать CNAME с IP-адресом? Почему если работает (иногда)?

13

Я считаю, что самый простой ответ на первый вопрос - «Нет, у вас есть« A »для этого», но я случайно настроил некоторый поддомен, используя CNAME, указывающий на IP-адрес, и он работал на нескольких компьютерах в моем офисе. Интересно, как это было возможно?

Теперь, когда я проверяю это из дома, у меня появляется следующая ошибка:

beast:~ viroos$ host somesubdomain.somedomain.com
Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)

Я на 100% раньше работал в моем офисе (в настоящее время похоже, что нет, но я проверяю это на другой машине). Поэтому я не на 100%, если это сработало из-за какой-то особой настройки сети или потому что я протестировал это сразу после добавления записи DNS.

Я знаю, что эта история звучит, немного безумно / невероятно, но может кто-нибудь помочь мне решить эту загадку.

// редактировать: я добавляю копать вывод

; <<>> DiG 9.6-ESV-R4-P3 <<>> somesubdomain.somedomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60224
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;somesubdomain.somedomain.com.      IN  A

;; ANSWER SECTION:
somesubdomain.somedomain.com.   67  IN  CNAME   xxx.xxx.xxx.xx1.

;; AUTHORITY SECTION:
.           1800    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2012040901 1800 900 604800 86400

;; Query time: 72 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Apr 10 00:11:01 2012
;; MSG SIZE  rcvd: 136
Maciek Sawicki
источник
2
Вы уверены, что это не что-то еще, что заставило офисные машины работать? Кэшированные записи? Официальный сервер для этого домена в локальной сети, перекрывающий общедоступное разрешение? Хосты файлы?
Шейн Мэдден
Чтобы быть точным, он работал на двух машинах, оба OSX. Он не работал на машине с Ubuntu. Так как он работал на двух машинах, я проигнорировал проблему «убунту» (это была ошибка), так как считал, что это проблема распространения DNS или кэша DNS. Я только проверил настройки DNS на каждом клиенте, и это было то же самое (это оставило некоторую неопределенность в отношении теории распространения DNS). Одна из этих машин - мой MacBook, и в настоящее время я использую его из дома, и настроенный мной веб-сайт больше не работает на нем корректно: «Не удается найти сервер на somesubdomain.somedomain.com, поскольку DNS поиск не удался. "
Maciek Sawicki
Что возвращается, когда вы запрашиваете имя, используя dig?
Шейн Мэдден
Я добавил копать вывод, чтобы вопрос.
Maciek Sawicki
Я сильно подозреваю, что компьютеры OSX для поиска используют что-то отличное от DNS, например mDNS (что совсем не одно и то же).
Крис С

Ответы:

16

Данные в CNAMEзаписи всегда должны быть другим DNS-именем - в этом весь смысл CNAME.

Как кратко изложено в RFC 1034, данные в a CNAMEдолжны быть:

            CNAME           a domain name.

Хотя, если вы хотите указать IP-адрес, то ваш билет:

            A               For the IN class, a 32 bit IP address

CNAMEразработан и реализован как псевдоним DNS; у него нет концепции наличия IP-адреса в этом поле данных. Как таковой, он интерпретируется как псевдоним другого DNS-имени, как и было задумано; В конце концов, IP-адрес соответствует синтаксису DNS-имени.

Итак, например, скажем, ваши данные DNS:

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

Рекурсивный DNS-сервер, который вы запрашиваете, видит, что запись является CNAME, и подсчитывает, что вам понадобятся фактические данные, которые она содержит. Не CNAMEнайдено ни одной записи, кроме как, так что нет ответа клиенту.

Он пытается запросить запись для имени хоста 192в домене 0.2.1. Он не имеет ничего кэшированного для этого имени, поэтому он запрашивает корневые серверы. Они обслуживают запросы на TLD, такие как .comи .net, но этот запрос является запросом для .1. Они быстро отвечают, что такого нет, и именно это рекурсор посылает вам.

В ответ вы видите, digчто ваш рекурсивный сервер имен говорит: «Ну, имя, которое вы искали, указывало где-то в другом месте, а это где-то не существовало - спросите корневой сервер, если вы мне не верите».


Итак, да, указание IP-адреса в CNAMEзаписи никогда не является допустимым, и я подозреваю, что работающие системы работают правильно с помощью какого-либо другого механизма, например, файла хостов или локального разрешения имен, - исследуют их поведение разрешения имен.

Шейн Мэдден
источник
2

cname - это каноническое имя, которое является просто псевдонимом другого имени, обычно это запись A или другое cname и т. д. Если вы установите cname для указания на IP, то это просто псевдоним этого IP. Я не думаю, что ваш DNS-сервер проверяет, является ли цель законной или нет, потому что стандартный RFC на самом деле не говорит, каков формат данных / проверка для цели cname. Это не обычное использование, но если оно работает для вас, то оно работает. Я думаю, что того, что это иногда не работает, должно быть достаточно, чтобы вы использовали то, что обычно используется.

johnshen64
источник
0

Вы можете иметь:

example IN CNAME 1.2.3.4.

где 1.2.3.4 - рабочий IP-адрес. Обратите внимание на конечную точку в CNAME. Тот факт, что некоторые машины в вашем офисе работают с этим, в то время как другие не заставляют меня полагать, что те, у которых есть субдомен, установлен в файле lmhostsили /etc/hosts.

Adamo
источник
1
Хотя это действительные данные для CNAME, я вполне уверен, что это не вызовет дополнительного поиска ... за исключением корневых серверов, для несуществующего TLD с именем 4?
Шейн Мэдден
Дополнительный поиск будет выполнен с ЛЮБЫМ (например host -a) запросом.
Адамо
@ShaneMadden Кстати, ваш комментарий напомнил мне о локальных TLD от
DJB