По умолчанию для всех 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
На данном компьютере есть два подключение:
- 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. - Также вы можете изменить метрику с помощью команд PowerShell для управления сетевыми настройками (используйте индекс вашего LAN интерфейса, полученный с помощью командлета
Get-NetIPInterface
):
Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120
Или netsh (нужно указать имя вашего LAN подключения)
netsh int ip set interface interface="Ethernet 3" metric=120
Аналогично вы можете уменьшить значение метрики в свойствах 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
Также можете указать трафик каких подсетей нужно всегда отправлять в 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 с помощью групповой политики:
Или можно внести аналогичное изменение в реестр с помощью команд 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