Допустим, у нас есть поддомен 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 секунд последующие запросы для того же хоста будут включать обе строки.
Две записи возвращаются вместе в одном запросе. Вы можете узнать это с помощью следующей команды
dig +trace www.foo.com
Например, мой домен photoblog.com имеет cname для 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, и он хорошо возвращает это cname для photoblog.com, а вот IP для этой записи A.