У меня есть DNS-зона example.com с записью типа A
определены для foo.example.com
. На этом же сервере у меня есть еще одна зона с именем foo.example.com
с и не определена запись вверху зоны. Если мой сервер получает запрос на foo.example.com
, вернет ли он запись, определенную в example.com
зона? (Или алгоритм поиска остановится, когда перейдет в более конкретную зону, а затем ответит «не найдено»?)
Аналогичный вопрос:
Если у меня есть все вышеперечисленное, если я затем создать A
запись в верхней части foo.example.com
зона (@
) указывающий на другой IP-адрес, какой адрес будет возвращен?
foo.example.com. 3600 IN A <location A>
@ 3600 IN A <location B>
Очевидно, вам не нужно и то, и другое - я пытаюсь понять поведение DNS. Но есть ли стандартный подход к этому - стандартное место для этого?
Я использую BIND.
Когда перекрывающиеся зоны определены на полномочном сервере имен, самая специфическая зона используется, чтобы дать ответ.
example.com. IN A?
попадает в example.com
зона.foo.example.com. IN A?
попадает в foo.example.com
зона. Если foo.example.com
определяется в example.com
зона это будет проигнорировано.sub.foo.example.com. IN A?
попадает в foo.example.com
зона, потому что она более специфична для запроса, чем example.com
.В вашем конкретном примере возвращаемое значение для запроса будет NXDOMAIN
поскольку foo.example.com
zone не предоставляет для себя определение записи A.
Если использовать терминологию DNS, фактически существует резка зоны на границе между родительской зоной и более конкретной зоной. RFC2181 §6.1 описывает правильное поведение для вашего сценария:
Такой сервер является полномочным для всех записей ресурсов в зоне, которые не находятся в другой зоне. Записи NS, указывающие на разрезание зоны, являются собственностью созданной дочерней зоны, как и любые другие записи для происхождения этой дочерней зоны или любых ее поддоменов. Сервер для зоны не должен возвращать авторитетные ответы на запросы, связанные с именами в другой зоне, которая включает NS и, возможно, A, записи при разрезе зоны, если только он не является также сервером для другой зоны.
Помимо случаев DNSSEC, упомянутых непосредственно ниже, серверы должны игнорировать данные, отличные от записей NS, и необходимые записи A для обнаружения серверов, перечисленных в записях NS, которые могут быть настроены в зоне при разрезе зоны.
Что касается наилучшей практики, решать вам. Вы можете поместить все свои записи в одну зону или разбить отдельные файлы зон для своих поддоменов, если это будет удобнее. (скажем, из-за того, что каждая из них содержит сотни записей) Единственное, что я хотел бы предупредить, что не очень очевидно, - это то, что инструменты проверки, такие как named-checkzone
обычно не знают о подзонах, находящихся на том же сервере, и могут генерировать неверные предупреждения, если родительская зона включает ссылки на записи внутри дочерней зоны. (скажем, псевдонимы CNAME)