Verwendung von OpenVPN mit systemd


24

Ok, also habe ich im Web nach Lösungen für dieses Problem gesucht, ohne dass die Antworten für mich zu funktionieren schienen. Hoffentlich kann mir jemand helfen. Ich versuche nur, den OpenVPN-Client zu konfigurieren.

Ich renne CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxund habe gerade auf die Verwendung umgestellt systemd. Die Umstellung verlief reibungslos, aber jetzt kann ich meinen OpenVPN-Client nicht mehr mit systemd starten. Ich habe versucht, diese Konfigurationstutorials zu befolgen, aber es funktioniert nichts.

Ich kann den Tunnel von der Kommandozeile aus mit aufrufen openvpn /etc/openvpn/vpn.conf. Ich weiß also, dass die Konfigurationsdatei gut ist. Sie hat mit sysvinit einwandfrei funktioniert. Ich bin also nicht überrascht. Ich versuche dann einfach einen Status zu machen mit dem systemctl status openvpn@vpn.serviceErgebnis:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Ich erkannte, dass ich einige Einstellungen für Dienste vornehmen muss. Ich möchte zur Eingabe eines Passworts aufgefordert werden, daher habe ich mich an diese Anleitung gehalten, um ein openvpn@.serviceIn zu erstellen /etc/systemd/system/. Beim Neustart des OpenVPN-Dienstes wird jedoch weiterhin kein Kennwort abgefragt.

$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.

In den Fedora-Tutorials werden die Schritte zum Erstellen symbolischer Links durchlaufen, es werden jedoch keine .service-Dateien in den Handlungsanweisungen erstellt.

Welches Stück vermisse ich? Muss ich einen openvpn@vpn.service erstellen? Wenn ja, wo genau platziere ich es? Ich denke, es sollte nicht so schwierig sein, aber ich kann anscheinend keine Lösung finden, die für mich funktioniert. Gerne stelle ich Ihnen weitere Informationen zur Verfügung.

Lösung

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

Symlink:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

Nach Passwort fragen

Jetzt funktioniert alles, bis auf die Aufforderung, ein Kennwort für die Verbindung einzugeben. Ich habe diese Lösung versucht . Ich habe die Datei von oben ein wenig optimiert und ein Expect-Skript wie im Beispiel hinzugefügt . Arbeiten wie ein Zauber! Meine Dateien sind unten.

Geänderte Zeilen von oben /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

Erwarten Sie Skript /lib/systemd/system/openvpn_pw.exp. Stellen Sie sicher, dass Sie Folgendes tun:

  • chmod +x auf dem Skript.
  • haben telnetinstalliert

Code des Expect-Skripts:

#!/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

Es ist zu beachten, dass die obige Lösung Ihr im Klartext eingegebenes Passwort in den folgenden Anmeldungen /var/log/syslogund protokolliert/var/log/daemon.log


Wie sieht die openvpn@.serviceDatei aus?
Cristian Ciupitu

Der Beitrag wurde mit dem aktuellen Fehler aktualisiert
RoraΖ

Schauen Sie in /var/log/{syslog,daemon.log} nach und journalctl -b -mfinden Sie heraus, warum OpenVPN beendet wurde. Eine dieser Stellen sollte die eigentlichen Fehlermeldungen enthalten. (Oder journalctl -b -m _EXE=/usr/sbin/openvpnsollte sogar nur OpenVPN-Nachrichten geben).
Derobert

Ja, ich war auf dem Weg dorthin. Wir treffen das Passwortproblem. Ich werde diese Lösung ausprobieren: bbs.archlinux.org/viewtopic.php?id=150440 Vielen Dank für Ihre Hilfe!
RoraΖ

Antworten:


11

Ich denke, das Debian OpenVPN-Setup mit systemd ist derzeit ein bisschen kaputt. Damit es auf meinen Maschinen funktioniert, musste ich:

  1. Erstelle /etc/systemd/system/openvpn@.service.d(das Verzeichnis) und füge darin eine neue Datei ein:

    [Einheit]
    Benötigt = networking.service
    After = networking.service
    Ich habe meine Akte angerufen local-after-ifup.conf. Es muss mit enden .conf. (Dies ist das bisschen, das derzeit ein bisschen kaputt ist.)

  2. Erstelle eine Datei in /etc/tmpfiles.d(ich habe meine genannt local-openvpn.conf) mit dem Inhalt:

    # Geben Sie Path Mode UID GID Age Argument ein
    d / run / openvpn 0755 root root - -
    Dies ist der Debian-Fehler 741938 (behoben in 2.3.3-1).

  3. Erstellen Sie einen symbolischen Link in multi-user.target.wants(einfachste Weg ist systemctl enable openvpn@CONF_NAME.service) ZB, wenn Sie /etc/openvpn/foo.conf, würden Sie verwenden openvpn@foo.service.

  4. Wenn das SysV-Init-Skript auch in systemd angezeigt wird, deaktivieren Sie es. Dies ist der Debian-Fehler 700888 (behoben in 2.3.3-1).

HINWEIS: 2.3.3-1 oder höher befindet sich noch nicht im Test , ist jedoch instabil.


Die Aktivierung von systemctl schlägt immer noch fehl, wenn keine solche Datei oder kein solches Verzeichnis angegeben wird. Ich sehe keine Sysv-Init-Skripte in / lib / systemd, es sei denn, es ist systemd-initctl?
RoraΖ

