Приводят ли записи CNAME ко второму поиску DNS?


19

Допустим, у нас есть поддомен под названием www.foo.com, в котором есть запись CNAME, указывающая на foo.bar.cc. Foo.bar.cc в свою очередь имеет запись A, указывающую на IP-адрес 1.2.3.4.

Теперь, если я выполню поиск DNS на www.foo.com, я получу ответ, похожий на этот:

www.foo.com. IN CNAME foo.bar.cc.
foo.bar.cc. IN A 1.2.3.4

У меня вопрос, на каком этапе решается foo.bar.cc? Это делается рекурсивным DNS-сервером перед отправкой ответа клиенту? Или клиент отправляет второй запрос к DNS-серверу, на этот раз для foo.bar.cc? Или это зависит от того, есть ли на DNS-сервере уже кэшированная запись для foo.bar.cc?

Я спрашиваю, потому что один конкретный рекурсивный DNS-сервер возвращает только первую строку, то есть он не разрешает CNAME. Однако спустя примерно 20 секунд последующие запросы для одного и того же хоста будут включать обе строки.

Ответы:


16

2 записи возвращаются вместе в одном запросе. Вы можете узнать это с помощью следующей команды

dig +trace www.foo.com

Например, мой домен photoblog.com имеет имя для www, поэтому последние 2 запроса от сервера имен фотоблога выглядят так:

photoblog.com.      172800  IN  NS  ns1.photoblog.com.
photoblog.com.      172800  IN  NS  ns2.photoblog.com.
;; Received 103 bytes from 192.43.172.30#53(i.gtld-servers.net) in 196 ms

www.photoblog.com.  600 IN  CNAME   photoblog.com.
photoblog.com.      600 IN  A   74.52.128.18
photoblog.com.      60  IN  NS  ns2.photoblog.com.
photoblog.com.      60  IN  NS  ns1.photoblog.com.
;; Received 133 bytes from 74.52.128.18#53(ns2.photoblog.com) in 59 ms

Как вы можете видеть, запрос спрашивает ns1 / ns2, какой IP-адрес для www.photoblog.com, и он хорошо показывает, что это имя для photoblog.com, а вот ip для этой записи A.


В вашем примере OP, где он возвращал только CNAME, DNS-серверу, вероятно, было трудно следовать CNAME, и поэтому он давал клиенту любую информацию, которую он имел. В конце концов, он закончил после CNAME и смог дать полный ответ.
Дэвид Шварц

Да - если DNS-сервер имеет больше информации, он вернет ее в ADDITIONALразделе ответа. Случаи, когда он не возвращает это, означают, что у рекурсора его не было в кеше - возможно, потому что CNAMEи Aзапись, на которую он указывает, имеет разные авторитетные серверы (поэтому первоначальный запрос рекурсора не получил CNAMEплюс дополнительный Aответ, просто CNAME).
Шейн Мэдден

@Mike: так какой вывод? Записи CNAME приводят ко второму поиску DNS или нет? Если нет, то почему многие предлагают увеличить запись CNAME TTL?
Марко Демайо

10
Пока запись A находится на том же самом авторитетном сервере, что и CNAME, это тот же самый поиск
Майк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.