Ubuntu 16.04 开箱即用的 VPN 连接 DNS 路由失败

Ubuntu 16.04 开箱即用的 VPN 连接 DNS 路由失败

我想报告一些奇怪的行为以及我的解决方案。我非常不满意,因为它依赖于自定义脚本和非标准包。我希望社区能帮助我找到更好的解决方案。


问题

我的所有服务器都严重依赖 OpenVPN。从 14.04.5 升级到 Ubuntu 16.04.1 后,我无法访问任何网站和大多数服务。

我的 OpenVPN 服务器可以继续顺利地为 Mac OS X、Windows 和 Ubuntu 12.04/14.04 客户端传输隧道流量。

系统详细信息

我的开箱即用的 resolv.conf 文件如下所示:

nameserver 68.105.28.16
nameserver 68.105.29.16

我的路由表明我正在通过 192.168.0.1 的路由器进行路由,并被分配了 192.168.0.3 的动态 IP 地址。命令显示:

ip r
ip a

我的流量可以正常运行(互联网、XMCP、IRC 等...),直到我使用以下命令通过终端连接到我的 OpenVPN 服务器

sudo openvpn ~/client.ovpn

一旦连接,它将立即停止所有流量。

为该连接创建了一个新的适配器 (tun0)。命令显示:

ip a

尽管配置设置为通过我的 OpenVPN 服务器传输所有流量,但通过 Wireshark 连接后发现有数十个 DNS 调用针对我的原始 DNS 服务器。

我的解决方案

经过整整一周阅读数十份错误报告、博客文章和教程后,我仍然没有成功。但是,这是一个 DNS 问题,DNS 由 resolv 管理。

最后,我偶然发现了这个 GitHub 库,我的问题得到了解决。

masterkorp/openvpn-更新-resolv-conf

为了实现这些脚本,我使用以下命令将 repo 克隆到我的主目录中:

git clone https://github.com/masterkorp/openvpn-update-resolv-conf.git

我将这些脚本复制到 /etc/openvpn:

sudo chmod +x *.sh && sudo mv *.sh /etc/openvpn

接下来,我使用以下命令安装了 openresolv、nscd 和 unbound:

sudo apt-get install openresolv nscd unbound

然后,我编辑了我的 OpenVPN 客户端配置文件(*.ovpn 或 *.conf),并在配置指令末尾但在“ca”标签(您的内联证书,如果有)之前附加了以下行:

script-security 2
up "/etc/openvpn/update-resolv-conf.sh /etc/openvpn/update-systemd-network.sh"
down "/etc/openvpn/update-resolv-conf.sh /etc/openvpn/update-systemd-network.sh"

这使我能够成功连接到 VPN 并隧道传输我的流量。

我的 resolv.conf 文件现在如下所示:

# Generated by resolvconf
nameserver 127.0.0.1
nameserver 127.0.1.1

讨论并需要更好的解决方案

在我看来,Ubuntu 的 DNS 记录没有得到正确更新。上述代码和新条目的目的是重写内部 DNS 服务器记录的故障更新过程。我读过 Launchpad 上的一些错误报告,这些报告表明 16.04 依赖于一些在 14.04 中编写和运行的旧网络管理更新代码,并且从未正确迁移到新的 16.04 框架。

一定有更好的方法来处理这个过程。我不喜欢需要使用自定义脚本来修补有问题的操作系统行为的想法。

有人对此有任何见解吗?

答案1

在 /etc/resolv.conf 中设置你的 DNS 服务器,然后以 root 身份在终端中尝试以下操作:

chattr +i /etc/resolv.conf

然后重新启动

相关内容