Назад | Перейти на главную страницу

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

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

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

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

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

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

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

; <<>> 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

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

Согласно RFC 1034, данные в 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 запись никогда не бывает действительной, и я подозреваю, что работающие системы работают правильно через какой-то другой механизм, например, файл hosts или локальное разрешение имен - исследуйте их поведение при разрешении имен.

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

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

example IN CNAME 1.2.3.4.

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