如何在 VPN 连接上自动获取新的名称服务器

Chr*_*rno 13 ubuntu dns vpn

我正在运行 ubuntu xenial 16.04

我们正在使用 openvpn 连接到虚拟私有云。该云拥有自己的 DNS 服务器(就像我们的本地路由 - 家庭或办公室)。

当我连接到 VPN 时,该网络中的所有 IP 都可用,但我无法通过主机名访问任何 IP。原因很简单:resolv.conf 文件仍然显示我的本地办公室名称服务器。如果我手动覆盖 resolv.conf 以获得正确的名称服务器,一切都很好。

那么,如何在连接到 VPN 时让它自动重新配置 resolv.conf 呢?

我可以连接到系统事件并执行脚本吗?

ysd*_*sdx 8

OpenVPN 包在/etc/openvpn/update-resolv-conf. 你需要配置它:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Run Code Online (Sandbox Code Playgroud)

这将从dhcp-option DNSOpenVPN 对等方/服务器传递的选项中获取 DNS 服务器地址并进行相应配置resolvconf。它也处理dhcp-option DOMAIN

然而,它并不完美,因为这会将这些名称服务器添加到现有名称服务器列表中,而不是覆盖名称服务器列表。如果您正在使用openresolv-x可用于覆盖DNS配置,而不是preprending它。


如果您正在使用systemd-resolved,则可以使用/etc/openvpn/update-systemd-resolvedwhich 挂钩systemd-revolved代替resolvconf

script-security 2 
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
Run Code Online (Sandbox Code Playgroud)

在 Debian 上,此脚本位于openvpn-systemd-resolved.

  • 在这两行之上,您还需要添加“script-security 2”或使用“--script-security 2”运行“openvpn” (2认同)