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

42

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

Допустим, у меня есть несколько интерфейсов, все активные, некоторые без указания DNS-сервера, некоторые говорят, что определяют его автоматически, а некоторые - вручную (в интерфейсе ipv4 И в интерфейсе ipv6).

Я спрашиваю ответ на этот общий вопрос, надеясь, что я знаю, как решить более конкретную проблему в Windows Vista - у меня есть два интерфейса, один с более низкой метрикой и DNS-сервер, указанный вручную. nslookup использует ЭТОТ DNS-сервер и правильно разрешает имена. Однако все другие приложения не могут разрешить имя, если я вручную не укажу DNS-сервер для другого интерфейса, который затем используют приложения. nslookup также использует DNS-сервер, указанный для этого другого интерфейса, как только он указан.

Благодарность

Artefacto
источник

Ответы:

27

Если я не ошибаюсь, это определяется порядком привязки сетевой карты в разделе «Дополнительные параметры» в папке сетевых подключений. Вы можете проверить это, изменив порядок привязки различных сетевых карт и запустив nslookup в качестве теста.

Чтобы расширить мой ответ, ссылаясь на статью, на которую ссылается Эван , вот выдержка из этой статьи:

Служба DNS-клиента запрашивает DNS-серверы в следующем порядке:

  1. Служба DNS-клиента отправляет запрос имени первому DNS-серверу в списке DNS-серверов предпочтительного адаптера и ожидает ответ в течение одной секунды.

  2. Если служба DNS-клиента не получает ответ от первого DNS-сервера в течение одной секунды, она отправляет запрос имени первым DNS-серверам на всех адаптерах, которые все еще находятся на рассмотрении, и ожидает ответа в течение двух секунд.

  3. Если служба DNS-клиента не получает ответ от какого-либо DNS-сервера в течение двух секунд, служба DNS-клиента отправляет запрос всем DNS-серверам на всех адаптерах, которые все еще находятся на рассмотрении, и ждет еще две секунды для ответа.

  4. Если служба DNS-клиента все еще не получает ответ от какого-либо DNS-сервера, она отправляет запрос имени всем DNS-серверам на всех адаптерах, которые все еще находятся на рассмотрении, и ждет ответа в течение четырех секунд.

  5. Если служба DNS-клиента не получает ответ от какого-либо DNS-сервера, DNS-клиент отправляет запрос всем DNS-серверам на всех адаптерах, которые все еще находятся на рассмотрении, и ожидает ответа в течение восьми секунд.

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

joeqwerty
источник
4
Этот процесс изменился в Windows 10, хотя я не знаю новый процесс, который, как я знаю, выше не относится к Windows 10, см. Этот блог - blogs.technet.microsoft.com/networking/2015/08/14/…
Роберт
14

В Windows 10 (и Windows Server 2016) вы должны обновлять метрику каждого интерфейса в нужном вам порядке.

  1. Перейти к панели управления> Сеть и Интернет> Сетевые подключения
  2. Щелкните правой кнопкой мыши нужное соединение (Соединение с более высоким приоритетом)
  3. Нажмите Свойства> Интернет-протокол версии 4
  4. Нажмите Свойства> Дополнительно
  5. Снимите флажок «Автоматическая метрика»
  6. Введите 10 в «Метрика интерфейса»
  7. Нажмите ОК

Ссылки:

Я использовал 10 для моей локальной сети, 20 для WLAN и 100 для интерфейсов VPN (я предпочитаю локальный DNS на работе, для других это может быть наоборот). Запомните более низкую метрику = более высокий приоритет .

См. Эту статью в поддержке Microsoft для объяснения функции автоматической метрики для маршрутов IPv4 .

Джейкоб Эванс
источник
+1 Для меня в Windows 10 это было единственное решение, спасибо.
День
Изменение метрики влияет только на выбор маршрута. Это не влияет на то, какой DNS-сервер будет использоваться.
Jruv
14 возражений и личного опыта не согласны, я согласен, что не должно, но разработчики в Microsoft, казалось, закодировали это таким образом.
Джейкоб Эванс
8

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

Эван Андерсон
источник
3

У меня была точно такая же проблема. Я провел день, пытаясь понять это. Теперь я знаю, и это работает как шарм.

