我正在运行 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-resolved
which 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 的门票