Какова роль записей NS на вершине домена DNS?

21
$ORIGIN example.com. ; not necessary, using this to self-document

$TTL 3600
@        IN     SOA   ns1.example.com. admin.example.com. (
                      1970010100 7200 1800 1209600 300)

@        IN     NS   ns1.example.com.
@        IN     NS   ns2.example.com.

@        IN     A    198.51.100.1
ns1      IN     A    198.51.100.2
ns2      IN     A    198.51.100.3

sub1     IN     NS   ns1.example.edu.

sub2     IN     NS   ns1.sub2
ns1.sub2 IN     A    203.0.113.1 ; inline glue record

Роль записи NS под вершиной домена хорошо понятна; они существуют, чтобы делегировать полномочия для субдомена другому серверу имен. Примеры этого выше включают записи NS для sub1и sub2. Это позволяет серверу имен раздавать рекомендации для тех частей домена, для которых он не считает себя авторитетным.

Назначение записей NS на вершине домена, ns1и ns2в этом случае, по-видимому, менее понятно для Интернета в целом. Мое понимание (которое может быть не целостным) заключается в следующем:

  1. Они не используются кэширующими DNS-серверами, чтобы определить полномочные серверы для домена. Это обрабатывается клеем сервера имен , который определяется на уровне регистратора. Регистратор никогда не использует эту информацию для создания склеенных записей.
  2. Они не используются для делегирования полномочий для всего домена другим серверам имен. Попытка сделать это с помощью программного обеспечения, такого как ISC BIND, вообще не приведет к «ожидаемому» поведению реферала, поскольку сервер имен продолжит считать себя авторитетным для зоны.
  3. Они не используются сервером имен для определения того, должен ли он возвращать авторитетные ответы ( AAфлаг установлен) или нет; это поведение определяется тем, указывается ли программное обеспечение как ведущее или ведомое для зоны. Большая часть программного обеспечения серверов имен будет с радостью обслуживать записи Apex NS, которые не согласуются с информацией, содержащейся в исходных клейких записях, что, в свою очередь, заставит известные веб-сайты проверки DNS генерировать предупреждения для домена.

В таком случае, с чем мы остались? Почему мы определяем эту информацию, если она не используется для кэширования DNS-серверов в Интернете в целом?

Андрей Б
источник

Ответы:

21

Подчиненная идентификация

Записи NS уровня Apex используются главным сервером для идентификации его подчиненных. Когда данные на авторитетном сервере имен меняются, он будет сообщать об этом через DNS NOTIFYсообщения ( RFC 1996 ) всем своим партнерам в этом списке. Эти серверы, в свою очередь, перезвонят с запросом на SOAзапись (которая содержит серийный номер) и примут решение о том, удалять ли более свежую копию этой зоны.

  • Можно отправлять эти сообщения на серверы, не указанные в этом NSразделе, но для этого требуются специфические для сервера директивы конфигурации (например, also-notifyдиректива ISC BIND ). Записи NS Apex содержат основной список серверов, которые необходимо уведомить в конфигурации по умолчанию.
  • Стоит отметить, что вторичные серверы также будут отправлять друг другу сообщения NOTIFY на основе этих NSзаписей, что обычно приводит к зарегистрированным отказам. Это можно отключить, указав серверам отправлять уведомления только для тех зон, для которых они являются хозяевами (BIND:) notify master;, или NSполностью пропустить уведомления на основе в пользу уведомлений, явно определенных в конфигурации. (BIND: notify explicit;)

Авторитетное определение

Вопрос выше содержал ошибку:

Они не используются кэширующими DNS-серверами, чтобы определить полномочные серверы для домена. Это обрабатывается клеем сервера имен, который определяется на уровне регистратора. Регистратор никогда не использует эту информацию для создания склеенных записей.

Это простой вывод, но не точный. В NSзаписи и клеевые данные записей (например, определенных в пределах вашего регистратора счетов) не является авторитетными. Само собой разумеется, что их нельзя считать «более авторитетными», чем данные, находящиеся на серверах, которым делегированы полномочия. Это подчеркивается тем фактом, что у рефералов не установлен aaфлаг (Authoritative Answer).

Проиллюстрировать:

$ dig @a.gtld-servers.net +norecurse +nocmd example.com. NS
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14021
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                   IN      NS

;; AUTHORITY SECTION:
example.com.            172800  IN      NS      a.iana-servers.net.
example.com.            172800  IN      NS      b.iana-servers.net.

;; ADDITIONAL SECTION:
a.iana-servers.net.     172800  IN      A       199.43.135.53
a.iana-servers.net.     172800  IN      AAAA    2001:500:8f::53
b.iana-servers.net.     172800  IN      A       199.43.133.53
b.iana-servers.net.     172800  IN      AAAA    2001:500:8d::53

