Каково поведение DNS-резолвера, если у одного авторитетного сервера имен нет определенной записи, а у другого есть?

Каково поведение DNS-резолвера, если у одного авторитетного сервера имен нет определенной записи, а у другого есть?

Допустим, я отправил запрос на запись TXT для m1._domainkey.amazon.com.

nslookup -q=txt m1._domainkey.amazon.com

Допустим, авторитетные серверы имен для amazon.com — это

amazon.com  nameserver = ns1.amzndns.com.
amazon.com  nameserver = ns1.amzndns.org.
amazon.com  nameserver = ns1.amzndns.net.

Что произойдет, если эта запись TXT НЕ присутствует на первом авторитетном сервере имен, который запрашивает резолвер, ns1.amzndns.com, но ЕСТЬ на другом, ns1.amzndns.org? Является ли типичным для резолвера продолжать запрашивать серверы имен, пока не получит ответ?

На практике я видел, что получаю запись TXT, даже если ее нет на всех серверах имен.

Пожалуйста, включите в свой ответ документацию/ссылку.чтобы я мог самостоятельно изучить это.

Спасибо за прочтение.

решение1

Theавторитетные серверы именустановить флаг протокола, называемый«Авторитетный ответ» (АА)бит в своих ответах, и решатель принимает этот ответ за истину.

В случае положительного ответа ответ будет содержать запрошенную запись ресурса.

Если у авторитетного сервера имен нет этой записи ресурса, ответом будет сообщение NXDOMAIN.

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

Является ли типичным для резолвера продолжать опрашивать серверы имен до тех пор, пока не получит ответ?

Да, но только в том случае, если первый сервер(ы) имен вообще не отвечает.

После получения любого (положительного или отрицательного) ответа резолверу не придется опрашивать другие ваши серверы имен.

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

решение2

Поведение резолверов зависит от реализации.

Например, Microsoft Windows 10 запрашивает все серверы имен параллельно. Клиент будет использовать первый сервер для ответа, даже если это отрицательный ответ.

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

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

Если у Amazon есть 100 серверов имен и только у одного есть запись ресурса, а клиент запрашивает один из 99 других серверов имен, он получит отрицательный ответ на запись ресурса.

https://superuser.com/questions/969171/multihomed-windows-10-dns-resolution-timeouts/970322#970322

in practice, I have seen that I will get the TXT record even though it is not on all nameservers.

Если у вас есть вопросы по записи, не стесняйтесь поделиться записью, воспроизводящей поведение, включая данные клиента, чтобы мы могли ее воспроизвести.


Больше информации:

Microsoft ввела параллельное разрешение имен для записей A/AAAA из-за многочисленных инцидентов, когда серверы имен были настроены неправильно. Обычно это вызывало серьезные проблемы, когда запрашивались неосновные серверы имен из-за недоступности основного. Процесс итеративного разрешения имеет тайм-ауты, и каждый уровень может иметь разные тайм-ауты и кумулятивный тайм-аут. Существуют также правила использования результатов с нескольких сетевых адаптеров. Это привело к сценариям, когда некоторые организации настраивали четыре или пять серверов имен для обеспечения высокой доступности. К сожалению, процесс завершался тайм-аутом после третьего сервера, поэтому стратегия DNS была недействительной, стратегия аварийного восстановления была недействительной, и это вызывало другие собственные проблемы.


При использовании nslookup для имитации поведения распознавателя и выполнения итеративного запроса к определенному серверу имен используйте переключатель -norecurse.

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/nslookup-set-recurse

Связанный контент