Selbst kompiliertes OpenVPN startet nicht von systemd

Selbst kompiliertes OpenVPN startet nicht von systemd

Ich habe OpenVPN aus dem Quellcode kompiliert. Die Ausführung gibt Folgendes openvpn --versionzurück:

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

Und erstellte eine /etc/openvpn/server.confDatei mit einigen grundlegenden Einstellungen. Wenn ich jedoch versuche, es zu starten, sudo systemctl start openvpn@serverwird es zurückgegeben

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

Und sudo systemctl status openvpngibt zurück:

● 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)

Das lässt mich glauben, dass der OpenVPN-Dienst nicht einmal registriert ist.

Ich habe geprüft /lib/systemd/system/, es hat keine openvpn.serviceDatei, aber /etc/systemd/system/es hat eine. So wie ich das verstehe, liegt das daran, dass ich kompiliert habe, anstatt apt-get install openvpn?

Kann mir jemand vorschlagen, wie ich selbst kompiliertes OpenVPN als Dienst hinzufügen kann?

Dies ist das erste Mal, dass ich aus der Quelle kompiliere. Daher sind alle Ratschläge/Tipps sehr willkommen!

BEARBEITEN 1:

Ich kann den OpenVPN-Server starten und Clients mit ihm verbinden (nur der Dienst scheint nicht zu funktionieren):

sudo openvpn /etc/openvpn/server.conf

Antwort1

Habe es zum Laufen gebracht, indem ich manuell zwei Dateien in erstellt habe /lib/systemd/system.

Der erste ist 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

und zweitens [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-reloadLaden Sie die neuen Änderungen nach der Erstellung erneut.

Im Allgemeinen sind die Dateien dieselben, als ob OpenVPN aus dem offiziellen Repo installiert worden wäre. Der einzige Unterschied ExecStart=/usr/sbin/openvpnsollte sein ExecStart=/usr/local/sbin/openvpn, dass auf das kompilierte lokale OpenVPN verwiesen wird.

Bearbeiten: Wenn Sie OpenVPN 2.4+ verwenden, entfernen Sie PIDFile=/run/openvpn/%i.pidund --writepid /run/openvpn/%i.pidaus der zweiten Datei, da es den Serverstart beim Booten verhindert. Habe es gefundenHier

Antwort2

Aktualisierung der Antwort von Ilya (ich habe nicht den Ruf, einen Kommentar abzugeben)

Bei mir funktioniert es unter Ubuntu 16.04, indem ich den bereitgestellten Dienst als Vorlage verwende (also eine einzelne Dienstdatei) und zwei Dinge ändere:

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

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

Ändern:

  • @sbindir@ nach /usr/local/sbin/
  • Typ=Benachrichtigen an Typ=einfach

Neu laden und starten

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

Dies setzt voraus, dass Sie Ihre Konfiguration bereits in /etc/openvpn/client/client.service.conf haben

verwandte Informationen