Conseguir que la VPN se vuelva a conectar automáticamente al desconectar la conexión


13

Uso la VPN incorporada en Mac OS X 10.7.3. Es IPSec, FWIW. De vez en cuando, se desconecta (probablemente un problema con mi servidor corporativo). ¿Hay alguna manera de hacer que se vuelva a conectar automáticamente? A veces no me doy cuenta por un tiempo, lo cual es un poco molesto.

Respuestas:


9

Puede usar el siguiente AppleScript , guardarlo como una aplicación y configurarlo para que sea un agente (sin icono de acoplamiento).

Este script configurará una conexión VPN cuando no haya ninguna. Por lo tanto, también debe volver a conectarse poco después de que su conexión se caiga. Puede cambiar el intervalo para verificar su conexión VPN, son 120 segundos en el script.

on idle
    tell application "System Events"
        tell current location of network preferences
            set myConnection to the service "VPN University"
            if myConnection is not null then
                if current configuration of myConnection is not connected then
                    connect myConnection
                end if
            end if
        end tell
        return 120
    end tell
end idle

He explicado cómo configurar esto en esta respuesta .


Can’t get «class svce» "MyVPN" of «class locc» of «class netp» of application "System Events". System Events got an error: Can’t get service "MyVPN" of current location of network preferences. (-1728)
phil pirozhkov

Eso no funcionará con las VPN IKEv2. Así es como puede hacer eso: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

8

Hice algunos cambios en la respuesta proporcionada, porque si algo vale la pena hacerlo, vale la pena hacerlo en el suelo. Quería volver a conectar si la VPN se cayó, pero NO volver a conectar si la VPN se desconectó intencionalmente. La solución que se me ocurrió fue efectiva y poco elegante.

Primero agregué ganchos al inicio y apagado de pppd para realizar un seguimiento del estado de VPN deseado. Estos archivos deben ser propiedad de root y tener 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 y versiones inferiores

#!/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

Luego, al modificar el AppleScript anterior, pude verificar la variable de estado '/ var / run / reconnect_vpn' para determinar si la VPN vuelve a funcionar:

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 como se llame su VPN. Además, al iniciar el archivo 'reconnect_vpn' no existe, por lo que agregué un booleano (startOnLogin) para que funcione como predeterminado cuando no se pudo encontrar el archivo. Me gusta comenzar de inmediato, pero si no lo hace, cámbielo a falso.

Tengo la sensación de que si eres el tipo de persona que se preocupa tanto por el comportamiento de la VPN, también eres el tipo de persona a la que le gusta hurgar 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.


Eso no funcionará con las VPN IKEv2. Así es como puede hacer eso: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

4

Hay una aplicación que lo hace llamada VPN Auto-Connect (enlace de Mac App Store). Cuesta $ 0,99.

Una vez iniciado, vive en tu barra de menú; cuando lo use para activar "VPN", monitoreará un perfil de conexión VPN que configuró en el panel de preferencias de red de OS X y se asegurará de que siempre permanezca conectado a él. El icono de la barra de menú de VPN Auto-Connect proporciona una lista de todas las conexiones VPN que ha definido y le permite elegir a cuál conectarse siempre.


¡Bienvenido a Ask Different! Gracias por tu respuesta, John! ¿Puedes agregar más información sobre la aplicación que vinculaste? ¿Cómo responde la pregunta? ¿Qué características específicas hacen que sea la aplicación que necesita el OP?
daviesgeek

El VPN Auto-Connect funciona con las VPN IKEv2. Así es como puede hacer eso: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

0

Una nueva opción es VPN Monitor disponible en la AppStore. Permite una mayor personalización, como inicio de sesión automático, ciclado a través de conexiones VPN, etc. Se requiere al menos OS X 10.9 Mavericks.


0

El script reconecta automáticamente cualquier servicio VPN caído.

Había estado usando la solución de rjarvis2010 pero no estaba muy contento con ella.

Tengo muchos servicios VPN diferentes a los que me conecto, así que quería un script que reconectara automáticamente cualquier VPN a la que estuviera conectado.

on idle
    tell application "System Events"
        tell location "Uni" of network preferences
            -- keep checking for VPN name until a VPN is connected
            set empty to true
            repeat until empty is false
                try
                    -- set variable "myVPN" to the name of the service that is connected and is a VPN
                    set myVPN to get name of first service whose (kind is greater than 11 and kind is less than 17) and connected of current configuration is true
                    set empty to false
                on error
                    set empty to true
                    delay 15
                end try
            end repeat

            -- doReconnect is a file that reads from the ppp.log and contains "true" by default, "false" if the vpn service was manually disconnected recently
            local doReconnect
            set doReconnect to (do shell script "cat /var/run/reconnect_vpn")

            repeat while doReconnect contains "true"
                set ConfProp to get current configuration of service myVPN
                if connected of ConfProp is false then
                    delay 1
                    set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
                    if doReconnect contains "true" then
                        try
                            connect service myVPN
                        on error errorMessage
                        end try
                    else
                        exit repeat
                    end if
                end if
                delay 5
            end repeat
        end tell
    end tell
    return 1