@raz Das SysV-Skript wäre /etc/init.d/openvpn; systemd läuft standardmäßig genauso wie sysv init. Das ist das, was openvpn.servicedu hast; Sie müssen es deaktivieren ( systemctl disable). Ist die Datei /lib/systemd/system/openvpn@.serviceauf Ihrem System vorhanden?
Derobert

@raz Wenn Sie diese Datei haben, können Sie versuchen, ein Handbuchln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

Ich habe diese Datei nicht, aber ich bin sicher, ich könnte sie erstellen. Ich habe die/etc/init.d/openvpn script.
RoraΖ

@raz Ich bin nicht sicher, ob Crunchbang einen Backport eines neueren OpenVPN-Pakets enthält. Wenn nicht, können Sie dieses Skript von sources.debian.net/src/openvpn/2.3.3-1/debian/…
Derobert

8
  1. Platzieren Sie alle openvpn * .conf-Dateien in /etc/openvpn/.
  2. Bearbeiten /etc/default/openvpn. Kommentar entfernen:

    AUTOSTART="all"
    
  3. Rennen systemctl daemon-reload.

  4. Rennen service openvpn start.

Ich denke, sie haben dies als Lösung verwendet, weil es in Debian 9 jetzt noch schlimmer ist, dass openvpn nicht neu startet, wenn ein Fehler auftritt, der sehr dumm ist ... Jemand kennt eine Lösung oder einen Workaround, ich schreibe ein Skript, um zu überprüfen, ob openvpn läuft noch!
Luciano Andress Martini

Das war perfekt. es würde starten und stoppen, obwohl ich es das Offensichtliche nannte client.conf, jetzt läuft meine einzige Konfiguration nur noch. Vielen Dank!
Mitchell Currie

6

Diese Art von Unit-Datei ist ein instanziierter Dienst. Weitere Details finden Sie hier

Das Folgende ist die Unit-Datei für openvpnunter CentOS 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

und es wohnt als /usr/lib/systemd/system/openvpn@service. Das %iin der Datei wird durch die Zeichenfolge nach dem @in der Einheit angegebenen Namen ersetzt.

Da sich die Konfigurationsdatei auf dem aktuellen Stand befindet, /etc/openvpn/myopenvpn.confwird der Dienst gestartet mit:

systemctl start openvpn@myopenvpn.service

Ich habe nur noch /usr/lib/systemd/user/ nichts auf dem /usr/lib/systemdLevel.
RoraΖ

Was ist /lib/systemd/system/? Ich habe anscheinend beide auf meinem System, mit identischen Inhalten (und sie sind keine Symlinks!).
GarethTheRed

Ich habe gerade diese Datei hinzugefügt und meinen Beitrag mit allem aktualisiert.
RoraΖ

5

Sie müssen die Servicedatei durch Aktivieren erstellen openvpn@<configuration>.service.

Wenn die Konfigurationsdatei beispielsweise lautet /etc/openvpn/client.conf, lautet der Dienstname openvpn@client.service.

Aus dem Arch Wiki


$ sudo systemctl aktivieren openvpn@vpn.service [sudo] Passwort für Benutzer: Methodenaufruf fehlgeschlagen: Keine solche Datei oder Verzeichnis
RoraΖ

Ihre Konfigurationsdatei heißt 'vpn'?
Karlo

Ja,/etc/openvpn/vpn.conf
RoraΖ

Funktioniert das auch systemctl start openvpn@vpn.servicenicht? Das sollte funktionieren ...
Karlo

1
Dies funktioniert für mich unter Raspbian GNU / Linux 8 (Debian Jessie). Vielen Dank!
Neuhaus

1

Der openvpn @ .service hat sich zwischen Debians 8 und 9 stark weiterentwickelt. Das Originalpaket für Jessie zum Beispiel schlägt fehl systemctl reload openvpn@. Um dies zu beheben, führt die Stretch-Version 10 neue Anweisungen in die systemd-Datei PIDFile=ein.

Für Stretch-Benutzer würde ich vorschlagen, sich für den Backport zu entscheiden, und wenn dies nicht möglich ist, holen Sie sich zumindest die systemd-Datei unter https://packages.debian.org/jessie-backports/openvpn und extrahieren Sie sie debian/openvpn@.servicein /etc/systemd/system/openvpn@.serviceund genießen Sie sie besser Funktionalität und Sicherheit.


0

Die richtige Lösung wäre, systemd systemd-ask-password/ " Password Agents " zu verwenden, das eine systemd-integrierte Methode zum Trennen von Passwörtern / Passphrasen zu Diensten bietet.

Sie benötigen dazu OpenVPN 2.3.0 oder neuer .


Dies ist, was das Expect-Skript in meinem bearbeiteten Beitrag verwendet.
RoraΖ

Sorry, habe diese Bearbeitung verpasst.
Elias Probst

0

Bei einer neuen Jessie_8.0.0-Installation habe ich Folgendes getan:

  1. Kopieren Sie die alten /etc/openvpn/cluster.conf(Plus- *.keyund *.crt) Dateien von Wheezy
  2. unkommentiert AUTOSTART="all"in /etc/default/openvpn- Ich denke, das hatte keine Wirkung
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

Jetzt ist der Tunnel hoch - ich werde sehen, was nach einem Neustart passieren wird, aber ich kann in diesem Moment nicht neu starten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.