Utiliser OpenVPN avec systemd

Ok, donc j'ai cherché sur le web des solutions à ce problème sans réponses qui semblent fonctionner pour moi. J'espère que quelqu'un peut m'aider. J'essaye seulement de configurer le client OpenVPN.

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 changement s'est assez bien passé mais maintenant je ne peux pas get mon client OpenVPN à venir en utilisant systemd J'ai essayé de suivre ces tutoriels de configuration, mais rien ne fonctionne.

  • http://fedoraproject.org/wiki/Openvpn
  • http://d.stavrovski.net/blog/how-to-install-and-set-up-openvpn-in-debian-7-wheezy
  • Et regardé un tas d'autres guides différents.

Je peux faire apparaître le tunnel depuis la command line avec openvpn /etc/openvpn/vpn.conf . Donc, je sais que le file de configuration est bon, il fonctionnait bien avec sysvinit donc je ne suis pas surpris. Je tente ensuite de faire un état avec l'état de systemctl status [email protected] résultant dans:

 $ 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 un peu d'installation pour les services. Je veux être invité pour un mot de passe, j'ai donc suivi ce guide pour créer un [email protected] dans /etc/systemd/system/ . Mais redémarrer le service OpenVPN ne request 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 files .service dans les access intermédiaires.

Quelle pièce me manque-t-il? Dois-je créer un [email protected]? Si oui, où exactement je le place? J'ai l'printing que ça ne devrait pas être si difficile, mais je n'arrive pas à find une 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) 

Symlink:

 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 pour être invité à entrer un mot de passe pour se connecter. J'ai essayé cette solution . J'ai modifié le file d'en haut juste un peu, et ajouté un script Expect comme dans l'exemple. Travailler comme un charme! Mes files sont ci-dessous.

Lignes modifiées du /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 au script /lib/systemd/system/openvpn_pw.exp . Assurez-vous de faire ce qui suit:

  • chmod +x sur le script.
  • Avez 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 

Notez que la solution ci-dessus enregistre votre mot de passe entré en clair dans les journaux suivants: /var/log/syslog et /var/log/daemon.log

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

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

      [Unité]
     Nécessite = networking.service
     Après = networking.service 

    J'ai appelé mon file local-after-ifup.conf . Il doit se terminer par .conf . (C'est le bit qui est actuellement un peu brisé.)

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

      # Type UID du mode de pathement GID Âge Argument
     d / run / openvpn 0755 racine racine - - 

    C'est le bug Debian 741938 (corrigé en 2.3.3-1).

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

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

REMARQUE: 2.3.3-1 ou version ultérieure n'est pas encore en test , même si elle est instable.

Ce type de file unitaire est un service instancié – plus de détails sont disponibles ici

Voici le file 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 sous /usr/lib/systemd/system/openvpn@service . Le %i du file est remplacé par la string après le @ dans le nom de l'unité.

Comme le file de configuration est à /etc/openvpn/myopenvpn.conf le service est démarré avec:

 systemctl start [email protected] 
  1. Placez tous les files openvpn * .conf dans /etc/openvpn/ .
  2. Éditez /etc/default/openvpn . Décommentez ceci:

     AUTOSTART="all" 
  3. Exécutez systemctl daemon-reload .

  4. Exécutez le service openvpn start .

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

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

De l'Arch Wiki

La bonne solution consisterait à utiliser systemd-ask-password / " Password Agents ", qui fournit un système embedded pour apather les passwords / passwords vers les services.

Vous aurez besoin d' OpenVPN 2.3.0 ou plus récent pour faire ceci.

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

  1. copyz les anciens /etc/openvpn/cluster.conf (plus *.key et *.crt ) de wheezy
  2. 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