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

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

我正在运行 ubuntu xenial 16.04

我们使用 openvpn 连接到虚拟私有云。该云有自己的 DNS 服务器(我们的本地路由 - 家庭或办公室也是如此)。

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

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

我可以挂钩系统事件并执行脚本吗?

答案1

OpenVPN 软件包在/etc/openvpn/update-resolv-conf.您需要将其配置为:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

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

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


如果您使用的是systemd-resolved,则可以使用/etc/openvpn/update-systemd-resolvedwhich hooks intosystemd-revolved而不是resolvconf

script-security 2 
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre

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

答案2

这是我提出的解决方案:有一个开关允许您在隧道启动并运行时运行脚本。我使用该开关基本上用我知道正确的文件覆盖 resolv.conf 文件。我知道这完全是一个黑客行为。

sudo openvpn --up reset-dns.sh --client client.ovpn

脚本(重置 dns):

#!/bin/bash
cp ~/resolv.conf /etc/resolv.conf

另外,对于那些说“天哪!你正在以 root 身份运行该隧道!”的人它不会以任何其他方式运行;甚至在我的 DNS 黑客攻击之前。

我绝对愿意接受更好的方法。 ubuntu 的网络管理器根本无法工作。我已经多次为此削减了 ubuntu 的门票

相关内容