自编译OpenVPN不会从systemd启动

Ily*_*lya 5 compiling ubuntu openvpn services

我已经从源代码编译了 openvpn,运行openvpn --version返回:

OpenVPN 2.4.4 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Nov 19 2017
library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Run Code Online (Sandbox Code Playgroud)

并创建了一个/etc/openvpn/server.conf具有一些基本设置的文件。但是,当我尝试用sudo systemctl start openvpn@server它启动它时,它会返回

Failed to start openvpn@server.service: Unit openvpn@server.service not found.
Run Code Online (Sandbox Code Playgroud)

sudo systemctl status openvpn返回:

? openvpn.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead) since Sun 2017-11-19 14:21:06 HKT; 4 days ago
 Main PID: 1502 (code=exited, status=0/SUCCESS)
Run Code Online (Sandbox Code Playgroud)

这让我觉得 openvpn 服务甚至没有注册。

我检查过/lib/systemd/system/,它没有openvpn.service文件,但是/etc/systemd/system/有。据我了解,这是因为我编译而不是apt-get install openvpn?

谁能建议我应该如何将自编译的 openvpn 添加为服务?

第一次从源代码编译,因此非常感谢任何建议/提示!

编辑 1:

我可以启动 openvpn 服务器并将客户端连接到它(只有服务似乎不起作用):

sudo openvpn /etc/openvpn/server.conf
Run Code Online (Sandbox Code Playgroud)

Ily*_*lya 7

通过手动创建两个文件使其工作/lib/systemd/system

第一个是openvpn.service

[Unit]
Description=OpenVPN service
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

第二个是openvpn@.service

[Unit]
Description=OpenVPN connection to %i
PartOf=openvpn.service
ReloadPropagatedFrom=openvpn.service
Before=systemd-user-sessions.service
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/local/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
ProtectSystem=yes
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

创建它们后,重新sudo systemctl daemon-reload加载新的更改。

一般来说,这些文件是相同的,就好像 openvpn 是从官方仓库安装的一样,唯一的区别应该ExecStart=/usr/sbin/openvpnExecStart=/usr/local/sbin/openvpn,指向已编译的本地 openVPN。

编辑:如果您使用 openvpn 2.4+,请从第二个文件中删除PIDFile=/run/openvpn/%i.pid--writepid /run/openvpn/%i.pid,因为它会阻止服务器在启动时启动。在这里找到的