这是设置:
- Windows 10 1803 客户端
- 服务器 2012R2 RRAS 服务器
- 按照这些说明设置 Always On VPN 设备隧道,使用拆分隧道。
- Device VPN 仅具有到 1 个 DC/DNS 服务器和我们的配置管理器服务器的路由,因此可以对其进行管理,并且新用户可以在不在办公室时进行身份验证。当用户需要完全访问办公网络时,他们可以连接到一个单独的用户 VPN。这很好用,除了 DNS。
- AD 域名为 example.local
- 公共域名是example.com
问题:
- 我们将拆分 DNS 用于我们的公共域名 - 因此 mail.example.com 在使用我们的内部 DNS 服务器时解析为一个内部 IP 地址,而我们来自外部世界的公共地址。
- 我需要 VPN 客户端将其解析为公共地址。设备 VPN 不允许他们与 mail.example.com 的内部地址通信,因此他们无法获取电子邮件。
- 我还希望(但不是必须拥有)其他位置的本地服务的 DNS 解析能够正常工作 - 例如。当我在 Other Corp 的办公室时,即使连接了 VPN,othercorp.local 的 DNS 也能正常工作。
我想要发生的事情:
- 例如.local 的查询通过 VPN 到我们的内部 DNS 服务器
- 其他所有内容,包括 example.com,都使用笔记本电脑所连接的 LAN/Wifi 连接提供的 DNS 服务器。
- 另一个基于用户的 VPN(通过 VPN 路由所有流量)继续使用我们的内部 DNS 服务器处理一切。
我试过的:
- 设置名称解析策略表规则,例如指向我们内部 DNS 服务器的 example.local。这似乎确实有效,例如查询 example.local 会通过 VPN...但其他所有内容也是如此。
- 为 example.com 设置 NRPT 规则,使用空白的 DnsServers 字段,这应确保它们被排除在外。好像没有效果。
- 使用 DnsServer 的公共解析器为 example.com 设置 NRPT 规则。这确实有效,但在远程位置中断,除了他们自己的 dns 解析器(我的用户前往的许多站点都这样做)之外,它会阻止任何东西,并且不能解决本地服务问题。
- 在网络连接中的 VPN 连接上设置“使用以下 DNS 服务器地址”,并将其留空。没有效果,VPN 连接仍然设置为使用我们的内部服务器。
- 设置“使用以下 DNS 服务器地址”,并放入像 8.8.8.8 这样的公共 DNS 服务器。连接后,我最终在该接口上拥有 3 个 DNS 服务器,我们的内部服务器位于顶部,8.8.8.8 位于列表底部。
我怀疑如果我可以让 VPN 根本不列出任何 DNS 服务器,那么 NRPT 规则就会启动,例如 example.local,一切都会正常工作。但我找不到让它不使用 RRAS 服务器提供的方法。
您可以尝试的一个潜在解决方法是建立一个 Server 2016 DNS 服务器并实施一个 DNS 策略来执行具有地理定位意识的拆分 dns。这将允许您告诉来自设备 VPN 子网的 DNS 查询使用外部 IP 而不是内部 IP。
powershell 命令如下所示。
设备 VPN 子网
设备 VPN 区域范围
默认A记录(应该已经存在)
设备 VPN A 记录
设备 VPN 解析策略
请参阅:将 DNS 策略用于基于地理位置的流量管理与主服务器
只是一个想法,但也许设置一个连接脚本 .bat ,在连接到主机文件时添加邮件服务器的正确公共 IP 地址,然后在断开连接时将其从客户端的主机文件中删除?从理论上讲,我猜你总是可以将它放在主机文件中,然后他们甚至可以在办公室中从它的公共 IP 访问服务器。无论如何,这将覆盖来自 RRAS 服务器的任何 DNS。
主机文件位于 C:\Windows\System32\Drivers\etc\hosts 。
您可以使用 ProfileXML 中的 DomainNameInformation 元素为任何命名空间定义内部 DNS 服务器。如果您使用的是拆分 DNS,在某些情况下,“内部”命名空间可能应该在外部路由,而不是通过 VPN 隧道。在这些情况下,您必须创建“排除”,它们本质上是定义为不使用内部 DNS 服务器的命名空间。为此,您不能简单地将 DnsServers 字段留空,而是将 DnsServers 完全排除在元素之外。
您可以在此处找到更多信息:https ://directaccess.richardhicks.com/2018/04/23/always-on-vpn-and-the-name-resolution-policy-table-nrpt/
希望有帮助!
我想出了解决方案。
将接口指标调整为比现有以太网/wifi 适配器更大的数字将使其更喜欢本地网络上的 DNS 服务器,但 NRPT 规则仍然可以通过 VPN 将我自己域的 DNS 查询发送到我的服务器。
但是,无法在 powershell、VBscript、.NET 和 VPNv2 CSP 中调整 VPN 连接的接口指标。
如果 VPN 已连接,则可以在 powershell 中使用 Set-NetIPInterface cmdlet 更改指标,但是当 VPN 未连接时,它根本不会显示在那里。并且那里的更改不会在重新启动后持续存在。
更改它的唯一方法似乎是编辑
C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk
文件并将行更改IpInterfaceMetric
为Ipv6InterfaceMetric
更高的数字。我把它们都改成了100。之后,结合 NRPT 规则,DNS 将按需要工作——所有查询 example.local 都会发送到我的 AD DNS 服务器。其他任何内容(包括 example.com)都会发送到其本地网络的 DNS 服务器。
在所有接口上使用自动度量设置时,由于某种原因,LAN 以太网适配器的度量低于设备隧道接口,但 wifi 接口的度量高于设备隧道接口。
因此,对于公共域区域的拆分 DNS,LAN 和 Wifi 连接的设备会发生以下情况。
使用 LAN 接口(电缆)的设备隧道客户端 - 使用本地配置的 DNS 服务器解析公共域记录
使用 WIFI 的设备隧道客户端 - 使用设备隧道接口上配置的 DNS 服务器解析公共域记录
我觉得这很奇怪,并且我希望设备隧道在使用自动度量分配时总是具有最低的度量。最奇怪的部分是设备隧道接口度量设置为 LAN(电缆)和 WIFI 接口之间的数字。
哪个是对的?我宁愿不为任何接口手动设置指标。
这是使用拆分隧道 VPN 确认的,尚未使用强制隧道进行测试。如果出于某种原因我需要解析 VPN 连接之外的域,我希望所有 DNS,即使是拆分隧道也可以使用设备隧道配置的 DNS 服务器并使用 NRPT 设置进行解析。