Не работает разрешение имен DNS при активном VPN подключении в Windows 10
В 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
На картинке выше видно, что у локального 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.
Или командами (для 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.
Тоже самое можно сделать командами PowerShell управления сетью (используйте индекс вашего LAN интерфейса, полученный с помощью командлета Get-NetIPInterface ):
Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120
Или netsh (нужно указать имя вашего LAN подключения)
netsh int ip set interface interface=»Ethernet 3″ metric=120
Аналогично вы можете уменьшить значение метрики в свойствах VPN подключения.
Также вы можете изменить настройки вашего VPN подключения, изменив режим на SplitTunneling и указать DNS суффикс для подключения c помощью PowerShell:
Избавляемся от DNS Leak в Windows 10 — свой userspace WFP-фильтр в виде OpenVPN-плагина
Как вы уже можете знать, резолвер DNS в Windows 10 отправляет DNS-запросы на все интерфейсы параллельно, что часто бывает либо просто неудобно, когда используется так называемый Split Tunneling и DNS внутри VPN-туннеля отдает внутренние адреса для внутренних ресурсов, а Windows не может понять, что к чему, либо и вовсе создает угрозу безопасности, как в случае утечки DNS через публичный Wi-Fi.
Решить проблему можно разными способами, например, временно добавив правила firewall для блокировки 53 порта на всех интерфейсах, кроме интерфейса VPN, либо установить на всех интерфейсах, кроме VPN, DNS в 127.0.0.1.
Однако, эти способы вносят изменения, выдерживающие перезагрузку, поэтому, если во время работы VPN у вас случайно отключили электричество или VPN-демон просто упал, вы останетесь с неработающим интернетом. Ничего хорошего в этом нет.
Однако есть способ лучше, который вносит только временные изменения и не оставит пользователя без интернета.
Windows Filtering Platform
Начиная с Windows Vista, на замену устаревшим технологиям обработки трафика вроде NDIS, TDI и LSP приходит WFP — современная, легкая и удобная технология, которая работает как в режиме ядра, так и в пользовательском режиме. Современные версии Брандмауэра Windows как раз используют WFP, как и все сторонние файрволлы и антивирусы с возможностью проверки трафика.
Драйвер режима ядра может просматривать, модифицировать и логировать пакеты и просто поток данных, а userspace-фильтры могут пропускать, отбрасывать, задерживать или направлять трафик в ядерный драйвер, основываясь на информации из Ethernet-фрейма или IP-пакета и их заголовков, а также (на уровне ALE) интерфейса источника и назначения, ID процесса, полный путь к exe, и некоторой другой.
WFP-фильтр может добавлять постоянные фильтры, которые выживают после перезагрузки, даже если ПО, установившее их, не было больше запущено, временные фильтры, которые сохраняются после завершения программы, но не после перезагрузки, и сессионные, которые действуют только тогда, когда программа, создавшая их, все еще исполняется.
Фильтра пользовательского режима с сессионными фильтрами вполне достаточно для наших задач, а нам нужно:
- Запретить все исходящие пакеты от всех интерфейсов на порт 53 по UDP/TCP и IPv4/IPv6
- Разрешить любой трафик с TAP-интерфейса (-ов) OpenVPN
Все это вылилось в плагин для OpenVPN, однако исходный код может быть собран и как обычный исполняемый файл:
github.com/ValdikSS/openvpn-fix-dns-leak-plugin
Чтобы использовать данный плагин, скачайте .dll-файлы из репозитория, положите их в папку config рядом с конфигурационным файлом, и добавьте в него строку:
для 32-битной системы и 32-битной версии OpenVPN, или
соответственно для 64-битной системы с 64-битным OpenVPN.
Теперь можно не бояться использовать VPN на Windows 10 через публичный Wi-Fi.
UPD: В OpenVPN 2.3.9 появилась опция для блокирования сторонних DNS: block-outside-dns . Используйте ее, а не плагин.
Настройка DNS на компьютере с Windows
Для обеспечения безопасности и надежности интернет-соединения, а также для бесперебойного доступа к веб-сайтам, социальным сетям и онлайн-сервисам, можно использовать сторонние DNS-серверы, которые работают на первом рубеже доступа к сети Интернет.
Популярные DNS-серверы представлены на нашем сайте в разделе Безопасные DNS-сервисы. Чаще всего настройка DNS помогает эффективнее работать VPN и прокси, обеспечивая более высокий уровень защиты вашей конфиденциальности и анонимности.
Предлагаем вашему вниманию подробные инструкции, как настроить DNS на компьютере с операционными системами Windows 10, 8.1, 8, 7, Vista и XP.
Настройка DNS с помощью DNS Jumper
DNS Jumper – удобный портативный инструмент для быстрого переключения DNS на вашем компьютере. Утилита работает со следующими операционными системами: Windows 10, 8.1, 8, 7, Vista, XP и не требует дополнительных настроек в системе.
Запустите утилиту, выберите в списке DNS сервер предпочтительный сервер (например, Google Public DNS) и нажмите кнопку Применить DNS.
Настройка DNS с помощью YogaDNS
YogaDNS — это DNS клиент, который перехватывает DNS-запросы на системном уровне и позволяет обрабатывать их через определенные пользователем DNS-серверы с использованием заданных протоколов и гибких правил.
Настройка DNS в Windows 10, 8.1, 8
1. Чтобы открыть Центр управления сетями и общим доступом (также доступен в меню Панель управления > Сеть и Интернет), нажмите сочетание клавиш Windows + R и в окне «Выполнить» введите следующую команду и нажмите ОК:
2. В разделе Просмотр основных сведений о сети и настройка подключений, выберите пункт сеть для Подключения.
3. В открывшемся окне выберите пункт Свойства.
4. В окне свойств подключения в списке Отмеченные компоненты используются этим подключением выберите пункт IP версии 4 (TCP/IPv4) в Windows 10 или Протокол Интернета версии 4 (TCP/IP) и нажмите кнопку Свойства.
5. В открывшемся окне на вкладке Общие выберите пункт Использовать следующие адреса DNS-серверов.
6. Введите выбранные вами адреcа DNS, например Comss.one DNS или Google DNS, в поля Предпочитаемый DNS-cepвep и Альтернативный DNS-cepвep (в зависимости от выбранного сервиса поле может оставаться пустым).
7. Поставьте галочку для Подтвердить параметры при выходе и нажмите OK, чтобы сохранить изменения.
Обновите DNS-кэш следующим образом:
- Нажмите правой кнопкой мыши по значку Windows (меню Пуск) и выберите Командная строка (администратор) или Windows PowerShell (администратор)
- Введите команду ipconfig /flushdns и нажмите клавишу Enter (Ввод)
- Сделайте перезагрузку компьютера.
Настройка DNS в Windows 7
1. Нажмите правой кнопкой мыши на значок интернета в трее, выберите Центр управления сетями и общим доступом.
2. В разделе Просмотр активных сетей, выберите пункт справа от Подключения:
3. На вкладке Общие в окне Состояние Подключения нажмите кнопку Свойства.
4. На вкладке Сеть окна свойства подключения, прокрутите вниз и выберите Протокол Интернета версии 4 (TCP/IPv4), нажмите кнопку Свойства.
5. На вкладке «Общие» окна Свойства, в нижней части, выберите Использовать следующие адреса DNS-серверов, а затем введите IP-адреса выбранного DNS-сервиса, например, Google DNS.
6. Поставьте галочку для Подтвердить параметры при выходе и нажмите OK, чтобы сохранить изменения.
Обновите DNS-кэш следующим образом:
- Нажмите меню Пуск > введите cmd в поле «Найти программы и файлы» > нажмите правой кнопкой мыши по найденной ссылке и выберите Запустить от администратора
- В Командной строке введите команду ipconfig /flushdns и нажмите клавишу Enter (Ввод).
- Сделайте перезагрузку компьютера.