Ottenere VPN per riconnettersi automaticamente alla caduta della connessione

12

Uso la VPN integrata su Mac OS X 10.7.3. È IPSec, FWIW. Di tanto in tanto, si disconnette (probabilmente un problema con il mio server aziendale). C'è un modo per farlo ricollegare automaticamente? A volte non me ne accorgo da un po ', che è piuttosto fastidioso.

    
posta Andrew Ferrier 05.03.2012 - 15:55
fonte

8 risposte

8

Potresti utilizzare il seguente AppleScript , salvarlo come applicazione e impostarlo come agente (nessuna icona del dock).

Questo script configurerà una connessione VPN quando non ce n'è. Pertanto, dovrebbe anche riconnettersi subito dopo la connessione. Puoi cambiare l'intervallo per controllare la tua connessione VPN, sono 120 secondi nello 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

Ho spiegato come configurarlo in questa risposta .

    
risposta data 05.03.2012 - 16:03
fonte
7

Ho apportato alcune modifiche alla risposta fornita, perché se qualcosa vale la pena farlo, vale la pena di farlo. Volevo riconnetterti se la VPN fosse stata abbandonata, ma NON riconnetterei se la VPN fosse intenzionalmente disconnessa. La soluzione che ho trovato è stata efficace e poco elegante.

Per prima cosa ho aggiunto ganci all'avvio e all'arresto di pppd per tenere traccia dello stato della VPN desiderato. Questi file devono essere di proprietà di root e disporre di autorizzazioni di lettura / esecuzione in tutto il mondo ( 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: per OS X 10.9.5 e versioni precedenti

#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi

/ etc / ppp / ip-down: per OS X 10.10 e successivi

#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi

Quindi, modificando l'AppleScript di cui sopra, sono stato in grado di controllare la variabile di stato '/ var / run / reconnect_vpn' per determinare se ripristinare 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

Come prima, cambia la linea set myConnection to the service "VPN" in qualunque sia la tua VPN. Inoltre, all'avvio il file 'reconnect_vpn' non esiste, quindi ho aggiunto un valore booleano (startOnLogin) da utilizzare come predefinito quando il file non è stato trovato. Mi piace iniziare immediatamente, ma se non lo fai, cambiala in falso.

Ho la sensazione che se sei il tipo di persona è questo particolare riguardo al comportamento della VPN, allora sei anche il tipo di persona a cui piace armeggiare fino a trovare una soluzione e quindi questa risposta non ha pubblico. Ma nel caso, eccolo. Spero che aiuti qualcuno.

    
risposta data 18.02.2013 - 05:24
fonte
4

C'è un'app che si chiama VPN Auto-Connect (Mac App Store link). È $ 0,99.

Una volta avviato, vive nella barra dei menu; quando lo usi per attivare la VPN, monitora un profilo di connessione VPN che hai configurato nel pannello delle preferenze di Rete di OS X e assicurati di rimanere sempre connesso ad esso. L'icona della barra dei menu di VPN Auto-Connect fornisce un elenco di tutte le connessioni VPN che hai definito e ti consente di scegliere a quale connettere sempre.

    
risposta data 18.07.2012 - 10:21
fonte
0

Una nuova opzione è Monitor VPN disponibile su AppStore. Consente una maggiore personalizzazione, come l'accesso automatico, il ciclismo attraverso connessioni VPN, ecc. Almeno OS X 10.9 Mavericks richiesti.

    
risposta data 27.10.2014 - 22:36
fonte
0

Script auto-riconnesso qualsiasi servizio VPN eliminato.

Utilizzo rjarvis2010 della soluzione , ma non ero abbastanza felice con esso.

Ho molti servizi VPN a cui mi collego, quindi volevo uno script che ricollegasse automaticamente qualsiasi VPN a cui ero connesso.

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

Per farlo funzionare, devi sostituire

  • Uni con qualunque sia il nome della tua posizione

Una volta terminato, salvalo come applicazione e inseriscilo negli elementi di accesso e sei pronto per iniziare.

Inoltre, e questo è importante, è necessario impostare i ganci PPP come descritto in rjarvis2010 soluzione

Inoltre, ti consiglio di non provare più a connettere più VPN contemporaneamente. Per interrompere questo script potrebbe essere necessario forzare l'uscita dal monitor dell'attività (poiché i loop di ripetizione non consentono di ricevere input esterni a volte).

    
risposta data 21.01.2015 - 17:57
fonte
0

Sto usando un approccio diverso per mantenere viva la mia connessione VPN. Ciò comporta l'esecuzione di un semplice daemon launchd in esecuzione che consente di mantenere la connessione VPN senza che nessun utente abbia effettuato l'accesso (questo evita anche i popup di disconnessione VPN quando riprende dalla modalità di sospensione).

crea un file plist launchd dal terminale:

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

e inserisci il seguente contenuto:

<?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>

È possibile utilizzare il seguente comando per avviare il demone e testare:

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

In questo modo, hai un demone in esecuzione per tutti gli utenti, la connessione è stata tentata solo quando è disponibile la connessione Internet. Inoltre, la VPN viene ricollegata automaticamente quando la connessione Internet è tornata ...

Modifica:

Trovo che questo metodo sia il più affidabile in quanto consente di eseguire automaticamente una connessione VPN, prima che un utente effettui l'accesso (utile per i server).

Aggiornamenti per Yosemite (OSX 10.10)

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

È ammortizzato in Yosemite. È possibile utilizzare i seguenti invece

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

Anche

networksetup -connectpppoeservice MyVPN

Non funziona più su Yosemite. Puoi usare questo invece

scutil --nc start MyVPN
    
risposta data 26.02.2013 - 02:21
fonte
0

Ho visto che qui ci sono alcune risposte che usano i ganci di accesso, che sono deprecati nelle versioni più recenti di OS X in favore di Launch Agent e Launch Daemon.

Ho creato uno script e un agente di avvio. L'agente chiama uno script di shell ogni 30 secondi e tenta di eseguire il ping di un indirizzo IP statico sulla rete VPN. Se non può eseguire il ping di quell'IP, abilita la tua connessione VPN.

Se l'hai fatto tramite un'app Apple Script, l'icona dell'app sarà sempre nel tuo dock. Preferisco che venga eseguito automaticamente in background.

Clona il progetto qui sotto e segui le istruzioni nel readme. Il risultato finale è un pacchetto di installazione che posizionerà un file plist dell'agente di avvio in / Library / LaunchAgents / e uno script di shell in / Library / Application Support / melonsmasher /.

Assicurati di modificare lo script della shell (auto-vpn) con il nome della tua connessione VPN e un indirizzo IP che si trova sulla rete VPN. È possibile modificare l'intervallo di esecuzione nel file plist (com.melonsmasher.autovpn.plist).

link

    
risposta data 28.01.2016 - 19:20
fonte
-2

La bellezza di AppleScript è che puoi farne praticamente qualsiasi cosa ed è gratuito, il lato negativo è che di solito non sono molto reattivi (polling a intervalli di tempo fissi) e mancano funzionalità che possono avere solo app native di MAC OS X. Una bella e nuova app di riconnessione automatica VPN è "VPN Monitor" nell'app store, si riconnette istantaneamente nel momento in cui una connessione VPN cade, è in grado di riconnettersi a un servizio VPN diverso se il servizio preferito è inattivo, si connette all'avvio, tiene traccia del tempo di inattività e utilizza un minimo di risorse di sistema per l'esecuzione in background come applicazione della barra di stato. Monitor VPN

    
risposta data 02.08.2014 - 09:09
fonte

Leggi altre domande sui tag