Windows 10 приоритет dns серверов

Время на прочтение
3 мин

Количество просмотров 110K

image

TL;DR: DNS-резолвер в Windows 10 отправляет запросы на все известные системе адреса DNS-серверов параллельно, привязывая запрос к интерфейсу, и использует тот ответ, который пришел быстрее. В случае, если вы используете DNS-сервер из локального сегмента, такое поведение позволяет вашему провайдеру или злоумышленнику с Wi-Fi-точкой подменять записи DNS, даже если вы используете VPN.

Современные версии Windows добавляют головные боли активным пользователям VPN. DNS-резолвер до Windows 7 включительно имел предсказуемое поведение, совершая запросы к DNS-серверам в порядке очереди и приоритета DNS-серверов, в общем-то, как и все остальные ОС. Это создавало так называемый DNS Leak (утечка DNS-запроса через внешний интерфейс при подключенном VPN) только в том случае, если DNS-сервер внутри VPN-туннеля не ответил вовремя, или ответил ошибкой, и, в целом, не являлось такой уж вопиющей проблемой.

Windows 8

С выходом Windows 8, Microsoft добавила весьма интересную функцию в DNS-резолвер, которая, как я могу судить по Google, осталась совершенно незамеченной: Smart Multi-Homed Name Resolution. Если эта функция включена (а она включена по умолчанию), ОС отправляет запросы на все известные ей DNS-серверы на всех сетевых интерфейсах параллельно, привязывая запрос к интерфейсу. Сделано это было, вероятно, для того, чтобы уменьшить время ожидания ответа от предпочитаемого DNS-сервера в случае, если он по каким-то причинам не может ответить в отведенный ему таймаут (1 секунда по умолчанию), и сразу, по истечении таймаута, отдать ответ от следующего по приоритету сервера. Таким образом, в Windows 8 и 8.1 все ваши DNS-запросы «утекают» через интернет-интерфейс, позволяя вашему провайдеру или владельцу Wi-Fi-точки просматривать, на какие сайты вы заходите, при условии, что ваша таблица маршрутизации позволяет запросы к DNS-серверу через интернет-интерфейс. Чаще всего такая ситуация возникает, если использовать DNS-сервер внутри локального сегмента, такие DNS поднимают 99% домашних роутеров.

Данную функциональность можно отключить, добавив в ветку реестра:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
Параметр типа DWORD с названием:
DisableSmartNameResolution
и любым значением, отличным от нуля, что возвращало старое поведение резолвера.

Windows 10

Хоть Windows 8 и 8.1 отправляли все ваши запросы без вашего ведома через публичный интерфейс, совершить подмену DNS-ответа таким образом, чтобы перенаправить вас на поддельный сайт, было проблематично для злоумышленника, т.к. ОС бы использовала подмененный ответ только в том случае, если не удалось получить правильный ответ от предпочитаемого DNS-сервера, коим является сервер внутри шифрованного туннеля.
Все изменилось с приходом Windows 10. Теперь ОС не только отправляет запрос через все интерфейсы, но и использует тот ответ, который быстрее пришел, что позволяет практически всегда вашему провайдеру перенаправить вас на заглушку о запрещенном сайте или злоумышленнику на поддельный сайт. Более того, способ отключения Smart Multi-Homed Name Resolution, который работал в Windows 8.1, не работает на новой версии.
Единственный приемлемый (хоть и не самый надежный) способ решения проблемы — установить DNS на интернет-интерфейсе вне локального сегмента, например, всем известные 8.8.8.8, однако, он не поможет в случае с OpenVPN. Для OpenVPN единственным (и некрасивым) решением является временное отключение DNS на интернет-интерфейсе скриптами.

UPD: ранее в статье рекомендовалось использовать параметр redirect-gateway без def1 для OpenVPN. Оказывается, Windows возвращает маршрут по умолчанию от DHCP-сервера при каждом обновлении IP-адреса, и через какое-то время весь ваш трафик начинал бы ходить в обход VPN. На данный момент, красивого решения не существует.

UPD2: Я написал плагин.

UPD3: ​Windows 10, начиная с Creators Update, теперь отправляет DNS-запросы на все известные адреса DNS-серверов по порядку, а не параллельно, начиная со случайного интерфейса. Чтобы повысить приоритет конкретного DNS, необходимо уменьшить метрику интерфейса. Сделал патч для OpenVPN, надеюсь, его включат в 2.4.2: https://sourceforge.net/p/openvpn/mailman/message/35822231/

UPD4: Обновление вошло в OpenVPN 2.4.2.

