好的,所以我一直在网上搜索该问题的解决方案,但似乎没有答案适合我。希望有人可以帮助我。我只是在尝试配置OpenVPN客户端。
我正在跑步CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux
,我刚切换到使用systemd
。转换足够顺利,但是现在我无法使用systemd启动我的OpenVPN客户端,我尝试按照这些配置教程进行操作,但是没有任何效果。
- http://fedoraproject.org/wiki/Openvpn
- http://d.stavrovski.net/blog/how-to-install-and-set-up-openvpn-in-debian-7-wheezy
- 并看了一堆其他不同的指南。
我可以使用来从命令行启动隧道openvpn /etc/openvpn/vpn.conf
。所以我知道配置文件很好,它与sysvinit一起正常工作,所以我并不感到惊讶。然后,我尝试只做一个systemctl status openvpn@vpn.service
结果如下:
$ sudo systemctl status openvpn@vpn.service
openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)
我意识到我需要对服务进行一些设置。我想提示输入密码,所以我按照本指南创建了一个openvpn@.service
in /etc/systemd/system/
。但是重新启动OpenVPN服务仍然不会提示您输入密码。
$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.
Fedora教程完成了创建符号链接的步骤,但并未在演练中创建任何.service文件。
我想念哪一块?我需要创建一个openvpn@vpn.service吗?如果是这样,我到底要放在哪里?我觉得这不应该那么困难,但是我似乎找不到适合我的解决方案。我很乐意提供更多需要的信息。
解
-rw-r--r-- 1 root root 319 Aug 7 10:42 openvpn@.service
[Unit]
Description=OpenVPN connection to %i
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
[Install]
WantedBy=multi-user.target
openvpn@.service (END)
符号链接:
lrwxrwxrwx 1 root root 36 Aug 7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service
提示输入密码
现在,一切正常,除了提示您输入密码进行连接。我已经尝试过这种解决方案。我从上方对文件进行了一些微调,并添加了示例中的Expect脚本。像魅力一样工作!我的文件在下面。
上面的修改行 /lib/systemd/system/openvpn@.service
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --management localhost 5559 --management-query-passwords --management-forget-disconnect --config /etc/openvpn/%i.conf
ExecStartPost=/usr/bin/expect /lib/systemd/system/openvpn_pw.exp
期望脚本/lib/systemd/system/openvpn_pw.exp
。确保执行以下操作:
chmod +x
在脚本上。- 已
telnet
安装
Expect脚本的代码:
#!/usr/bin/expect
set pass [exec /bin/systemd-ask-password "Please insert Private Key password: "]
spawn telnet 127.0.0.1 5559
expect "Enter Private Key Password:"
send "password 'Private Key' $pass\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "exit\r"
expect eof
应当指出的是,上述方案没有登录明文进入到以下日志中您的密码/var/log/syslog
和/var/log/daemon.log
journalctl -b -m
中查找并找到退出OpenVPN的原因。这些位置之一应包含真实的错误消息。(甚至journalctl -b -m _EXE=/usr/sbin/openvpn
应该只提供OpenVPN消息)。
openvpn@.service
文件的外观如何?