Mendapatkan VPN untuk terhubung kembali secara otomatis saat koneksi terputus

13

Saya menggunakan VPN bawaan pada Mac OS X 10.7.3. Ini IPSec, FWIW. Dari waktu ke waktu, ini terputus (mungkin masalah dengan server perusahaan saya). Apakah ada cara untuk mendapatkannya kembali secara otomatis? Kadang-kadang saya tidak memperhatikan untuk sementara waktu, yang agak mengganggu.

Andrew Ferrier
sumber

Jawaban:

9

Anda dapat menggunakan AppleScript berikut , simpan sebagai aplikasi dan atur menjadi agen (tidak ada ikon dok).

Script ini akan mengatur koneksi VPN ketika tidak ada. Karena itu, itu juga harus terhubung kembali segera setelah koneksi Anda turun. Anda dapat mengubah interval untuk memeriksa koneksi VPN Anda, ini 120 detik dalam skrip.

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

Saya telah menjelaskan cara mengatur ini dalam jawaban ini .

gentmatt
sumber
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
Itu tidak akan berfungsi dengan IKEv2 VPN. Inilah cara Anda dapat melakukannya: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
8

Saya membuat beberapa perubahan pada jawaban yang diberikan, karena jika sesuatu layak dilakukan, itu layak dilakukan ke tanah. Saya ingin menyambung kembali jika VPN dijatuhkan, tetapi TIDAK menyambung kembali jika VPN sengaja diputus. Solusi yang saya temukan adalah efektif dan tidak elegan.

