Ubuntu 18.04 连接到 OpenVPN 时没有 DNS 解析

ore*_*tis 78 dns openvpn systemd-resolved

当我通过 Gnome 网络管理器连接到 VPN 网络时,我丢失了 DNS 解析,实际上,我无法访问 VPN 网络内部或外部的资源。

当我使用 Ubuntu 16.04 并使用 VPN 时,“ /etc/resolv.conf/”文件将包含我连接的 (VPN) 网络的 DNS 服务器。现在它总是包含以下条目:

nameserver 127.0.0.53
search myprovider.com
Run Code Online (Sandbox Code Playgroud)

据我127.0.0.53所知,system-resolved.

我怀疑这是一个错误,因为 VPN 在 Ubuntu 16.04 上运行良好。当我使用 VPN 服务时,有什么方法可以设置我网络的 DNS 服务器?

更新:

我尝试使用帖子末尾附加的配置文件连接到 OpenVPN 网络,但出现以下错误:

 Authenticate/Decrypt packet error: cipher final failed
Run Code Online (Sandbox Code Playgroud)

我已经验证服务器使用 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
Run Code Online (Sandbox Code Playgroud)

Qli*_*max 106

问题

该文件/etc/resolv.conf不会被/etc/openvpn/update-resolv-conf脚本更新,因为resolvconf默认情况下未安装在 ubuntu 18.04 上。

事实上,该脚本的第一行之一会检查/sbin/resolvconf可执行文件:

[ -x /sbin/resolvconf ] || exit 0
Run Code Online (Sandbox Code Playgroud)

安装 resolvconf viaapt-get不是解决方案,因为/etc/openvpn/update-resolv-conf脚本/etc/resolv.conf使用推送的 DNS 条目更新文件,但 tun 设备似乎忽略了它。

解决方案

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

    sudo apt install openvpn-systemd-resolved
    
    Run Code Online (Sandbox Code Playgroud)

    或使用这些 GitHub 说明

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

    script-security 2
    up /etc/openvpn/update-systemd-resolved
    down /etc/openvpn/update-systemd-resolved
    down-pre
    
    Run Code Online (Sandbox Code Playgroud)

    而不是/etc/openvpn/update-resolv-conf在 conf.

  3. 为防止 DNS 泄漏,您应该将此行添加到config.ovpn文件末尾(根据此 systemd 问题评论):

    dhcp-option DOMAIN-ROUTE .
    
    Run Code Online (Sandbox Code Playgroud)

  • 很惊讶这对你们中的很多人都有效:我有一个 ovpn.config,是的,但 NetworkManager 似乎没有使用它。您是否编辑了文件并重新导入它,特别是替换 up/downs 脚本。因为我看到这个不透明的二进制文件 /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper 用于我找不到文档。如果需要重新导入ovpn.config,请修改答案。 (4认同)
  • 这应该是公认的答案。 (3认同)
  • @ore​​stis 你必须安装这个包 `sudo apt-get install network-manager-openvpn-gnome` 然后你应该能够将 .ovpn 配置文件导入到 gnome 网络管理器中。https://askubuntu.com/questions/187511/how-can-i-use-a-ovpn-file-with-network-manager UI 随时间变化,您应该可以在设置->网络- >VPN (2认同)

And*_*fer 47

我在这篇博文中找到了解决方案。虽然提到了两个解决方案,但我更喜欢使用第二个解决方案,因为这意味着我的 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):

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
Run Code Online (Sandbox Code Playgroud)

(我已经注释掉了原来的上/下设置)。

  • `config.ovpn` 未“找到” - 它是用于连接的客户端配置文件。您要么生成它,要么由您的 OpenVPN 提供商发布给您(它可能不会被称为 `config.ovpn` - 它可以被称为任何东西,例如 `client.ovpn`)。 (2认同)
  • 我收到`警告:运行命令失败(--up/--down):外部程序分叉失败` (2认同)

小智 6

实际上,这个问题有一个更简单的解决方案。问题在于 DNS 流量以及 Ubuntu 18 如何管理它。默认情况下,IP 转发被禁用,这是 OpenVPN 提供正确网络所需要的。您所要做的就是运行以下命令:

sudo nano /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

打开此文件后,查找包含net.ipv4.ip_forward. 如果此行已被注释,请删除该行前面的 # 符号(如果未注释,则您有另一个问题)。保存文件,然后重新启动 OpenVPN 服务器实例。

升级到 Ubuntu 18 后,此修复不需要对客户端或 OpenVPN 代码进行任何修改。经过测试并确认有效。

但是,这显然需要您可以管理服务器。不幸的是,该错误存在于许多仅使用 18.04 连接到由其他人管理的 OpenVPN 服务器的人中......

  • 警告:您不需要在 openvpn *client* 上启用 ip_forward,永远不要!这是一个安全风险。在 openvpn *server* 上,您可能需要它,具体取决于所使用的配置,这可能就是显示此注释的原因。 (5认同)