VPN wird automatisch wieder verbunden, wenn die Verbindung getrennt wird

13

Ich verwende das integrierte VPN unter Mac OS X 10.7.3. Es ist IPSec, FWIW. Von Zeit zu Zeit wird die Verbindung getrennt (wahrscheinlich ein Problem mit meinem Unternehmensserver). Gibt es eine Möglichkeit, die Verbindung automatisch wiederherzustellen? Manchmal merke ich es eine Weile nicht, was irgendwie nervig ist.

Andrew Ferrier
quelle

Antworten:

9

Sie können das folgende AppleScript verwenden , es als Anwendung speichern und als Agent festlegen (kein Dock-Symbol).

Dieses Skript baut eine VPN-Verbindung auf, wenn keine vorhanden ist. Daher sollte die Verbindung auch kurz nach dem Trennen der Verbindung wieder hergestellt werden. Sie können das Intervall ändern, um Ihre VPN-Verbindung zu überprüfen. Im Skript sind es 120 Sekunden.

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

Ich habe in dieser Antwort erklärt, wie das eingerichtet wird .

Gentmatt
quelle
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
Bei IKEv2-VPNs funktioniert das nicht. Und so können Sie das machen: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
8

Ich habe einige Änderungen an der angegebenen Antwort vorgenommen. Ich wollte erneut eine Verbindung herstellen, wenn das VPN gelöscht wurde, aber NICHT, wenn das VPN absichtlich getrennt wurde. Die Lösung, die ich gefunden habe, war sowohl effektiv als auch unelegant.

