web-dev-qa-db-fra.com

Utilisation d'OpenVPN avec systemd

D'accord, 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 suis entrain de courir CrunchBang Linux 3.2.0-4-AMD64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux et je viens de passer à l'utilisation de 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 faire apparaître 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 systemctl status [email protected] résultant en:

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

J'ai réalisé que je devais 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] dans /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

Attendre le script /lib/systemd/system/openvpn_pw.exp. Assurez-vous de procéder comme suit:

  • chmod +x sur le script.
  • Avoir telnet installé

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 entré en texte brut dans les journaux suivants dans /var/log/syslog et /var/log/daemon.log

24
RoraΖ

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éer /etc/systemd/system/[email protected] (le répertoire), et y placer un nouveau fichier avec ceci:

    [Unité] 
     Requiert = networking.service 
     Après = networking.service
    J'ai appelé mon fichier local-after-ifup.conf. Il doit se terminer par .conf. (C'est le bit qui est actuellement un peu cassé.)
  2. Créez un fichier dans /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 - -
    Ceci est bogue Debian 741938 (corrigé dans 2.3.3-1).
  3. Créez un lien symbolique dans multi-user.target.wants (le moyen le plus simple est systemctl enable openvpn@CONF_NAME.service) Par exemple, si vous avez /etc/openvpn/foo.conf, vous utiliseriez [email protected].

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

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

13
derobert
  1. Placez tous les fichiers openvpn * .conf dans /etc/openvpn/.
  2. Éditer /etc/default/openvpn. Décommentez ceci:

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

  4. Courir service openvpn start.
8
Aleksey Alekseev

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

Voici le fichier d'unité pour openvpn sur 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

et il réside en tant que /usr/lib/systemd/system/openvpn@service. Le %i dans 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.conf puis le service démarre avec:

systemctl start [email protected]
7
garethTheRed

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

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

à partir du wiki Arch

5
Karlo

Openvpn @ .service a beaucoup évolué entre Debians 8 et 9. Le paquet original pour Jessie par exemple ne parvient pas à systemctl reload openvpn@. Pour résoudre ces problèmes, la version Stretch introduit 10 nouvelles directives dans le fichier systemd, notamment PIDFile= pour que le rechargement fonctionne à nouveau.

Pour les utilisateurs de Stretch, je suggère d'aller pour le backport, et si ce n'est pas possible, au moins obtenir le fichier systemd de https://packages.debian.org/jessie-backports/openvpn = et extraire debian/[email protected] en /etc/systemd/system/[email protected] et profitez d'une meilleure fonctionnalité et sécurité.

1
Jari Turkia

La bonne solution consisterait à utiliser systemd-ask-password/" Password Agents " de systemd, qui fournit un moyen intégré à systemd pour canaliser les mots de passe/phrases de passe vers les services.

Vous aurez besoin de OpenVPN 2.3.0 ou plus récent pour ce faire.

0
Elias Probst

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

  1. copier l'ancien /etc/openvpn/cluster.conf (plus *.key et *.crt) fichiers de Wheezy
  2. non commenté AUTOSTART="all" dans /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

0
Peter