当我通过 Gnome 网络管理器连接到 VPN 网络时,我失去了 DNS 解析,实际上,我无法访问 VPN 网络内部或外部的资源。
当我使用 Ubuntu 16.04 并使用 VPN 时,“ /etc/resolv.conf/
”文件将包含我所连接的 (VPN) 网络的 DNS 服务器。现在它始终包含以下条目:
nameserver 127.0.0.53
search myprovider.com
据我了解,127.0.0.53
这是 使用的 DNS 存根的地址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
答案1
问题
该文件/etc/resolv.conf
不会被/etc/openvpn/update-resolv-conf
脚本更新,因为resolvconf
在 ubuntu 18.04 上默认情况下没有安装。
事实上,该脚本的第一行检查/sbin/resolvconf
可执行文件:
[ -x /sbin/resolvconf ] || exit 0
通过安装 resolvconfapt-get
不是一个解决方案,因为/etc/openvpn/update-resolv-conf
脚本使用推送的 DNS 条目更新/etc/resolv.conf
文件,但 tun 设备似乎忽略了它。
解决方案
Ubuntu 18.04 使用
systemd-resolved
,因此您所要做的就是安装 openvpn 帮助systemd-resolved
脚本sudo apt install openvpn-systemd-resolved
更新
config.ovpn
文件并添加以下行:script-security 2 up /etc/openvpn/update-systemd-resolved down /etc/openvpn/update-systemd-resolved down-pre
/etc/openvpn/update-resolv-conf
这不是在会议上增加或减少。为了防止 DNS 泄漏,你应该将此行添加到文件末尾
config.ovpn
(根据此 systemd 问题评论):dhcp-option DOMAIN-ROUTE .
答案2
我找到了一个解决方案这篇博文。虽然提到了两种解决方案,但我更喜欢使用第二种解决方案,因为这意味着我的 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
然后编辑你的 OpenVPN 客户端文件(例如 client.ovpn),将 up/down 脚本更改为:
script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
up /etc/openvpn/scripts/update-systemd-resolved
down /etc/openvpn/scripts/update-systemd-resolved
(我已注释掉原来的上/下设置)。
答案3
实际上,这个问题有一个更简单的解决方案。问题在于 DNS 流量以及 Ubuntu 18 如何管理它。默认情况下,IP 转发是禁用的,而这正是 OpenVPN 提供正确网络所需要的。您所要做的就是运行以下命令:
sudo nano /etc/sysctl.conf
打开此文件后,查找包含 的行net.ipv4.ip_forward
。如果此行被注释,请删除行前面的 # 符号(如果没有注释,则表示您有其他问题)。保存文件,然后重新启动 OpenVPN 服务器实例。
升级到 Ubuntu 18 后,此修复不需要对客户端或 OpenVPN 代码进行任何修改。经过测试并确认有效。
但是,这显然需要您能够管理服务器。不幸的是,对于许多仅使用 18.04 连接到由其他人管理的 OpenVPN 服务器的人来说,这个错误是存在的……
答案4
如果你的系统正在使用 NetworkManager,那么你可能只需要更改连接的 DNS 优先级,如下所示这个答案:
nmcli -p connection modify VPN_CONNECTION_NAME ipv4.dns-priority -1
在我的例子中,DNS 正在更新,但由于现有 DNS 服务器优先,因此被忽略。您可能需要 root/ sudo
。如果这不起作用,请尝试ipv6.dns-priority
。