OpenVPN 重启中断连接

Kle*_*oup 3 network-manager networking openvpn

我通过默认网络管理器在 Ubuntu 16.04 上使用 VPN(通过此方法安装的 PIA)。通常,在大约 5 分钟的流媒体或大约 1 小时的正常浏览后,它就会被切断,我的意思是一切都会失败,包括与给定 IP 的直接连接。

经过深入研究后/var/log/syslog,我发现了这一系列事件,这似乎是罪魁祸首:

Apr  8 17:41:43 ***** nm-openvpn[9107]: [83d27bda14f33782df085b09962c2dfa] Inactivity timeout (--ping-restart), restarting
Apr  8 17:41:43 ***** nm-openvpn[9107]: SIGUSR1[soft,ping-restart] received, process restarting
Apr  8 17:41:45 ***** nm-openvpn[9107]: WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
Apr  8 17:41:45 ***** nm-openvpn[9107]: NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Apr  8 17:41:45 ***** nm-openvpn[9107]: RESOLVE: Cannot resolve host address: us-east.privateinternetaccess.com: Temporary failure in name resolution
Apr  8 17:42:20 ***** nm-openvpn[9107]: message repeated 8 times: [ RESOLVE: Cannot resolve host address: us-east.privateinternetaccess.com: Temporary failure in name resolution]
Run Code Online (Sandbox Code Playgroud)

有时它前面是这样的:

Apr  8 10:47:28 ***** nm-openvpn[4716]: TLS Error: Unroutable control packet received from [AF_INET]*.*.*.*:**** (si=3 op=P_CONTROL_V1)
Apr  8 10:47:56 ***** nm-openvpn[4716]: message repeated 3 times: [ TLS Error: Unroutable control packet received from [AF_INET]*.*.*.*:**** (si=3 op=P_CONTROL_V1)]
Run Code Online (Sandbox Code Playgroud)

但是,我发现的所有内容都表明存在时间同步问题,但我没有。

这是openvpn网络管理器生成的进程:

/usr/sbin/openvpn --remote us-newyorkcity.privateinternetaccess.com 1194 udp --comp-lzo --nobind --dev tun --auth-nocache --reneg-sec 0 --syslog nm-openvpn --script-security 2 --up /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper --bus-name org.freedesktop.NetworkManager.openvpn.Connection_8 --tun -- --up-restart --persist-key --persist-tun --management /var/run/NetworkManager/nm-openvpn-b0ce41de-070b-42c7-af39-90961791ebeb unix --management-client-user root --management-client-group root --management-query-passwords --auth-retry interact --route-noexec --ifconfig-noexec --client --auth-user-pass --ca /etc/openvpn/ca.crt --user nm-openvpn --group nm-openvpn --chroot /var/lib/openvpn/chroot
Run Code Online (Sandbox Code Playgroud)

(我无法在 NM 中找到更改这些选项的位置...)

知道问题可能出在哪里吗?

小智 6

最近遇到了同样的问题,并在 bugs.launchpad.net 上发现了这篇文章,它为我解决了这个问题! 详细的帖子在这里,但我会继续列出说明。

简而言之,OpenVPN 由于权限问题而无法重新连接。(总是如此,不是吗!?)

您需要为 systemd 创建一个嵌入式“插件”。

  1. 创建目录来保存嵌入式配置文件:

$ cd /etc/systemd/系统

$ sudo mkdir NetworkManager.service.d

$ cd NetworkManager.service.d

  1. 创建一个新的conf文件:

$ sudo nano禁用-openvpn-reduced-privileges.conf

将以下内容添加到文件中:

# Disable NetworkManager's OpenVPN plug-in from performing chroot and  dropping privileges by default (null assignment) 
[Service]
Environment="NM_OPENVPN_CHROOT=" 
Environment="NM_OPENVPN_USER="
Environment="NM_OPENVPN_GROUP="
Run Code Online (Sandbox Code Playgroud)

保存文件并退出nano。为了使更改生效,您可以重新启动 NetworkManager 服务并退出并重新启动 openvpn 连接,或者如果对您来说更简单,只需重新启动计算机即可。

您可以通过多种方式测试其是否正常工作:

Systemd 应该显示插入配置正在使用中:

$ systemctl 状态网络管理器

NetworkManager.service - Network Manager
  Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/NetworkManager.service.d
     +-disable-openvpn-reduced-privileges.conf
Run Code Online (Sandbox Code Playgroud)
  1. 当 openvpn 运行时,它应该以 root 用户身份运行。这可以使用 ps 或任何其他进程列表器/监视器进行验证。我个人使用htop。

  2. 强制重新启动正在运行的 openvpn 连接并查看是否成功:

$ sudo Killall -SIGUSR1 openvpn