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 [email protected]resultado de:

$ sudo systemctl status [email protected]
  [email protected]
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 [email protected]en /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 [email protected]? 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 [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)

Enlace simbólico:

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

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

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

RoraΖ
fuente
¿Cómo se ve el [email protected]archivo?
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/[email protected](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 [email protected].

  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.

derobert
fuente
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/[email protected]en su sistema?
derobert
@raz Si tiene ese archivo, puede probar un manualln -s /lib/systemd/system/[email protected] /etc/systemd/system/multi-user.target.wants/[email protected]
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.
Aleksey Alekseev
fuente
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 [email protected]
garethTheRed
fuente
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 [email protected].

Del Arch Wiki

Karlo
fuente
$ sudo systemctl enable [email protected] [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 [email protected]Tampoco 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/[email protected]en /etc/systemd/system/[email protected]y disfrutar de una mejor Funcionalidad y seguridad.

Jari Turkia
fuente
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.

Elias Probst
fuente
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 [email protected]

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

Peter
fuente