Вот установка:
Эта проблема:
Чего я хочу:
Что я пробовал:
Я подозреваю, что если бы я мог заставить VPN вообще не перечислять какие-либо DNS-серверы, правила NRPT сработали бы только, например, .local, и все работало бы правильно. Но я не могу найти способ заставить его не использовать те, которые предоставлены сервером RRAS.
Потенциальный обходной путь, который вы могли бы попробовать, - это установка DNS-сервера Server 2016 и реализация политики DNS для разделения DNS с учетом геолокации. Это позволит вам указать DNS-запросам из подсети Device VPN использовать внешний IP-адрес вместо внутреннего.
Команды PowerShell будут выглядеть примерно так, как показано ниже.
Подсеть VPN устройства
Add-DnsServerClientSubnet -Name "DeviceVPNSubnet" -IPv4Subnet "192.168.1.0/24"
Область действия VPN-зоны устройства
Add-DnsServerZoneScope -ZoneName "example.com" -Name "DeviceVPNZoneScope"
По умолчанию запись A (уже должна существовать)
Add-DnsServerResourceRecord -ZoneName "example.com" -A -Name "mail" -IPv4Address "192.168.0.5"
Устройство VPN A запись
Add-DnsServerResourceRecord -ZoneName "example.com" -A -Name "mail" -IPv4Address "203.0.113.5" -ZoneScope "DeviceVPNZoneScope"
Политика разрешения VPN на устройстве
Add-DnsServerQueryResolutionPolicy -Name "Device VPN Policy" -Action ALLOW -ClientSubnet "eq,DeviceVPNSubnet" -ZoneScope "DeviceVPNZoneScope,1" -ZoneName "example.com"
При использовании автоматических настроек метрики на всех интерфейсах по какой-то причине адаптер LAN Ethernet имеет более низкую метрику, чем интерфейс туннеля устройства, но интерфейсы Wi-Fi имеют более высокую метрику, чем интерфейс туннеля устройства.
Таким образом, при использовании раздельного DNS зоны общественного достояния для устройств, подключенных к локальной сети и Wi-Fi, происходит следующее.
Клиенты туннелирования устройств с использованием интерфейса LAN (кабель) - разрешает записи общедоступного домена с помощью локально настроенных DNS-серверов.
Клиенты туннеля устройства с использованием WIFI - разрешает записи общедоступного домена с помощью DNS-серверов, настроенных в интерфейсе туннеля устройства.
Мне это кажется странным, и я ожидал, что туннель устройства всегда будет иметь самую низкую метрику при использовании автоматического назначения метрики. Самым странным является то, что метрика интерфейса туннеля устройства установлена на число между интерфейсами LAN (кабель) и WIFI.
Что правильно? Я бы предпочел не устанавливать метрику вручную для любого из интерфейсов.
Это подтверждено с помощью Split-tunnel VPN, не тестировалось с force-tunnel. Я хотел бы, чтобы все DNS, даже для Split-tunnel, разрешались с использованием DNS-серверов, настроенных туннелем устройства, и использовали настройки NRPT, если по какой-то причине мне нужно разрешить домен за пределами VPN-соединения.
Я нашел решение.
Настройка метрики интерфейса на большее число, чем существующие адаптеры Ethernet / Wi-Fi, заставит его предпочитать DNS-серверы в локальной сети, но правила NRPT по-прежнему будут работать для отправки DNS-запросов для моего собственного домена на мои серверы через VPN.
Однако нет никакого способа настроить метрику интерфейса для VPN-соединения ни в PowerShell, ни в VBscript, ни в .NET, ни в VPNv2 CSP.
Если VPN подключен, метрику можно изменить в PowerShell с помощью командлета Set-NetIPInterface, но когда VPN не подключен, он не отображается там вообще. И изменения там не сохранятся после перезагрузки.
Единственный способ изменить это - отредактировать C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk
файл и изменение строк IpInterfaceMetric
и Ipv6InterfaceMetric
к более высоким числам. Я поменял их обоих на 100.
После этого и в сочетании с правилами NRPT DNS работает по своему усмотрению - все запросы, например, local, отправляются на мои DNS-серверы AD. Все остальное (включая example.com) отправляется на DNS-серверы их локальной сети.
Вы можете определить внутренние DNS-серверы для любого пространства имен, используя элемент DomainNameInformation в вашем ProfileXML. Если вы используете разделенный DNS, в некоторых случаях «внутренние» пространства имен должны маршрутизироваться извне, а не через туннель VPN. В этих сценариях вам придется создать «исключения», которые по сути представляют собой пространства имен, определенные НЕ для использования внутренних DNS-серверов. Для этого вы не просто оставляете поле DnsServers пустым, но полностью исключаете DnsServers из элемента.
Вы можете найти дополнительную информацию здесь: https://directaccess.richardhicks.com/2018/04/23/always-on-vpn-and-the-name-resolution-policy-table-nrpt/
Надеюсь, это поможет!
Просто мысль, но, может быть, установить сценарий подключения .bat, который добавляет правильный публичный IP-адрес почтового сервера при подключении к файлу hosts, а затем удаляет его из файла hosts клиента при отключении? Теоретически я предполагаю, что вы всегда можете иметь его в файле hosts, и тогда они просто будут обращаться к серверу с его общедоступного IP-адреса даже в офисе. Вне зависимости от этого будет отменен любой DNS с сервера RRAS.
Файл hosts находится в папке C: \ Windows \ System32 \ Drivers \ etc \ hosts.