我有一个包含这些设置的文件 /lib/systemd/system/openvpn.service :
[Unit]
Description=OpenVPN client
After=network.target
[Service]
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --dameon --writepid /var/run/openvpn/openvpn.pid --config /etc/openvpn/pia/Mexico.ovpn
ExecStop=-/bin/kill -TERM $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
每当我运行 systemctl start openvpn 时,我都会收到这个奇怪的错误:
Job for openvpn.service failed because a timeout was exceeded. See "systemctl status openvpn.service" and "journalctl -xe" for details.
但如果我检查我的公共 IP,它会显示我的 VPN IP。但它每隔几秒就会改变一次,我相信这是因为 OpenVPN 正在重新启动......
针对该错误消息运行命令显示:
Jun 19 04:29:33 test systemd[1]: openvpn.service: PID file /var/run/openvpn/.pid not readable (yet?) after start: No such file or directory
/var/run/openvpn 上 ls -l 的输出:
-rw-r--r-- 1 root root 5 Jun 19 04:32 openvpn.pid
所以我不明白可能出了什么问题?操作系统是 Ubuntu 16.04,带有从源代码编译的 OpenVPN 2.4.2。 Mexico.conf 是我的conf 文件,已将.ovpn 重命名为.conf。
如果我将 PIDFILE 更改为:PIDFile=/var/run/openvpn/openvpn.pid
它就无法完全启动
我从某处的指南复制了此设置,当它被命名为时它就可以工作 [电子邮件受保护]但是当其命名为 openvpn.service 时,相同的设置会出现上述错误...有什么特别的原因吗?这是设置:
[Unit]
Description=OpenVPN client
After=network.target
[Service]
RuntimeDirectory=openvpn
PrivateTmp=true
KillMode=mixed
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/openvpn.pid --cd /etc/openvpn/pia/ --config Mexico.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
Restart=on-failure
RestartSec=3
ProtectSystem=yes
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
[Install]
WantedBy=multi-user.target
我注意到这些设置在命名为时有效[电子邮件受保护]但它仍然会给出一些非致命错误,例如:
ERROR: Linux route add command failed: external program exited with error status: 7
WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
答案1
您的服务抱怨的原因是它需要一个没有收到的参数:参数的位置是,在[电子邮件受保护]文件,无论你在哪里看到%我,特别是在该行
PIDFile=/var/run/openvpn/%i.pid
这也应该反映在执行启动下面一行,您替换的位置--writepid /var/run/openvpn/openvpn.pid为了本来应该发生的事情--writepid /run/openvpn/%i.pid。
使用服务的正确方法,例如[电子邮件受保护]就是向它传递一个参数:例如
systemctl enable [email protected]
systemctl start [email protected]
在这个简单的例子中,传递的参数(客户) 只是存储进程 PID 的文件名,没有其他内容,因此您可以随意命名它。只需确保将服务文件重命名为/lib/systemd/系统/[电子邮件受保护]我确信,就像您安装时一样,您就可以开始了。
openvpn 仍然有效的原因实际上是您唯一错过的是 PID 文件的名称,而不是 openvpn 配置。
至于另外两个错误,第二个是警告,只需注意它(=使用auth-nocache配置文件中的选项)。第二个需要更多信息来诊断,IE完整的错误消息,开放VPN配置文件和路由表(ip路由显示)后设置 VPN 后。