Zuerst habe ich dem Start und dem Herunterfahren von pppd Hooks hinzugefügt, um den gewünschten VPN-Status zu verfolgen. Diese Dateien sollten Eigentum von root sein und über weltweite Lese- / Ausführungsberechtigungen verfügen ( 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: für OS X 10.9.5 und niedriger

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

/ etc / ppp / ip-down: für OS X 10.10 und höher

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

Durch Ändern des obigen AppleScript konnte ich die Statusvariable '/ var / run / reconnect_vpn' überprüfen, um festzustellen, ob das VPN wieder hergestellt werden soll:

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

Ändern Sie set myConnection to the service "VPN"nach wie vor die Leitung auf den Namen Ihres VPN. Außerdem existiert beim Start die Datei 'reconnect_vpn' nicht, weshalb ich einen Booleschen Wert (startOnLogin) als Standardwert hinzugefügt habe, wenn die Datei nicht gefunden werden konnte. Ich möchte sofort anfangen, aber wenn Sie dies nicht tun, ändern Sie es in false.

Ich habe das Gefühl, dass, wenn Sie die Art von Person sind, die sich speziell mit VPN befasst, Sie auch die Art von Person sind, die gerne herumfummelt, bis Sie eine Lösung finden, und diese Antwort daher kein Publikum hat. Aber nur für den Fall, hier ist es. Hoffe es hilft jemandem.

rjarvis2010
quelle
Bei IKEv2-VPNs funktioniert das nicht. Und so können Sie das machen: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
4

Es gibt eine App namens VPN Auto-Connect (Link zum Mac App Store). Es ist 0,99 $.

Einmal gestartet, befindet es sich in Ihrer Menüleiste. Wenn Sie damit VPN "ein" schalten, wird ein VPN-Verbindungsprofil überwacht, das Sie in den Netzwerkeinstellungen von OS X eingerichtet haben, und sichergestellt, dass Sie immer mit dem VPN verbunden sind. Das Menüleistensymbol von VPN Auto-Connect enthält eine Liste aller von Ihnen definierten VPN-Verbindungen und lässt Sie auswählen, zu welcher Verbindung immer eine Verbindung hergestellt werden soll.

John
quelle
Willkommen bei Ask Different! Danke für deine Antwort, John! Können Sie weitere Informationen zu der App hinzufügen, mit der Sie verlinkt sind? Wie beantwortet es die Frage? Welche Besonderheiten machen es zur App, die das OP benötigt?
Daviesgeek
VPN Auto-Connect funktioniert mit IKEv2-VPNs. Und so können Sie das machen: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
0

Eine neue Option ist VPN Monitor im AppStore. Es ermöglicht weitere Anpassungen, z. B. die automatische Anmeldung, das Durchlaufen von VPN-Verbindungen usw. Mindestens OS X 10.9 Mavericks erforderlich.

n1000
quelle
0

Das Skript stellt die Verbindung zu einem unterbrochenen VPN-Dienst automatisch wieder her .

Ich hatte die Lösung von rjarvis2010 verwendet , war aber nicht ganz zufrieden damit.

Ich habe viele verschiedene VPN-Dienste, mit denen ich eine Verbindung herstelle. Daher wollte ich ein Skript, das alle VPNs, mit denen ich verbunden war, automatisch wieder verbindet.

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

Damit es für Sie funktioniert, müssen Sie ersetzen

  • Uni mit welchem ​​Namen auch immer Ihr Standort ist

Wenn Sie fertig sind, speichern Sie es als Anwendung und fügen Sie es in Ihre Anmeldeobjekte ein, und schon kann es losgehen.

Außerdem, und das ist wichtig, müssen Sie die PPP-Hooks wie in der Lösung von rjarvis2010 beschrieben einrichten

Außerdem würde ich empfehlen, dass Sie nicht versuchen, mehrere VPNs gleichzeitig zu verbinden. Um dieses Skript anzuhalten, müssen Sie es möglicherweise über den Aktivitätsmonitor beenden (da die Wiederholungsschleifen es zeitweise nicht zulassen, dass es externe Eingaben empfängt).

Francesco
quelle
0

Ich benutze einen anderen Ansatz, um meine VPN-Verbindung am Leben zu erhalten. Dazu muss ein sehr einfacher launchdDaemon ausgeführt werden, der es ermöglicht, die VPN-Verbindung aufrechtzuerhalten, ohne dass ein Benutzer angemeldet ist.

Erstellen Sie eine launchdplist-Datei vom Terminal aus:

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

und gib folgenden Inhalt ein:

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

Sie können den folgenden Befehl verwenden, um Ihren Daemon zu starten und zu testen:

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

Auf diese Weise wird ein Daemon für alle Benutzer ausgeführt. Die Verbindung wird nur versucht, wenn eine Internetverbindung verfügbar ist. Außerdem wird das VPN automatisch wiederhergestellt, wenn die Internetverbindung wiederhergestellt ist.

Bearbeiten:

Ich finde diese Methode am robustesten, da sie die automatische Herstellung einer VPN-Verbindung ermöglicht, bevor sich ein Benutzer anmeldet (nützlich für Server).

Updates für Yosemite (OSX 10.10)

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

Wird in Yosemite abgeschrieben. Sie können stattdessen Folgendes verwenden

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

Ebenfalls

networksetup -connectpppoeservice MyVPN

Funktioniert nicht mehr in Yosemite. Sie können dies stattdessen verwenden

scutil --nc start MyVPN
Pierre-O
quelle
scutil --nc listlistet meine VPN-Verbindung nicht auf, die über die Netzwerkeinstellungen angezeigt und verbunden werden kann.
Phil Pirozhkov
@philpirozhkov Dies funktioniert nicht mit IKEv2-VPNs. Und so können Sie das machen: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
0

Ich habe gesehen, dass es hier einige Antworten gibt, die Anmelde-Hooks verwenden, die in neueren Versionen von OS X zugunsten von Launch Agent und Launch Daemons veraltet sind.

Ich habe ein Skript erstellt und den Agenten gestartet. Der Agent ruft alle 30 Sekunden ein Shell-Skript auf und versucht, eine im VPN-Netzwerk statische IP-Adresse zu pingen. Wenn es diese IP nicht anpingen kann, wird Ihre VPN-Verbindung aktiviert.

Wenn Sie dies über eine Apple Script App getan haben, befindet sich das App-Symbol immer in Ihrem Dock. Ich bevorzuge es, wenn dies automatisch im Hintergrund ausgeführt wird.

Klonen Sie das unten stehende Projekt und befolgen Sie die Anweisungen in der Readme-Datei. Das Endergebnis ist ein Installationspaket, das eine Launch Agent-Plist-Datei in / Library / LaunchAgents / und ein Shell-Skript in / Library / Application Support / melonsmasher / speichert.

Stellen Sie sicher, dass Sie das Shell-Skript (auto-vpn) mit Ihrem VPN-Verbindungsnamen und einer IP-Adresse bearbeiten, die sich im VPN-Netzwerk befindet. Sie können das Ausführungsintervall in der plist-Datei (com.melonsmasher.autovpn.plist) ändern.

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

almyz125
quelle
-2

Das Schöne an AppleScripts ist, dass Sie fast alles damit machen können und es ist kostenlos. Der Nachteil ist, dass sie normalerweise nicht sehr reaktionsschnell sind (Abfragen in einem festen Zeitintervall) und keine Funktionen haben, die nur native MAC OS X-Apps haben können. Eine nette und neue VPN Auto Reconnect-App ist "VPN Monitor" im App Store. Sie stellt die Verbindung sofort wieder her, sobald eine VPN-Verbindung unterbrochen wird. Sie kann die Verbindung zu einem anderen VPN-Dienst wiederherstellen, wenn der bevorzugte Dienst ausfällt. Verfolgt Ihre Ausfallzeiten und verwendet ein Minimum an Systemressourcen, um im Hintergrund als Statusleistenanwendung ausgeführt zu werden. VPN-Monitor

Jos
quelle
2
Bitte werfen Sie einen Blick auf die FAQ, insbesondere auf den Teil über Eigenwerbung
nohillside