Mac OS X 10.7.3でビルトインVPNを使用しています。IPSec、FWIWです。時々、それは切断します(おそらく私の企業サーバーの問題)。自動的に再接続する方法はありますか?しばらく気づかないこともありますが、これはちょっと面倒です。
Mac OS X 10.7.3でビルトインVPNを使用しています。IPSec、FWIWです。時々、それは切断します(おそらく私の企業サーバーの問題)。自動的に再接続する方法はありますか?しばらく気づかないこともありますが、これはちょっと面倒です。
回答:
次の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
提供された回答にいくつか変更を加えました。何かする価値がある場合、それは地面にやる価値があるからです。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の行動にこだわる人なら、あなたは解決策を見つけるまで手探りするのが好きな人であり、したがってこの答えには聴衆がいないと感じています。しかし、念のため、ここにあります。それが誰かを助けることを願っています。
VPN Auto-Connect(Mac App Storeリンク)と呼ばれるアプリがあります。それは0.99ドルです。
開始すると、メニューバーに表示されます。これを使用してVPNを「オン」にすると、OS Xの[ネットワーク]設定ペインで設定したVPN接続プロファイルが監視され、常に接続された状態が維持されます。VPN Auto-Connectのメニューバーアイコンは、定義したすべてのVPN接続のリストを提供し、常に接続する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を同時に接続することはお勧めしません。このスクリプトを停止するには、アクティビティモニターを使用して強制的に終了する必要がある場合があります(繰り返しループでは外部入力を受信できない場合があるため)。
私は、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接続をリストしません。
ログインフックを使用するいくつかの回答があることを確認しました。これらは、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)で実行間隔を変更できます。
AppleScriptの素晴らしい点は、ほとんど何でもできることであり、無料です。欠点は、通常、応答性が低く(一定の時間間隔でポーリングする)、ネイティブの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)