接続ドロップ時にVPNを自動再接続する


13

Mac OS X 10.7.3でビルトインVPNを使用しています。IPSec、FWIWです。時々、それは切断します(おそらく私の企業サーバーの問題)。自動的に再接続する方法はありますか?しばらく気づかないこともありますが、これはちょっと面倒です。

回答:


9

次のAppleScriptを使用して、アプリケーションとして保存し、エージェント(ドックアイコンなし)に設定できます。

このスクリプトは、VPN接続がない場合に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)
フィルピロシコフ

IKEv2 VPNでは機能しません。方法は次のとおりです。matt.coneybeare.me/ -service-on-your-mac /
coneybeare

8

提供された回答にいくつか変更を加えました。何かする価値がある場合、それは地面にやる価値があるからです。VPNがドロップされた場合は再接続したかったのですが、VPNが意図的に切断された場合は再接続しませんでした。私が思いついた解決策は効果的で洗練されていませんでした。

最初に、目的のVPN状態を追跡するために、pppdの起動とシャットダウンにフックを追加しました。これらのファイルはルートが所有し、全ユーザーの読み取り/実行権限(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)を追加しました。すぐに開始したいのですが、そうでない場合はfalseに変更します。

あなたがそのようなVPNの行動にこだわる人なら、あなたは解決策を見つけるまで手探りするのが好きな人であり、したがってこの答えには聴衆がいないと感じています。しかし、念のため、ここにあります。それが誰かを助けることを願っています。


IKEv2 VPNでは機能しません。ここではあなたがそれを行うことができます方法は次のとおりです。matt.coneybeare.me/... -service・オン・ご-MAC /
coneybeare

4

VPN Auto-Connect(Mac App Storeリンク)と呼ばれるアプリがあります。それは0.99ドルです。

開始すると、メニューバーに表示されます。これを使用してVPNを「オン」にすると、OS Xの[ネットワーク]設定ペインで設定したVPN接続プロファイルが監視され、常に接続された状態が維持されます。VPN Auto-Connectのメニューバーアイコンは、定義したすべてのVPN接続のリストを提供し、常に接続するVPN接続を選択できます。


Ask Differentへようこそ!ジョン、答えてくれてありがとう!リンクしたアプリに関する情報を追加できますか?それは質問にどのように答えますか?OPが必要とするアプリとなる特定の機能は何ですか?
-daviesgeek

VPN自動接続はIKEv2 VPNで機能します。ここではあなたがそれを行うことができます方法は次のとおりです。matt.coneybeare.me/... -service・オン・ご-MAC /
coneybeare

0

新しいオプションは、AppStoreで利用可能なVPNモニターです。自動ログイン、VPN接続の循環など、より多くのカスタマイズが可能です。少なくともOS X 10.9 Mavericksが必要です。


0

スクリプトはドロップされたVPNサービスを自動再接続します。

rjarvis2010ソリューションを使用していましたが、満足していませんでした。

接続するさまざまな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 あなたの場所の名前が何であれ

完了したら、アプリケーションとして保存し、ログインアイテムに配置して、準備は完了です。

また、これは重要です。rjarvis2010ソリューションで説明されているように、PPPフックを設定する必要があります

また、複数のVPNを同時に接続することはお勧めしません。このスクリプトを停止するには、アクティビティモニターを使用して強制的に終了する必要がある場合があります(繰り返しループでは外部入力を受信できない場合があるため)。


0

私は、VPN接続を維持するために別のアプローチを使用しています。これにはlaunchd、ユーザーがログインせずにVPN接続を維持できる非常に単純なデーモンを実行することが含まれます(これにより、スリープモードから再開する際のVPN切断ポップアップが回避されます)。

launchdターミナルからplistファイルを作成します。

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

これにより、すべてのユーザーに対してデーモンが実行され、インターネット接続が利用可能な場合にのみ接続が試行されます。また、インターネット接続が復旧すると、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接続をリストしません。
フィルピロシコフ

@philpirozhkovこれは、IKEv2 VPNでは機能しません。ここではあなたがそれを行うことができます方法は次のとおりです。matt.coneybeare.me/... -service・オン・ご-MAC /
coneybeare

0

ログインフックを使用するいくつかの回答があることを確認しました。これらは、Launch AgentとLaunch Daemonsを支持して、OS Xの新しいバージョンでは非推奨です。

スクリプトを作成してエージェントを起動しました。エージェントは30秒ごとにシェルスクリプトを呼び出し、vpnネットワークで静的なIPアドレスにpingを試みます。そのIPをpingできない場合、vpn接続が有効になります。

Apple Script Appを使用してこれを行った場合、アプリのアイコンは常にドックにあります。これをバックグラウンドで自動的に実行することを好みます。

以下のプロジェクトを複製し、readmeの指示に従います。最終結果は、/ Library / LaunchAgents /に起動エージェントplistファイルを配置し、/ Library / Application Support / melonsmasher /にシェルスクリプトを配置するインストーラパッケージです。

VPN接続名とVPNネットワーク上のIPアドレスを使用して、シェルスクリプト(auto-vpn)を必ず編集してください。plistファイル(com.melonsmasher.autovpn.plist)で実行間隔を変更できます。

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


-2

AppleScriptの素晴らしい点は、ほとんど何でもできることであり、無料です。欠点は、通常、応答性が低く(一定の時間間隔でポーリングする)、ネイティブのMAC OS Xアプリだけが持つことができる機能がないことです。素敵で新しいVPN自動再接続アプリは、アプリストアの「VPNモニター」です。VPN接続が切断されるとすぐに再接続し、優先サービスがダウンしている場合は別のVPNサービスに再接続でき、起動時に接続します。ダウンタイムを追跡し、最小限のシステムリソースを使用して、ステータスバーアプリケーションとしてバックグラウンドで実行します。VPNモニター


2
よくある質問、およそ特に一部を見ていてください自己宣伝を
nohillside
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.