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.
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:
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 .
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 đó.
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.
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.
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).
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 launchd
trì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 launchd
tậ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 list
khô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.
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).
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
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)