Мы используем DNS-серверы Windows 2016+. Мы полагаемся на LocalNetPriority на наших DNS-серверах. У нас есть несколько DNS-серверов Active Directory на нескольких сайтах. Ожидаемое поведение заключается в том, что при выполнении определенного запроса к DNS-серверу он вернет IP-адрес, который находится в той же подсети, что и исходный запрос, если для одного и того же хоста существует несколько записей A. В большинстве случаев это работает нормально.

Однако для запросов, исходящих от самого DNS-сервера, это не работает. Во-первых, DNS-сервер (или Active Directory) по умолчанию настраивает свой сетевой интерфейс на использование себя в качестве предпочтительного DNS-сервера через localhost (127.0.0.1 и ::1). Это приводит к сбою выбора LocalNetPriority, поскольку исходный IP-адрес не принадлежит ни к одной из наших подсетей.

Во-вторых, сервер предпочитает IPv6 IPv4. Мы не используем IPv6, но также не хотим его отключать, так как он явно вызывал проблемы в прошлом в различных сценариях, и Microsoft утверждает, что он является обязательным, и не поддерживает и не рекомендует его отключать. Об использовании IPv6 не может быть и речи.

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

Похоже, что настройка IPv4 в качестве приоритета над IPv6 и настройка фактического IP-адреса сервера в качестве предпочтительного DNS-сервера может быть единственным решением. Однако я давно понял, что использование 127.0.0.1 — лучший выбор, потому что при перезагрузке или отключении сетевого кабеля активная директория может полностью развалиться.

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

0
Appleoddity 10 Янв 2022 в 18:45
2
127.0.0.1 не следует использовать в качестве основного DNS-сервера. Используйте фактический IP-адрес сервера для первичного DNS и используйте 127.0.0.1 для вторичного DNS. - docs.microsoft.com/en-us/previous-versions/windows/it-pro/…
 – 
joeqwerty
7 Янв 2022 в 22:58
В своем предыдущем комментарии я должен был указать, что если у вас есть несколько DNS-серверов, каждый из них должен ссылаться на «партнерский» DNS-сервер для первичного DNS, другого партнера или самих себя для вторичного DNS и 127.0.0.1 в качестве третичного DNS.
 – 
joeqwerty
8 Янв 2022 в 07:02

2 ответа

Лучший ответ

Чтобы решить эту проблему, мне пришлось учесть несколько вещей:

  • Локальная адресация IPv6 включена независимо от того, используем ли мы IPv6 или нет. Таким образом, каждый сервер / хост будет иметь адрес IPv6 и использовать IPv6, если это возможно.
  • Повышение роли сервера до контроллера домена с DNS добавляет «localhost» в качестве DNS-сервера на локальный сетевой интерфейс как для IPv4, так и для IPv6. Это лучшая практика MS.
  • Мы не можем отключить IPv6, так как он не поддерживается корпорацией Майкрософт.
  • Windows предпочитает IPv6, а не IPv4, поэтому любой настроенный DNS-сервер IPv6 будет иметь приоритет.
  • В среде с несколькими DC серверы должны ссылаться на одноранговый узел как на первичный DNS, а на самих себя — как на вторичный, третичный и т. д.
  • Мне нужно, чтобы localnetpriority работал, даже когда другие DNS-серверы/сайты недоступны.
  • Когда DNS-сервер Windows запрашивает сам себя, если он использует для этого «localhost», он нарушает приоритет локальной сети.
  • Анализатор MS Best Practice дает полезную информацию о проблемах с конфигурацией DNS-сервера и сообщает о неправильно настроенных настройках DNS на сетевом интерфейсе.

После всего этого я обнаружил, что лучшим решением является изменение настроек DNS-сервера в сетевом интерфейсе и никаких других изменений в Windows. Чтобы решить все вышеперечисленные проблемы, я:

  • Удален DNS-сервер «localhost», настроенный на IPv6. В настоящее время НЕТ настроенных DNS-серверов IPv6.
  • Я перенастроил список DNS-серверов IPv4 следующим образом:
    1. Основной: <Peer DNS Server IP>
    1. Вторичный: <IPv4 address of this DNS server>
    1. Третичный: 127.0.0.1 (локальный хост)

Все связанные жалобы со стороны BPA были решены. Localnetpriority работает, когда сеть полностью функциональна и когда сайт отключен из-за сбоя в сети. И AD по-прежнему будет нормально работать, даже если локальный сетевой кабель отключен или возникла какая-либо другая проблема с сетевым интерфейсом.

Конечный результат отвечает на вопрос: «Как заставить работать localnetpriority, когда DNS-сервер запрашивает сам себя?». Со второстепенным требованием я ничего не нарушаю.

0
Appleoddity 10 Янв 2022 в 18:44

Для преобразователя DNS-сервера сначала настройте IP-адрес другого DNS-сервера, затем IP-адрес этого DNS-сервера, а затем IP-адрес локального хоста.

Даже когда служба DNS перезапускается, она все еще может разрешаться с удаленного сервера. Кроме того, при использовании доменных служб Active Directory другой хост с меньшей вероятностью вызовет проблемы с репликацией.

Во-вторых, сервер предпочитает IPv6 IPv4. Мы не используем IPv6, но также не хотим его отключать, так как он явно вызывал проблемы в прошлом в различных сценариях, и Microsoft утверждает, что он является обязательным, и не поддерживает и не рекомендует его отключать.

Да, предпочтение IPv6 является стандартным поведением, и Microsoft не тестирует отключение IPv6. Если вы не используете IPv6, не назначайте адреса IPv6 хостам. В том числе убедитесь, что маршрутизаторы не отправляют RA IPv6. Если есть только записи A для имени, а не AAAA, хосты разрешают и используют IPv4, дальнейшая настройка не требуется.

1
John Mahowald 8 Янв 2022 в 06:32
В порядке. Это полезный пост. Что я, возможно, недостаточно ясно выразил в своем OP (сейчас отредактировано), так это то, что это должно работать, когда «равноправные» DNS-серверы недоступны. Это конкретное требование заключается в том, что мне нужно, чтобы localnetpriority работал, когда происходит прерывание сети, отделяющее этот сайт от других. Это означает, что сейчас это единственный доступный DNS-сервер. Таким образом, проблема, на которую нужно ответить, действительно связана с тем, как решить проблему с приоритетом локальной сети, когда DNS-сервер запрашивает сам себя.
 – 
Appleoddity
10 Янв 2022 в 17:13
Что касается IPv6 и использования локального хоста в целом. По умолчанию IPv6 назначается автоматически. Мы ничего не делаем с IPv6. И DNS-сервер «localhost» настроен как на интерфейсе IPv4, так и на интерфейсе IPv6 не мной, а Active Directory, когда сервер был повышен до контроллера домена. Я также думаю, что это сделало localhost первичным, а существующие DNS-серверы - вторичными и третичными. Все это, по-видимому, противоречит собственным передовым методам MS.
 – 
Appleoddity
10 Янв 2022 в 17:15