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

Jeff Moser просто отправил хорошую статью об этом объяснении входов и выходов, квитируя и т.д.

http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html

42
задан 6 March 2019 в 18:54
7 ответов

Если я не ошибаюсь, это определяется порядком привязки NIC в Расширенных настройках в папке сетевых соединений. Можно проверить его путем изменения обязательного порядка различного NIC и выполнения nslookup как тест.

Чтобы подробно остановиться на моем ответе, цитируя статью, что связанный Evan, вот является выборкой от упомянутой статьи:

Клиентская служба 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, являющемся адаптером, это перечислило сначала в обязательном порядке.

27
ответ дан 28 November 2019 в 19:43

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

8
ответ дан 28 November 2019 в 19:43

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

Можно также скорректировать файл в C:\Windows\System32 названный "хостами" без расширения. Это позволяет Вам перенаправлять URL-запросы вместо того, чтобы быть отправленным в стандартный DNS. К локальному серверу (который должен работать и слушать порт 80),

-13
ответ дан 28 November 2019 в 19:43
  • 1
    В основном все you' ve, сказанный здесь, является неправильным –  MDMarra 13 November 2009 в 05:57
  • 2
    И еще-1 для того, чтобы даже упомянуть гноящееся отвращение, которое является файлом hosts. –  Maximus Minimus 13 November 2009 в 10:47
  • 3
    Способ быть информативным MarkM –  KdgDev 13 November 2009 в 16:18
  • 4
    @WebDevHobo - There' s действительно слишком много для исправления в комментарии, но I' ll затрагивают большие точки. 1) OP имеет компьютер с несколькими интерфейсами (скорее всего, разделяют NICs), и каждому определили различный DNS на нем. В контексте вопроса он ясно выполняет несколько внутренних серверов DNS или имеет несколько предпочтительных внешних серверов DNS - поле является, вероятно, многосетевым. 2) Вы don' t должен установить внутренний DNS server' s обращаются вручную при использовании DHCP это в DHCP server' s конфигурация для того пула адресов. 3) Путь к файлу hosts является c:\windows\system32\drivers\etc –  MDMarra 13 November 2009 в 16:38
  • 5
    И Файл hosts shouldn' t использоваться в этой ситуации, или практически когда-либо, если Вы не делаете локальную разработку и используете заголовки ХОСТА или что-то вроде подобного и нуждаетесь в FQDN для разрешения локально. И сервер не должен выполнять порт 80 ли с помощью Файла hosts для определения имен или сервера DNS. Просто добавьте: port_number в конец URL. ХОСТЫ doesn' t заботятся о порте, так же, как DNS doesn' t - это - способ перевести имя хоста в IP-адрес и ничто больше. –  MDMarra 13 November 2009 в 16:40

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

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

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0
0
ответ дан 28 November 2019 в 19:43

I had exactly the same problem. I've spent a day trying to figure it out. Now I know and it works like a charm.

If you have several network cards and if if specify DNS server in each of them. Do you know what DNS server will be used at last?

Well you can check it via practice.

nslookup 192.168.3.6

So you see the server that your PC actually use

The question is - From what depends what DNS server windows choose to use and how we can change it.

We especially need it when we use VPN clients.

The answer from qwerty2010 is right and correct. But you can use it ONLY when you have NIC in control panel - network and sharing center - change adapter settings - list of nics

Only if you see the nic that is reponsible for your VPN client you can use graphical way to point windows what dns server (that is specified on a particular nic) you'd like to use.

So you go Network and sharing centre -> Change adapter settings -> Advanced -> Advanced settings -> and you move UP the nic with DNS you'd like to USE. (UP you need to lift it UP).

However if for instance you use Shrew vpn client - you will not have any nics.

What do you do.

You open registry.

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

And you look in subfolders 0000, 0001 etc the folder with

DriverDesc = Shrew Soft Virtual Adapter

fine. Then you copy to the clipboard

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

Now you go

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

and you open key = Bind. You'll see the list like this

\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}

All you have to do is put to the top

\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}

That's all. There is no need to reboot.

Now your windows will use DNS specified in shrew vpn nic when you use vpn connection.

3
ответ дан 28 November 2019 в 19:43

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

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

Ссылки:

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

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

14
ответ дан 28 November 2019 в 19:43

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

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

Однако публичный DNS-сервер, назначенный WiFi-маршрутизатором, имеет прецедент и либо заявляет, что хосты не существуют, либо отвечают с неожиданным IP-адресом.

Чтобы решить эту проблему, нам нужно явно указать, какой сетевой интерфейс должен иметь приоритет, указав связанную с ним «метрику». (В настоящее время эта метрика, похоже, может быть установлена ​​только через PowerShell ... см. Ниже )

Изменить метрику сетевого интерфейса (например, VPN)

Сначала перечислите локальные интерфейсы и их метрики

C:\> Get-NetIPInterface | Select-Object -Property InterfaceAlias, InterfaceMetric | Sort-Object -Property InterfaceMetric

InterfaceAlias               InterfaceMetric
--------------               ---------------
vEthernet (DockerNAT)                     15
Npcap Loopback Adapter                    25
Ethernet 11                               25
Local Area Connection* 1                  25
Local Area Connection* 2                  25
Npcap Loopback Adapter                    25
Ethernet 2                                35
Wi-Fi                                     55
Bluetooth Network Connection              65
Loopback Pseudo-Interface 1               75
MY VPN                                   200   <--- There's my NIC with my fave DNS
vEthernet (Default Switch)              5000

Затем установите метрику сетевого интерфейса

(ПРИМЕЧАНИЕ. Убедитесь, что вы делаете это из административной консоли PowerShell)

C:\>  Set-NetIPInterface -InterfaceAlias "MY VPN" -InterfaceMetric 10
C:\> Get-NetIPInterface | Select-Object -Property InterfaceAlias, InterfaceMetric | Sort-Object -Property InterfaceMetric

InterfaceAlias               InterfaceMetric
--------------               ---------------
MY VPN                                    10   <--- Awesome!!! My fave DNS is now on top!!
vEthernet (DockerNAT)                     15
Npcap Loopback Adapter                    25
Ethernet 11                               25
Local Area Connection* 1                  25
Local Area Connection* 2                  25
Npcap Loopback Adapter                    25
Ethernet 2                                35
Wi-Fi                                     55
Bluetooth Network Connection              65
Loopback Pseudo-Interface 1               75
vEthernet (Default Switch)              5000

Эффект тестирования метрики интерфейса

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

Пример плохого! : (

> ping 10640-TEST

Pinging 10640-TEST.example.com [XX.163.171.155] with 32 bytes of data:
Reply from XX.163.171.155: bytes=32 time=80ms TTL=45
Reply from XX.163.171.155: bytes=32 time=76ms TTL=45

Пример хорошего результата!:)

После изменения метрики в сетевом интерфейсе я теперь вижу ожидаемый внутренний IP-адрес, который возвращается с DNS-сервера, связанного с моей VPN:

> ping 10640-TEST

Pinging 10640-TEST.example.com [192.168.100.44] with 32 bytes of data:
Reply from 192.168.100.44: bytes=32 time=42ms TTL=127
Reply from 192.168.100.44: bytes=32 time=52ms TTL=127
13
ответ дан 2 April 2020 в 21:27

Теги

Похожие вопросы