当我通过 Gnome Network-manager 连接到 VPN 网络时,我失去了 DNS 解析,实际上,我无法访问 VPN 网络内部或外部的资源。
当我使用 Ubuntu 16.04 并使用 VPN 时,“ /etc/resolv.conf/
”文件将包含我连接的 (VPN) 网络的 DNS 服务器。现在它总是包含以下条目:
nameserver 127.0.0.53
search myprovider.com
据我了解127.0.0.53
,是system-resolved
.
我怀疑这是一个错误,因为 VPN 在 Ubuntu 16.04 上运行良好。当我使用 VPN 服务时,有什么方法可以设置我的网络的 DNS 服务器?
更新:
我尝试使用帖子末尾附加的配置文件连接到 OpenVPN 网络,但出现以下错误:
Authenticate/Decrypt packet error: cipher final failed
我已经验证服务器使用 lzo 压缩并且我也启用了它。连接保持活跃,但我无法导航到 VPN 内部或外部的任何页面。
在下面列出的配置文件中,我已经包含了回复中发布的解决方案
client
dev tun
proto udp
remote openvpn.bibsys.no 1194
remote my-server-2 1194
resolv-retry infinite
nobind
user myuser
group myuser
persist-key
persist-tun
ca ca-cert.pem
cert openvpn.crt
key openvpn.key
cipher AES-256-CBC
comp-lzo yes
script-security 2
up /etc/openvpn/scripts/update-systemd-resolved
down /etc/openvpn/scripts/update-systemd-resolved
down-pre
问题
该文件
/etc/resolv.conf
不会被/etc/openvpn/update-resolv-conf
脚本更新,因为resolvconf
默认情况下未安装在 ubuntu 18.04 上。事实上,该脚本的第一行之一检查
/sbin/resolvconf
可执行文件:安装 resolvconf via
apt-get
不是解决方案,因为/etc/openvpn/update-resolv-conf
脚本会/etc/resolv.conf
使用推送的 DNS 条目更新文件,但 tun 设备似乎忽略了它。解决方案
Ubuntu 18.04 使用
systemd-resolved
,所以你所要做的就是为systemd-resolved
via安装 openvpn 帮助脚本或使用这些 GitHub 说明
更新您的
config.ovpn
文件添加以下行:/etc/openvpn/update-resolv-conf
那而不是在conf中上下添加。为防止 DNS 泄漏,您应该将此行添加到
config.ovpn
文件末尾(根据此 systemd 问题注释):我在这篇博文中找到了解决方案。虽然提到了两种解决方案,但我更喜欢使用第二种解决方案,因为这意味着我的 DNS 是由 OpenVPN 服务器设置的(第一种解决方案意味着无论我是否连接到 OpenVPN 服务器,我都使用相同的 DNS 服务器)。
简而言之:
sudo mkdir -p /etc/openvpn/scripts
sudo wget https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved -P /etc/openvpn/scripts/
sudo chmod +x /etc/openvpn/scripts/update-systemd-resolved
然后通过将 up/down 脚本更改为:编辑您的 OpenVPN 客户端文件(例如 client.ovpn):
(我已经注释掉了原来的向上/向下设置)。
实际上,这个问题有一个更简单的解决方案。问题在于 DNS 流量以及 Ubuntu 18 如何管理它。默认情况下,IP 转发被禁用,这是 OpenVPN 提供正确网络所需要的。您所要做的就是运行以下命令:
打开此文件后,查找包含
net.ipv4.ip_forward
. 如果此行已注释,请删除该行前面的 # 符号(如果未注释,则您有另一个问题)。保存文件,然后重新启动您的 OpenVPN 服务器实例。此修复不需要在升级到 Ubuntu 18 后对客户端或 OpenVPN 代码进行任何修改。经过测试并确认可以正常工作。
但是,这显然需要您可以管理服务器。不幸的是,对于许多刚刚使用 18.04 连接到由其他人管理的 OpenVPN 服务器的人来说,存在这个错误......
于 2018 年 9 月 13 日在 Ubuntu 18.04 上测试
还有另一个有用的命令可以通过命令行设置您需要的内容。您可以使用命令行和 GUI 控制您的 VPN 连接。
ifname --
默认情况下是必需的,但不影响任何内容never-default
不应使用远程网关作为默认路由还有更感兴趣的最后润色:
之后,您可以使用 GUI 控制 vpn 或使用以下命令:
我也受到影响。就我而言,我正在使用带有内部名称服务器(位于 VPN 内部)的 OpenVPN。这一直有效到 Ubuntu 17.10(带有
hosts: files dns
in/etc/nsswitch.conf
)。/etc/resolv.conf
由 openvpn 脚本正确更新(通过调用/etc/openvpn/update-resolv-conf
openvpn 客户端配置文件)。但是,VPN 内部主机的名称解析不再起作用(或者至少偶尔...我猜本地 DNS 缓存正在挑选名称,但经过了相当长的时间)。
似乎有帮助,甚至解决问题(尽管现在说还为时过早)是安装以下软件包:
如果您的系统正在使用 NetworkManager,那么您可能只需要更改连接的 DNS 优先级,按照这个答案:
就我而言,DNS 正在更新,但由于现有的 DNS 服务器具有优先权而被忽略。您可能需要 root/
sudo
。如果这不起作用,请尝试ipv6.dns-priority
.所提出的面向 CLI(非 NetworkManager)的解决方案都不适合我(我什至没有
up
和down
行myconfig.ovpn
)。但是,我发现 NetworkManager VPN 似乎又可以工作了(一两年前它还没有工作,这就是我当时切换到 openvpn CLI 的原因)。我没有以任何方式调整它:只是尝试使用适当的凭据激活它。