Обратите внимание на отсутствие aaфлагов для вышеуказанного ответа. Само направление не является авторитетным. С другой стороны, данные на сервере, называются является авторитетным.

$ dig @a.iana-servers.net +norecurse +nocmd example.com. NS
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2349
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                   IN      NS

;; ANSWER SECTION:
example.com.            86400   IN      NS      a.iana-servers.net.
example.com.            86400   IN      NS      b.iana-servers.net.

Тем не менее, эти отношения могут стать очень запутанными, так как невозможно узнать об авторитетных версиях этих NSзаписей без неавторизованных NSзаписей, определенных на родительской стороне реферала. Что будет, если они не согласятся?

  • Короткий ответ - «противоречивое поведение».
  • Длинный ответ , что неймсерверы первоначально окурка все прочь направление (и клей) на пустом кэше, но те NS, Aи AAAAзаписи могут быть заменены в конце концов , когда они обновляется. Обновления происходят по истечении срока действия TTL для этих временных записей или когда кто-то явно запрашивает ответ для этих записей.
    • Aи AAAAзаписи для данных вне зоны (т. е. comсерверы имен, определяющие клей для данных за пределами comзоны, например example.net), в конечном итоге будут обновлены, так как хорошо понимается, что сервер имен не должен рассматриваться как авторитетный источник такой информации , (RFC 2181)
    • Если значения NSзаписей различаются между родительской и дочерней сторонами реферала (например, серверы имен, введенные в панель управления регистратора, отличаются от NSзаписей, хранящихся на тех же серверах), то поведение будет несовместимым, вплоть до дочернего. NSзаписи полностью игнорируются. Это связано с тем, что поведение не совсем определено стандартами, а реализация различается в разных рекурсивных реализациях сервера. Другими словами, согласованного поведения в Интернете можно ожидать только в том случае, если определения сервера имен для домена согласованы между родительской и дочерней сторонами реферала .

Короче говоря, рекурсивные DNS-серверы по всему Интернету будут восстанавливаться между пунктами назначения, если записи, определенные на родительской стороне реферала, не согласуются с официальными версиями этих записей. Первоначально данные, представленные в реферале, будут предпочтительными, только для замены авторитетными определениями. Поскольку кеши постоянно перестраиваются с нуля по всему интернету, для интернета невозможно выбрать одну версию реальности с такой конфигурацией. Если авторитетные записи делают что-то незаконное в соответствии со стандартами, например, указание NSзаписей на псевдонимы, определенныеCNAMEэто становится еще труднее устранять; домен будет чередоваться между работающим и сломанным для программного обеспечения, которое отклоняет нарушение. (т.е. ISC BIND / named)

RFC 2181 §5.4.1 предоставляет таблицу ранжирования для достоверности этих данных и делает явным, что данные кеша, связанные с ссылками и склеиванием, не могут быть возвращены в качестве ответа на явный запрос записей, на которые они ссылаются.

5.4.1. Ranking data

   When considering whether to accept an RRSet in a reply, or retain an
   RRSet already in its cache instead, a server should consider the
   relative likely trustworthiness of the various data.  An
   authoritative answer from a reply should replace cached data that had
   been obtained from additional information in an earlier reply.
   However additional information from a reply will be ignored if the
   cache contains data from an authoritative answer or a zone file.

   The accuracy of data available is assumed from its source.
   Trustworthiness shall be, in order from most to least:

     + Data from a primary zone file, other than glue data,
     + Data from a zone transfer, other than glue,
     + The authoritative data included in the answer section of an
       authoritative reply.
     + Data from the authority section of an authoritative answer,
     + Glue from a primary zone, or glue from a zone transfer,
     + Data from the answer section of a non-authoritative answer, and
       non-authoritative data from the answer section of authoritative
       answers,
     + Additional information from an authoritative answer,
       Data from the authority section of a non-authoritative answer,
       Additional information from non-authoritative answers.

   <snip>

   Unauthenticated RRs received and cached from the least trustworthy of
   those groupings, that is data from the additional data section, and
   data from the authority section of a non-authoritative answer, should
   not be cached in such a way that they would ever be returned as
   answers to a received query.  They may be returned as additional
   information where appropriate.  Ignoring this would allow the
   trustworthiness of relatively untrustworthy data to be increased
   without cause or excuse.
