รับ 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

ไม่สามารถใช้งานกับ IKEv2 VPN ได้ นี่คือวิธีที่คุณสามารถทำได้: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

8

ฉันทำการเปลี่ยนแปลงบางอย่างกับคำตอบที่ให้ไว้เพราะถ้าสิ่งที่ควรค่าแก่การทำก็คุ้มค่าที่จะลงมือทำ ฉันต้องการเชื่อมต่ออีกครั้งหาก 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 คุณก็เป็นคนที่ชอบคลำหาจนกระทั่งคุณพบทางออกดังนั้นคำตอบนี้จึงไม่มีผู้ชม แต่ในกรณีที่นี่มันเป็น หวังว่าจะช่วยใครซักคน


ไม่สามารถใช้งานกับ IKEv2 VPN ได้ นี่คือวิธีที่คุณสามารถทำได้: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

4

มีแอพที่เรียกว่าVPN Auto-Connect (ลิงก์ Mac App Store) มันคือ $ 0.99

เมื่อเริ่มต้นมันจะอยู่ในแถบเมนูของคุณ เมื่อคุณใช้เพื่อเปิด VPN "เปิด" มันจะตรวจสอบโปรไฟล์การเชื่อมต่อ VPN ที่คุณตั้งค่าในบานหน้าต่างการตั้งค่าเครือข่ายของ OS X และให้แน่ใจว่าคุณยังคงเชื่อมต่ออยู่เสมอ ไอคอนแถบเมนูของ VPN Auto-Connect จะแสดงรายการการเชื่อมต่อ VPN ทั้งหมดที่คุณกำหนดไว้และให้คุณเลือกว่าจะใช้การเชื่อมต่อใด


ยินดีต้อนรับสู่ถามที่แตกต่างกัน! ขอบคุณสำหรับคำตอบของคุณจอห์น! คุณสามารถเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับแอพที่คุณลิงก์ไปได้หรือไม่? มันตอบคำถามได้อย่างไร ฟีเจอร์เฉพาะทำให้แอพที่ OP ต้องการหรือไม่
daviesgeek

VPN เชื่อมต่ออัตโนมัติทำงานร่วมกับ IKEv2 VPN นี่คือวิธีที่คุณสามารถทำได้: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

0

ตัวเลือกใหม่คือการตรวจสอบ VPN ที่มีอยู่ใน 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 ของฉันยังคงอยู่ สิ่งนี้เกี่ยวข้องกับการรับlaunchddaemon ที่ใช้งานง่ายซึ่งอนุญาตให้รักษาการเชื่อมต่อ 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 ของฉันซึ่งสามารถมองเห็นและเชื่อมต่อได้ผ่านการตั้งค่าเครือข่าย
phil pirozhkov

@philpirozhkov สิ่งนี้จะไม่ทำงานกับ IKEv2 VPN นี่คือวิธีที่คุณสามารถทำได้: matt.coneybeare.me/… -service -on-your-mac /
coneybeare

0

ฉันเห็นว่ามีคำตอบเล็ก ๆ น้อย ๆ เกี่ยวกับที่นี่ที่ใช้ 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)

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


-2

ความสวยงามของ AppleScripts คือคุณสามารถทำอะไรได้เกือบทุกอย่างและฟรีข้อเสียคือโดยทั่วไปแล้วพวกเขาจะไม่ตอบสนองมากนัก (โพลในช่วงเวลาที่กำหนด) และขาดคุณสมบัติเฉพาะแอป MAC OS X เท่านั้นที่สามารถมีได้ แอป VPN ที่ดีและใหม่เชื่อมต่ออัตโนมัติคือ "การตรวจสอบ VPN" ในแอพสโตร์มันจะทำการเชื่อมต่อใหม่ทันทีที่การเชื่อมต่อ VPN ลดลงสามารถเชื่อมต่อกับบริการ VPN อื่นได้หากบริการที่ต้องการไม่ทำงานเชื่อมต่อเมื่อเริ่มต้น ติดตามการหยุดทำงานของคุณและใช้ทรัพยากรระบบขั้นต่ำในการทำงานในพื้นหลังเป็นแอปพลิเคชันแถบสถานะ การตรวจสอบ VPN


2
โปรดดูคำถามที่พบบ่อยโดยเฉพาะส่วนที่เกี่ยวกับการโปรโมตตัวเอง
nohillside
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.