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 [email protected]Ergebnis:

$ sudo systemctl status [email protected]
  [email protected]
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 [email protected]In 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 [email protected] 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 [email protected]

[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
[email protected] (END)

Symlink:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 [email protected] -> /lib/systemd/system/[email protected]

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/[email protected]

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

RoraΖ
quelle
Wie sieht die [email protected]Datei 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/[email protected](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 [email protected].

  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.

derobert
quelle
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/[email protected]auf Ihrem System vorhanden?
Derobert
@raz Wenn Sie diese Datei haben, können Sie versuchen, ein Handbuchln -s /lib/systemd/system/[email protected] /etc/systemd/system/multi-user.target.wants/[email protected]
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.
Aleksey Alekseev
quelle
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 [email protected]
garethTheRed
quelle
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 [email protected].

Aus dem Arch Wiki

Karlo
quelle
$ sudo systemctl aktivieren [email protected] [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 [email protected]nicht? 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/[email protected]in /etc/systemd/system/[email protected]und genießen Sie sie besser Funktionalität und Sicherheit.

Jari Turkia
quelle
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 .

Elias Probst
quelle
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 [email protected]

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

Peter
quelle