He hecho algunos cambios en la respuesta proporcionada, porque si algo vale la pena hacerlo hasta el fondo. Quería reconectar si la VPN se caía, pero NO reconectar si la VPN se desconectaba intencionadamente. La solución que se me ocurrió era a la vez eficaz y poco elegante.
Primero añadí ganchos al inicio y al apagado de pppd para mantener el estado deseado de la VPN. Estos archivos deben ser propiedad de Root, y tienen permisos de lectura/ejecución mundiales ( sudo chmod 755 /etc/ppp/ip-*
).
/etc/ppp/ip-up:
#!/bin/sh
echo true > /var/run/reconnect_vpn
chmod 644 /var/run/reconnect_vpn
/etc/ppp/ip-down: para OS X 10.9.5 e inferior
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/etc/ppp/ip-down: para OS X 10.10 y superior
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
Entonces, modificando el AppleScript de arriba, pude comprobar la variable de estado '/var/run/reconnect_vpn' para determinar si hay que volver a activar la VPN:
on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN"
set startOnLogin to true
local doReconnect
try
set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
on error errMsg
set doReconnect to startOnLogin
end try
if myConnection is not null and doReconnect then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 120
end tell
end idle
Como antes, cambie la línea set myConnection to the service "VPN"
a cualquiera que sea el nombre de su VPN. Además, al iniciar el archivo 'reconnect_vpn' no existe, así que añadí un booleano (startOnLogin) para que sirviera como valor por defecto cuando no se pudiera encontrar el archivo. A mí me gusta que se inicie inmediatamente, pero si no es así, cámbialo a false.
Tengo la sensación de que si eres el tipo de persona es este particular sobre el comportamiento de la VPN, entonces también eres el tipo de persona que le gusta tantear hasta encontrar una solución y por lo tanto esta respuesta no tiene audiencia. Pero por si acaso, aquí está. Espero que ayude a alguien.