在Systemd中使用OpenVPN


24

好的,所以我一直在网上搜索该问题的解决方案,但似乎没有答案适合我。希望有人可以帮助我。我只是在尝试配置OpenVPN客户端。

我正在跑步CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux,我刚切换到使用systemd。转换足够顺利,但是现在我无法使用systemd启动我的OpenVPN客户端,我尝试按照这些配置教程进行操作,但是没有任何效果。

我可以使用来从命令行启动隧道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@.servicein /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


openvpn@.service文件的外观如何?
Cristian Ciupitu 2014年

使用当前错误更新了帖子
RoraZ 2014年

在/var/log/{syslog,daemon.log} journalctl -b -m中查找并找到退出OpenVPN的原因。这些位置之一应包含真实的错误消息。(甚至journalctl -b -m _EXE=/usr/sbin/openvpn应该只提供OpenVPN消息)。
derobert 2014年

是的,我到那儿了。我们遇到了密码问题。我将尝试使用以下解决方案:bbs.archlinux.org/viewtopic.php?id=150440 感谢您的所有帮助!
罗拉兹

Answers:


11

我认为使用systemd的Debian OpenVPN设置目前有点破。要使其在我的机器上运行,我必须:

  1. 创建/etc/systemd/system/openvpn@.service.d(目录),并在其中放置一个新文件:

    [单元]
    需要= networking.service
    之后= networking.service
    我给文件打电话了local-after-ifup.conf。它需要以结尾.conf。(这是目前有点破损的位。)

  2. /etc/tmpfiles.d(我称为mine local-openvpn.conf)中创建一个包含以下内容的文件:

    #类型路径模式UID GID年龄参数
    d / run / openvpn 0755根root--
    这是Debian错误741938(已在2.3.3-1中修复)。

  3. 创建一个符号链接到multi-user.target.wantssystemctl enable openvpn@CONF_NAME.service例如,最简单的方法),如果有/etc/openvpn/foo.conf,则使用openvpn@foo.service

  4. 如果在systemd中也显示了SysV初始化脚本,请禁用它。这是Debian错误700888(已在2.3.3-1中修复)。

注意:尽管处于不稳定状态,但尚未进行 2.3.3-1或更高版本的测试


systemctl enable仍然无法说没有此类文件或目录。我没有在/ lib / systemd中看到任何sysv初始化脚本,除非它是systemd-initctl?
罗拉兹

@raz SysV脚本为/etc/init.d/openvpn; 默认情况下,systemd就像sysv init一样运行那些程序。那就是openvpn.service你所拥有的;您需要将其禁用(systemctl disable)。该文件/lib/systemd/system/openvpn@.service在您的系统上是否存在?
derobert 2014年

@raz如果您有该文件,则可以尝试使用手册ln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

我没有该文件,但是我确定可以创建它。我在/etc/init.d/openvpn script.
2014年

@raz我不知道如果Crunchbang有一个较新的OpenVPN软件的一个补丁包,有了它,但如果没有,你可以从抓住该脚本sources.debian.net/src/openvpn/2.3.3-1/debian/...
derobert 2014年

8
  1. 将所有openvpn * .conf文件放入/etc/openvpn/
  2. 编辑/etc/default/openvpn。取消注释:

    AUTOSTART="all"
    
  3. 运行systemctl daemon-reload

  4. 运行service openvpn start

我认为他们使用它作为解决方案,因为现在在debian 9中更糟,如果发生非常愚蠢的错误,openvpn不会重新启动。仍在运行!
Luciano Andress Martini's

太完美了 即使我将其命名为“显而易见” client.conf,它也会启动和停止,而现在我的单个配置就可以运行了。谢谢!
米切尔·柯里

6

这种类型的单位文件是实例化服务- 此处提供更多详细信息

以下是openvpnCentOS 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 openvpn@myopenvpn.service

/usr/lib/systemd/user/ 在这个/usr/lib/systemd水平上别无其他。
罗拉兹

/lib/systemd/system/呢 我的系统上似乎两者都具有相同的内容(它们不是符号链接!)。
garethTheRed 2014年

我刚刚添加了该文件,并用所有内容更新了我的帖子。
罗拉兹

5

您需要启用来创建服务文件openvpn@<configuration>.service

例如,如果配置文件为/etc/openvpn/client.conf,则服务名称为openvpn@client.service

来自Arch Wiki


$ sudo systemctl为用户启用openvpn@vpn.service [sudo]密码:无法发出方法调用:没有这样的文件或目录
RoraZ

您的配置文件称为“ vpn”?
卡洛2014年

是的/etc/openvpn/vpn.conf
RoraZ 2014年

难道systemctl start openvpn@vpn.service也不行?那应该工作...
Karlo 2014年

1
这在Raspbian GNU / Linux 8(Debian Jessie)上对我有效。谢谢!
neuhaus

1

在Debians 8和9之间,openvpn @ .service有了很大的发展systemctl reload openvpn@。例如,针对Jessie的原始软件包失败了。为了解决这些问题,Stretch版本在systemd文件中引入了10个新指令,包括PIDFile=使重新加载再次起作用。

对于拉伸的用户,我建议去的反向移植,如果不能做到这一点,至少从获得systemd文件https://packages.debian.org/jessie-backports/openvpn和提取debian/openvpn@.service/etc/systemd/system/openvpn@.service更好的享受功能和安全性。



0

在全新的Jessie_8.0.0安装中,我做到了:

  1. 从wheezy 复制旧文件/etc/openvpn/cluster.conf(加号*.key*.crt
  2. 取消注释AUTOSTART="all"/etc/default/openvpn-我认为这并没有影响
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

现在隧道已建立-我将看到重新启动后会发生什么,但此刻我无法重新启动

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.