end idle

Para que funcione para usted, debe reemplazar

  • Uni con el nombre de tu ubicación

Una vez que haya terminado, guárdelo como una aplicación y colóquelo en sus Elementos de inicio de sesión y listo.

Además, y esto es importante, debe configurar los ganchos PPP como se describe en la solución de rjarvis2010

Además, le recomendaría que no intente esto conectando múltiples VPN simultáneamente. Para detener este script, es posible que deba forzarlo a salir a través del monitor de actividad (ya que los bucles de repetición no le permiten recibir entradas externas a veces).


0

Estoy usando un enfoque diferente para mantener viva mi conexión VPN. Esto implica la launchdejecución de un demonio muy simple que permite mantener la conexión VPN sin que ningún usuario haya iniciado sesión (esto también evita las ventanas emergentes de desconexión de VPN cuando se reanuda desde el modo de suspensión).

crear un launchdarchivo plist desde la terminal:

sudo nano /Library/LaunchDaemons/my.vpn.connector.plist

e ingrese el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>
    <key>Label</key>
    <string>my.vpn.connector</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>(test $(networksetup -showpppoestatus MyVPN) = 'disconnected' &&  ping -o my.vpn.server.url && networksetup -connectpppoeservice MyVPN) ; sleep 10</string>
    </array>
</dict>
</plist>

Puedes usar el siguiente comando para iniciar tu demonio y probar:

launchctl load /Library/LaunchDaemons/my.vpn.connector.plist

De esta manera, tiene un demonio ejecutándose para todos los usuarios, la conexión se intenta solo cuando la conexión a Internet está disponible. Además, la VPN se vuelve a conectar automáticamente cuando vuelve la conexión a Internet ...

Editar:

Este método me parece el más robusto, ya que permite que una conexión vpn se realice automáticamente, antes de que un usuario inicie sesión (útil para los servidores).

Actualizaciones para Yosemite (OSX 10.10)

    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>

Se deprecia en Yosemite. Puede usar lo siguiente en su lugar

    <key>KeepAlive</key>
    <true/>

también

networksetup -connectpppoeservice MyVPN

Ya no funciona en Yosemite. Puedes usar esto en su lugar

scutil --nc start MyVPN

scutil --nc listno enumera mi conexión VPN, que se ve y se puede conectar a través de la configuración de red.
phil pirozhkov

@philpirozhkov Esto no funcionará con las VPN IKEv2. Así es como puede hacer eso: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

0

Vi que hay algunas respuestas aquí que usan enlaces de inicio de sesión, que están en desuso en las versiones más recientes de OS X a favor de Launch Agent y Launch Daemons.

Creé un script y un agente de lanzamiento. El agente llama a un script de shell cada 30 segundos e intenta hacer ping a una dirección IP que es estática en la red vpn. Si no puede hacer ping a esa IP, habilita su conexión vpn.

Si hiciste esto a través de una aplicación Apple Script, el ícono de la aplicación siempre estará en tu dock. Prefiero que esto se ejecute automáticamente en segundo plano.

Clone el proyecto a continuación y siga las instrucciones en el archivo Léame. El resultado final es un paquete de instalación que colocará un archivo plist del agente de lanzamiento en / Library / LaunchAgents / y un script de shell en / Library / Application Support / melonsmasher /.

Asegúrese de editar el script de shell (vpn automático) con su nombre de conexión VPN y una dirección IP que se encuentre en la red VPN. Puede cambiar el intervalo de ejecución en el archivo plist (com.melonsmasher.autovpn.plist).

https://github.com/MelonSmasher/OSX-AutoVPN


-2

La belleza de AppleScripts es que puedes hacer casi cualquier cosa con él y es gratis, la desventaja es que generalmente no responden muy bien (sondeo en un intervalo de tiempo fijo) y carecen de características que solo las aplicaciones nativas de MAC OS X pueden tener. Una aplicación de reconexión automática VPN nueva y agradable es "VPN Monitor" en la tienda de aplicaciones, se reconecta instantáneamente en el momento en que se corta una conexión VPN, puede reconectarse a un servicio VPN diferente si el servicio preferido está inactivo, se conecta al inicio, realiza un seguimiento de su tiempo de inactividad y utiliza un mínimo de recursos del sistema para ejecutarse en segundo plano como una aplicación de barra de estado. Monitor de VPN


2
Eche un vistazo a las preguntas frecuentes, especialmente la parte sobre autopromoción
nohillside
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.