Ottenere la riconnessione automatica della VPN al momento della caduta della connessione


13

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 riconnettere automaticamente? A volte non me ne accorgo per un po ', il che è piuttosto fastidioso.

Risposte:


9

È possibile utilizzare il seguente AppleScript , salvarlo come un'applicazione e impostarlo come agente (nessuna icona dock).

Questo script imposterà una connessione VPN quando non ce n'è. Pertanto, dovrebbe anche riconnettersi poco dopo l'interruzione della connessione. È possibile modificare l'intervallo per verificare la connessione VPN, è 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 impostarlo in questa risposta .


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,

Ciò non funzionerà con le VPN IKEv2. Ecco come puoi farlo: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

8

Ho apportato alcune modifiche alla risposta fornita, perché se vale la pena fare qualcosa vale la pena farlo. Volevo riconnettermi se la VPN era caduta, ma NON riconnettermi se la VPN era stata disconnessa intenzionalmente. La soluzione che mi è venuta in mente era efficace e inelegante.

Per prima cosa ho aggiunto gli hook all'avvio e all'arresto di pppd per tenere traccia dello stato VPN desiderato. Questi file devono essere di proprietà di root e disporre delle autorizzazioni di lettura / esecuzione ( 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 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 versioni successive

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

Quindi modificando l'AppleScript 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"come viene chiamata la tua VPN. Inoltre, all'avvio non esiste il file 'reconnect_vpn', quindi ho aggiunto un valore booleano (startOnLogin) da utilizzare come predefinito quando non è stato possibile trovare il file. Mi piace iniziare subito, ma se non lo fai, cambialo in falso.

Ho la sensazione che se sei il tipo di persona che ha questo particolare riguardo al comportamento della VPN, allora sei anche il tipo di persona a cui piace armeggiare finché non trovi una soluzione e quindi questa risposta non ha pubblico. Ma per ogni evenienza, eccolo qui. Spero che aiuti qualcuno.


Ciò non funzionerà con le VPN IKEv2. Ecco come puoi farlo: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

4

C'è un'app che lo chiama VPN Auto-Connect ( collegamento al Mac App Store). Sono $ 0,99.

Una volta avviato, vive nella barra dei menu; quando lo usi per attivare la VPN, monitorerà un profilo di connessione VPN che hai impostato nel pannello delle preferenze di rete di OS X e ti assicurerà di rimanere sempre connesso ad esso. L'icona della barra dei menu di Connessione automatica VPN fornisce un elenco di tutte le connessioni VPN definite e consente di scegliere a quale connettersi sempre.


Benvenuti a chiedere diverso! Grazie per la tua risposta, John! Puoi aggiungere ulteriori informazioni sull'app a cui sei collegato? Come risponde alla domanda? Quali caratteristiche specifiche rendono l'app di cui l'OP ha bisogno?
daviesgeek,

La connessione automatica VPN funziona con le VPN IKEv2. Ecco come puoi farlo: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

0

Una nuova opzione è VPN Monitor disponibile su AppStore. Consente una maggiore personalizzazione, come il login automatico, il ciclo attraverso le connessioni VPN, ecc. Sono richiesti almeno OS X 10.9 Mavericks.


0

Lo script riconnette automaticamente qualsiasi servizio VPN abbandonato.

Avevo usato la soluzione di rjarvis2010 ma non ne ero abbastanza soddisfatto.

Ho molti diversi servizi VPN a cui mi connetto, quindi volevo uno script che riconnettesse 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 per te, devi sostituirlo

  • Uni con qualunque sia il nome della tua posizione

Una volta terminato, salvalo come un'applicazione e inseriscilo nei tuoi elementi di accesso e sei a posto.

Inoltre, e questo è importante, è necessario impostare i ganci di PPP, come descritto nel rjarvis2010 's soluzione

Inoltre, ti consiglio di non provare questo collegando più VPN contemporaneamente. Per interrompere questo script potrebbe essere necessario forzarlo a uscire dal monitor delle attività (poiché i loop di ripetizione non gli permettono di ricevere input esterni a volte).


0

Sto usando un approccio diverso per mantenere viva la mia connessione VPN. Ciò comporta ottenere molto semplicelaunchd esecuzione di un demone che consente di mantenere la connessione VPN senza alcun utente connesso (questo evita anche i popup di disconnessione VPN quando si riprende dalla modalità di sospensione).

crea un launchdfile plist 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 comando seguente 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 una connessione Internet. Inoltre, la VPN viene ricollegata automaticamente quando viene ripristinata la connessione a Internet ...

Modificare:

Trovo questo metodo il più robusto in quanto consente di effettuare automaticamente una connessione VPN, prima che un utente acceda (utile per i server).

Aggiornamenti per Yosemite (OSX 10.10)

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

È ammortizzato in Yosemite. È possibile utilizzare invece quanto segue

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

Anche

networksetup -connectpppoeservice MyVPN

Non funziona più in Yosemite. Puoi usare questo invece

scutil --nc start MyVPN

scutil --nc listnon elenca la mia connessione VPN, che è visibile e collegabile tramite le impostazioni di rete.
phil pirozhkov,

@philpirozhkov Questo non funzionerà con le VPN IKEv2. Ecco come puoi farlo: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

0

Ho visto che qui ci sono alcune risposte che usano hook di login, che sono deprecati nelle versioni più recenti di OS X a favore di Launch Agent e Launch Daemons.

Ho creato uno script e un agente di lancio. 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 è possibile eseguire il ping di tale IP, abilita la connessione VPN.

Se lo hai fatto tramite un'app Apple Script, l'icona dell'app sarà sempre nel dock. Preferisco farlo funzionare automaticamente in background.

Clonare il progetto di seguito e seguire le istruzioni nel file Leggimi. Il risultato finale è un pacchetto di installazione che inserirà 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).

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


-2

Il bello di AppleScripts è che puoi farci quasi tutto ed è gratuito, il rovescio della medaglia è che di solito non sono molto reattivi (polling a un intervallo di tempo fisso) e mancano di funzionalità che solo le app native di MAC OS X possono avere. Una bella e nuova app di riconnessione automatica VPN è "VPN Monitor" nell'app store, si riconnette istantaneamente nel momento in cui una connessione VPN si interrompe, è in grado di riconnettersi a un altro servizio VPN se il servizio preferito è inattivo, si connette all'avvio, tiene traccia dei tempi di inattività e utilizza un minimo di risorse di sistema per l'esecuzione in background come applicazione della barra di stato. VPN Monitor


2
Consulta le FAQ, in particolare la parte relativa all'autopromozione
nohillside
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.