我有一个家庭网络,它使用我拥有的域 int.example.com 的内部子域。此网络上的 DNS 服务器是一对运行 Pihole 的 Raspberry Pi,它们将 *.int.example.com 的查找转发到我的路由器(它仍然是 DHCP 服务器 - 由于网络的物理拓扑,Pihole 无法提供 DHCP)。本地 DNS 查找适用于所有主机,正如预期的那样。
我所在的公司运行企业分离隧道 VPN(Cisco AnyConnect)。除了允许访问本地网络的客户端设置(我已设置,但如果禁用它,似乎没有任何效果)之外,我无法控制此 VPN 的配置。VPN 客户端设置了一个 metric = 1 的适配器。在我运行 Windows 11 的工作笔记本电脑上,这会导致所有 DNS 查找都通过 VPN 隧道进行。因此,对内部网络上的主机(例如 host.int.example.com)进行 DNS 查找(通过 nslookup 或通过浏览器)将不会给出任何响应,并且 nslookup 会将服务器列为企业 DNS 服务器(例如 dns.example_company.com)。
我修改了连接时的 VPN 适配器的度量,使其高于笔记本电脑 LAN 适配器的度量(默认为 25)。这改变了情况,因此本地网络的 DNS 服务器用于所有 DNS 查找。但是,这也导致查找公司网络上的内部服务失败,例如,internal_service.example_company.com 将无法访问。所以这对我来说是行不通的。
奇怪的是,我可以看到(通过 Wireshark 同时监视两个接口),本地地址的 DNS 查找在两个接口上都进行了,并且 Piholes/本地路由器用有效的 IP 地址进行了回答,但这似乎被忽略了,因为 nslookup/浏览器说找不到该地址。我只能假设(知识有限等)这是因为具有较低度量的接口返回了空响应,因此空响应是首选。
有没有办法让 Windows 从 Windows 客户端使用特定于网络后缀的 DNS 服务器?例如,对 *.int.example.com 的请求将转到本地网络上的 Pihole(从而转到可以提供有效响应的路由器),而对 *.example_company.com 的请求将转到 VPN 隧道提供的 DNS 服务器。我了解 Cisco AnyConnect 可能有一个与拆分 DNS 有关的管理员控制设置,但我无法控制它,而且该问题似乎是由本地计算机的适配器指标引起的,所以我不确定它能否解决这个问题。
注意:我已为我拥有的域名(例如 home.example.com)设置了动态 DNS,并尝试为 int.example.com 设置指向 home.example.com 的 NS 记录,希望这会让连接 VPN 的笔记本电脑向 home.example.com 发送 *.int.example.com 的 DNS 请求。从连接 VPN 的笔记本电脑明确发送到 home.example.com 的 dig 查询确实有效,我认为路由器会将其路由回自身,但通过默认服务器发送查询不起作用,即 dns.example_company.com 不会向客户端提供任何信息,从而提示随后查找 home.example.com。这可能永远不会奏效,但我抱有希望。
答案1
您正在尝试在连接到不受您管理的 VPN 时访问本地主机。通常会采用多种措施来控制您可以访问和不能访问的位置、哪些服务器提供 DNS 等。
您表现出了非常足智多谋,设法阻止了一些 VPN 行为,但结果基本上是 VPN 在您的“调整”之后无法正常运行。从 VPN(安全)的角度来看,这是一件非常好的事情。
如果没有对 VPN 的管理访问权限,我无法理解您如何成功说服 VPN 允许您使用第三方 DNS 服务器(无论是您自己的还是其他的),也无法让它代表您的某个 FQDN 接受传入流量。
使用 Windows HOSTS 文件
您的本地流量只需要是本地的,那么它就永远不会到达 VPN。如果您想使用 FQDN 访问本地机器,您应该将 FQDN 解析为本地 IP,而无需查询 DNS 服务器。
只需在 Windows HOSTS 文件中为每个主机名添加一条记录即可完成此操作。