Los scripts que necesitan la VPN activa antes de una copia de seguridad a menudo lanzan openvpn directamente. Eso abandona el perfil, el DNS y la gestión de rutas que Tunnelblick ya administra. La vía admitida es la propia interfaz AppleScript de Tunnelblick, que acepta peticiones connect, state y disconnect para una configuración con nombre. Úsala y deja que la aplicación siga al mando.

Habla con la aplicación, no con openvpn

Tunnelblick posee el perfil OpenVPN, la selección del motor, los scripts y la integración de DNS y rutas. Un binario openvpn aparte es otra forma de lanzar, no un atajo a la misma conexión.

Llamar a la interfaz de scripts de la aplicación mantiene esa propiedad intacta y hace que cada petición sea revisable.

Los ejemplos de aquí suponen que Tunnelblick está en Applications, que una configuración operativa se llama HQ y que los comandos se ejecutan en la sesión del usuario de Mac que ha iniciado sesión. Cambia el nombre por la configuración exacta que tengas.

Arranca exactamente un perfil con nombre

Una petición connect nombra la configuración. No es una petición para conectar lo que se seleccionó por última vez.

Ejecútala en la sesión de usuario que posee la configuración:

osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'

Recorre los avisos habituales de inicio de sesión. macOS puede preguntar si la aplicación que llama tiene permiso para controlar Tunnelblick; comprueba qué aplicación y qué destino antes de aprobar. Una automatización que hace clic para saltarse ese diálogo anula el sentido del diálogo.

Una petición connect vuelve antes de que el túnel esté levantado

La guía de scripts de Tunnelblick es explícita: connect vuelve antes de que la conexión termine. Un estado de salida cero significa que la petición se aceptó, no que el tráfico fluya.

Lee el estado por separado:

osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'

CONNECTED es un resultado de estado de conexión. Todavía no demuestra que el recurso privado que necesita tu tarea sea alcanzable, así que compruébalo por separado antes de empezar el trabajo dependiente.

Otros controles de la interfaz de scripts cubren acciones más amplias y no hacen falta cuando solo cambia un perfil.

Espera con un plazo y luego falla

Sondear para siempre es la forma en que un script se cuelga toda la noche y bloquea la siguiente ejecución. Da a la espera un plazo, un intervalo corto y un resultado de fallo explícito. Trata cualquier estado distinto de CONNECTED como no listo, incluidos los de transición. Registra el último estado que viste para que el fallo se explique solo.

Un bucle acotado tiene este aspecto:

for i in $(seq 1 30); do
  state=$(osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"')
  if [ "$state" = "CONNECTED" ]; then exit 0; fi
  sleep 1
done
echo "tunnel did not reach CONNECTED" >&2
exit 1

Treinta segundos es un ejemplo, no un tiempo de espera universal. Elige un plazo a partir de la ruta de autenticación que el perfil usa realmente y mantenlo en el registro del flujo de trabajo.

Comprueba el estado y desconecta por nombre

Para detener el mismo perfil, llama a disconnect con el mismo nombre. Eso mantiene la petición acotada y deja tranquilas las demás configuraciones.

osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'

Mantén el nombre del perfil y el controlador juntos en el registro del flujo de trabajo, junto con las comprobaciones de autenticación y finalización esperadas. Ese registro es lo que hace revisable el comando seis meses después.

El comportamiento al arrancar con el equipo es otro modo. Usa la opción de inicio documentada de Tunnelblick y la configuración de credenciales que espera. Un comando ejecutado en una sesión de escritorio con sesión iniciada y un servicio que arranca con la máquina no comparten contexto. No supongas que un script que funciona mientras estás conectado se ejecutará al arrancar. Prueba la ruta de arranque por separado, con el mismo plazo y el mismo registro.

Artículos relacionados