Bắt VPN để tự động kết nối lại khi thả kết nối


13

Tôi sử dụng VPN tích hợp trên Mac OS X 10.7.3. Đó là IPSec, FWIW. Thỉnh thoảng, nó ngắt kết nối (có thể là sự cố với máy chủ công ty của tôi). Có cách nào để làm cho nó tự động kết nối lại? Đôi khi tôi không để ý một lúc, điều này hơi khó chịu.

Câu trả lời:


9

Bạn có thể sử dụng AppleScript sau , lưu nó dưới dạng một ứng dụng và đặt nó thành một tác nhân (không có biểu tượng dock).

Kịch bản này sẽ thiết lập kết nối VPN khi không có. Do đó, nó cũng sẽ kết nối lại ngay sau khi kết nối của bạn bị rớt. Bạn có thể thay đổi khoảng thời gian để kiểm tra kết nối VPN của mình, đó là 120 giây trong tập lệnh.

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

Tôi đã giải thích làm thế nào để thiết lập điều này trong câu trả lời này .


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

Điều đó sẽ không hoạt động với VPN IKEv2. Đây là cách bạn có thể làm điều đó: matt.coneybeare.me/... -service-on--mac của bạn /
coneybeare

8

Tôi đã thực hiện một số thay đổi cho câu trả lời được cung cấp, bởi vì nếu điều gì đó đáng làm thì nó đáng để thực hiện. Tôi muốn kết nối lại nếu VPN bị hủy, nhưng KHÔNG kết nối lại nếu VPN bị ngắt kết nối có chủ ý. Giải pháp tôi đưa ra là cả hiệu quả và không phù hợp.

