Ubuntu 18.04 连接到 OpenVPN 时无法进行 DNS 解析

Ubuntu 18.04 连接到 OpenVPN 时无法进行 DNS 解析

当我通过 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 设备似乎忽略了它。

解决方案

  1. Ubuntu 18.04 使用systemd-resolved,因此您所要做的就是安装 openvpn 帮助systemd-resolved脚本

    sudo apt install openvpn-systemd-resolved
    

    这些 GitHub 说明

  2. 更新config.ovpn文件并添加以下行:

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

    /etc/openvpn/update-resolv-conf这不是在会议上增加或减少。

  3. 为了防止 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

相关内容