使用 OpenVPN 客户端配置文件设置 DNS 服务器

使用 OpenVPN 客户端配置文件设置 DNS 服务器

如何仅使用客户端配置在客户端上设置 DNS 服务器。我的客户端是 Windows 计算机,我想在客户端连接时更改 DNS 服务器,并在断开 VPN 连接时恢复到原始配置。

到目前为止,我找到的所有信息都涉及使用服务器的配置将 DNS 配置推送到客户端,但在这种情况下,我无法更改服务器配置,并且目前每次连接到 VPN 时都要手动执行此操作。 openvpn 配置选项可以在连接期间设置本地计算机 DNS 服务器,这很棒。

答案1

您可以使用批处理脚本来执行此操作,如下所示。它假设您的家庭 DNS 服务器是 1.1.1.1 和 2.2.2.2,而您的 VPN DNS 服务器是 8.8.8.8 9.9.9.9:

vpn-连接.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断开连接命令

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

答案2

您可以将以下内容添加到客户端配置文件。

dhcp-option DNS <dns_server_ip_address>

在服务器端它应该是:

push "dhcp-option DNS <dns_server_ip_address>"

看起来dhcp-option两边都在用。你可以用 做同样的事情route

答案3

除了以下两项之一外:

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

第一种强制 Windows 优先选择已配置的 DNS 服务器,而不是从 DHCP 收到的任何其他 DNS 服务器。第二种可防止 DNS 泄漏到除已配置的 DNS 服务器之外的任何 DNS 服务器。

答案4

显然,Windows 中的绑定顺序存在问题,至少包括 Windows 2000/XP/7。这将导致 Windows OpenVPN 客户端使用默认网络适配器的 DNS 设置,而不是 VPN 适配器的设置。

要解决此问题,您需要按照绑定顺序将 VPN TUN 或 TAP 设备置于本地网络适配器上方:

  1. 通过查看 的输出来识别您的 VPN 设备ipconfig。对我来说,这是“本地连接 2”。记住此适配器的 IP 地址。
  2. 打开 regedit.exe 并找到与您的 VPN 适配器的 IP 地址匹配的键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces。记住此适配器的 GUID。
  3. 转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage并双击Bind。这将包含适配器的 GUID 列表。将与您的 VPN 设备 GUID 对应的行剪切并粘贴到列表顶部并保存列表。

这将导致使用 VPN 设备的 DNS 条目(并且仅在 VPN 连接处于活动状态时)。您可以根据 @brunoqc 的回答进行设置。在此过程中,您可能还应该添加 openvpn 选项block-outside-dns,以确保 DNS 查询不会泄漏。

此答案基于这篇非常有用的博客文章

相关内容