自編譯OpenVPN不會從systemd啟動

自編譯OpenVPN不會從systemd啟動

我已經從原始碼編譯了 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

並創建了一個/etc/openvpn/server.conf包含一些基本設定的文件。但是,當我嘗試啟動它時,sudo systemctl start openvpn@server它會返回

Failed to start [email protected]: Unit [email protected] not found.

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)

這讓我覺得 openvpn 服務甚至沒有註冊。

我檢查過/lib/systemd/system/,它沒有openvpn.service文件,但/etc/systemd/system/有。據我了解,這是因為我編譯而不是apt-get install openvpn

誰能建議我應該如何加入自編譯的 openvpn 作為服務?

第一次從原始碼編譯,因此非常感謝任何建議/提示!

編輯1:

我可以啟動 openvpn 伺服器並將客戶端連接到它(只有服務似乎不起作用):

sudo openvpn /etc/openvpn/server.conf

答案1

透過手動建立兩個文件使其工作/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

第二個是[email protected]

[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

創建它們後,重新sudo systemctl daemon-reload加載新的更改。

一般來說,這些檔案是相同的,就好像 openvpn 是從官方倉庫安裝的一樣,唯一的區別ExecStart=/usr/sbin/openvpn應該是ExecStart=/usr/local/sbin/openvpn,指向已編譯的本地 openVPN。

編輯:如果您使用 openvpn 2.4+,請從第二個檔案中刪除PIDFile=/run/openvpn/%i.pid--writepid /run/openvpn/%i.pid,因為它會阻止伺服器在啟動時啟動。找到了這裡

答案2

從 Ilya 的回答更新(我沒有評論的聲譽)

我透過使用提供的服務作為模板(因此單一服務文件)在 Ubuntu 16.04 上運行它,更改了兩件事:

sudo cp ~/Downloads/openvpn-2.4.8/distro/systemd/[email protected] /lib/systemd/system/[email protected]

sudo vi /lib/systemd/system/[email protected]

改變:

  • @sbindir@ 到 /usr/local/sbin/
  • 類型=通知 類型=簡單

重新載入並啟動

sudo systemctl daemon-reload
service [email protected] restart
service [email protected] status

這假設您已經在 /etc/openvpn/client/client.service.conf 中獲得了配置

相關內容