Windows 10 Always On VPN, Split DNS, NRPT и как настроить, какой DNS-сервер используется?
Вот настройки:
- Клиенты Windows 10 1803
- Сервер 2012R2 RRAS сервер
- Всегда включайте настройку туннеля устройства VPN согласно этим инструкциям, с раздельным туннелированием.
- Устройство VPN имеет маршруты только к одному DC/DNS-серверу и нашему серверу диспетчера конфигурации, поэтому им можно управлять, а новые пользователи могут проходить проверку подлинности, находясь вне офиса. Когда пользователям требуется полный доступ к офисной сети, к ним может подключаться отдельный пользовательский VPN. Это работает хорошо, за исключением DNS.
- Доменное имя AD является example.local
- Публичное доменное имя - example.com
Эта проблема:
- Мы используем разделенный DNS для нашего публичного доменного имени - поэтому mail.example.com разрешает использование внутреннего IP-адреса при использовании наших внутренних DNS-серверов и нашего публичного адреса из внешнего мира.
- Мне нужны VPN-клиенты, чтобы разрешить его по публичному адресу. VPN устройства не позволяет им общаться с внутренним адресом mail.example.com, поэтому они не могут получить свою электронную почту.
- Я также хотел бы (но не обязательно) разрешение DNS для локальных служб в других местах, чтобы работать должным образом - например. когда я нахожусь в офисе Other Corp, DNS для othercorp.local работает даже с подключенным VPN.
Что я хочу, чтобы произошло:
- Запросы для примера.local идут через VPN к нашим внутренним серверам DNS
- Во всем остальном, включая example.com, используются DNS-серверы, предоставляемые подключением LAN/Wifi, к которому подключен ноутбук.
- Другой пользовательский VPN (который направляет весь трафик через VPN) продолжает использовать наши внутренние DNS-серверы для всего.
Что я пробовал:
- Настройка политики разрешения имен Таблица правил для example.local, указывающая на наши внутренние DNS-серверы. Это, кажется, работает, запросы к примеру.local проходят через VPN... но так же, как и все остальное.
- Установка правил NRPT для example.com с пустым полем DnsServers, которое должно гарантировать, что они исключены. Кажется, не имеет никакого эффекта.
- Настройка правил NRPT для example.com с открытыми определителями для DnsServer. Это работает, но ломается в удаленных местах, которые блокируют что-либо, кроме своих собственных распознавателей DNS (которые посещают многие сайты моих пользователей), и не решает проблему локальных служб.
- Параметр "Использовать следующие адреса DNS-серверов" для VPN-подключения в сетевых подключениях и оставление пустым. Никакого эффекта, VPN-соединение по-прежнему настроено на использование наших внутренних серверов.
- Настройка "Использовать следующие адреса DNS-серверов" и установка общедоступного DNS-сервера, например, 8.8.8.8. При подключении я получаю 3 DNS-сервера на этом интерфейсе, наши внутренние находятся вверху, а 8.8.8.8 - внизу списка.
Я подозреваю, что если бы я мог заставить VPN вообще не перечислять какие-либо DNS-серверы, правила NRPT включились бы, например, только в.local, и все работало бы должным образом. Но я не могу найти способ заставить его не использовать те, которые предоставляются сервером RRAS.
4 ответа
Потенциальный обходной путь, который вы могли бы попробовать - это установить DNS-сервер Server 2016 и внедрить политику DNS для выполнения split-dns с пониманием геолокации. Это позволит вам указывать DNS-запросам из подсети 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 record
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"
Просто мысль, но может быть установить скрипт подключения.bat, который добавляет правильный Public IP-адрес почтового сервера при подключении к файлу hosts, а затем удаляет его из файла hosts клиента при отключении? Теоретически, я думаю, вы всегда можете иметь его в файле hosts, и тогда они просто получат доступ к серверу с его публичного ip даже в офисе. Независимо от того, будет переопределять любой DNS с сервера RRAS.
Файл hosts находится по адресу C:\Windows\System32\Drivers\etc\hosts .
Я разобрался с решением.
Если настроить метрику интерфейса на большее число, чем у существующих адаптеров 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 работает как нужно - все запросы для example.local отправляются на мои AD DNS-серверы. Все остальное (включая example.com) отправляется на DNS-серверы их локальной сети.
При использовании автоматических настроек метрики на всех интерфейсах по какой-то причине адаптер LAN Ethernet имеет более низкую метрику, чем интерфейс туннеля устройства, но интерфейсы Wi-Fi имеют более высокую метрику, чем интерфейс туннеля устройства.
Таким образом, при использовании разделенного DNS зоны общественного домена для устройств, подключенных к локальной сети и Wi-Fi, происходит следующее.
Клиенты туннелирования устройств с использованием интерфейса LAN (кабель) - разрешает записи общедоступного домена с помощью локально настроенных DNS-серверов.
Клиенты туннеля устройства с использованием WIFI - разрешает записи общедоступного домена с помощью DNS-серверов, настроенных в интерфейсе туннеля устройства.
Мне это кажется странным, и я ожидал, что туннель устройства всегда будет иметь самую низкую метрику при использовании автоматического назначения метрики. Самая странная часть заключается в том, что метрика интерфейса туннеля устройства установлена как число между интерфейсами LAN (кабель) и WIFI.
Что правильно? Я бы предпочел не устанавливать метрику вручную для любого из интерфейсов.
Это подтверждено с помощью Split-tunnel VPN, не тестировалось с force-tunnel. Я хотел бы, чтобы все DNS, даже для Split-tunnel, разрешались с использованием DNS-серверов, настроенных туннелем устройства, и использовали настройки NRPT, если по какой-то причине мне нужно разрешить домен за пределами VPN-соединения.
Вы можете определить внутренние 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/
Надеюсь, это поможет!