Если у вас есть несколько сетевых карт и если есть, укажите DNS-сервер в каждой из них. Знаете ли вы, какой DNS-сервер будет использоваться в конце концов?

Ну, вы можете проверить это на практике.

nslookup 192.168.3.6

Итак, вы видите сервер, который на самом деле использует ваш компьютер

Вопрос в том, от чего зависит, какие окна DNS-сервера выберут использовать и как мы можем это изменить.

Нам особенно это нужно, когда мы используем VPN-клиентов.

Ответ от qwerty2010 правильно и правильно. Но вы можете использовать его ТОЛЬКО, когда у вас есть сетевая карта в панели управления - сеть и центр общего доступа - изменить настройки адаптера - список сетевых карт

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

Итак, вы идете в Центр управления сетями и общим доступом -> Изменить настройки адаптера -> Дополнительно -> Расширенные настройки -> и переместитесь вверх с помощью DNS, который вы хотите использовать. (Вверх нужно поднять его вверх).

Однако, если, например, вы используете Shrew vpn client - у вас не будет никаких сетевых карт.

Чем ты занимаешься.

Вы открываете реестр.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

И вы смотрите в подпапках 0000, 0001 и т. Д. Папку с

DriverDesc = Shrew Soft Virtual Adapter

хорошо. Затем вы копируете в буфер обмена

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}

Теперь иди

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]

а ты открой key = Bind. Вы увидите список, как это

\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Все, что вам нужно сделать, это положить на вершину

\Device\{B498E7DE-7257-48F6-AD32-60E470030F05}
\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Вот и все. Перезагрузка не требуется.

Теперь ваши окна будут использовать DNS, указанный в shrew vpn nic, когда вы используете vpn соединение.

Alex
источник
0

Поскольку это может помочь вам или другим, вы можете отключить циклическое использование Windows перечисленных DNS, чтобы сделать использование DNS более предсказуемым. Попробуйте установить RoundRobin=0в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters( ссылка ), чтобы отключить циклический перебор DNS.

Существует также «тайм-аут» для ротации серверов, вы также можете попробовать установить его на ноль :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0
Игиты
источник
В соответствии с упомянутой «ссылкой» (ссылкой) это относится к настройке DNS-сервера для предоставления нескольких IP-адресов для некоторых запрашиваемых полных доменных имен в порядке сортировки, повернутой от запроса к запросу. Это не имеет ничего общего с вопросом о том, как распознаватель DNS (клиент) выбирает DNS-сервер для запроса.
Томас Урбан
-13

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

Вы также можете настроить файл с C:\Windows\System32именем «hosts» без расширения. Это позволяет перенаправлять URL-запросы вместо отправки в стандартный DNS. На локальный сервер (который должен быть запущен и прослушивать порт 80)

KdgDev
источник
18
В основном все, что вы здесь сказали, неверно
MDMarra
3
И еще -1 для того, чтобы даже упомянуть гнойную мерзость, которая является файлом hosts.
Максимус Минимус
Способ быть информативным MarkM
KdgDev
4
@WebDevHobo - В комментарии слишком много поправок, но я коснусь основных моментов. 1) У OP есть компьютер с несколькими интерфейсами (скорее всего, отдельными сетевыми картами), и для каждого из них определен отдельный DNS. В контексте вопроса он явно работает на нескольких внутренних DNS-серверах или имеет несколько предпочитаемых внешних DNS-серверов - поле, вероятно, является многодомным. 2) Вам не нужно задавать адрес внутреннего DNS-сервера вручную, если вы используете его DHCP в конфигурации DHCP-сервера для этого пула адресов. 3) Путь к файлу хостов: c: \ windows \ system32 \ drivers \ etc
MDMarra
3
И файл HOSTS не должен использоваться в этой ситуации или практически никогда, если вы не занимаетесь локальной разработкой и не используете заголовки HOST или что-то подобное и вам не требуется полное доменное имя для локального разрешения. И серверу не обязательно должен быть запущен порт 80, независимо от того, используется ли файл HOSTS для разрешения имен или DNS-сервер. Просто добавьте: номер_порта в конец URL. HOSTS не заботится о порте, так же как и DNS - это способ преобразования имени хоста в IP-адрес и ничего более.
MDMarra