1 votos

Seleccione un servidor de destino VPN aleatorio al iniciar openVPN con systemd

He escrito un systemd archivo para iniciar mi Servicio VPN de usar un archivo de configuración. Lo que me gustaría ser capaz de hacer es tener este archivo reemplazado con un seleccionados al azar archivo de configuración cada vez que se inicia el servicio.

Hasta ahora he intentado usar

ExecStartPre=cp -f `ls /etc/openvpn/ovpn_udp/au* | shuf -n 1` /etc/openvpn/%i.conf

para copiar el elegido aleatoriamente de archivo para el archivo de configuración especificado. Algunos alternativly he probado son

  • utiliza rsync -c en lugar de cp
  • comillas dobles alrededor de todo el ExecStartPre comando
  • escapar de la `

Por último también he probado el siguiente ExecStart a

ExecStart=/usr/sbin/openvpn --config `ls /etc/openvpn/ovpn_udp/au* | shuf -n 1`

Todos con ningún efecto.

Actualmente la systemd archivo es la siguiente

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target

[Service]
Type=notify
PrivateTmp=true
ExecStartPre=cp -f `ls /etc/openvpn/ovpn_udp/au* | shuf -n 1` /etc/openvpn/%i.conf
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf

[Install]
WantedBy=multi-user.target

Estoy esperando el archivo de configuración para cambiarse antes de cada inicio del servicio, pero hasta ahora no veo ningún error o el archivo de configuración que está siendo reemplazado.

Cualquier ayuda será muy apreciada.
Gracias

2voto

Nick Dixon Puntos 154

El ExecStart= comando no se ejecuta por una concha y no proporciona la consola habitual funciones del lenguaje. Lo único que tiene son de citar y $sustitución de variables – pero no tiene tuberías o `comillas simples inclinadas` o $(comando de sustitución).

Para utilizar estas funciones, a) ejecutar explícitamente una concha como /bin/sh:

ExecStart=/bin/sh -c "cp `foo | bar` baz"

o b) mover sus comandos en un script de shell y ejecutar que desde ExecStart=.

Tenga en cuenta que OpenVPN en sí ya es compatible con declarar múltiples servidores dentro de la misma configuración, el uso de <connection> bloques y --remote-random, como se muestra en la página del manual:

client
remote-random
<connection>
remote foo.example.com 1194 udp
</connection>
<connection>
remote bar.example.com 1194 udp
</connection>

0voto

Nick Puntos 8

Gracias @grawity que aclara mucho las cosas. Utilizando su respuesta, ahora he modificado con éxito mi archivo de servicio de systemd al siguiente que hace exactamente lo que necesito.

 [Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target

[Service]
Type=notify
PrivateTmp=true
ExecStartPre=/bin/bash -c "ls /etc/openvpn/ovpn_udp/au* | shuf -n 1 | xargs -r -n1 -I'{}' cp -f '{}' /etc/openvpn/%i.conf"
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf

[Install]
WantedBy=multi-user.target
 

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: