¿Cómo puedo asociar un script a OpenVPN para que se ejecute cuando la VPN se conecte correctamente?
network-manger-openvpn
.
¿Cómo puedo asociar un script a OpenVPN para que se ejecute cuando la VPN se conecte correctamente?
network-manger-openvpn
.
Respuestas:
network-manager-openvpn
no proporciona dicha funcionalidad, debe usarla openvpn
directamente.
Pásalo --script-security 2 --up /path/to/your/script
cuando te conectes. Si está utilizando un archivo de configuración ubicado en /etc/openvpn/
, agregue las siguientes líneas a su archivo de configuración:
script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh
Desde la página de manual de OpenVPN :
--script-security level [método] Esta directiva ofrece control a nivel de políticas sobre el uso de OpenVPN de programas externos y scripts. Los valores de nivel inferior son más restrictivo, los valores más altos son más permisivos. Configuraciones para nivel: 0: estrictamente sin llamadas de programas externos. 1 - (Predeterminado) Solo llame a ejecutables integrados como ifconfig, ip, ruta o netsh. 2 - Permitir llamadas de ejecutables integrados y definidos por el usuario guiones. 3 - Permitir que las contraseñas pasen a los scripts a través del entorno variables (potencialmente inseguras). --up cmd Comando de Shell para ejecutarse después de abrir con éxito el dispositivo TUN / TAP (pre - cambio de UID del usuario). El script up es útil para especificar comandos de ruta que enrutan el tráfico IP destinado a privado subredes que existen en el otro extremo de la conexión VPN en el tunel. Orden de ejecución del guión --up Ejecutado después del enlace de socket TCP / UDP y TUN / TAP abierto. --down Ejecutado después del cierre de TCP / UDP y TUN / TAP.
Hay más eventos para la ejecución del script, estos se pueden encontrar en la página del manual .
Crea /etc/openvpn/up.sh
y dale permisos de ejecución (por ejemplo, 755 o 700). Contenido de ejemplo para agregar una dirección y ruta IPv6 (mostrado con fines educativos, no lo copie directamente):
#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev
Tenga en cuenta que este up
script se ejecuta como root. Si no ha especificado una configuración User
y Group
, OpenVPN también ejecutará scripts down
como root.
openvpn
directamente. Al configurar un servidor, noté que OpenVPN intentará volver a conectarse cuando el servidor se apagó. No estoy seguro si OpenVPN continúa intentándolo cuando su interfaz de red deja de funcionar.
A la pregunta: "¿Cómo puedo asociar un script a OpenVPN para que se ejecute cuando la VPN se conecte correctamente?" Quiero señalar que Lekensteyn proporcionó una excelente respuesta . Pero, en el momento en que se compuso su respuesta, le faltaba un poco de claridad sobre cómo debían proporcionarse los argumentos de la línea de comandos de openvpn para iniciar openvpn en una máquina ubuntu, especialmente para que funcione igual después de reiniciar.
Naturalmente, uno puede iniciar openvpn desde una línea de comando con cualquier opción legal disponible. Pero, en una máquina Ubuntu, si uno quiere iniciar openvpn con los mismos argumentos de línea de comando después de un reinicio, deberían considerar editar el archivo /etc/default/openvpn
. Examine las siguientes líneas:
# Optional arguments to openvpn's command line
OPTARGS=""
Desde la página de manual de comunidad openvpn en--script-security
- nivel de seguridad de script Esta directiva ofrece control a nivel de políticas sobre el uso de OpenVPN de externos programas y guiones. Los valores de nivel más bajo son más restrictivos, más altos Los valores son más permisivos. Configuraciones para el nivel: 0: estrictamente sin llamadas de programas externos. 1 - (Predeterminado) Solo llame a ejecutables integrados como ifconfig, ip, route, o netsh. 2 - Permitir llamadas de ejecutables integrados y scripts definidos por el usuario. 3 - Permitir que las contraseñas pasen a los scripts a través de variables ambientales (potencialmente inseguro). Las versiones de OpenVPN anteriores a la v2.3 también admitían un indicador de método que indicaba cómo OpenVPN debería llamar a comandos y scripts externos. Esto podría ser execve o sistema. A partir de OpenVPN v2.3, este indicador ya no se acepta. En la mayoría * nix entornos el enfoque execve () se ha utilizado sin problemas. Algunas directivas como --up permiten que se pasen opciones al script externo. En estos casos, asegúrese de que el nombre del script no contenga espacios o el analizador de configuración se ahogará porque no puede determinar dónde está el script el nombre termina y comienzan las opciones de script.
Combinado con una sección abreviada en --up
--up cmd Ejecute el comando cmd después de abrir con éxito el dispositivo TUN / TAP (cambio de UID previo al usuario). cmd consiste en una ruta al script (o programa ejecutable), seguido opcionalmente por argumentos. La ruta y los argumentos pueden estar entre comillas simples o dobles y / o escapó usando una barra diagonal inversa, y debe estar separado por uno o más espacios.
En mi máquina con un servidor openpvn.conf, tengo las siguientes líneas en mi /etc/default/openvpn
archivo:
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Por cierto, nat.sh configura la traducción de direcciones de red para enrutar el tráfico de red privada desde clientes openvpn a Internet público; lo cual es bueno para cuando uno no confía en un punto de acceso WIFI público.
Además de permitir reiniciar como se esperaba después de un reinicio, cuando /etc/openvpn/[client or server].conf
y los /etc/default/openvpn
archivos están configurados correctamente, openvpn se puede iniciar o detener con:
sudo service openvpn start
sudo service openvpn stop
Otras opciones útiles disponibles para service openvpn
incluir cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Como ese es un hilo bastante antiguo, no estoy seguro si aún es de interés. Si aún desea utilizar el NetworkManager para conectarse a una VPN, puede agregar una regla udev simple como esta:
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
Esto debería ejecutar cualquier script después de crear la VPN.
Me encontré con la respuesta en mi investigación para resolver este problema y descubrí que la mejor solución es (usando el servidor openvpn) de la siguiente manera:
Crea un script para ejecutar:
# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh
# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>
Agregue las siguientes líneas en la configuración de openvpn (generalmente /etc/openvpn/server.conf
). En la respuesta anterior, se usó arriba y abajo, que se usan cuando se inicia el servidor (se reinicia). La directiva cliente-conectar (y cliente-desconectar) se utilizan cuando el cliente se conecta (desconecta).
# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>