Usando OpenVPN con systemd


24

Ok, he estado buscando en la web soluciones a este problema sin que las respuestas me funcionen. Espero que alguien pueda ayudarme. Solo estoy tratando de configurar el cliente OpenVPN.

Estoy corriendo CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxy acabo de cambiar a usar systemd. El cambio se realizó sin problemas, pero ahora no puedo hacer que mi cliente OpenVPN aparezca usando systemd. He intentado seguir estos tutoriales de configuración, pero nada funciona.

Puedo abrir el túnel desde la línea de comando con openvpn /etc/openvpn/vpn.conf. Así que sé que el archivo de configuración es bueno, estaba funcionando bien con sysvinit, así que no me sorprende. Luego intento hacer un estado con el systemctl status openvpn@vpn.serviceresultado de:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Me di cuenta de que necesito hacer una configuración para los servicios. Quiero que se le solicite una contraseña así que seguí esta guía para crear una openvpn@.serviceen /etc/systemd/system/. Pero reiniciar el servicio OpenVPN aún no solicita una contraseña.

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

Los tutoriales de Fedora siguen los pasos para crear enlaces simbólicos, pero no crean ninguno de los archivos .service en los recorridos.

¿Qué pieza me estoy perdiendo? ¿Necesito crear un servicio openvpn@vpn.service? Si es así, ¿dónde lo coloco exactamente? Siento que no debería ser tan difícil, pero parece que no puedo encontrar ninguna solución que funcione para mí. Me complace proporcionar más información que sea necesaria.

Solución

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

Enlace simbólico:

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

Solicitar contraseña

Todo funciona ahora, excepto que se le solicite una contraseña para conectarse. He intentado esta solución . Modifiqué el archivo desde arriba solo un poco, y agregué un script de Expect como en el ejemplo. Trabajando como un encanto! Mis archivos están abajo.

Líneas modificadas de lo anterior /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

Esperar guión /lib/systemd/system/openvpn_pw.exp. Asegúrese de hacer lo siguiente:

  • chmod +x en el guión
  • Han telnetinstalado

Código del script de espera:

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

Cabe señalar que la solución anterior registra su contraseña ingresada en texto sin formato en los siguientes registros /var/log/syslogy/var/log/daemon.log


¿Cómo se ve el openvpn@.servicearchivo?
Cristian Ciupitu

Se actualizó la publicación con el error actual
RoraΖ

Mire en /var/log/{syslog,daemon.log} y journalctl -b -mdescubra por qué OpenVPN salió. Uno de esos lugares debe contener los mensajes de error reales. (O incluso journalctl -b -m _EXE=/usr/sbin/openvpndebería dar solo mensajes OpenVPN).
derobert

Sí, estaba llegando allí. Estamos llegando al problema de la contraseña. Probaré esta solución: bbs.archlinux.org/viewtopic.php?id=150440 ¡ Gracias por toda su ayuda!
RoraΖ

Respuestas:


11

Creo que la configuración de Debian OpenVPN con systemd está actualmente un poco rota. Para que funcione en mis máquinas tuve que:

  1. Cree /etc/systemd/system/openvpn@.service.d(el directorio) y coloque en él un nuevo archivo con esto:

    [Unidad]
    Requiere = networking.service
    Después = networking.service
    Llamé a mi archivo local-after-ifup.conf. Tiene que terminar con .conf. (Este es el bit que actualmente está un poco roto).

  2. Crea un archivo en /etc/tmpfiles.d(llamé el mío local-openvpn.conf) con el contenido:

    # Tipo Ruta Modo UID GID Edad Argumento
    d / run / openvpn 0755 raíz raíz - -
    Este es el error de Debian 741938 (corregido en 2.3.3-1).

  3. Cree un enlace simbólico en multi-user.target.wants(la forma más fácil es systemctl enable openvpn@CONF_NAME.service) Por ejemplo, si lo tiene /etc/openvpn/foo.conf, lo usaría openvpn@foo.service.

  4. Si también tiene el script de inicio SysV que se muestra en systemd, desactívelo. Este es el error Debian 700888 (corregido en 2.3.3-1).

NOTA: 2.3.3-1 o posterior aún no se está probando , aunque es inestable.


systemctl enable todavía falla diciendo que no hay tal archivo o directorio No veo ningún script de inicio sysv en / lib / systemd, a menos que sea systemd-initctl?
RoraΖ

@raz El script SysV sería /etc/init.d/openvpn; systemd por defecto ejecuta aquellos como lo haría sysv init. Eso es lo openvpn.serviceque tienes; necesitas deshabilitarlo ( systemctl disable). ¿Existe el archivo /lib/systemd/system/openvpn@.serviceen su sistema?
derobert

@raz Si tiene ese archivo, puede probar un manualln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

No tengo ese archivo, pero estoy seguro de que podría crearlo. /etc/init.d/openvpn script.
Desactivé

@raz No estoy seguro de si Crunchbang tiene un backport de un nuevo paquete OpenVPN con él, pero si no, puede obtener ese script de sources.debian.net/src/openvpn/2.3.3-1/debian/…
derobert

8
  1. Coloque todos los archivos openvpn * .conf en /etc/openvpn/.
  2. Editar /etc/default/openvpn. Descomenta esto:

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

  4. Ejecutar service openvpn start.

Creo que usaron esto como una solución, porque ahora es aún peor en debian 9, el openvpn no se reinicia si ocurre un error que es muy estúpido ... Alguien conoce alguna solución o solución alternativa, estoy escribiendo un script para verificar si openvpn sigue funcionando!
Luciano Andress Martini

Esto fue perfecto. comenzaría y pararía a pesar de que lo llamé obvio client.conf, ahora con esto solo se ejecuta mi configuración única. ¡Gracias!
Mitchell Currie

6

Este tipo de archivo de unidad es un servicio instanciado; más detalles están disponibles aquí

El siguiente es el archivo de unidad para 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

y reside como /usr/lib/systemd/system/openvpn@service. El %ien el archivo se reemplaza con la cadena después del @nombre de la unidad.

Como el archivo de configuración está en /etc/openvpn/myopenvpn.conf, el servicio se inicia con:

systemctl start openvpn@myopenvpn.service

Solo tengo /usr/lib/systemd/user/ nada más en el /usr/lib/systemdnivel.
RoraΖ

¿Qué hay de /lib/systemd/system/? Parece que tengo ambos en mi sistema, con contenidos idénticos (¡y no son enlaces simbólicos!).
garethTheRed

Acabo de agregar ese archivo, actualicé mi publicación con todo.
RoraΖ

5

Debe crear el archivo de servicio habilitándolo openvpn@<configuration>.service.

Por ejemplo, si el archivo de configuración es /etc/openvpn/client.conf, el nombre del servicio es openvpn@client.service.

Del Arch Wiki


$ sudo systemctl enable openvpn@vpn.service [sudo] contraseña para el usuario: Error al emitir la llamada al método: No
existe

¿Su archivo de configuración se llama 'vpn'?
Karlo

Sí,/etc/openvpn/vpn.conf
RoraΖ

¿ systemctl start openvpn@vpn.serviceTampoco funciona? Eso debería funcionar ...
Karlo

1
Esto funciona para mí en Raspbian GNU / Linux 8 (Debian Jessie). ¡Gracias!
Neuhaus

1

El openvpn @ .service ha evolucionado mucho entre Debians 8 y 9. El paquete original para Jessie, por ejemplo, no lo hace systemctl reload openvpn@. Para solucionar estos problemas, la versión Stretch introduce 10 nuevas directivas en el archivo systemd, que incluyen PIDFile=hacer que la recarga vuelva a funcionar.

Para los usuarios de estiramiento, sugeriría ir por el backport, y si no es posible hacer eso, por lo menos conseguir el systemd-archivo desde https://packages.debian.org/jessie-backports/openvpn y el extracto debian/openvpn@.serviceen /etc/systemd/system/openvpn@.servicey disfrutar de una mejor Funcionalidad y seguridad.


0

La solución adecuada sería hacer uso de systemd's systemd-ask-password/ " Password Agents ", que proporciona una forma integrada de systemd para canalizar contraseñas / frases de acceso a los servicios.

Necesitará OpenVPN 2.3.0 o posterior para hacer esto.


Esto es lo que usa el script de Expect en mi publicación editada.
RoraΖ

Lo siento, perdí esa edición.
Elias Probst

0

En una nueva instalación de Jessie_8.0.0 hice:

  1. Copie los archivos antiguos /etc/openvpn/cluster.conf(más *.keyy *.crt) de Wheezy
  2. sin comentar AUTOSTART="all"en /etc/default/openvpn- creo que esto no tuvo efecto
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

Ahora el túnel está arriba: veré qué sucederá después de un reinicio, pero no puedo reiniciar en este momento

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.