Pertama saya menambahkan kait ke startup pppd dan shutdown untuk melacak status VPN yang diinginkan. File-file ini harus dimiliki oleh root, dan memiliki izin baca / eksekusi dunia ( 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: untuk OS X 10.9.5 dan di bawahnya

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

/ etc / ppp / ip-down: untuk OS X 10.10 ke atas

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

Kemudian dengan memodifikasi AppleScript di atas, saya dapat memeriksa variabel status '/ var / run / reconnect_vpn' untuk menentukan apakah akan membuat VPN kembali:

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

Seperti sebelumnya, ubah jalur set myConnection to the service "VPN"ke apa pun yang dipanggil VPN Anda. Juga, saat startup, file 'reconnect_vpn' tidak ada, jadi saya menambahkan boolean (startOnLogin) untuk dijadikan sebagai default ketika file tidak dapat ditemukan. Saya suka memulai segera, tetapi jika Anda tidak mengubahnya menjadi false.

Saya merasa bahwa jika Anda adalah tipe orang yang khusus tentang perilaku VPN, maka Anda juga tipe orang yang suka meraba-raba sampai Anda menemukan solusi dan karena itu jawaban ini tidak memiliki audiens. Tapi untuk jaga-jaga, ini dia. Semoga ini bisa membantu seseorang.

rjarvis2010
sumber
Itu tidak akan berfungsi dengan IKEv2 VPN. Inilah cara Anda dapat melakukannya: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
4

Ada aplikasi yang melakukannya dengan VPN Auto-Connect (tautan Mac App Store). Ini $ 0,99.

Setelah dimulai, ia tinggal di bilah menu Anda; ketika Anda menggunakannya untuk mengaktifkan VPN "on", itu akan memonitor profil koneksi VPN yang Anda atur di panel preferensi Jaringan OS X dan memastikan Anda selalu tetap terhubung dengannya. Ikon menu-bar VPN Auto-Connect menyediakan daftar semua koneksi VPN yang telah Anda tentukan dan memungkinkan Anda memilih yang mana untuk selalu terhubung.

John
sumber
Selamat Datang di Tanya Berbeda! Terima kasih atas jawaban Anda, John! Bisakah Anda menambahkan lebih banyak informasi tentang aplikasi yang Anda tautkan? Bagaimana cara menjawab pertanyaan? Fitur spesifik apa yang menjadikannya aplikasi yang dibutuhkan OP?
daviesgeek
VPN Auto-Connect bekerja dengan VPN IKEv2. Inilah cara Anda dapat melakukannya: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
0

Opsi baru adalah Monitor VPN yang tersedia di AppStore. Ini memungkinkan untuk lebih banyak penyesuaian, seperti login otomatis, bersepeda melalui koneksi VPN, dll. Setidaknya diperlukan OS X 10.9 Maverick.

n1000
sumber
0

Script sambungkan kembali otomatis setiap layanan VPN yang terjatuh.

Saya telah menggunakan rjarvis2010 's solusi tapi aku tidak cukup senang dengan itu.

Saya memiliki banyak layanan VPN berbeda yang saya sambungkan, jadi saya ingin skrip yang secara otomatis menyambungkan kembali VPN yang saya sambungkan.

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

Untuk membuatnya bekerja untuk Anda, Anda harus mengganti

  • Uni dengan apa pun nama lokasi Anda

Setelah selesai, simpan sebagai aplikasi dan letakkan di Item Login Anda dan Anda siap melakukannya.

Juga, dan ini penting, Anda perlu mengatur kait PPP seperti yang dijelaskan dalam rjarvis2010 's solusi

Juga, saya sarankan Anda tidak mencoba menghubungkan beberapa VPN ini secara bersamaan. Untuk menghentikan skrip ini, Anda mungkin perlu menghentikannya secara paksa melalui monitor aktivitas (karena loop berulang tidak mengizinkannya menerima input eksternal sesekali).

francesco
sumber
0

Saya menggunakan pendekatan berbeda untuk menjaga koneksi VPN saya tetap hidup. Ini melibatkan launchdmenjalankan daemon yang sangat sederhana yang memungkinkan menjaga koneksi VPN tanpa ada pengguna yang masuk (ini juga menghindari popup pemutusan VPN saat melanjutkan dari mode tidur).

buat launchdfile plist dari terminal:

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

dan masukkan konten berikut:

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

Anda dapat menggunakan perintah berikut untuk memulai daemon Anda dan menguji:

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

Dengan cara ini, Anda memiliki daemon yang berjalan untuk semua pengguna, koneksi dicoba hanya ketika koneksi internet tersedia. Juga, VPN terhubung kembali secara otomatis ketika koneksi internet kembali ...

Edit:

Saya menemukan metode ini paling kuat karena memungkinkan koneksi vpn dibuat secara otomatis, sebelum pengguna masuk (berguna untuk server).

Pembaruan untuk Yosemite (OSX 10.10)

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

Disusutkan dalam Yosemite. Anda dapat menggunakan yang berikut sebagai gantinya

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

Juga

networksetup -connectpppoeservice MyVPN

Tidak lagi bekerja di Yosemite. Anda bisa menggunakan ini sebagai gantinya

scutil --nc start MyVPN
pierre-o
sumber
scutil --nc listtidak mencantumkan koneksi VPN saya, yang terlihat dan dapat dihubungkan melalui pengaturan Jaringan.
phil pirozhkov
@ philpirozhkov Ini tidak akan berfungsi dengan IKEv2 VPN. Inilah cara Anda dapat melakukannya: matt.coneybeare.me/… -service-on-your-mac /
coneybeare
0

Saya melihat bahwa ada beberapa jawaban di sini yang menggunakan kait masuk, yang sudah usang dalam versi yang lebih baru dari OS X yang mendukung Launch Agent dan Launch Daemon.

Saya membuat skrip dan agen peluncuran. Agen memanggil skrip shell setiap 30 detik dan mencoba untuk melakukan ping alamat IP yang statis pada jaringan vpn. Jika tidak bisa melakukan ping IP itu, itu memungkinkan koneksi vpn Anda.

Jika Anda melakukan ini melalui Apple Script App, ikon aplikasi akan selalu ada di dock Anda. Saya lebih suka menjalankan ini secara otomatis di latar belakang.

Kloning proyek di bawah ini dan ikuti arahan di readme. Hasil akhirnya adalah paket penginstal yang akan menempatkan file daftar agen peluncuran di / Library / LaunchAgents / dan skrip shell di / Library / Dukungan Aplikasi / melonsmasher /.

Pastikan untuk mengedit skrip shell (auto-vpn) dengan nama koneksi VPN Anda dan alamat IP yang ada di jaringan VPN. Anda dapat mengubah interval run dalam file plist (com.melonsmasher.autovpn.plist).

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

almyz125
sumber
-2

Keindahan AppleScripts adalah Anda dapat melakukan hampir semua hal dengan itu dan gratis, downside adalah bahwa mereka biasanya tidak terlalu responsif (polling pada interval waktu yang tetap) dan kekurangan fitur yang hanya dimiliki oleh aplikasi MAC OS X asli. Aplikasi koneksi ulang VPN yang bagus dan baru adalah "VPN Monitor" di app store, terhubung kembali secara instan saat koneksi VPN turun, dapat terhubung kembali ke layanan VPN yang berbeda jika layanan yang diinginkan turun, terhubung saat start-up, melacak downtime Anda dan menggunakan sumber daya sistem minimum untuk berjalan di latar belakang sebagai aplikasi statusbar. Monitor VPN

Jos
sumber
2
Silakan lihat FAQ, terutama bagian tentang promosi diri
nohillside