自己コンパイルされた 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

手動で 2 つのファイルを作成することで動作させました/lib/systemd/system

1つ目は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

2番目は[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 が公式リポジトリからインストールされた場合と同様に、ファイルは同じですが、唯一の違いは、コンパイルされたローカル openVPN を指す でExecStart=/usr/sbin/openvpnある必要があることです。ExecStart=/usr/local/sbin/openvpn

編集: openvpn 2.4以降を使用する場合は、2番目のファイルからPIDFile=/run/openvpn/%i.pidとを削除してください。これにより、起動時にサーバーが起動しなくなります。--writepid /run/openvpn/%i.pidここ

答え2

Ilya の回答から更新 (コメントする評判がありません)

提供されているサービスをテンプレート (つまり単一のサービス ファイル) として使用し、次の 2 つの点を変更することで、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にすでに設定があることを前提としています。

関連情報