Ejecute las tareas posteriores a la VPN desde el despachador, no desde if-up
Un viejo enganche de interfaz no verá una conexión VPN. Haga coincidir vpn-up con el UUID del perfil, mantenga la tarea repetible y planifique una desconexión que nunca se dispara.
Un script que debe ejecutarse después de que la VPN suba necesita un evento del componente que posee la conexión. Un archivo dejado en un directorio antiguo de enganches de red no es una devolución de llamada para cada VPN que NetworkManager, pppd o un proceso OpenVPN independiente puedan crear. Cada uno de esos propietarios informa un evento distinto con un entorno distinto, así que hay que identificar al propietario antes de elegir el enganche. De lo contrario, el script es correcto y simplemente nunca se ejecuta.
Para una VPN gestionada por NetworkManager, el despachador es el lugar correcto, y vpn-up es la acción correcta.
Use vpn-up, no el evento de la interfaz
El despachador distingue up de vpn-up. El primero informa de una interfaz activada; el segundo informa de una conexión VPN activada. Que el Wi-Fi suba solo significa que existe el enlace subyacente; el túnel puede seguir negociando, o puede no autenticarse nunca.
El script recibe la interfaz y la acción, mientras que los detalles de la conexión llegan por el entorno, incluidos el UUID del perfil y la interfaz IP de la VPN. Lea esas variables en lugar de inferir la identidad a partir de los nombres de los dispositivos.
Limite la coincidencia a una conexión
Haga coincidir por el UUID de la conexión, o por otra identidad que proporcione el despachador, en lugar de un prefijo tun o ppp0. Los nombres de interfaz no son estables, puede existir más de un túnel al mismo tiempo, y dos perfiles pueden llevar el mismo nombre visible. Hacer coincidir un prefijo tun significa que el script acabará disparándose para una conexión que nadie quería tocar. También puede dispararse dos veces para un perfil cuando una reconexión reconstruye el dispositivo.
Haga la tarea idempotente. Una devolución de llamada que añade una ruta en cada invocación acaba llenando la tabla de duplicados, y la segunda copia es la que rompe el enrutamiento.
Sepa qué no demuestra la activación
vpn-pre-up se ejecuta antes de que NetworkManager informe que la VPN está completamente activada, y el gestor espera esos scripts. Use una etapa bloqueante solo cuando la tarea pertenezca de verdad ahí, porque una comprobación lenta retrasa la activación que todos los demás componentes esperan ver.
Que existan rutas no demuestra que una aplicación esté escuchando, que un nombre privado se resuelva o que exista una sesión de usuario. Compruébelo por separado con un tiempo de espera acotado, e informe de qué capa falló en lugar de reintentar toda la cadena.
Respete el contexto en el que se ejecuta el script
Los scripts del despachador se ejecutan como root, fuera de cualquier sesión de usuario. No dé por hecho que estén disponibles el entorno del usuario conectado, su sesión gráfica o un llavero desbloqueado. Nadie debería responder a un contexto de escritorio ausente haciendo que cada credencial sea legible por cada proceso. Mantenga el trabajo de la sesión de usuario en un servicio de usuario o en un ayudante de sesión al que la devolución de llamada pueda avisar sin suplantar al usuario.
La propiedad y los permisos del script también importan. Un archivo ejecutado como root que cualquier usuario puede reemplazar es una vía de escalada de privilegios, y es un hallazgo independiente de si la lógica de la VPN es correcta.
Planifique la desconexión que nunca se dispara
NetworkManager documenta que vpn-pre-down no se emite para desconexiones forzadas, como una terminación inesperada o una pérdida de conectividad. Por eso, una limpieza construida solo en torno a un pre-down ordenado es incompleta por diseño. Cualquier estado compartido que el script cambie necesita otro propietario que pueda restaurarlo tras una caída, y esa ruta de recuperación debe probarse en lugar de suponerse.
Pruebe el enganche con una conexión normal, una reconexión, una desconexión intencionada y un cable arrancado. Registre el UUID, la acción y la interfaz que se disparó, sin registrar secretos. Ese registro es la única prueba fiable de que el enganche se ejecutó para la conexión que pretendía, y es lo que hace seguro el siguiente cambio.