В Windows 10 при активном VPN подключении в режиме Force Tunneling (включена опция “Use default gateway on remote network”/ “Использовать основной шлюз в удаленной сети”) для разрешения имен через службу DNS используются DNS сервера и суффиксы, настроенные для VPN подключения. Соответственно, вы теряете возможность резолвить DNS имена в своей локальной сети и пользоваться Интернетом через внутреннюю LAN.

При этом с Windows 10 можно выполнить ping до ресурсов в вашей LAN сети (пропингуйте ваш шлюз, соседний компьютер или принтер), но по имени они не доступны, т.к. Windows пытается разрешить имена в локальной сети через DNS сервера, указанные для VPN соединения.

В Google я нашел рекомендации по отключению IPv6 на локальном (LAN) подключении и это работает (если вы хотите использовать Force-Tunneling).

Если для VPN подключения используется режим Split Tunneling (снята галка “Use default gateway on remote network”), вы можете пользоваться интернетом через свою локальную сеть, но не можете резолвить DNS адреса в удаленной VPN сети (в этом случае не помогает отключение IPv6).

Нужно понимать, что Windows отправляет DNS запрос с сетевого интерфейса, у которого высший приоритет (меньшее значение метрики интерфейса). Допустим, ваше VPN подключение работает в режиме Split Tunneling (вы хотите пользоваться интернетом через свою LAN и корпоративными ресурсами через VPN подключение).

С помощью PowerShell проверьте значение метрик всех сетевых интерфейсов:

Get-NetIPInterface | Sort-Object Interfacemetric

Get-NetIPInterface

На картинке выше видно, что у локального Ethernet подключения указана более низкая метрика (25), чем у VPN интерфейса (в этом примере 100). Соответственно, DNS трафик идет через интерфейс с более низким значением метрики. Это значит, что ваши DNS запросы отправляются на ваши локальные DNS сервера, а не на DNS сервера VPN подключения. Т.е. в такой конфигурации вы не можете резолвить адреса во внешней VPN сети.

Кроме того, нужно обязательно упомянуть новую фичу DNS клиента в Windows 8.1 и Windows 10. В этих версиях ОС для максимально быстрого получения ответов на DNS запросы был добавлен функционал DNS релолвера под названием Smart Multi-Homed Name Resolution (SMHNR). При использовании SMHNR система по умолчанию отправляет DNS запросы на все известные системе DNS сервера параллельно и использует тот ответ, который пришел быстрее. Это не безопасно, т.к. потенциально внешние DNS сервера (которые указаны в вашем VPN подключении) могут видеть ваши DNS запросы (утечка ваших DNS запросов вовне). Вы можете отключить SMHNR в Windows 10 с помощью групповой политики:

Computer Configuration -> Administrative Templates -> Network -> DNS Client-> Turn off smart multi-homed name resolution = Enabled.

Turn off smart multi-homed name resolution политика DNS клиента

Или командами (для Windows 8.1):

Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name DisableParallelAandAAAA -Value 1 -Type DWord

В Windows 10 Creators Update (1709) и выше DNS запросы отправляются на все известные DNS сервера по порядку, а не параллельно. Вы можете увеличить приоритет конкретного DNS, если уменьшите его метрику.

Соответственно, изменение метрики позволит вам отправлять DNS запросы через тот сетевой интерфейс (LAN или VPN), разрешение имен через который для вас более приоритетно.

Итак, чем меньше значение метрики интерфейса, тем больше приоритет такого подключения. Windows выставляет метрику IPv4 сетевым интерфейсам автоматически в зависимости от их скорости и типа. Например, для LAN подключения с скоростью >200 Мбит значение метрики интерфейса 10, а для беспроводного Wi-FI подключения со скоростью 50-80 Мбит метрика 50 (см. таблицу https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes).

Вы можете изменить метрику интерфейса через графический интерфейс, PowerShell или команду netsh.

Например, вы хотите, чтобы DNS запросы отправлялись через VPN подключение. Вам нужно увеличить метрики ваших локальных LAN подключений, чтобы они стали больше 100 (в моем примере).

Откройте Панель управления -> Сеть и Интернет -> Сетевые подключения, откройте свойства вашего Ethernet подключения, выберите свойства протокола TCP/IPv4, перейдите на вкладку “Дополнительные параметры TCP/IP”. Снимите галку “Автоматическое назначение метрики” и измените метрику интерфейса на 120.

установить метрику LAN интерфейса вручную в Windows 10

Тоже самое можно сделать командами PowerShell управления сетью (используйте индекс вашего LAN интерфейса, полученный с помощью командлета
Get-NetIPInterface
):

Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120

Или netsh (нужно указать имя вашего LAN подключения)

netsh int ip set interface interface="Ethernet 3" metric=120

Аналогично вы можете уменьшить значение метрики в свойствах VPN подключения.

метрика для VPN подключения

Также вы можете изменить настройки вашего VPN подключения, изменив режим на SplitTunneling и указать DNS суффикс для подключения c помощью PowerShell:

Get-VpnConnection
Set-VpnConnection -Name "VPN" -SplitTunneling $True

Set-VpnConnection -Name "VPN" -DnsSuffix yourdomain.com

To specifically answer the question, Windows uses the first DNS records associated with the highest ranking network interface (an InterfaceMetric with a lower value has higher rank). Examples below show how to obtain and change that interface ranking value. When there are no manual DNS servers configured on an interface, Windows relies on DNS servers provided by any DHCP server associated with a network interface.

A common scenario where this issue pops up is when you have one or more VPNs that provide a DNS server for resources defined for that virtual network.

However, the public DNS server assigned by a WiFi router is taking precedent and either claiming that hosts don’t exist or are responding with the unexpected IP address.

To resolve this, we need to explicitly dictate which network interface should take precedence by specifying its associated «metric». (Currently, this metric appears to only be settable via PowerShell … see below)

Change Metric of Network Interface (e.g., the VPN)

First, list local interfaces and their metrics

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

Then, set metric of network interface

(NOTE: Make sure you do this from an administrative PowerShell console)

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

Testing Effect of Interface Metric

In this example, before changing the metric value, pinging a local resource that also has a publicly-defined IP returns its public IP (instead of the internal IP returned by my VPN’s DNS server).

Example When Bad! :(

> 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

Example When Good! :)

After changing the metric on the network interface, I now see the expected internal IP address that is returned from the DNS server associated with my 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

На чтение 7 мин Просмотров 10.6к.

Людмила Бурым

Людмила Бурым

Более 20 лет опыта в IT (программирование баз данных, постановка задач по разработке ПО, сопровождение пользователей, написание технической документации и отчетов) в сфере управления финансами.

Задать вопрос

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

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

Содержание

  1. Что такое ДНС
  2. Как узнать текущий адрес DNS-сервера
  3. Проверить исправность
  4. Альтернативные адреса
  5. Как изменить предпочитаемый и альтернативный DNS-сервер
  6. В интерфейсе Windows
  7. С помощью командной строки
  8. В Android
  9. В маршрутизаторе
  10. Заключение

Что такое ДНС

Все ресурсы Интернет имеют свой уникальный идентификатор, состоящий из последовательности цифр — IP-адрес. Но пользователям гораздо проще оперировать наименованиями сайтов или доменными именами, например google.com или yandex.ru.

За перевод доменных имен, состоящих из символов, в IP-адреса отвечает Domain Name System, которая имеет общепринятое сокращение DNS и в переводе означает «система доменных имен».

ДНС представляет собой базу данных, содержащую таблицу доменных имен ресурсов и соответствующих этим ресурсам IP-адресов. Для перехода на сайт устройство посылает запрос к DNS-серверу, который доменные имена переводят в IP-адреса.

В операционной системе компьютера есть возможность настроить автоматическое определение DNS-сервера. При такой настройке, скорее всего, обращение будет идти к серверу, предоставленному от провайдера. Однако, такой сервер может работать со сбоями или иметь необновленную базу наименований сайтов. Чтобы это исправить, можно воспользоваться альтернативным адресом, который задается вручную.

Чтобы это выяснить, можно воспользоваться несколькими способами:

  1. Запустить командную строку (Win+R, затем cmd) и ввести команду ipconfig /all. Результатом работы команды будет вывод ряда строк, среди которых нужно найти строчку «DNS-серверы», в нем будут указаны текущие адреса ДНС-серверов.
    Результат работы команды ipconfig
  2. В командной строке ввести команду nslookup:
    Результат, выданый командой nslookup
  3. В настройках сети найти активное подключение и перейти в его свойства:
    Из настроек сети

Если адрес такой же, как на скриншоте или в конце стоит 0.1, то получен IP-адрес маршрутизатора. При таком результате запрос сначала будет отправляется на роутер, а он перенаправит его на используемые DNS-сервера.

Проверить исправность

Удостовериться в исправности текущего DNS сервера можно, определив скорость доступа к какому-либо сайту. Удобнее всего так:

  1. В Windows 10 нажмите «Пуск» — «Служебные Windows» — «Командная строка».
  2. Наберите ping и имя любого сайта, например yandex.ru
    Проверка работоспособности сервера
  3. Посмотрите полученный результат. Если IP-адрес ресурса присутствует, т.е он доступен, и время отклика небольшое, значит ДНС сервер работает нормально.

Альтернативные адреса

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

В этом случае следует воспользоваться DNS серверами сервисов крупных компаний. Они имеют хорошую репутацию и высокую производительность. Ниже приведена таблица надежных ДНС-серверов и их адресов:

