设置如下:
- Windows 10 1803 客户端
- 服务器 2012R2 RRAS 服务器
- Always On VPN 设备隧道设置这些说明,采用分割隧道技术。
- 设备 VPN 仅具有到 1 个 DC/DNS 服务器和我们的配置管理器服务器的路由,因此可以对其进行管理,并且新用户可以在离开办公室时进行身份验证。当用户需要完全访问办公室网络时,他们可以连接到单独的用户 VPN。除了 DNS 之外,这种方法效果很好。
- AD 域名为 example.local
- 公共域名为 example.com
问题:
- 我们对公共域名使用拆分 DNS - 因此,当使用我们的内部 DNS 服务器时,mail.example.com 会解析为内部 IP 地址,而当使用外部世界时,则会解析为我们的公共地址。
- 我需要 VPN 客户端将其解析为公共地址。设备 VPN 不允许他们与 mail.example.com 的内部地址通信,因此他们无法获取电子邮件。
- 我还希望(但不是必须的)其他位置的本地服务的 DNS 解析能够正常工作 - 例如,当我在其他公司的办公室时,即使连接了 VPN,othercorp.local 的 DNS 也能正常工作。
我希望发生的事:
- 例如,本地查询通过 VPN 到达我们的内部 DNS 服务器
- 其余所有内容(包括 example.com)都使用笔记本电脑所连接的 LAN/Wifi 连接提供的 DNS 服务器。
- 另一个基于用户的 VPN(通过 VPN 路由所有流量)继续使用我们的内部 DNS 服务器来处理所有事情。
我尝试过的:
- 设置名称解析策略表example.local 的规则指向我们的内部 DNS 服务器。这似乎有效,对 example.local 的查询通过 VPN 进行……但其他一切都如此。
- 为 example.com 设置 NRPT 规则,其中 DnsServers 字段为空,这应确保它们被排除。似乎没有效果。
- 为 example.com 设置 NRPT 规则,并为 DnsServer 设置公共解析器。这确实有效,但在远程位置会中断,阻止除其自己的 DNS 解析器之外的任何内容(我的用户所访问的许多站点都会这样做),并且不能解决本地服务问题。
- 在网络连接中的 VPN 连接上设置“使用以下 DNS 服务器地址”,并将其留空。没有效果,VPN 连接仍然设置为使用我们的内部服务器。
- 设置“使用以下 DNS 服务器地址”,并输入公共 DNS 服务器,如 8.8.8.8。连接后,我最终在该接口上获得了 3 个 DNS 服务器,其中我们的内部服务器位于列表顶部,8.8.8.8 位于列表底部。
我怀疑如果我能让 VPN 完全不列出任何 DNS 服务器,NRPT 规则就会启动,仅针对 example.local,一切都会正常工作。但我找不到让它不使用 RRAS 服务器提供的方法。
答案1
您可以尝试的一个潜在解决方法是建立 Server 2016 DNS 服务器并实施 DNS 策略以执行具有地理位置感知的拆分 DNS。这将允许您告诉来自设备 VPN 子网的 DNS 查询使用外部 IP 而不是内部 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"
答案2
只是一个想法,但也许可以设置一个连接脚本 .bat,在连接到 hosts 文件时添加邮件服务器的正确公共 IP 地址,然后在断开连接时将其从客户端的 hosts 文件中删除?理论上,我猜你总是可以在 hosts 文件中拥有它,然后他们只需从其公共 IP 访问服务器,即使在办公室也是如此。无论如何,这将覆盖来自 RRAS 服务器的任何 DNS。
Hosts 文件位于 C:\Windows\System32\Drivers\etc\hosts 。
答案3
我找到解决办法了。
将接口度量调整为比现有以太网/wifi 适配器更大的数字将使其优先选择本地网络上的 DNS 服务器,但 NRPT 规则仍然可以通过 VPN 将我自己的域的 DNS 查询发送到我的服务器。
但是,无法在 powershell、VBscript、.NET 或 VPNv2 CSP 中调整 VPN 连接的接口度量。
如果 VPN 已连接,则可以使用 Set-NetIPInterface cmdlet 在 powershell 中更改指标,但如果 VPN 未连接,则指标根本不会显示在那里。而且那里的更改在重启后也不会保留。
改变它的唯一方法似乎是编辑文件并将C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk
行数更改为更高的数字。我将它们都改为 100。IpInterfaceMetric
Ipv6InterfaceMetric
此后,结合 NRPT 规则,DNS 便可正常工作 - 所有针对 example.local 的查询都会发送到我的 AD DNS 服务器。其他任何内容(包括 example.com)都会发送到其本地网络的 DNS 服务器。
答案4
当在所有接口上使用自动度量设置时,由于某种原因,LAN 以太网适配器的度量低于设备隧道接口,但 wifi 接口的度量高于设备隧道接口。
因此,对于公共域区域的拆分 DNS,LAN 和 Wifi 连接的设备会发生以下情况。
使用 LAN 接口(电缆)的设备隧道客户端 - 使用本地配置的 DNS 服务器解析公共域记录
使用 WIFI 的设备隧道客户端 - 使用设备隧道接口上配置的 DNS 服务器解析公共域记录
我觉得很奇怪,我原本以为使用自动度量分配时,设备隧道的度量总是最低的。最奇怪的是,设备隧道接口度量设置为 LAN(电缆)和 WIFI 接口之间的数字。
哪一个是正确的?我宁愿不为任何接口手动设置度量。
这是使用分割隧道 VPN 确认的,尚未使用强制隧道进行测试。如果出于某种原因我需要解析 VPN 连接之外的域,我希望所有 DNS(即使是分割隧道)都使用设备隧道配置的 DNS 服务器进行解析并使用 NRPT 设置。