ฉันใช้ VPN ในตัวบน Mac OS X 10.7.3 มันคือ IPSec, FWIW บางครั้งมันก็ตัดการเชื่อมต่อ (อาจมีปัญหากับเซิร์ฟเวอร์องค์กรของฉัน) มีวิธีการเชื่อมต่อใหม่โดยอัตโนมัติหรือไม่ บางครั้งฉันไม่สังเกตเห็นสักพักหนึ่งซึ่งค่อนข้างน่ารำคาญ
ฉันใช้ VPN ในตัวบน Mac OS X 10.7.3 มันคือ IPSec, FWIW บางครั้งมันก็ตัดการเชื่อมต่อ (อาจมีปัญหากับเซิร์ฟเวอร์องค์กรของฉัน) มีวิธีการเชื่อมต่อใหม่โดยอัตโนมัติหรือไม่ บางครั้งฉันไม่สังเกตเห็นสักพักหนึ่งซึ่งค่อนข้างน่ารำคาญ
คำตอบ:
คุณสามารถใช้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
ฉันอธิบายวิธีตั้งค่านี้ในคำตอบนี้
ฉันทำการเปลี่ยนแปลงบางอย่างกับคำตอบที่ให้ไว้เพราะถ้าสิ่งที่ควรค่าแก่การทำก็คุ้มค่าที่จะลงมือทำ ฉันต้องการเชื่อมต่ออีกครั้งหาก VPN หลุด แต่ไม่เชื่อมต่ออีกครั้งหาก VPN ถูกตัดการเชื่อมต่อโดยเจตนา วิธีแก้ปัญหาที่ฉันพบมีทั้งที่มีประสิทธิภาพและไม่เหมาะสม
ก่อนอื่นฉันเพิ่ม hooks ลงใน pppd startup และ shutdown เพื่อติดตามสถานะ 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: สำหรับ OS 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: สำหรับ OS 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 Auto-Connect (ลิงก์ Mac App Store) มันคือ $ 0.99
เมื่อเริ่มต้นมันจะอยู่ในแถบเมนูของคุณ เมื่อคุณใช้เพื่อเปิด VPN "เปิด" มันจะตรวจสอบโปรไฟล์การเชื่อมต่อ VPN ที่คุณตั้งค่าในบานหน้าต่างการตั้งค่าเครือข่ายของ OS X และให้แน่ใจว่าคุณยังคงเชื่อมต่ออยู่เสมอ ไอคอนแถบเมนูของ VPN Auto-Connect จะแสดงรายการการเชื่อมต่อ VPN ทั้งหมดที่คุณกำหนดไว้และให้คุณเลือกว่าจะใช้การเชื่อมต่อใด
ตัวเลือกใหม่คือการตรวจสอบ VPN ที่มีอยู่ใน AppStore อนุญาตให้ปรับแต่งเพิ่มเติมเช่นล็อกอินอัตโนมัติ, ขี่จักรยานผ่านการเชื่อมต่อ VPN, ฯลฯ อย่างน้อย OS X 10.9 Mavericks ที่ต้องการ
ผมเคยใช้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 หลาย ๆ ตัวพร้อมกัน ในการหยุดสคริปต์นี้คุณอาจต้องบังคับให้ออกจากหน้าจอตรวจสอบกิจกรรม (เนื่องจากการวนซ้ำซ้ำ ๆ จะไม่อนุญาตให้รับอินพุตภายนอกในบางครั้ง)
ฉันใช้วิธีการต่าง ๆ เพื่อให้การเชื่อมต่อ VPN ของฉันยังคงอยู่ สิ่งนี้เกี่ยวข้องกับการรับlaunchd
daemon ที่ใช้งานง่ายซึ่งอนุญาตให้รักษาการเชื่อมต่อ VPN โดยที่ผู้ใช้ไม่ได้เข้าสู่ระบบ (นี่ยังช่วยหลีกเลี่ยงป๊อปอัปขาดการเชื่อมต่อ VPN เมื่อกลับมาทำงานจากโหมดสลีป)
สร้างlaunchd
ไฟล์ plist จาก terminal:
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
ด้วยวิธีนี้คุณมี daemon ที่ทำงานสำหรับผู้ใช้ทั้งหมดพยายามเชื่อมต่อเฉพาะเมื่อมีการเชื่อมต่ออินเทอร์เน็ต 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 ของฉันซึ่งสามารถมองเห็นและเชื่อมต่อได้ผ่านการตั้งค่าเครือข่าย
ฉันเห็นว่ามีคำตอบเล็ก ๆ น้อย ๆ เกี่ยวกับที่นี่ที่ใช้ hooks hooks ซึ่งถูกคัดค้านในเวอร์ชั่นใหม่กว่าของ OS X เพื่อให้เป็น Agent Agent และ Launch Daemons
ฉันสร้างสคริปต์และตัวแทนเปิดตัว เอเจนต์เรียกใช้เชลล์สคริปต์ทุก ๆ 30 วินาทีและพยายามปิงที่อยู่ IP ที่เป็นแบบคงที่ในเครือข่าย vpn หากไม่สามารถ ping IP นั้นจะเปิดใช้งานการเชื่อมต่อ vpn ของคุณ
หากคุณทำสิ่งนี้ผ่านแอป Apple Script ไอคอนแอปจะอยู่ในแท่นชาร์จของคุณเสมอ ฉันชอบที่จะให้มันทำงานโดยอัตโนมัติในพื้นหลัง
โคลนโครงการด้านล่างและทำตามคำแนะนำใน readme ผลลัพธ์สุดท้ายคือแพ็คเกจตัวติดตั้งที่จะวางไฟล์ plist agent เริ่มต้นใน / Library / LaunchAgents / และเชลล์สคริปต์ใน / Library / Application Support / melonsmasher /
ตรวจสอบให้แน่ใจว่าได้แก้ไขเชลล์สคริปต์ (auto-vpn) ด้วยชื่อการเชื่อมต่อ VPN และที่อยู่ IP ที่อยู่ในเครือข่าย VPN คุณสามารถเปลี่ยนช่วงเวลาการรันในไฟล์ plist (com.melonsmasher.autovpn.plist)
ความสวยงามของ AppleScripts คือคุณสามารถทำอะไรได้เกือบทุกอย่างและฟรีข้อเสียคือโดยทั่วไปแล้วพวกเขาจะไม่ตอบสนองมากนัก (โพลในช่วงเวลาที่กำหนด) และขาดคุณสมบัติเฉพาะแอป MAC OS X เท่านั้นที่สามารถมีได้ แอป VPN ที่ดีและใหม่เชื่อมต่ออัตโนมัติคือ "การตรวจสอบ VPN" ในแอพสโตร์มันจะทำการเชื่อมต่อใหม่ทันทีที่การเชื่อมต่อ VPN ลดลงสามารถเชื่อมต่อกับบริการ VPN อื่นได้หากบริการที่ต้องการไม่ทำงานเชื่อมต่อเมื่อเริ่มต้น ติดตามการหยุดทำงานของคุณและใช้ทรัพยากรระบบขั้นต่ำในการทำงานในพื้นหลังเป็นแอปพลิเคชันแถบสถานะ การตรวจสอบ 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)