防止Windows 7/8开发人员预览版上的VPN更改DNS


10

我有一个使用VPN连接的客户,但是它会自动将我的DNS设置配置为不存在的DNS服务器,这意味着每个DNS解析都会超时,直到尝试其他方法为止,这实际上会减慢所有Internet流量。

有没有一种方法可以防止应用程序覆盖我的DNS设置(不启用UAC)?

或者,有没有一种方法可以设置某种本地路由,即“当对IP地址A的DNS请求进入时,实际上使用IP地址B”?

我正在使用Windows 8 Developer预览(但我怀疑它应该与Windows 7一样工作)。

谢谢

Answers:


18

除了在VPN连接上静态分配DNS服务器之外,我认为没有其他方法可以防止这种情况的发生。

要更改查询DNS服务器的顺序,应该能够按照/superuser//a/314379/120267更改接口绑定顺序,但这似乎并不影响VPN连接中的我在Windows 7上的个人测试;我已经确认HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage\Bind,无论接口绑定顺序设置如何,我的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服务器。在此示例中,它们分别是My VPN192.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服务器来解析Intranet主机名,则可以在命令提示符下运行以下命令:

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服务器。


您是英雄先生,感谢您的广泛回答,看来效果不错!我试着与netsh

1

我有一个类似的问题;连接到VPN服务器将覆盖我的工作站的(远程VPN客户端)DNS,从而使本地LAN DNS被遮盖。在指出要把它发布在这里之前,我在Stackoverflow方面更详细地描述了该问题。

阅读了此线程后,很明显,使用OpenVPN客户端配置无法防止替代。我的解决方案是在OpenVPN配置目录中添加一个批处理文件,该文件在形成OpenVPN连接时执行。如果OVPN文件名为company.ovpn,则在connect上运行的文件需要命名为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:在继续操作之前要等待几秒钟的hack。如果没有延迟执行,OpenVPN客户端的最新版本(2.3)将忽略DNS并路由更改。

2:将VPN连接的DNS设置为指向本地主机。我有一个解析器(我使用SimpleDNS Plus)在本地主机上运行,​​该解析器通过VPN将查询转发到公司域到公司DNS服务器,并将其他所有转发到本地LAN DNS服务器。请注意,由于VPN端点位于本地主机上,因此我无法使用本地LAN解析器通过VPN将对公司域的查询转发到公司DNS。连接名称(“ Local Area Connection 4”)是在命令提示符下通过“ ipconfig / all”确定的。

3:将公司VPN服务器配置为通过VPN 路由所有出站流量,同时限制出站(到Internet)SSH连接。这与我的工作流程冲突,我首先删除“ 0.0.0.0 netmask 0.0.0.0”路由...

4: ..然后我重新添加0.0.0.0/0路由以指向本地LAN网关,并将其度量标准(权重)设置为1000,以作为所有未路由的所有通信的全部。

5:如果没有“ exit 0”,OpenVPN将发出错误警告,指示脚本失败(退出状态为1)。

希望这对某人有用。.它对我来说相当不错(每次打开连接时都无需手动进行路由或DNS调整)。


0

有没有一种方法可以防止应用程序覆盖我的DNS设置(不启用UAC)?

至少没有简单的方法可以做到这一点。

或者,有没有一种方法可以设置某种本地路由,即“当对IP地址A的DNS请求进入时,实际上使用IP地址B”?

您可以将条目添加到主机文件(C:\Windows\System32\drivers\etc\hosts)。该文件包含从主机名到IP地址的映射,并且比DNS请求优先。


好吧,我知道主机文件,但这全都是基于IP地址的,因此不幸地无法正常工作……
Wiebe Tijsma 2012年

哦,好,现在我收到您的问题。不,您不能将请求从一个IP重定向到另一个。
Michael

0

您可以检查“在远程网络上使用默认网关”复选框的状态吗?通过打开VPN连接的属性并转到“网络”选项卡,然后选择“ TCP / IP v4”或“ TCP / IP V6”,然后选择属性,然后进行高级查找。启用此功能可能意味着所有Internet流量都通过VPN连接进行路由。并非总是可以禁用此功能,而仍然可以使用VPN进行所需的操作,但是可以禁用它,这可能会加快Internet访问速度。

如果那没有帮助,则那里有一个DNS选项卡,您可以尝试在其中添加DNS服务器。我已经尝试过了,但是我希望这些设置能覆盖自动设置。


未选中它,因此它不会通过VPN路由所有Internet流量(当最终确定名称时,连接速度足够快)。我尝试更改那里的DNS设置,但是不幸的是,当我重新启动连接时,所有这些都自动变回了无效的DNS设置:(
Wiebe Tijsma 2012年

如果您无法阻止DNS更改,是否可以通过使用防火墙阻止对该地址的DNS请求来使其更快失败?
sgmoore 2012年

0

不幸的是,netsh无法删除dhcp分配的dns服务器。但这可以通过清除DhcpNameServer参数来完成

HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\{id}

注册表项。


0

从2017年开始,如果它基于OpenVPN,现在有可能

在您的客户端配置文件中添加一行

拉过滤器忽略“ dhcp-option DNS”

它将忽略所有以引号引起来的所有推送配置行。

三个动作关键字是accept ignore reject。我还没有发现拒绝的用例。


0

我只是从客户端VPN配置中删除此选项

setenv opt阻止外部DNS

它解决了问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.