Як Windows вирішує, який DNS-сервер використовувати для вирішення імен?


41

Який алгоритм використовує Windows, щоб вирішити, який DNS-сервер він запитуватиме для вирішення імен?

Скажімо, у мене є кілька інтерфейсів, всі активні, деякі з не вказаним сервером dns, деякі з них визначають його автоматично, а деякі з ним визначаються вручну (в інтерфейсі ipv4 AND інтерфейс ipv6).

Я прошу відповісти на це загальне запитання, сподіваючись, що я знаю, як вирішити більш конкретну проблему в Windows Vista - у мене два інтерфейси, один нижній показник і DNS-сервер, вказані вручну. nslookup використовує ЦЕЙ DNS-сервер і правильно розв’язує імена. Однак усі інші програми не можуть вирішити ім'я, якщо я не вручну вказати DNS-сервер для іншого інтерфейсу, який потім використовують програми. nslookup також використовує DNS-сервер, вказаний для цього іншого інтерфейсу, як тільки він буде вказаний.

Дякую

Відповіді:


27

Якщо я не помиляюсь, це визначається порядком прив’язки NIC у розширених налаштуваннях у папці мережевих з'єднань. Ви можете перевірити це, змінивши порядок зв'язування різних NIC і запустивши 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 є адаптер, який вказується першим у порядку зв'язування.


4
Цей процес змінився в Windows 10, хоча я не знаю нового процесу. Я знаю, що вищезгадане не стосується Windows 10, дивіться цей блог - blogs.technet.microsoft.com/networking/2015/08/14/…
Роберт

14

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

  1. Панель керування Goto> Мережа та Інтернет> Мережеві з'єднання
  2. Клацніть правою кнопкою миші потрібне з'єднання (вищий пріоритетний зв'язок)
  3. Клацніть Властивості> Інтернет-протокол версії 4
  4. Клацніть Властивості> Додатково
  5. Зніміть прапорець "Автоматичний показник"
  6. Введіть 10 у "Метрику інтерфейсу"
  7. Натисніть кнопку ОК

Список літератури:

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

Дивіться цю статтю в службі підтримки Microsoft для пояснення функції автоматичної метрики для маршрутів IPv4 .


+1 Для мене в Windows 10 це було єдине рішення, дякую.
GµårÐïåñ

Змінення метрики впливає лише на вибір маршруту. Це не впливає на те, який DNS-сервер буде використовуватися.
Jruv

14 оновлень та особистого досвіду не згодні, я не згоден, але це не могло, але, здається, розробники у Microsoft мали кодування.
Джейкоб Еванс

8

На цій сторінці описаний алгоритм, який використовує Windows для виконання запитів DNS. Це не достатньо глибоко, щоб дати вам всі відповіді, які ви шукаєте, але деякий час, коли ви будете знаходитись, слід визначити, що відбувається у вашій конкретній ситуації.


3

У мене була точно така ж проблема. Я провів день, намагаючись зрозуміти це. Тепер я знаю, і це працює як шарм.

Якщо у вас є декілька мережевих карток і якщо потрібно вказати DNS-сервер у кожній з них. Чи знаєте ви, який нарешті буде використовуватися DNS-сервер?

Що ж, ви можете перевірити це на практиці.

nslookup 192.168.3.6

Отже, ви бачите сервер, який ваш ПК фактично використовує

Питання - від того, що залежить, які вікна DNS-сервера обирають використовувати і як ми можемо це змінити.

Особливо це нам потрібно, коли ми використовуємо VPN-клієнти.

Відповідь від qwerty2010 правильно і правильно. Але ви можете використовувати його ТОЛЬКІ, коли у вас є NIC на панелі керування - мережа та центр обміну - зміна налаштувань адаптера - список ніків

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

Таким чином, ви переходите до Мережі та центру обміну -> Змінення налаштувань адаптера -> Додатково -> Розширені налаштування -> і ви переміщаєте НАЗАД з DNS, який хочете використовувати. (Вгору потрібно підняти її вгору).

Однак якщо ви, наприклад, використовуєте клієнт Shrew vpn, у вас не буде жодної nics.

Що ти робиш.

Ви відкриваєте реєстр.

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, вказаний у глибокому vpn nic, коли ви використовуєте vpn-з'єднання.


0

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

Існує також "тайм-аут" для обертання серверів, ви також можете спробувати встановити його в нуль :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0

Відповідно до згаданої "посилання" (посилання), це стосується налаштування DNS-сервера для надання декількох IP-адрес для деяких запитуваних FQDN у порядку сортування, що перетворюється з запиту на запит. Це не має нічого спільного з питанням про те, як DNS-клієнт (клієнт) вибирає DNS-сервер для запиту.
Томас Урбан

-13

Це не вирішується випадковим чином. Ви підключені до маршрутизатора, який отримує його IP від ​​компанії, яка має DNS-сервери. Вони отримують ваш запит, якщо ви не вручну змінили IP-адресу на інший DNS, наприклад: OpenDns . Або, можливо, ви вирішили мати власні DNS-сервери. Це теж працює. Просто введіть IP-адреси в мережевий центр, і все повинно бути добре. І так, їх доведеться встановити вручну.

Ви також можете налаштувати файл під C:\Windows\System32назвою "хости" без розширення. Це дозволяє вам переадресовувати URL-запити, а не надсилати до стандартної DNS. На локальний сервер (який повинен працювати і слухати порт 80)


18
В основному все, що ви тут сказали, невірно
MDMarra

3
І додатковий -1 для навіть згадування про гнусну гидоту, що є файлом хостів.
Максим Мінімус

Шлях бути інформативним MarkM
KdgDev

4
@WebDevHobo - насправді занадто багато, щоб виправити в коментарі, але я торкнуся важливих моментів. 1) ОП має комп'ютер з декількома інтерфейсами (швидше за все, окремими NIC), і кожен має інший DNS, визначений на ньому. У контексті запитання він чітко працює з декількома внутрішніми серверами DNS або має кілька бажаних зовнішніх серверів DNS - вікно, ймовірно, є багатодомним. 2) Вам не потрібно встановлювати внутрішню адресу сервера DNS вручну, якщо ви використовуєте DHCP в конфігурації сервера DHCP для цього пулу адрес. 3) Шлях до файлу хостів - c: \ windows \ system32 \ drivers \ тощо
MDMarra

3
І файл HOSTS не повинен використовуватися в цій ситуації або практично ніколи, якщо ви не займаєтеся локальною розробкою та використовуєте заголовки HOST або щось подібне і вам не потрібен FQDN для локального вирішення. І сервер не потребує запуску порту 80, використовуючи файл HOSTS для вирішення імен або DNS-сервер. Просто додайте: port_number до кінця URL-адреси. HOSTS не піклується про порт, як і DNS - це спосіб перекладати ім'я хоста в IP-адресу і більше нічого.
MDMarra
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.