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 openvpn@vpn.servicerésultat:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
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 openvpn@.servicein /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 openvpn@vpn.service? 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 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)

Lien symbolique:

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

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

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


À quoi ressemble le openvpn@.servicefichier?
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/openvpn@.service.d(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 openvpn@foo.service.

  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.


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/openvpn@.serviceexiste- t- il sur votre système?
derobert

@raz Si vous avez ce fichier, vous pouvez essayer un manuelln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
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.

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 openvpn@myopenvpn.service

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 openvpn@client.service.

Depuis l'Arch Wiki


$ sudo systemctl enable openvpn@vpn.service [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 openvpn@vpn.servicene 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/openvpn@.servicedans /etc/systemd/system/openvpn@.serviceet bénéficier d'une meilleure fonctionnalité et sécurité.



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 openvpn@cluster.service

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.