好的,所以我一直在网上搜索这个问题的解决方案,但似乎没有答案对我有用。希望有人能帮助我。我只是想配置 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 [email protected]
$ sudo systemctl status [email protected]
[email protected]
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)
我意识到我需要对服务进行一些设置。我希望系统提示输入密码,因此我按照本指南创建了一个[email protected]
in /etc/systemd/system/
.但重启OpenVPN服务仍然不提示输入密码。
$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.
Fedora 教程介绍了创建符号链接的步骤,但在演练中不创建任何 .service 文件。
我缺少哪一块?我需要创建一个[电子邮件受保护]?如果是这样,我到底应该把它放在哪里?我觉得这不应该这么困难,但我似乎找不到任何适合我的解决方案。我很高兴提供所需的更多信息。
解决方案
-rw-r--r-- 1 root root 319 Aug 7 10:42 [email protected]
[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
[email protected] (END)
符号链接:
lrwxrwxrwx 1 root root 36 Aug 7 10:47 [email protected] -> /lib/systemd/system/[email protected]
提示输入密码
现在一切正常,除了提示输入密码进行连接之外。我尝试过这个解决方案。我对上面的文件做了一些调整,并添加了一个期待脚本就像示例中一样。像魅力一样工作!我的文件如下。
修改上面的行/lib/systemd/system/[email protected]
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
安装
期望脚本的代码:
#!/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
答案1
我认为 Debian OpenVPN 与 systemd 的设置目前有点破损。为了让它在我的机器上工作,我必须:
创建(目录),并在其中放置一个新文件:
/etc/systemd/system/[email protected]
[单元] 需要=networking.service 之后=networking.service
我把我的文件命名为local-after-ifup.conf
。它需要以 结尾.conf
。(这是目前有点问题的部分。)创建一个文件
/etc/tmpfiles.d
(我称之为我的local-openvpn.conf
)中创建一个包含以下内容的# 类型路径模式 UID GID 年龄参数 d /run/openvpn 0755 根 根 - -
这是Debian 错误 741938(已在 2.3.3-1 中修复)。创建一个符号链接到
multi-user.target.wants
(最简单的方法是systemctl enable openvpn@CONF_NAME.service
)例如,如果你有/etc/openvpn/foo.conf
,你会使用[email protected]
。如果 systemd 中还显示了 SysV 初始化脚本,请将其禁用。这是Debian 错误 700888(已在 2.3.3-1 中修复)。
注意:2.3.3-1 或更高版本尚未测试,尽管它处于不稳定状态。
答案2
这种类型的单元文件是实例化服务 - 提供更多详细信息这里
以下是openvpn
CentOS 7 上的单元文件:
[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=syslog.target network.target
[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
[Install]
WantedBy=multi-user.target
它驻留在/usr/lib/systemd/system/openvpn@service
.文件中的被替换为单位名称中的%i
后面的字符串。@
当配置文件位于/etc/openvpn/myopenvpn.conf
时,服务将启动:
systemctl start [email protected]
答案3
您需要通过启用来创建服务文件openvpn@<configuration>.service
。
例如,配置文件为/etc/openvpn/client.conf
,则服务名称为[email protected]
。
答案4
正确的解决方案是利用 systemdsystemd-ask-password
/"密码代理”,它提供了一种 systemd 内置方法来将密码/密码短语传输到服务。
你需要OpenVPN 2.3.0 或更高版本去做这个。