Nawiązywanie połączenia VPN z automatycznym ponownym połączeniem po zerwaniu połączenia

13

Korzystam z wbudowanej sieci VPN w systemie Mac OS X 10.7.3. To IPSec, FWIW. Od czasu do czasu rozłącza się (prawdopodobnie problem z moim serwerem korporacyjnym). Czy istnieje sposób na automatyczne ponowne połączenie? Czasami nie zauważam przez chwilę, co jest trochę denerwujące.

Andrew Ferrier
źródło

Odpowiedzi:

9

Możesz użyć następującego AppleScript , zapisać go jako aplikację i ustawić go jako agenta (bez ikony dokowania).

Ten skrypt skonfiguruje połączenie VPN, gdy nie będzie. Dlatego powinien również ponownie połączyć się wkrótce po zerwaniu połączenia. Możesz zmienić interwał, aby sprawdzić połączenie VPN, w skrypcie jest to 120 sekund.

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

W tej odpowiedzi wyjaśniłem, jak to ustawić .

gentmatt
źródło
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
To nie będzie działać z VPN IKEv2. Oto jak możesz to zrobić: matt.coneybeare.me/… -service-on-your-mac /
coneybeare 30.09.17
8

Wprowadziłem kilka zmian w podanej odpowiedzi, ponieważ jeśli coś jest warte zrobienia, warto zrobić to w ziemię. Chciałem połączyć się ponownie, jeśli VPN zostanie zerwany, ale NIE ponownie, jeśli VPN został celowo odłączony. Rozwiązanie, które wymyśliłem, było zarówno skuteczne, jak i nieeleganckie.

