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.53system-resolved使用的DNS存根的地址。

我怀疑这是一个错误,因为VPN在Ubuntu 16.04上工作正常。 当我使用VPN服务时,有什么办法可以设置网络的DNS服务器吗?

更新:

我尝试使用附加在post末尾的配置文件连接到openvpn网络,但是我收到以下错误:

  Authenticate/Decrypt packet error: cipher final failed 

我已经validation服务器使用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 

我在这篇博客文章中找到了解决方案。 虽然提到了两个解决方案,但我更喜欢使用第二个解决方案,因为这意味着我的DNS由OpenVPN服务器设置(第一个解决方案意味着我使用相同的DNS服务器,无论我是否连接到OpenVPN服务器)。

简而言之:

  • sudo mkdir -p /etc/openvpn/scripts
  • sudo wget https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved -P /etc/openvpn/scripts/

然后通过将上/下脚本更改为:来编辑OpenVPN客户端文件(例如client.ovpn):

 script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf up /etc/openvpn/scripts/update-resolv-conf down /etc/openvpn/scripts/update-resolv-conf 

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

问题

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

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

 [ -x /sbin/resolvconf ] || exit 0 

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

  1. Ubuntu 18.04使用systemd-resolved ,所以你要做的就是为systemd-resolved通过安装openvpn helper脚本

     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到conf中。

  3. 要防止DNS泄漏,您应该将此行添加到文件的末尾(根据此systemd问题注释 ):

     dhcp-option DOMAIN-ROUTE . 

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

 sudo nano /etc/sysctl.conf 

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

此修复程序在升级到Ubuntu 18后不需要对客户端或OpenVPN代码进行任何修改。经过测试和确认工作。

我也受到了影响。 就我而言,我正在使用OpenVPN和内部名称服务器(在VPN内部)。 这一直工作到Ubuntu 17.10(在/etc/nsswitch.conf中有“hosts:files dns”)。

/etc/resolv.conf由openvpn脚本正确更新(通过在openvpn客户端配置文件中调用/ etc / openvpn / update-resolv-conf)。

但是,VPN内部主机的名称解析不再起作用(或者至少是零星的……我猜本地DNS缓存正在选择名称,但是经过相当长的时间)。

什么似乎有帮助,甚至解决问题(虽然现在说太早)是安装以下包:

sudo apt install openvpn-systemd-resolved

几天后,我会有更多的经验来解决我的问题。

如果您也受到影响,请尝试此并发表评论!

干杯,

迈克尔。

于2018年9月13日在Ubuntu 18.04上测试

还有另一个有用的命令可以通过命令行设置所需的内容。 但在我的情况下,您可以使用命令行和GUI控制VPN连接。

sudo nmcli connection add type vpn vpn-type openvpn con-name la.vpn.contoso.com ifname --

ifname --默认情况下是必需的,但不会影响任何内容

sudo nmcli connection modify la.vpn.contoso.com ipv4.dns 172.16.27.1 sudo nmcli connection modify la.vpn.contoso.com ipv4.dns-search int.contoso.com sudo nmcli connection modify la.vpn.contoso.com ipv4.never-default yes

never-default不应使用远程网关作为默认路由

更感兴趣的是最后的触摸:

nmcli connection modify la.vpn.contoso.com vpn.data 'ca = /tmp/la.vpn.contoso.com/you/ca.crt, key = /tmp/you.key, dev = tun, cert = /tmp/you.crt, cert-pass-flags = 1, comp-lzo = adaptive, remote = la.vpn.contoso.com:1194, connection-type = tls'

之后,您可以使用GUI控制vpn或使用以下命令:

sudo nmcli --ask connection up la.vpn.contoso.com sudo nmcli connection down la.vpn.contoso.com