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
是system-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设备似乎忽略它。
解
-
Ubuntu 18.04使用
systemd-resolved
,所以你要做的就是为systemd-resolved
通过安装openvpn helper脚本sudo apt install openvpn-systemd-resolved
或者使用这些GitHub说明
-
更新
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中。 -
要防止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