Najpierw dodałem haki do uruchamiania i zamykania pppd, aby śledzić pożądany stan VPN. Pliki te powinny należeć do roota i mieć światowe uprawnienia do odczytu / wykonywania ( 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: dla OS X 10.9.5 i niższych

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

/ etc / ppp / ip-down: dla OS X 10.10 i nowszych

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

Następnie, modyfikując powyższy AppleScript, byłem w stanie sprawdzić zmienną statusu „/ var / run / reconnect_vpn”, aby ustalić, czy przywrócić 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

Tak jak poprzednio, zmień linię set myConnection to the service "VPN"na dowolną nazwę VPN. Ponadto podczas uruchamiania plik „reconnect_vpn” nie istnieje, więc dodałem wartość logiczną (startOnLogin), która ma służyć jako domyślna, gdy nie można znaleźć pliku. Lubię zaczynać od razu, ale jeśli nie, zmień to na false.

Mam wrażenie, że jeśli jesteś typem osoby, która szczególnie dotyczy zachowania VPN, to także jesteś osobą, która lubi grzebać, dopóki nie znajdziesz rozwiązania, a zatem ta odpowiedź nie ma odbiorców. Ale na wszelki wypadek, oto jest. Mam nadzieję, że to komuś pomoże.

rjarvis2010
źródło
To nie będzie działać z VPN IKEv2. Oto jak możesz to zrobić: matt.coneybeare.me/… -service-on-your-mac /
coneybeare 30.09.17
4

Istnieje aplikacja o nazwie VPN Auto-Connect (link do Mac App Store). To 0,99 $.

Po uruchomieniu znajduje się na pasku menu; gdy użyjesz go do włączenia VPN, monitoruje on profil połączenia VPN skonfigurowany w okienku preferencji sieci OS X i zapewnia, że ​​zawsze będziesz z nim połączony. Ikona paska menu VPN Auto-Connect zawiera listę wszystkich zdefiniowanych połączeń VPN i pozwala wybrać, z którym zawsze chcesz się połączyć.

Jan
źródło
Witamy, aby zapytać inaczej! Dzięki za odpowiedź, John! Czy możesz dodać więcej informacji o połączonej aplikacji? Jak odpowiada na pytanie? Jakie szczególne cechy sprawiają, że jest to aplikacja, której potrzebuje OP?
daviesgeek
VPN Auto-Connect działa z VPN IKEv2. Oto jak możesz to zrobić: matt.coneybeare.me/… -service-on-your-mac /
coneybeare 30.09.17
0

Nową opcją jest VPN Monitor dostępny w AppStore. Pozwala to na większą personalizację, taką jak automatyczne logowanie, cykliczne połączenia VPN itp. Wymagany jest przynajmniej OS X 10.9 Mavericks.

n1000
źródło
0

Skrypt automatycznie łączy się ponownie z każdą zrzuconą usługą VPN.

Korzystałem z rozwiązania rjarvis2010 , ale nie byłem z tego zadowolony.

Mam wiele różnych usług VPN, z którymi się łączę, więc chciałem skryptu, który automatycznie ponownie połączy się z każdą VPN, z którą jestem podłączony.

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

Aby działało to dla Ciebie, musisz wymienić

  • Uni bez względu na nazwę Twojej lokalizacji

Gdy skończysz, zapisz go jako aplikację i umieść go w elementach logowania i możesz zacząć.

Również i to jest ważne, trzeba założyć haki PPP, jak opisano w rjarvis2010 „s rozwiązanie

Ponadto zalecam, aby nie próbować łączyć wielu sieci VPN jednocześnie. Aby zatrzymać ten skrypt, może być konieczne wymuszenie wyjścia z niego przez monitor aktywności (ponieważ pętle powtarzania nie pozwalają mu czasami odbierać danych zewnętrznych).

francesco
źródło
0

Używam innego podejścia, aby utrzymać połączenie VPN przy życiu. Wiąże się to z launchduruchomieniem bardzo prostego demona, który pozwala na utrzymanie połączenia VPN bez zalogowania użytkownika (pozwala to również uniknąć wyskakujących okienek rozłączenia VPN po wznowieniu z trybu uśpienia).

utwórz launchdplik plist z terminala:

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

i wprowadź następującą treść:

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

Możesz użyć następującego polecenia, aby uruchomić demona i przetestować:

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

W ten sposób masz uruchomionego demona dla wszystkich użytkowników, połączenie próbowano tylko wtedy, gdy połączenie internetowe jest dostępne. Ponadto VPN jest automatycznie łączone ponownie, gdy połączenie internetowe zostanie przywrócone…

Edytować:

Uważam tę metodę za najbardziej niezawodną, ​​ponieważ pozwala ona na automatyczne nawiązanie połączenia VPN, zanim użytkownik się zaloguje (przydatne dla serwerów).

Aktualizacje Yosemite (OSX 10.10)

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

Jest amortyzowany w Yosemite. Zamiast tego możesz użyć następujących

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

Również

networksetup -connectpppoeservice MyVPN

Nie działa już w Yosemite. Możesz użyć tego zamiast tego

scutil --nc start MyVPN
pierre-o
źródło
scutil --nc listnie wyświetla mojego połączenia VPN, które można zobaczyć i które można podłączyć za pomocą ustawień sieci.
phil pirozhkov
@philpirozhkov To nie będzie działać z VPN IKEv2. Oto jak możesz to zrobić: matt.coneybeare.me/… -service-on-your-mac /
coneybeare 30.09.17
0

Widziałem, że jest tu kilka odpowiedzi, które używają haków logowania, są one przestarzałe w nowszych wersjach OS X na rzecz Launch Agent i Launch Daemons.

Utworzyłem skrypt i uruchomiłem agenta. Agent wywołuje skrypt powłoki co 30 sekund i próbuje pingować adres IP, który jest statyczny w sieci VPN. Jeśli nie może pingować tego adresu IP, umożliwia połączenie VPN.

Jeśli zrobiłeś to za pomocą aplikacji Apple Script, ikona aplikacji zawsze będzie znajdować się w doku. Wolę, aby działało to automatycznie w tle.

Sklonuj poniższy projekt i postępuj zgodnie ze wskazówkami w pliku Readme. Wynikiem końcowym jest pakiet instalatora, który umieści plik plist agenta uruchamiania w / Library / LaunchAgents / i skrypt powłoki w / Library / Application Support / melonsmasher /.

Pamiętaj, aby edytować skrypt powłoki (auto-VPN) z nazwą połączenia VPN i adresem IP, który znajduje się w sieci VPN. Możesz zmienić interwał uruchamiania w pliku plist (com.melonsmasher.autovpn.plist).

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

almyz125
źródło
-2

Zaletą AppleScripts jest to, że możesz zrobić z nim prawie wszystko i jest za darmo, wadą jest to, że zwykle nie są one bardzo responsywne (odpytywanie w ustalonym przedziale czasu) i brakuje funkcji, które mogą mieć tylko natywne aplikacje MAC OS X. Ładna i nowa aplikacja do automatycznego ponownego łączenia VPN to „Monitor VPN” w sklepie z aplikacjami. Łączy się ona natychmiast po zerwaniu połączenia VPN, jest w stanie ponownie połączyć się z inną usługą VPN, jeśli preferowana usługa nie działa, łączy się przy uruchomieniu, śledzi czas przestoju i zużywa minimum zasobów systemowych do działania w tle jako aplikacja na pasku stanu. Monitor VPN

Jos
źródło
2
Zapoznaj się z często zadawanymi pytaniami, w szczególności z częścią dotyczącą autopromocji
nohillside