当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 通过 VPN 进行 DNS 解析在 Windows 10 上不起作用

作者:精品下载站 日期:2024-12-14 20:08:18 浏览:16 分类:玩电脑

通过 VPN 进行 DNS 解析在 Windows 10 上不起作用


如果您的 VPN 连接处于活动状态,则 Windows 10 中将使用为 VPN 连接配置的 DNS 服务器和后缀,以强制隧道模式(启用“在远程网络上使用默认网关”选项)使用 DNS 来解析名称。在这种情况下,您无法解析本地网络中的 DNS 名称或使用内部 LAN 访问 Internet。

同时,您可以 ping LAN 上的任何资源(尝试 ping 您的网关、相邻计算机或打印机 IP 地址)。它们只能通过 IP 地址访问,而不能通过主机名访问。事实上,Windows 10 正在尝试通过 VPN 连接设置中指定的 DNS 服务器解析本地网络中的主机名。

我发现了一些关于禁用本地 (LAN) 接口的 IPv6 协议的建议,如果您想使用强制隧道模式,这将会有所帮助。

如果您使用分割隧道(未选中“在远程网络上使用默认网关”选项)进行 VPN 连接,您可以从本地网络访问 Internet,但无法解析远程 VPN 网络中的 DNS 地址(禁用 IPv6 在这里没有帮助)。

您必须了解 Windows 从具有最高优先级(接口指标的较低值)的网络接口发送 DNS 查询。例如,您的 VPN 连接在分割隧道模式下工作(您希望通过 VPN 从 LAN 访问 Internet 和公司资源)。

从 PowerShell 检查所有网络接口指标的值:

Get-NetIPInterface | Sort-Object Interfacemetric

[玩转系统] 通过 VPN 进行 DNS 解析在 Windows 10 上不起作用

上面的屏幕截图显示本地以太网连接的指标 (25) 低于 VPN 接口 (100)。因此 DNS 流量会通过度量值较低的接口。这意味着您的 DNS 请求将发送到本地 DNS 服务器,而不是用于 VPN 连接的 DNS 服务器。在此配置中,您无法解析所连接的外部 VPN 网络中的名称。

另外,这里还应该提到Windows 8.1和Windows 10的DNS客户端的一个新功能。这些操作系统版本中添加了智能多宿主名称解析(SMHNR),以便更快地响应 DNS 请求。默认情况下,SMHNR 会同时向系统已知的所有 DNS 服务器发送 DNS 请求,并使用它首先收到的响应(还会发送 LLMNR 和 NetBT 查询)。它不安全,因为外部 DNS 服务器(为您的 VPN 连接指定)可能会看到您的 DNS 流量(您的 DNS 请求的泄漏)。您可以通过 GPO 在 Windows 10 中禁用 SMHNR:计算机配置 -> 管理模板 -> 网络 -> DNS 客户端 -> 关闭智能多宿主名称解析=已启用。

[玩转系统] 通过 VPN 进行 DNS 解析在 Windows 10 上不起作用

或者您可以使用以下命令禁用 SMHNR(在 Windows 8.1 中):

Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name DisableParallelAandAAAA -Value 1 -Type DWord

在 Windows 10 创意者更新 (1709) 及更高版本中,DNS 请求将一一发送到所有已知的 DNS 服务器(不是并行)。如果您降低特定 DNS 的指标,则可以提高其优先级。

因此,更改接口指标允许您通过连接(LAN 或 VPN)发送 DNS 请求,其中名称解析对您来说是最优先的。

因此,接口度量值越低,连接的优先级越高。 Windows 根据 IPv4 接口的速度和类型自动分配其指标。例如,速度 > 200 Mbit/s 的 LAN 连接的指标值为 10,速度为 50-80 Mbit/s 的 Wi-Fi 连接的指标值为 50(请参阅表 https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes)。

您可以通过 Windows GUI、PowerShell 或使用 netsh 命令更改接口指标。

例如,您希望通过 VPN 连接发送 DNS 请求。您必须增加 LAN 连接的指标,使其值超过 100(在我的示例中)。

转到控制面板 -> 网络和 Internet -> 网络连接,打开以太网连接的属性,选择 TCP/IPv4 属性,然后转到高级 TCP/IP 设置选项卡。取消选中自动指标选项并将接口指标更改为120

[玩转系统] 通过 VPN 进行 DNS 解析在 Windows 10 上不起作用

您可以使用以下 PowerShell 命令执行相同的操作(使用通过 Get-NetIPInterface cmdlet 获取的 LAN 接口的索引):

Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120

或者使用 netsh(指定 LAN 连接的名称):

netsh int ip set interface interface="Ethernet0" metric=120

以同样的方式,您可以减少 VPN 连接属性中的指标值。

[玩转系统] 通过 VPN 进行 DNS 解析在 Windows 10 上不起作用

您还可以通过将模式更改为分割隧道并使用 PowerShell 指定用于连接的 DNS 后缀来更改 VPN 连接的设置:

Get-VpnConnection
Set-VpnConnection -Name "VPN_work" -SplitTunneling $True
Set-VpnConnection -Name "VPN_work" -DnsSuffix yourdomainname.com

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