Utilisation d'OpenVPN avec systemd

24

Ok, j'ai donc cherché sur le Web des solutions à ce problème sans qu'aucune réponse ne semble fonctionner pour moi. J'espère que quelqu'un pourra m'aider. J'essaie seulement de configurer le client OpenVPN.

Je cours CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxet je viens de passer à l'utilisation systemd. Le basculement s'est assez bien passé mais maintenant je n'arrive pas à faire venir mon client OpenVPN en utilisant systemd J'ai essayé de suivre ces tutoriels de configuration, mais rien ne fonctionne.

Je peux afficher le tunnel depuis la ligne de commande avec openvpn /etc/openvpn/vpn.conf. Je sais donc que le fichier de configuration est bon, il fonctionnait très bien avec sysvinit, donc je ne suis pas surpris. J'essaye alors de faire juste un statut avec pour systemctl status [email protected]résultat:

$ sudo systemctl status [email protected]
  [email protected]
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

J'ai réalisé que je dois faire une configuration pour les services. Je veux être invité à entrer un mot de passe, j'ai donc suivi ce guide pour créer un [email protected]in /etc/systemd/system/. Mais le redémarrage du service OpenVPN ne demande toujours pas de mot de passe.

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

Les didacticiels Fedora passent par les étapes de création de liens symboliques, mais ne créent aucun des fichiers .service dans les procédures pas à pas.

Quelle pièce me manque? Dois-je créer un [email protected]? Si oui, où dois-je le placer exactement? J'ai l'impression que ça ne devrait pas être aussi difficile, mais je n'arrive pas à trouver de solution qui fonctionne pour moi. Je suis heureux de fournir plus d'informations nécessaires.

Solution

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

Lien symbolique:

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

Demander un mot de passe

Tout fonctionne maintenant, sauf qu'on vous demande un mot de passe pour vous connecter. J'ai essayé cette solution . J'ai légèrement modifié le fichier ci-dessus et ajouté un script Expect comme dans l'exemple. Travailler comme un charme! Mes fichiers sont ci-dessous.

Lignes modifiées de ce qui précède /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

Attendez-vous à un script /lib/systemd/system/openvpn_pw.exp. Assurez-vous de procéder comme suit:

  • chmod +x sur le script.
  • Avoir telnetinstallé

Code du script attendu:

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

Il convient de noter que la solution ci-dessus enregistre votre mot de passe saisi en texte brut dans les connexions suivantes /var/log/sysloget/var/log/daemon.log

RoraΖ
la source
À quoi ressemble le [email protected]fichier?
Cristian Ciupitu
Mise à jour du message avec l'erreur actuelle
RoraΖ
Regardez dans /var/log/{syslog,daemon.log} et journalctl -b -mdécouvrez pourquoi OpenVPN s'est fermé. Un de ces endroits devrait contenir les vrais messages d'erreur. (Ou même journalctl -b -m _EXE=/usr/sbin/openvpnne devrait donner que des messages OpenVPN).
derobert
Oui, j'y arrivais. Nous rencontrons le problème de mot de passe. Je vais essayer cette solution: bbs.archlinux.org/viewtopic.php?id=150440 Merci pour toute votre aide!
RoraΖ

Réponses:

12