Đầu tiên tôi đã thêm móc vào khởi động và tắt máy pppd để theo dõi trạng thái VPN mong muốn. Các tệp này phải được sở hữu bởi root và có quyền đọc / thực thi thế giới ( 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: cho OS X 10.9.5 trở xuống

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

/ etc / ppp / ip-down: cho OS X 10.10 trở lên

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

Sau đó, bằng cách sửa đổi AppleScript ở trên, tôi có thể kiểm tra biến trạng thái '/ var / run / reconnect_vpn' để xác định xem có nên đưa VPN trở lại hay không:

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

Như trước đây, thay đổi dòng set myConnection to the service "VPN"thành bất cứ điều gì VPN của bạn được gọi. Ngoài ra, khi khởi động, tệp 'recconnectect_vpn' không tồn tại, vì vậy tôi đã thêm một boolean (startOnLogin) để phục vụ như mặc định khi không thể tìm thấy tệp. Tôi muốn bắt đầu ngay lập tức, nhưng nếu bạn không thay đổi nó thành sai.

Tôi có cảm giác rằng nếu bạn là kiểu người đặc biệt về hành vi VPN, thì bạn cũng là kiểu người thích dò dẫm cho đến khi bạn tìm ra giải pháp và do đó câu trả lời này không có đối tượng. Nhưng chỉ trong trường hợp, đây là. Hy vọng nó sẽ giúp được ai đó.


Điều đó sẽ không hoạt động với VPN IKEv2. Đây là cách bạn có thể làm điều đó: matt.coneybeare.me/ Từ -dịch vụ-on-your-mac /
coneybeare

4

Có một ứng dụng gọi là VPN Auto-Connect (liên kết Mac App Store). Đó là 0,99 đô la.

Sau khi bắt đầu, nó sống trong thanh menu của bạn; khi bạn sử dụng nó để bật "bật" VPN, nó sẽ theo dõi cấu hình kết nối VPN mà bạn đã thiết lập trong ngăn tùy chọn Mạng của OS X và đảm bảo bạn luôn duy trì kết nối với nó. Biểu tượng thanh menu của VPN Auto-Connect cung cấp danh sách tất cả các kết nối VPN bạn đã xác định và cho phép bạn chọn kết nối nào luôn luôn kết nối.


Chào mừng bạn đến hỏi khác nhau! Cảm ơn câu trả lời của bạn, John! Bạn có thể thêm thông tin về ứng dụng bạn liên kết không? Làm thế nào để nó trả lời câu hỏi? Những tính năng cụ thể nào làm cho nó trở thành ứng dụng mà OP cần?
daviesgeek

VPN Tự động kết nối hoạt động với VPN IKEv2. Đây là cách bạn có thể làm điều đó: matt.coneybeare.me/ Từ -dịch vụ-on-your-mac /
coneybeare

0

Một tùy chọn mới là VPN Monitor có sẵn trên AppStore. Nó cho phép tùy chỉnh nhiều hơn, như đăng nhập tự động, đạp xe qua các kết nối VPN, v.v. Ít nhất phải có OS X 10.9 Mavericks.


0

Script tự động kết nối lại bất kỳ dịch vụ VPN bị mất.

Tôi đã sử dụng giải pháp của rjarvis2010 nhưng tôi không hài lòng với nó.

Tôi có nhiều dịch vụ VPN khác nhau mà tôi kết nối, vì vậy tôi muốn một tập lệnh sẽ tự động kết nối lại bất kỳ VPN nào tôi đã kết nối.

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

Để làm cho nó hoạt động cho bạn, bạn cần phải thay thế

  • Uni với tên của vị trí của bạn là gì

Khi bạn đã hoàn tất, hãy lưu nó dưới dạng một ứng dụng và đặt nó vào Mục Đăng nhập của bạn và bạn sẽ thấy ổn.

Ngoài ra, và điều này rất quan trọng, bạn cần thiết lập các móc nối PPP như được mô tả trong giải pháp của rjarvis2010

Ngoài ra, tôi khuyên bạn không nên thử kết nối nhiều VPN này cùng một lúc. Để dừng tập lệnh này, bạn có thể cần phải thoát khỏi tập lệnh theo dõi hoạt động (vì các vòng lặp lặp lại không cho phép nó nhận đầu vào bên ngoài vào các thời điểm).


0

Tôi đang sử dụng các phương pháp khác nhau để duy trì kết nối VPN của mình. Điều này liên quan đến việc chạy một launchdtrình nền rất đơn giản cho phép duy trì kết nối VPN mà không cần bất kỳ người dùng nào đăng nhập (điều này cũng tránh các cửa sổ bật lên ngắt kết nối VPN khi tiếp tục từ chế độ ngủ).

tạo một launchdtập tin plist từ thiết bị đầu cuối:

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

và nhập nội dung sau:

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

Bạn có thể sử dụng lệnh sau để bắt đầu trình nền và kiểm tra:

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

Bằng cách này, bạn có một trình nền chạy cho tất cả người dùng, chỉ thử kết nối khi có kết nối internet. Ngoài ra, VPN được kết nối lại tự động khi kết nối internet trở lại

Biên tập:

Tôi thấy phương pháp này mạnh mẽ nhất vì nó cho phép kết nối vpn được thực hiện tự động, trước khi người dùng đăng nhập (hữu ích cho máy chủ).

Cập nhật cho Yosemite (OSX 10.10)

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

Được khấu hao ở Yosemite. Bạn có thể sử dụng như sau thay thế

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

Cũng thế

networksetup -connectpppoeservice MyVPN

Không còn hoạt động ở Yosemite. Bạn có thể sử dụng cái này thay thế

scutil --nc start MyVPN

scutil --nc listkhông liệt kê kết nối VPN của tôi, được nhìn thấy và có thể kết nối thông qua cài đặt Mạng.
phil pirozhkov

@philpirozhkov Điều này sẽ không hoạt động với VPN IKEv2. Đây là cách bạn có thể làm điều đó: matt.coneybeare.me/ Từ -dịch vụ-on-your-mac /
coneybeare

0

Tôi thấy rằng có một vài câu trả lời ở đây sử dụng hook đăng nhập, những câu trả lời không được chấp nhận trong các phiên bản OS X mới hơn có lợi cho Launch Agent và Launch Daemons.

Tôi đã tạo ra một kịch bản và khởi động tác nhân. Tác nhân gọi một kịch bản shell cứ sau 30 giây và cố gắng ping một địa chỉ IP tĩnh trên mạng vpn. Nếu nó không thể ping IP đó, nó cho phép kết nối vpn của bạn.

Nếu bạn đã làm điều này thông qua Ứng dụng Apple Script, biểu tượng ứng dụng sẽ luôn ở trong dock của bạn. Tôi thích có cái này chạy tự động trong nền.

Nhân bản dự án dưới đây và làm theo hướng dẫn trong readme. Kết quả cuối cùng là một gói trình cài đặt sẽ đặt tệp plist tác nhân khởi chạy vào / Library / LaunchAgents / và một tập lệnh shell trong / Library / Application Support / melonsmasher /.

Đảm bảo chỉnh sửa tập lệnh shell (auto-vpn) bằng tên kết nối VPN của bạn và địa chỉ IP có trên mạng VPN. Bạn có thể thay đổi khoảng thời gian chạy trong tệp plist (com.melonsmasher.autovpn.plist).

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


-2

Cái hay của AppleScripts là bạn có thể làm hầu hết mọi thứ với nó và nó miễn phí, nhược điểm là chúng thường không phản hồi nhanh (bỏ phiếu trong một khoảng thời gian cố định) và thiếu các tính năng chỉ có các ứng dụng MAC OS X gốc. Một ứng dụng kết nối lại tự động VPN mới và đẹp là "Màn hình VPN" trong cửa hàng ứng dụng, nó kết nối lại ngay lập tức khi kết nối VPN bị rớt, có thể kết nối lại với một dịch vụ VPN khác nếu dịch vụ ưa thích bị tắt, kết nối khi khởi động, theo dõi thời gian chết của bạn và sử dụng tối thiểu tài nguyên hệ thống để chạy trong nền dưới dạng ứng dụng trên thanh trạng thái. Màn hình VPN


2
Vui lòng xem Câu hỏi thường gặp, đặc biệt là phần về tự quảng cáo
nohillside
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.