Андрей Б
источник
Хорошо написанный ответ! Я не согласен с «длинным и коротким» вашим ответом. Основное использование DNS в Интернете - получение IP-адреса узла, то есть запросов типа «А». DNS-распознаватели всегда будут принимать и заменять рефералов для получения официального ответа «А». И он «всегда» будет только кэшировать реферальную запись. Единственный раз, когда записи будут заменены, это когда явный запрос поступит для "example.com IN NS". Затем распознаватель спросит сервер в месте реферала. И этот AR-ответ заменит кэшированный реферальный ответ (только для TTL этой записи).
Wasted_Coder
Я могу ошибаться согласно ответу @BillThor. Я основывал свои соображения на том факте, что, если DNS-сервер обновляет свою запись в кэше NS, для example.com из (уже истекшего) авторитетного ответа NS. Это сломает цепочку DNS. Поскольку теперь он застрял в цикле, в то время как (старый) NS-сервер продолжает отвечать, он не будет учитывать изменения на вышеупомянутом верхнем DNS-сервере (регистратор). Как и в случае, если вы перемещаете DNS-серверы, но не обновляете или не переводите старый DNS-сервер в автономный режим. Или эта «проблема» полностью имеет место сегодня?
Wasted_Coder
@ Wasted Я также не согласен с вашим первым комментарием из-за многих допущений. Поскольку поведение не указано в стандартах, оно фактически зависит от конкретной реализации. Этой презентации 6 лет (начало на слайде № 11), но она все еще дает понять; предпочтения родительского и дочернего сервера имен будут разными. Кроме того, вы можете рассчитывать только на требования RFC 2181.
Андрей B
Я думаю, что моя проблема заключается в том, достигнет ли TTL = 0 кэшированных записей резольвера, например, example.com. И он должен искать новую запись хоста, также еще не кэшированную, скажем для new.example.com. Теперь ему нужны NS-сервер (ы) для example.com, и, поскольку срок их кэшированных копий истек, было бы неплохо по-прежнему пытаться подключиться к этому «просроченному» NS-серверу, просто чтобы посмотреть, отвечает ли он. Он должен будет проверить у следующего предка, таким образом, NS .com для направления. Это означает, что записи NS предшественника будут преобладать в большинстве случаев (до тех пор, пока запрос NS не будет обработан).
Wasted_Coder
@Wasted Начните со слайда # 11 и обратите внимание на три шаблона: дочерний ориентированный non-sticky ( PPPCCCPPPCCC...), дочерний ориентированный sticky ( PPPCCCCCC...) и родительский sticky ( PPPPPP...). Ориентированные на детей нелипкие являются, безусловно, наиболее распространенными, и ориентированные на детей липкие на самом деле более распространены, чем родительские липкие. Клиенты действительно будут подпрыгивать назад и вперед между двумя версиями реальности, если данные NS о ребенке и родителе не согласованы, если только программное обеспечение распознавателя не привязано к родительскому элементу, что является наименее вероятным результатом.
Андрей Б
3

Записи NS делегированной зоны обеспечивают полноту определения домена. Сами NS-серверы будут полагаться на файл зоны. Они не должны пытаться найти себя, выполняя рекурсивный запрос от корневых серверов. Записи NS в файле зоны предоставляют ряд других функций.

Кэширующие серверы могут обновлять список серверов имен, запрашивая сервер имен из своего кэша. Пока кеширующий сервер знает адрес сервера имен, он будет использовать его вместо рекурсивного поиска соответствующей записи NS.

При перемещении серверов имен важно обновить как старые серверы имен, так и новые серверы имен. Это предотвратит сбои или несоответствия, которые возникнут, когда два определения зон выйдут из синхронизации. Обновленные записи в конечном итоге будут обновляться любыми серверами, которые кэшировали записи NS. Это заменит кэшированный список серверов имен.

Записи NS также помогают в подтверждении правильности конфигурации DNS. Программное обеспечение для проверки часто проверяет, соответствуют ли определения сервера имен делегирующей зоны тем, которые предоставлены зоной. Эта проверка может быть выполнена на всех серверах имен. Любые несоответствия могут указывать на неправильную конфигурацию.

Наличие записей NS позволяет отключить (локальные) зоны. Это могут быть субдомены зарегистрированного домена или совершенно новый домен (не рекомендуется из-за изменений в TLD). Хосты, которые используют серверы имен в качестве своих серверов имен, смогут находить зоны, недоступные при повторном обращении к корневым серверам. Другие серверы имен могут быть настроены на поиск серверов имен для локальных зон.

В случае разделенной DNS (внутренней / внешней) может потребоваться другой набор DNS-серверов. В этом случае список NS (и, вероятно, другие данные) будет другим, а записи NS в файлах зон приведут к соответствующему списку серверов имен.

BillThor
источник