Сервис Предпочитаемый IP-адрес Альтернативный IP-адрес
Google 8.8.8.8 8.8.4.4
OpenDNS 208.67.222.222 208.67.220.220
Яндекс 77.88.8.8 77.88.8.1
Cloudflare 1.1.1.1 1.0.0.1
Quad9 9.9.9.9 149.112.112.112

При выборе сервера учитывайте его быстродействие, стабильность работы, физическое расположение, а также дополнительные свойства. Например, Open DNS и Quad9 создадут дополнительную защиту от вредоносного контента, который он автоматически устанавливает и блокирует.

Чтобы сделать выбор предпочтительного ДНС-сервера, можно после его установки пропинговать некоторые сайты или воспользоваться специальными программами, например mxtoolbox.com.

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

При запросе к DNS серверу первым будет использоваться тот, который установлен как предпочитаемый. В случае его недоступности, операционная система автоматически переключится сервер со значением альтернативный. Поэтому в настройках всегда необходимо указывать адреса обоих серверов. Рассмотрим различные способы изменения ДНС сервера.

В интерфейсе Windows

Для Windows 7/10/11 изменить эти адреса несложно. Перейдите в сетевые настройки (Пуск-Параметры-Сеть и интернет-Настройка параметров адаптера), откройте активное соединение, выберите TCP/IPv4 или TCP/IPv6 и перейдите к свойствам.

Сделайте активной радиокнопку «Использовать следующие адреса DNS-серверов» и во всплывающем окне добавьте новые адреса. В примере использованы айпишники от Google.

предпочтительный днс сервер на компьютере на винде

Изменение ДНС-сервера для ОС Windows 10.

С помощью командной строки

Если вы предпочитаете делать настройки операционной системы в режиме командной строки, то нужно будет выполнить несколько простых команд.

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

просмотр интерфейса сети для смены днс

Вывод имени подключения.

Затем выполнить команду утилиты netsh для изменения DNS-сервера:

netsh interface ip set dns name=»Имя соединения» source=»static» address=»А.А.А.А» primary, где ключ Имя соединения – имя активной сети, А.А.А.А – IP-адрес выбранного ДНС-сервера, ключ принимает значение primary для предпочитаемого сервера, secondary – для альтернативного.

Например, для сети, приведенной в примере, при выборе сервера от Google, команды установки новых адресов будут выглядеть так:

ввод предпочитаемого и альтернативного днс в командной строке

Пример изменения адресов в командной строке.

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

В Android

В операционной системе Android также можно настроить новый DNS сервер для улучшения скорости и безопасности соединения.

Для изменения настроек DNS в Android необходимо зайти в настройки устройства и перейти в меню «Wi-Fi» или «Сеть и интернет». Затем нужно выбрать сеть — подключение по Wi-Fi или мобильную сеть и нажать на значок шестеренки и открыть дополнительные опции. Установить статические параметры IP — откроются дополнительные параметры, в которых в разделе «DNS1» установить адрес предпочтительного сервера, а в «DNS2» — альтернативного.

смена днс на смартфоне под android

Назначение нового сервера в Андроид.

В маршрутизаторе

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

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

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

Таким образом, настройка DNS сервера в роутере – это простой и эффективный способ оптимизировать работу всей сети и обеспечить более быстрый доступ в Интернет.

Заключение

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

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

  • Remove From My Forums
  • Вопрос

  • Добрый день, меня интересует работа Предпочитаемого и Альтернативного DNS-сервера в настройках сетевого интерфейса для Windows 10.

    Ситуация следующая, есть 2 днс сервера внутри рабочей сети, пользователям в настройках сетевого интерфейса они оба прописаны (один в качестве предпочитаемого, второй альтернативного), так вот сам вопрос: 

    Допустим предпочитаемый днс сервер недоступен, как быстро произойдет обращение к альтернативному? После возвращения в строй предпочитаемого как быстро компьютер переключится на него обратно? Как вообще работает этот механизм?

Ответы

  • Добрый день,

      Windows 10 опрашивает все адреса прописанных DNS серверов одновременно,
    смотрите

    • Помечено в качестве ответа

      3 декабря 2018 г. 8:39

  • Добрый день,

      Windows 10 опрашивает все адреса прописанных DNS серверов одновременно,
    смотрите

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

    • Предложено в качестве ответа
      Alexander RusinovModerator
      4 декабря 2018 г. 20:07
    • Помечено в качестве ответа
      Michael L4n3
      19 декабря 2018 г. 14:41

  • Windows 10 пропал значок wifi и нет интернета
  • Windows 10 пропали значки в меню пуск
  • Windows 10 принтеры и сканеры на рабочий стол
  • Windows 10 прозрачный заголовок окна
  • Windows 10 при запуске приложений синий экран