我有一个使用 VPN 连接的客户,但是它会自动将我的 DNS 设置配置为不存在的 DNS 服务器,这意味着每次 DNS 解析都会超时,直到尝试替代方案,这会真正减慢所有 Internet 流量的速度。
有什么方法可以阻止应用程序覆盖我的 DNS 设置(不启用 UAC)?
或者,有没有办法可以设置某种本地路由,即“当针对 IP 地址 A 的 DNS 请求进来时,实际使用 IP 地址 B”?
我正在使用 Windows 8 开发人员预览版(但我认为它应该与 Windows 7 一样工作)。
谢谢
答案1
我不相信有办法防止除了在 VPN 连接上静态分配 DNS 服务器之外,还可以防止这种情况发生。
要更改查询 DNS 服务器的顺序,应该能够按照以下方式更改接口绑定顺序:https://superuser.com/a/314379/120267HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage\Bind
,但这似乎并不影响我在 Windows 7 上的个人测试中的 VPN 连接;我已经确认,无论接口绑定顺序设置如何,我的 VPN 连接始终添加到列表顶部。
但是,您可以在建立 VPN 连接后重置 DNS 更改。
收集信息
打开命令提示符(Start
-> Run...
-> cmd
)然后运行netsh interface ipv4 show dnsservers
。您将看到类似以下内容的输出:
Configuration for interface "My VPN"
Statically Configured DNS Servers: 11.22.33.44
55.66.77.88
...
Configuration for interface "Local Network Connection"
DNS servers configured through DHCP: 192.168.0.1
192.168.0.2
...
你需要接口名称对于 VPN,以及可选的非 VPN 连接的第一个DNS 服务器。在这个例子中,它们是我的VPN和192.168.0.1, 分别。
全部设置
选项 1:禁用 VPN DNS
假设您根本不需要 VPN 的 DNS 服务器,您只需在命令提示符中运行以下命令:
netsh interface ipv4 delete dnsservers name="<Interface Name>" address=all validate=no
Eg: netsh interface ipv4 delete dnsservers name="My VPN" address=all validate=no
如果再次运行netsh interface ipv4 show dnsservers
,您将看到与 VPN 关联的 DNS 服务器已被删除;非 VPN 连接的 DNS 服务器将用于解析主机名。
选项 2:补充 VPN DNS
如果您需要 VPN 的 DNS 服务器来解析内联网主机名,您可以在命令提示符中运行以下命令:
netsh interface ipv4 add dnsservers name="<Interface Name>" address=<Non-VPN DNS server> index=1 validate=no
Eg: netsh interface ipv4 add dnsservers name="My VPN" address=192.168.0.1 index=1 validate=no
在这种情况下,netsh interface ipv4 show dnsservers
将显示您的非 VPN 连接的第一个 DNS 服务器已添加到 VPN 的 DNS 服务器列表的顶部。它将首先用于解析主机名,如果不成功,则回退到使用 VPN 的常规 DNS 服务器。
答案2
不幸的是,netsh 无法删除 dhcp 分配的 dns 服务器。但这可以通过清除
HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\{id}
注册表项。
答案3
我遇到了类似的问题;连接到 VPN 服务器会覆盖我的工作站(远程 VPN 客户端)的 DNS,从而掩盖本地 LAN DNS。我在Stackoverflow 方面之前有人指出我应该将其发布在这里。
读完此帖子后,很明显无法使用 OpenVPN 客户端配置来阻止覆盖。我的解决方案是在 OpenVPN 配置目录中添加一个批处理文件,该文件在 OpenVPN 连接建立时执行。如果 OVPN 文件名为 company.ovpn,则在连接时运行的文件需要命名为 company_up.bat。
自从今晚早些时候我在 StackOverflow 上发布的版本以来,我对文件进行了一些扩充。现在它看起来像这样:
1: ping 127.0.0.1 -n 2 > nul
2: netsh interface ip set dns "Local Area Connection 4" static 127.0.0.1
3: route delete 0.0.0.0
4: route add -p 0.0.0.0/0 172.20.20.1 metric 1000
5: exit 0
1:等待几秒钟再继续的黑客攻击。最新版本 (2.3) 的 OpenVPN 客户端如果没有延迟执行,将忽略 DNS 和路由更改。
2:将 VPN 连接的 DNS 设置为指向本地主机。我有一个解析器(我使用SimpleDNS Plus) 在本地主机上运行,它将对公司域的查询通过 VPN 转发到公司 DNS 服务器,并将其他所有内容转发到本地 LAN DNS 服务器。请注意,我无法使用本地 LAN 解析器通过 VPN 将对公司域的查询转发到公司 DNS,因为 VPN 端点位于本地主机上。连接名称(“本地连接 4”)是在命令提示符下通过“ipconfig /all”确定的。
3:公司 VPN 服务器配置为路由全部通过 VPN 限制出站流量,同时限制出站(到 Internet) SSH 连接。这与我的工作流程相冲突,我首先删除“0.0.0.0 网络掩码 0.0.0.0”路由...
4:.. 然后我重新添加 0.0.0.0/0 路由以指向本地 LAN 网关,并将其度量(权重)设置为 1000,作为未路由的所有流量的总括。
5:如果没有“exit 0”,OpenVPN 就会发出脚本失败的错误警告(退出状态为 1)。
希望这对某些人有用..它对我来说工作得相当好(每次打开连接时不需要手动进行路由或 DNS 调整)。
答案4
您能否检查“在远程网络上使用默认网关”复选框的状态。打开 VPN 连接的属性,转到“网络”选项卡,选择 TCP/IP v4 或 TCP/IP V6,然后选择“属性”和“高级”,即可找到该复选框。该复选框可能已启用,这意味着所有互联网流量都通过 VPN 连接路由。禁用该复选框并不总是可行的,但仍然可以使用 VPN 执行您想要的操作,但可以禁用该复选框,这可能会加快互联网访问速度。
如果这没有帮助,那里有一个 DNS 选项卡,您可以尝试在那里添加您的 DNS 服务器。我试过这个,但我希望这些设置能够覆盖自动设置。