Obtention de la reconnexion automatique du VPN lors d'une interruption de connexion

13

J'utilise le VPN intégré sur Mac OS X 10.7.3. C'est IPSec, FWIW. De temps en temps, il se déconnecte (probablement un problème avec mon serveur d'entreprise). Existe-t-il un moyen de le faire se reconnecter automatiquement? Parfois, je ne le remarque pas pendant un moment, ce qui est un peu ennuyeux.

Andrew Ferrier
la source

Réponses:

9

Vous pouvez utiliser le AppleScript suivant , l'enregistrer en tant qu'application et le définir comme agent (pas d'icône de dock).

Ce script établira une connexion VPN lorsqu'il n'y en a pas. Par conséquent, il devrait également se reconnecter peu de temps après la fin de votre connexion. Vous pouvez changer l'intervalle pour vérifier votre connexion VPN, c'est 120 secondes dans le 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

J'ai expliqué comment configurer cela dans cette réponse .

gentmatt
la source
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
Cela ne fonctionnera pas avec les VPN IKEv2. Voici comment vous pouvez le faire: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
8

J'ai apporté quelques modifications à la réponse fournie, car si quelque chose vaut la peine d'être fait, il vaut la peine de le faire dans le sol. Je voulais me reconnecter si le VPN était tombé, mais PAS se reconnecter si le VPN était intentionnellement déconnecté. La solution que j'ai trouvée était à la fois efficace et inélégante.

J'ai d'abord ajouté des crochets au démarrage et à l'arrêt de pppd pour garder une trace de l'état VPN souhaité. Ces fichiers doivent appartenir à root et disposer des autorisations de lecture / exécution du monde ( 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: pour OS X 10.9.5 et inférieur

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

/ etc / ppp / ip-down: pour OS X 10.10 et supérieur

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

Puis en modifiant l'AppleScript ci-dessus, j'ai pu vérifier la variable d'état '/ var / run / reconnect_vpn' pour déterminer s'il fallait ramener le 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

Comme précédemment, changez la ligne set myConnection to the service "VPN"en quel que soit le nom de votre VPN. De plus, au démarrage, le fichier «reconnect_vpn» n'existe pas, j'ai donc ajouté un booléen (startOnLogin) pour servir de valeur par défaut lorsque le fichier est introuvable. J'aime commencer immédiatement, mais si vous ne le faites pas, changez-le en faux.

J'ai le sentiment que si vous êtes le genre de personne qui est si particulier à propos du comportement VPN, alors vous êtes aussi le genre de personne qui aime tâtonner jusqu'à ce que vous trouviez une solution et donc cette réponse n'a pas d'audience. Mais juste au cas où, le voici. J'espère que cela aide quelqu'un.

rjarvis2010
la source
Cela ne fonctionnera pas avec les VPN IKEv2. Voici comment vous pouvez le faire: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
4

Il existe une application qui le fait appelée VPN Auto-Connect (lien Mac App Store). C'est 0,99 $.

Une fois démarré, il vit dans votre barre de menu; lorsque vous l'utilisez pour activer le VPN, il surveille un profil de connexion VPN que vous avez configuré dans le volet des préférences réseau d'OS X et vous assure de toujours y rester connecté. L'icône de la barre de menus de VPN Auto-Connect fournit une liste de toutes les connexions VPN que vous avez définies et vous permet de choisir celle à laquelle vous devez toujours vous connecter.

John
la source
Bienvenue sur Ask Different! Merci pour votre réponse, John! Pouvez-vous ajouter plus d'informations sur l'application à laquelle vous êtes lié? Comment répond-il à la question? Quelles fonctionnalités spécifiques en font l'application dont l'OP a besoin?
daviesgeek
La connexion automatique VPN fonctionne avec les VPN IKEv2. Voici comment vous pouvez le faire: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
0

Une nouvelle option est VPN Monitor disponible sur l'AppStore. Il permet plus de personnalisation, comme la connexion automatique, le cycle de connexions VPN, etc. Au moins OS X 10.9 Mavericks requis.

n1000
la source
0

Le script reconnecte automatiquement tout service VPN supprimé.

J'étais en utilisant rjarvis2010 de » solution , mais je n'étais pas très heureux avec elle.

J'ai de nombreux services VPN différents auxquels je me connecte, donc je voulais un script qui reconnecterait automatiquement tout VPN auquel j'étais connecté.

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

Pour que cela fonctionne pour vous, vous devez remplacer

  • Uni quel que soit le nom de votre emplacement

Une fois que vous avez terminé, enregistrez-le en tant qu'application et placez-le dans vos éléments de connexion et vous êtes prêt à partir.

De plus, et c'est important, vous devez configurer les crochets PPP comme décrit dans la solution de rjarvis2010

De plus, je vous recommande de ne pas essayer de connecter simultanément plusieurs VPN. Pour arrêter ce script, vous devrez peut-être le forcer à quitter le moniteur d'activité (car les boucles de répétition ne lui permettent pas de recevoir des entrées externes à certains moments).

francesco
la source
0

J'utilise une approche différente pour maintenir ma connexion VPN en vie. Cela implique de lancer un launchddémon très simple qui permet de maintenir la connexion VPN sans qu'aucun utilisateur ne soit connecté (cela évite également les fenêtres contextuelles de déconnexion VPN lors de la sortie du mode veille).

créer un launchdfichier plist depuis le terminal:

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

et entrez le contenu suivant:

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

Vous pouvez utiliser la commande suivante pour démarrer votre démon et tester:

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

De cette façon, vous avez un démon en cours d'exécution pour tous les utilisateurs, la connexion n'a été tentée que lorsque la connexion Internet est disponible. De plus, le VPN est reconnecté automatiquement lorsque la connexion Internet est de retour…

Éditer:

Je trouve cette méthode la plus robuste car elle permet une connexion VPN à effectuer automatiquement, avant qu'un utilisateur ne se connecte (utile pour les serveurs).

Mises à jour pour Yosemite (OSX 10.10)

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

Est déprécié à Yosemite. Vous pouvez utiliser les éléments suivants à la place

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

Aussi

networksetup -connectpppoeservice MyVPN

Ne fonctionne plus à Yosemite. Vous pouvez l'utiliser à la place

scutil --nc start MyVPN
pierre-o
la source
scutil --nc listne répertorie pas ma connexion VPN, visible et connectable via les paramètres réseau.
phil pirozhkov
@philpirozhkov Cela ne fonctionnera pas avec les VPN IKEv2. Voici comment vous pouvez le faire: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
0

J'ai vu qu'il y a quelques réponses ici qui utilisent des hooks de connexion, celles-ci sont déconseillées dans les nouvelles versions d'OS X en faveur de Launch Agent et Launch Daemons.

J'ai créé un script et un agent de lancement. L'agent appelle un script shell toutes les 30 secondes et essaie d'envoyer une requête ping à une adresse IP statique sur le réseau VPN. S'il ne peut pas cingler cette IP, il active votre connexion VPN.

Si vous l'avez fait via une application Apple Script, l'icône de l'application sera toujours dans votre dock. Je préfère que cela fonctionne automatiquement en arrière-plan.

Clonez le projet ci-dessous et suivez les instructions du fichier Lisez-moi. Le résultat final est un package d'installation qui placera un fichier plist d'agent de lancement dans / Library / LaunchAgents / et un script shell dans / Library / Application Support / melonsmasher /.

Assurez-vous de modifier le script shell (auto-vpn) avec votre nom de connexion VPN et une adresse IP qui se trouve sur le réseau VPN. Vous pouvez modifier l'intervalle d'exécution dans le fichier plist (com.melonsmasher.autovpn.plist).

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

almyz125
la source
-2

La beauté des AppleScripts est que vous pouvez presque tout faire avec et c'est gratuit, l'inconvénient est qu'ils ne sont généralement pas très réactifs (interrogation à un intervalle de temps fixe) et manquent de fonctionnalités que seules les applications MAC OS X natives peuvent avoir. Une nouvelle et jolie application de reconnexion automatique VPN est "Moniteur VPN" dans l'App Store, elle se reconnecte instantanément au moment où une connexion VPN tombe, est capable de se reconnecter à un autre service VPN si le service préféré est en panne, se connecte au démarrage, assure le suivi de vos temps d'arrêt et utilise un minimum de ressources système pour s'exécuter en arrière-plan en tant qu'application de barre d'état. Moniteur VPN

Jos
la source
2
Veuillez consulter la FAQ, en particulier la partie sur l'autopromotion
nohillside