我有一个使用VPN连接的客户,但是它会自动将我的DNS设置配置为不存在的DNS服务器,这意味着每个DNS解析都会超时,直到尝试其他方法为止,这实际上会减慢所有Internet流量。
有没有一种方法可以防止应用程序覆盖我的DNS设置(不启用UAC)?
或者,有没有一种方法可以设置某种本地路由,即“当对IP地址A的DNS请求进入时,实际上使用IP地址B”?
我正在使用Windows 8 Developer预览(但我怀疑它应该与Windows 7一样工作)。
谢谢
我有一个使用VPN连接的客户,但是它会自动将我的DNS设置配置为不存在的DNS服务器,这意味着每个DNS解析都会超时,直到尝试其他方法为止,这实际上会减慢所有Internet流量。
有没有一种方法可以防止应用程序覆盖我的DNS设置(不启用UAC)?
或者,有没有一种方法可以设置某种本地路由,即“当对IP地址A的DNS请求进入时,实际上使用IP地址B”?
我正在使用Windows 8 Developer预览(但我怀疑它应该与Windows 7一样工作)。
谢谢
Answers:
除了在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 VPN和192.168.0.1。
假设您根本不需要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服务器将用于解析主机名。
如果您需要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服务器。
我有一个类似的问题;连接到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调整)。
有没有一种方法可以防止应用程序覆盖我的DNS设置(不启用UAC)?
至少没有简单的方法可以做到这一点。
或者,有没有一种方法可以设置某种本地路由,即“当对IP地址A的DNS请求进入时,实际上使用IP地址B”?
您可以将条目添加到主机文件(C:\Windows\System32\drivers\etc\hosts
)。该文件包含从主机名到IP地址的映射,并且比DNS请求优先。
您可以检查“在远程网络上使用默认网关”复选框的状态吗?通过打开VPN连接的属性并转到“网络”选项卡,然后选择“ TCP / IP v4”或“ TCP / IP V6”,然后选择属性,然后进行高级查找。启用此功能可能意味着所有Internet流量都通过VPN连接进行路由。并非总是可以禁用此功能,而仍然可以使用VPN进行所需的操作,但是可以禁用它,这可能会加快Internet访问速度。
如果那没有帮助,则那里有一个DNS选项卡,您可以尝试在其中添加DNS服务器。我已经尝试过了,但是我希望这些设置能覆盖自动设置。