Desconecte un perfil de OpenVPN GUI, no todos los túneles
Un túnel gestionado por la GUI necesita una orden de la GUI; un túnel gestionado por un servicio necesita el control del servicio. Identifique qué programa es dueño del perfil antes de escribir cualquier script.
Un script de desconexión suele fallar por una razón: se dirige al propietario equivocado. Un túnel gestionado por la GUI comunitaria de OpenVPN pertenece a la sesión de esa GUI, un túnel iniciado por un servicio de Windows pertenece al servicio, y OpenVPN Connect no pertenece a ninguno de los dos. Recorra estas comprobaciones en orden y deténgase cuando el propietario no esté claro. Enviar una orden kill porque el propietario era ambiguo es justo cómo la desconexión de un solo perfil se convierte en una caída de todo el sitio.
Para una conexión gestionada por la GUI, la orden útil es un mensaje a la GUI, no una señal a openvpn.exe.
Primero, identifique al propietario
Mire qué programa muestra realmente el estado conectado antes de escribir nada. Un icono en la bandeja significa que lo posee la sesión de la GUI. Una entrada de servicio significa que lo posee el servicio. Una ventana de aplicación aparte con su propia lista de perfiles no significa ninguna de las dos cosas, y se le aplica su propia interfaz específica de versión.
Compruebe también la cuenta y la sesión de escritorio. Una tarea programada que se ejecuta como otro usuario, o en una sesión no interactiva, no debe darse por sentado que controla la GUI que ve una persona conectada. Esa discrepancia produce una orden que termina limpiamente y no cambia nada, que es el tipo de fallo más caro de depurar a partir de un registro.
Después envíe la desconexión propia del propietario
Con la GUI instalada en la ruta del ejemplo y un perfil llamado office, la orden completa es una línea:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect officeSustitúyala por su ruta de instalación real y el nombre exacto de la configuración, incluidas las mayúsculas tal como las muestra la GUI. La documentación de órdenes del proyecto enumera los controles de GUI admitidos, y este ejemplo pertenece solo a OpenVPN GUI — no es una orden para cualquier aplicación que lleve OpenVPN en el nombre.
Para un túnel propiedad de un servicio, el control correcto es el servicio, no el binario de la GUI. Inspeccione el servicio instalado y los perfiles que gestiona antes de detener nada, porque una detención puede tumbar varios túneles a la vez y no obtendrá un resultado por perfil.
Compruebe que no cae nada más
La GUI también documenta una orden disconnect_all, y su alcance es exactamente la razón por la que es la herramienta equivocada para un script que solo debe detener office. Si le tienta usarla por simplicidad, pregúntese qué más está conectado en esa máquina y cómo lo notará el usuario.
taskkill /F /IM openvpn.exe es peor por dos motivos. Selecciona procesos por el nombre del ejecutable y fuerza la terminación, así que no expresa ni un nombre de perfil ni la secuencia normal de desconexión del propietario. Llamar a eso un apagado ordenado esconde ambos problemas detrás de un único estado de salida.
Sea cual sea el camino que tome, verifique el alcance del impacto antes del cambio: enumere los perfiles conectados, anote cuáles deben sobrevivir y vuelva a comprobarlos después.
Confirme el estado, no el código de salida
Tras solicitar la desconexión, lea el estado de la conexión nombrada a través de su propietario en lugar de confiar en el valor de retorno de la orden. Si el paso siguiente necesita la red después del desmontaje, espere ese cambio de estado con un tiempo de espera explícito en vez de suponer que la limpieza terminó cuando el proceso volvió. Un script que corre a la par del desmontaje fallará de forma intermitente y la culpa recaerá en la VPN.
Si el estado nunca cambia, el propietario probablemente no es al que se dirigió. Vuelva a comprobar la sesión y la cuenta antes de escalar a una orden más contundente.
Qué poner en el registro
Registre el nombre del perfil, el propietario al que se dirigió y el contexto de inicio, además del estado resultante. No vuelque la configuración completa ni las credenciales en el registro de la tarea, y no registre la línea de órdenes si contiene una ruta a un archivo con secretos.
Un mensaje de error que nombre el perfil y el contexto basta para que la siguiente persona reproduzca el problema. Un registro que solo anota un código de salida genérico los devuelve al principio, y es justo ahí donde las conjeturas vuelven a empezar.