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


39

当我通过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是.NET使用的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
在调试无法完全解决的类似问题时,我使用了resolvectl statusresolvectl help找出了自己的解决方案。
notbad.jpeg,

Answers:


26

我在此博客文章中找到了解决方案。尽管提到了两种解决方案,但我更喜欢使用第二种解决方案,因为这意味着我的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

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


如果使用gnome openvpn实用程序,应该在哪里存储config.ovpn文件?
orestis

1
config.ovpn不是“找到”的-这是用于连接的客户端配置文件。您要么生成它,要么由您的OpenVPN提供商将其发布给您(它可能不会被调用config.ovpn-可以被称为任何东西,例如client.ovpn)。
安迪·特弗

这非常完美。
Ahsanul Haque

2
我明白了WARNING: Failed running command (--up/--down): external program fork failed
笨蛋

不幸的是,这对于使用tcp的vpn无效,vpn外部的站点无法解析,因此我开始使用client.pritunl.com/#install发现有用
Saisurya Kattamuri

48

问题

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

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

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

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

  1. Ubuntu 18.04使用systemd-resolved,因此您所要做的就是安装openvpn helper脚本以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在conf上加减。

  3. 为防止DNS泄漏,您应在config.ovpn文件末尾添加以下行(根据此systemd问题注释):

    dhcp-option DOMAIN-ROUTE .
    

1
非常感谢,在Ubuntu 18.04上为我工作。而且我想指定,script-security 2在上/下行之前仍需要该参数,否则程序会因错误而崩溃(OpenVPN 2.4.4)
lucidyan

很高兴它帮助了:)更改了答案的最后一句话,在我看来,这 script-security 2是没有必要的。那也许是因为我以root用户身份(使用sudo)运行openvpn客户端
Qlimax

1
@Qlimax您知道如何将这些设置导入gnome openvpn客户端吗?
orestis

2
@ore​​stis,您必须安装此软件包,sudo apt-get install network-manager-openvpn-gnome 然后,您应该能够将.ovpn配置文件导入gnome网络管理器。askubuntu.com/questions/187511/…UI随时间变化,您应该能够在settings-> network-> vpn
Qlimax

1
惊讶于如此众多的人:我有一个ovpn.config,是的,但是NetworkManager似乎没有使用它。您是否编辑了文件并重新导入了文件,尤其是替换了up / downs脚本。因为我看到了这个不透明的二进制文件/ usr / lib / NetworkManager / nm-openvpn-service-openvpn-helper,但找不到该文件的文档。如果需要重新导入ovpn.config,请修改答案。
哈拉尔德

4

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

sudo nano /etc/sysctl.conf

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

升级到Ubuntu 18后,此修补程序不需要对客户端或OpenVPN代码进行任何修改。

但是,这显然需要您可以管理服务器。不幸的是,对于许多仅通过18.04连接到由其他人管理的OpenVPN服务器的人来说,该错误仍然存​​在。


没有为我工作。在您的情况下,您如何确定这是问题所在?
hwjp

警告:您永远不需要在openvpn 客户端上启用ip_forward !这是安全隐患。在openvpn 服务器上,您可能需要它,具体取决于所使用的配置,这可能就是显示此注释的原因。
higuita

2

于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


0

我也受到影响。就我而言,我将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安装openvpn-systemd-resolved

再过几天,无论这是否能解决我的问题,我都会有更多的经验。

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

干杯,

迈克尔


最终,这似乎不是解决方案。我又遇到了问题。我想还有其他办法可以使它起作用……
Michael Opdenacker

1
也许然后您删除答案?似乎该决定已在下面找到
lucidyan '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.