Отримання VPN до автоматичного підключення при падінні з'єднання


13

Я використовую вбудований VPN на Mac OS X 10.7.3. Це IPSec, FWIW. Час від часу він відключається (можливо, проблема з моїм корпоративним сервером). Чи є спосіб отримати його для автоматичного підключення? Іноді я деякий час не помічаю, що трохи дратує.

Відповіді:


9

Ви можете використовувати наступний AppleScript , зберегти його як додаток і встановити його як агент (без піктограми дока).

Цей сценарій встановить VPN-з'єднання, коли його немає. Тому він також повинен підключитися незабаром після того, як ваше з'єднання перестане. Ви можете змінити інтервал, щоб перевірити VPN-з'єднання, це 120 секунд у сценарії.

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

Я пояснив, як це зробити у цій відповіді .


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

Це не працюватиме з VPN-серверами IKEv2. Ось як це можна зробити: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

8

Я внесла деякі зміни до наданої відповіді, тому що якщо щось варте того, то варто зайнятися землею. Я хотів знову підключитися, якщо VPN було скинуто, але НЕ повторно підключитися, якщо VPN було навмисно відключено. Рішення, яке я придумав, було і ефективним, і неелегантним.

Спочатку я додав гачки до запуску та відключення pppd, щоб відслідковувати бажаний стан VPN. Ці файли повинні належати root та мати дозволи для читання / виконання у світі ( 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: для ОС X 10.9.5 та новіших версій

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

/ etc / ppp / ip-down: для ОС X 10.10 і вище

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

Потім, змінивши AppleScript вище, я зміг перевірити змінну стану '/ var / run / reconnect_vpn', щоб визначити, чи потрібно відновити 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

Як і раніше, змініть рядок set myConnection to the service "VPN"на те, що називається вашим VPN. Крім того, при запуску файл 'reconnect_vpn' не існує, тому я додав булева (startOnLogin), яка слугувала б за замовчуванням, коли файл не вдалося знайти. Мені подобається починати негайно, але якщо ви цього не зробите, то замініть його на помилкове.

У мене таке відчуття, що якщо ти така людина, це стосується поведінки VPN, то ти також така людина, котра любить розгулюватись, поки не знайдеш рішення, і тому ця відповідь не має аудиторії. Але про всяк випадок, ось воно. Сподіваюся, це комусь допоможе.


Це не працюватиме з VPN-серверами IKEv2. Ось як це можна зробити: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

4

Існує додаток, який називається автоматичним підключенням до VPN (посилання на магазин додатків Mac). Це $ 0,99.

Після запуску він знаходиться у рядку меню; коли ви використовуєте його для включення VPN "увімкнено", він буде контролювати профіль з'єднання VPN, який ви створили на панелі мережевих налаштувань OS X, і гарантуватиме, що ви завжди залишатиметесь з ним підключеним. Піктограма панелі меню VPN Auto-Connect надає список усіх визначених вами VPN-з'єднань і дозволяє вибрати, до якого завжди підключитися.


Ласкаво просимо в Інші! Дякую за вашу відповідь, Джон! Чи можете ви додати більше інформації про додаток, з яким ви пов’язані? Як це відповідає на запитання? Які конкретні особливості роблять це додатком, який потрібен ОП?
daviesgeek

Автоматичне з'єднання VPN працює з VPN-серверами IKEv2. Ось як це можна зробити: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

0

Новий варіант - VPN Monitor, доступний у AppStore. Це дозволяє зробити більше налаштувань, таких як автоматичний вхід у систему, проїзд через VPN-з'єднання тощо. Принаймні OS X 10.9 потрібні Mavericks.


0

Сценарій автоматично під’єднає будь - яку скинуту службу VPN.

Я використовував rjarvis2010 «s рішення , але я був не зовсім задоволений.

У мене є безліч різних служб VPN, до яких я підключаюся, тому я хотів сценарій, який автоматично повторно з'єднав би всі VPN, до яких я був підключений.

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

Щоб це працювало для вас, вам потрібно замінити

  • Uni з будь-яким прізвищем вашого місцезнаходження

Щойно ви закінчите, збережіть його як додаток і помістіть його у свої елементи входу, і ви готові йти.

Крім того , і це дуже важливо, що вам потрібно налаштувати гачки PPP , як описано в rjarvis2010 «s рішення

Також я рекомендую вам не намагатися одночасно підключати кілька VPN. Щоб зупинити цей скрипт, можливо, вам доведеться змусити його вийти через монітор активності (оскільки повторні цикли не дозволяють йому отримувати зовнішній вхід часом).


0

Я використовую інший підхід, щоб підтримувати своє VPN-з'єднання живим. Це включає в себе отримання дуже простого launchdзапуску демона, який дозволяє підтримувати VPN-з'єднання без жодного входу користувача (це також дозволяє уникнути спливаючих вікон відключення VPN при поновленні з сплячого режиму).

створити launchdфайл-пліст із терміналу:

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

і введіть наступний вміст:

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

Ви можете використовувати наступну команду для запуску демона і тесту:

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

Таким чином, у вас працює демон для всіх користувачів, спроба підключення лише тоді, коли доступне підключення до Інтернету. Крім того, VPN підключається автоматично, коли з'єднання з Інтернетом повертається…

Редагувати:

Я вважаю цей метод найбільш надійним, оскільки він дозволяє автоматично з’єднувати vpn, перш ніж користувач увійде в систему (корисно для серверів).

Оновлення для Yosemite (OSX 10.10)

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

Амортизується в Йосеміті. Ви можете використовувати наступне

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

Також

networksetup -connectpppoeservice MyVPN

Більше не працює в Йосеміті. Ви можете використовувати це замість цього

scutil --nc start MyVPN

scutil --nc listне відображає моє VPN-з'єднання, яке бачиться та підключається через мережеві настройки.
phil pirozhkov

@philpirozhkov Це не працюватиме з VPN-серверами IKEv2. Ось як це можна зробити: matt.coneybeare.me/… -service-on-your-mac /
coneybeare

0

Я побачив, що тут є кілька відповідей, які використовують гачки для входу, вони застаріли в нових версіях OS X на користь Launch Agent і Launch Daemons.

Я створив сценарій та запуск агента. Агент викликає скрипт оболонки кожні 30 секунд і намагається пінг IP-адреси, яка є статичною у мережі vpn. Якщо він не може пінг цього IP-адреси, він дозволяє вам підключити vpn.

Якщо ви зробили це через додаток Apple Script, піктограма програми завжди буде у вашому доку. Я вважаю за краще, щоб це працювало автоматично у фоновому режимі.

Клоніруйте проект нижче та дотримуйтесь вказівок у readme. Кінцевим результатом є пакет встановлення, який розмістить файл запуску агента запуску в / Бібліотека / LaunchAgents / та сценарій оболонки в / Бібліотека / Підтримка програм / melonsmasher /.

Не забудьте відредагувати скрипт оболонки (auto-vpn) із своїм іменем з'єднання VPN та IP-адресою, що знаходиться у мережі VPN. Ви можете змінити інтервал виконання у файлі plist (com.melonsmasher.autovpn.plist).

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


-2

Краса AppleScripts полягає в тому, що ви можете робити з цим майже все, і це безкоштовно, але мінус полягає в тому, що вони, як правило, не дуже чуйні (опитування через фіксований інтервал часу) і не мають можливостей, які можуть мати лише рідні програми MAC OS X. Приємним і новим додатком для автоматичного підключення VPN є "Монітор VPN" у магазині додатків, він підключається миттєво, коли впаде VPN-з'єднання, зможе знову підключитися до іншої служби VPN, якщо краща послуга відключена, підключається при запуску, стежить за вашим простоєм і використовує мінімум системних ресурсів для запуску у фоновому режимі як додаток панелі стану. Монітор VPN


2
Перегляньте поширені запитання, особливо частину про саморекламу
nohillside
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.