Answers:
您可以使用批处理脚本来执行此操作,如下所示。假定您的家庭DNS服务器是1.1.1.1和2.2.2.2,而您的VPN DNS服务器是8.8.8.8 9.9.9.9:
vpn-connect.bat:
netsh interface ip set dns "Local Area Connection" static 8.8.8.8
netsh interface ip add dns "Local Area Connection" 9.9.9.9
vpn-disconnect.bat
netsh interface ip set dns "Local Area Connection" static 1.1.1.1
netsh interface ip add dns "Local Area Connection" 2.2.2.2
我打算在这些脚本中包括连接和断开连接的方法,但是我没有在OpenVPN中看到通过命令行断开连接的选项。如果您希望自动进行连接,这应该可以:
C:\Program Files\bin\openvpn.exe C:\Program Files\conf\client.ovpn
您可以将以下内容添加到客户端配置文件。
dhcp-option DNS <dns_server_ip_address>
在服务器端,应该是:
push "dhcp-option DNS <dns_server_ip_address>"
似乎dhcp-option
双方都在使用。您可以使用进行相同的操作route
。
显然Windows中的绑定顺序有问题,至少包括Windows 2000 / XP / 7。这将导致Windows OpenVPN客户端使用默认网络适配器的DNS设置,而不是VPN适配器的设置。
要解决此问题,您需要按照绑定顺序将VPN TUN或TAP设备放置在本地网络适配器上方:
ipconfig
。对我来说,这是“本地连接2”。记住此适配器的IP地址。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
与您的VPN适配器的IP地址匹配的密钥。记住此适配器的GUID。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage
并双击Bind
。这将包含适配器的GUID列表。将与您的VPN设备的GUID对应的行剪切并粘贴到列表的顶部,然后保存列表。这将导致使用VPN设备的DNS条目(并且仅在VPN连接处于活动状态时)。您可以根据@brunoqc的答案设置它们。在使用它时,您可能还应该添加openvpn选项block-outside-dns
,以确保DNS查询不会泄漏。
该答案基于此非常有用的博客文章。
除了以下两个选项之一:
dhcp-option DNS <dns_server_ip_address> (add to client config)
要么
push "dhcp-option DNS <dns_server_ip_address>" (add to server config)
也将它们添加到客户端配置中,以强制Windows使用配置的DNS:
register-dns
block-outside-dns
1强制Windows优先于已配置的DNS服务器,而不是从DHCP接收的其他任何服务器。第二个防止DNS泄漏到配置的DNS服务器以外的任何DNS服务器。