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

Как именно серверы имен обрабатывают неизвестные поддомены?

У меня есть домен econemon.com. Ниже приводится выдержка из записи DNS (некоторые записи для краткости опущены):

econemon.com.       1800    IN  NS  ns.stratoserver.net.
econemon.com.       1800    IN  NS  ns2.stratoserver.net.
econemon.com.       1800    IN  A   85.214.92.48

Эти серверы имен принадлежат моему провайдеру, и, насколько я понял, они являются авторитетными для моего домена.

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

$ host -t A nosuchdomain.econemon.com ns.stratoserver.net
Using domain server:
Name: ns.stratoserver.net
Address: 81.169.163.40#53
Aliases: 

nosuchdomain.econemon.com has address 85.214.92.48

Это, конечно, именно то, что я хочу, чтобы иметь виртуальные хосты и т. Д. Теперь, допустим, я добавил запись

econemon.com.    IN  NS  ns.econemon.com

и надлежащая запись для ns.econemon.com в список, и этот сервер имен действительно имел разные записи A для некоторых поддоменов, что произойдет?

(Примечание: это связано с моим другим два вопросы)

Поиск в DNS выполняется последовательно, начиная с конца. Предполагая пустые кеши, поиск MISSING.DOMAIN.COM будет идти что-то вроде этого ...

  • клиент DNS запросит MISSING.DOMAIN.COM с сервера DNS.
  • DNS-сервер запрашивает у «корневого» DNS домен MISSING.DOMAIN.COM и возвращает сервер имен для домена COM.
  • DNS-сервер запрашивает у COM-сервера имен MISSING.DOMAIN.COM и возвращает сервер имен для домена DOMAIN.COM.
  • DNS-сервер запрашивает у сервера имен DOMAIN.COM MISSING.DOMAIN.COM. Сервер имен DOMAIN.COM не имеет ответа, поэтому он сообщает адрес для DOMAIN.COM, в зависимости от его конфигурации.
  • Если бы была NS-запись для MISSING.DOMAIN.COM, она была бы возвращена, и исходный DNS-сервер запросил бы ее следующим. Если была запись A для MISSING, IP-адрес будет возвращен.

В этом суть. На самом деле это намного сложнее из-за кеширования, балансировки нагрузки и того факта, что серверы имен можно указывать по имени, и поэтому их также нужно искать.

Подводя итог вашему вопросу ... вы можете указать несколько серверов имен для домена и настроить их с помощью разные Информация. Ответ да, но вы должны быть осторожны и знать, что делаете. Вы можете использовать DNS для поддержки балансировки нагрузки и может использовать его для поддержки отказоустойчивый облегченный. Но нужно быть осторожным!

РЕДАКТИРОВАТЬ: в комментарии Борцмейер указал на пару упрощений, которые, по его мнению, пересекают черту с ошибкой. Я внес коррективы, которые, надеюсь, устранят опасения.

Это одна из тех ситуаций, «я не думаю, что это слово означает то, что вы думаете». Вы вызываете записи хоста в данном домене как «поддомены». Они не.

Чтобы ответить на все ваши основные вопросы:

Запрос к данному серверу имен вернет то, что, по его мнению, является подходящим ответом. Похоже, вы предлагаете добавить еще один DNS-сервер в качестве авторитетного для вашего домена «econemon.com», который будет содержать некоторые записи «A», которых нет у других. Это не обычная или рекомендуемая конфигурация DNS. Обычно вы хотите, чтобы все DNS-серверы, уполномоченные для данного домена, имели одни и те же записи (если вы не знаете, зачем вы это делаете ... также известный как DNS с разделением горизонта).

Нет вообще никаких причин делать то, что вы описываете. Вы не можете повлиять на выбор DNS-сервера распознавателем клиентского компьютера. Это не «испортит» кеширование - кеширование будет работать так, как должно. Это привело бы к непоследовательным результатам в зависимости от того, с каким DNS-сервером разговаривал клиент, и это обычно плохо.

Поддоменом может быть что-то вроде домена «subdomain.example.com», который содержит записи хоста, такие как «www.subdomain.example.com». Вы говорите о хостах в домене.

Похоже, у вас есть запись подстановочного знака DNS для вашего домена.

*.econemon.com.  IN A 81.169.163.40

Это означает, что если в результате запроса нет записей, вы получите запись A для 81.169.163.40. На самом деле все намного сложнее. Если есть ЛЮБАЯ запись для «метки» (полное доменное имя или FQDN), то это отключает запись с подстановочными знаками для этой метки. Итак, если у вас есть запись MX для foo.econemon.com., Запрос для записи A foo.econemon.com ничего не даст.

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

Теперь к вашему вопросу ...

Похоже, вы спрашиваете: «Что произойдет, если у меня будет один сервер имен с данными, отличными от других?»

Что ж, если у вас есть 2, что ваш интернет-провайдер работает с определенными данными, и 1, который вы запускаете с разными данными, то вероятность получения данных с сервера вашего интернет-провайдера составляет 2: 1. Система DNS не обращается к другим серверам имен, если не находит нужные данные на первом. Другими словами, вы не можете спросить папу, сказала ли мама «нет».

Это важное понятие в DNS. DNS должен быть БЫСТРЫМ. Поэтому никогда не выполняйте 2 запроса, если подойдет 1.

Вот почему у вас должны быть одни и те же точные данные о зоне для домена на каждом из серверов имен домена. (Если у вас нет забавной схемы балансировки нагрузки.)

  • будет ли запрос subdomain.econemon.com давать другой адрес в зависимости от того, какой сервер имен вы задали? (Я думаю, что это так.)

да

  • если да, то это может быть действительно полезно для возврата к «главному серверу», если мой DNS не работает, но как мне заставить клиента использовать мой сервер имен, когда он работает?

Серверы имен проверяются в случайном порядке. Если первый не отвечает, DNS-клиент попробует следующий. Когда все проверено, клиент получает ошибку DNS. Поскольку каждый DNS-сервер отправил 1 запрос, но обычно мы ждем ответа 30 секунд (я думаю), если у вас 100 серверов имен, вы будете ждать 50 минут, прежде чем клиент выйдет из строя. Вот почему у меня обычно не больше 3-х серверов имен для домена. Больше не лучше.

  • это испортит кеширование на клиентах? (Наверное.)

На самом деле, нет. Программное обеспечение очень надежное. Принцип устойчивости Постела («будь консервативным в том, что вы отправляете, либеральным в том, что вы принимаете») вступает в игру. В нем есть свои преимущества. Запрашивайте www.yahoo.com, www.microsoft.com и www.google.com. Вы увидите, что каждый сервер имен дает разные IP-адреса в зависимости от того, где вы находитесь в мире (и других факторов). Если бы это сбивало клиентов с толку, эти сайты не выжили бы!