Не работает разрешение имен DNS при VPN подключении в Windows

По умолчанию для всех VPN подключений в Windows используется режим Force Tunnel (в настройках VPN включена опция ‘ Use default gateway on remote network ‘/’ Использовать основной шлюз в удаленной сети ‘). В этом режиме для разрешения имен будут использоваться DNS сервера, которые назначены вашему подключению сервером VPN, и вы не сможете разрешать имена устройств в вашей локальной сети.

Для VPN подключения в Windows доступно два режима:

  • Force Tunnel (включена опция Use default gateway) — весь трафик, в том числе DNS, отправляется в VPN туннель. В таком режиме после подключения к VPN вы теряете возможность резолвить DNS имена хостов в вашей локальной сети (после подключения к VPN вы также теряете доступ в Интернет через свою LAN). Доступ будет работать только по IP адресам (частично в этом случае спасает кэш DNS клиента);
    В Google я нашел рекомендации по отключению IPv6 на локальном (LAN) подключении и это работает (если вы хотите использовать Force-Tunnel).
  • Split Tunnel (отключена опция Use default gateway on remote network) — в VPN туннель маршрутизируется только трафик к корпоративным серверам (в соответствии с таблицей маршрутизацией). В этом режиме Windows для разрешения имен использует ваши локальные DNS и игнорирует DNS сервера и DNS суффикс VPN подключения. Таким образом доступ в Интернет и разрешение имен выполняется через вашу локальную сеть (в соответствии с настройками локального сетевого адаптера).

Windows 10/11 отправляет DNS запросы с сетевого интерфейса с наивысшим приоритетом (у которого самое маленькое значение метрики интерфейса). Чтобы вывести значения метрик сетевых интерфейсов компьютера, выполните PowerShell команду:

Get-NetIPInterface | Sort-Object Interfacemetric

Get-NetIPInterface

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

  • Ethernet подключение с метрикой 25
  • VPN подключение – метрика 100

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

Windows 10/11 задают метрики IPv4 сетевым интерфейсам автоматически в зависимости от их скорости и типа:

Скорость и тип подключенияМетрика
Ethernet 1 Гб25
Ethernet 100 Мб35
Wi-Fi интерфейс со скоростью 50-80 Мб50

(см. таблицу https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes).

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

Вы можете изменить метрики сетевых интерфейсов из графического интерфейса или из командной строки.

  • Откройте панель управления сетевыми подключениями ( ncpa.cpl ), откройте свойства вашего 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 подключения

В такой конфигурации DNS запросы будут выполняться через VPN подключение.

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

Get-VpnConnection
Set-VpnConnection -Name "VPN" -SplitTunneling $True
Set-VpnConnection -Name "VPN" -DnsSuffix yourdomain.com

Указанный DNS суффикс будет автоматически добавляться к коротким именам при отправке их на DNS сервер.

Также можете указать трафик каких подсетей нужно всегда отправлять в VPN туннель:

Add-VpnConnectionRoute -ConnectionName $VpnName -DestinationPrefix 172.16.10.0/24

Add-VpnConnectionRoute -ConnectionName $VpnName -DestinationPrefix 10.24.2.0/24

Если вы используете OpenVPN сервер, вы можете назначить клиентам дополнительные маршруты и DNS сервера с помощью опций:

push "route 10.24.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.100.11"

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

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

Или можно внести аналогичное изменение в реестр с помощью команд PowerShell:

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


Предыдущая статья Следующая статья


Комментариев: 18 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)