Je pense que la configuration de Debian OpenVPN avec systemd est actuellement un peu cassée. Pour que cela fonctionne sur mes machines, j'ai dû:

  1. Créez /etc/systemd/system/[email protected](le répertoire), et placez-y un nouveau fichier avec ceci:

    [Unité]
    Requiert = networking.service
    Après = networking.service
    J'ai appelé mon dossier local-after-ifup.conf. Cela doit se terminer avec .conf. (C'est le bit qui est actuellement un peu cassé.)

  2. Créez un fichier /etc/tmpfiles.d(j'ai appelé le mien local-openvpn.conf) avec le contenu:

    # Type Path Mode UID GID Age Argument
    d / run / openvpn 0755 root root - -
    Il s'agit du bogue Debian 741938 (corrigé dans 2.3.3-1).

  3. Créez un lien symbolique dans multi-user.target.wants(la manière la plus simple est systemctl enable openvpn@CONF_NAME.service) Par exemple, si vous l'avez /etc/openvpn/foo.conf, vous l'utiliseriez [email protected].

  4. Si le script d'initialisation SysV apparaît également dans systemd, désactivez-le. Il s'agit du bogue Debian 700888 (corrigé dans 2.3.3-1).

REMARQUE: 2.3.3-1 ou version ultérieure n'est pas encore en cours de test , bien qu'il soit instable.

derobert
la source
L'activation de systemctl échoue toujours en disant qu'il n'y a pas un tel fichier ou répertoire. Je ne vois aucun script d'initialisation sysv dans / lib / systemd, à moins que son systemd-initctl?
RoraΖ
@raz Le script SysV serait /etc/init.d/openvpn; systemd exécute par défaut ceux comme le ferait sysv init. C'est ce que openvpn.servicevous avez; vous devez le désactiver ( systemctl disable). Le fichier /lib/systemd/system/[email protected]existe- t- il sur votre système?
derobert
@raz Si vous avez ce fichier, vous pouvez essayer un manuelln -s /lib/systemd/system/[email protected] /etc/systemd/system/multi-user.target.wants/[email protected]
derobert
Je n'ai pas ce fichier mais je suis sûr que je pourrais le créer. J'ai désactivé le/etc/init.d/openvpn script.
RoraΖ
@raz Je ne sais pas si Crunchbang a un backport d'un nouveau package OpenVPN avec lui, mais sinon, vous pouvez récupérer ce script à partir de sources.debian.net/src/openvpn/2.3.3-1/debian/…
derobert
8
  1. Placez tous les fichiers openvpn * .conf dans /etc/openvpn/.
  2. Modifier /etc/default/openvpn. Décommentez ceci:

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

  4. Courez service openvpn start.
Aleksey Alekseev
la source
Je pense qu'ils l'ont utilisé comme solution, car maintenant c'est encore pire dans Debian 9, l'openvpn ne redémarre pas si une erreur se produit qui est très stupide ... Quelqu'un connaît une solution ou une solution, j'écris un script pour vérifier si openvpn fonctionne toujours!
Luciano Andress Martini
C'était parfait. ça commencerait et s'arrêterait même si je l'appelais l'évidence client.conf, maintenant avec ça ma configuration simple fonctionne. Merci!
Mitchell Currie
6

Ce type de fichier d'unité est un service instancié - plus de détails sont disponibles ici

Voici le fichier d'unité de openvpnCentOS 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

et il réside comme /usr/lib/systemd/system/openvpn@service. Le %idans le fichier est remplacé par la chaîne après le @dans le nom de l'unité.

Comme le fichier de configuration est à, /etc/openvpn/myopenvpn.confle service démarre avec:

systemctl start [email protected]
garethTheRed
la source
Je n'ai /usr/lib/systemd/user/ rien d'autre au /usr/lib/systemdniveau.
RoraΖ
Et alors /lib/systemd/system/? Il me semble avoir les deux sur mon système, avec un contenu identique (et ce ne sont pas des liens symboliques!).
garethTheRed
Je viens d'ajouter ce fichier, mis à jour mon message avec tout.
RoraΖ
5

Vous devez créer le fichier de service en l'activant openvpn@<configuration>.service.

Par exemple, si le fichier de configuration est /etc/openvpn/client.conf, le nom du service est [email protected].

Depuis l'Arch Wiki

Karlo
la source
$ sudo systemctl enable [email protected] [sudo] mot de passe pour l'utilisateur: impossible d'émettre l'appel de méthode: aucun fichier ou répertoire de ce type
RoraΖ
Votre fichier de configuration s'appelle 'vpn'?
Karlo
Oui,/etc/openvpn/vpn.conf
RoraΖ
Ça systemctl start [email protected]ne marche pas non plus? Cela devrait fonctionner ...
Karlo
1
Cela fonctionne pour moi sur Raspbian GNU / Linux 8 (Debian Jessie). Merci!
neuhaus
1

L'openvpn @ .service a beaucoup évolué entre Debians 8 et 9. Le paquet original pour Jessie, par exemple, échoue systemctl reload openvpn@. Pour corriger cela, la version Stretch introduit 10 nouvelles directives dans le fichier systemd, y compris PIDFile=pour faire fonctionner à nouveau le rechargement.

Pour les utilisateurs extensibles, je suggère d' aller pour le backport, et si pas possible de le faire, au moins obtenir le fichier systemd-de https://packages.debian.org/jessie-backports/openvpn et l' extrait debian/[email protected]dans /etc/systemd/system/[email protected]et bénéficier d'une meilleure fonctionnalité et sécurité.

Jari Turkia
la source
0

La solution appropriée consisterait à utiliser les systemd-ask-password« agents de mot de passe » de systemd , qui fournissent un moyen intégré à systemd de canaliser les mots de passe / phrases de passe vers les services.

Vous aurez besoin d' OpenVPN 2.3.0 ou d'une version plus récente pour ce faire.

Elias Probst
la source
C'est ce que le script Expect dans mon article édité utilise.
RoraΖ
Désolé, vous avez manqué cette modification.
Elias Probst du
0

Sur une nouvelle installation de Jessie_8.0.0, j'ai fait:

  1. copier les anciens fichiers /etc/openvpn/cluster.conf(plus *.keyet *.crt) de Wheezy
  2. décommentée AUTOSTART="all"en /etc/default/openvpn- je pense que cela n'a eu aucun effet
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart [email protected]

Maintenant, le tunnel est en place - je verrai ce qui se passera après un redémarrage, mais je ne peux pas redémarrer en ce moment

Peter
la source