Я считаю, что самый простой ответ на первый вопрос - «Нет, у вас есть« 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
domain-name-system
Maciek Sawicki
источник
источник
dig
?Ответы:
Данные в
CNAME
записи всегда должны быть другим DNS-именем - в этом весь смыслCNAME
.Как кратко изложено в RFC 1034, данные в a
CNAME
должны быть:Хотя, если вы хотите указать IP-адрес, то ваш билет:
CNAME
разработан и реализован как псевдоним DNS; у него нет концепции наличия IP-адреса в этом поле данных. Как таковой, он интерпретируется как псевдоним другого DNS-имени, как и было задумано; В конце концов, IP-адрес соответствует синтаксису DNS-имени.Итак, например, скажем, ваши данные DNS:
Рекурсивный DNS-сервер, который вы запрашиваете, видит, что запись является
CNAME
, и подсчитывает, что вам понадобятся фактические данные, которые она содержит. НеCNAME
найдено ни одной записи, кроме как, так что нет ответа клиенту.Он пытается запросить запись для имени хоста
192
в домене0.2.1
. Он не имеет ничего кэшированного для этого имени, поэтому он запрашивает корневые серверы. Они обслуживают запросы на TLD, такие как.com
и.net
, но этот запрос является запросом для.1
. Они быстро отвечают, что такого нет, и именно это рекурсор посылает вам.В ответ вы видите,
dig
что ваш рекурсивный сервер имен говорит: «Ну, имя, которое вы искали, указывало где-то в другом месте, а это где-то не существовало - спросите корневой сервер, если вы мне не верите».Итак, да, указание IP-адреса в
CNAME
записи никогда не является допустимым, и я подозреваю, что работающие системы работают правильно с помощью какого-либо другого механизма, например, файла хостов или локального разрешения имен, - исследуют их поведение разрешения имен.источник
cname - это каноническое имя, которое является просто псевдонимом другого имени, обычно это запись A или другое cname и т. д. Если вы установите cname для указания на IP, то это просто псевдоним этого IP. Я не думаю, что ваш DNS-сервер проверяет, является ли цель законной или нет, потому что стандартный RFC на самом деле не говорит, каков формат данных / проверка для цели cname. Это не обычное использование, но если оно работает для вас, то оно работает. Я думаю, что того, что это иногда не работает, должно быть достаточно, чтобы вы использовали то, что обычно используется.
источник
Вы можете иметь:
где 1.2.3.4 - рабочий IP-адрес. Обратите внимание на конечную точку в CNAME. Тот факт, что некоторые машины в вашем офисе работают с этим, в то время как другие не заставляют меня полагать, что те, у которых есть субдомен, установлен в файле
lmhosts
или/etc/hosts
.источник
4
?host -a
) запросом.