ターミナルから名前付き Tunnelblick プロファイルを操作する
Tunnelblick は AppleScript 経由で connect、state、disconnect を公開します。そのインターフェースを呼び、アプリに主導権を残し、待機には必ず期限を設けます。
バックアップの前に VPN を確立しておきたいスクリプトは、しばしば openvpn を直接起動します。それでは、Tunnelblick がすでに管理しているプロファイル、DNS、ルート処理を捨てることになります。推奨される方法は Tunnelblick 自身の AppleScript インターフェースで、名前を指定した構成に対して connect、state、disconnect の要求を受け付けます。これを使い、アプリに主導権を残してください。
openvpn ではなくアプリに話しかける
OpenVPN プロファイル、エンジンの選択、スクリプト、DNS とルートの統合は Tunnelblick が所有しています。別の openvpn バイナリは別の起動方法であり、同じ接続への近道ではありません。
アプリのスクリプトインターフェースを呼べば、その所有関係は保たれ、各要求を検証できます。
ここでの例は、Tunnelblick が Applications にあり、動作する構成の名前が HQ で、コマンドがログイン中の Mac ユーザーのセッションで実行されることを前提としています。名前は実際の構成名に置き換えてください。
名前付きプロファイルを正確に一つ起動する
connect 要求は構成名を指定します。最後に選ばれていたものへ接続する要求ではありません。
構成を所有するユーザーセッションで実行します。
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'通常のサインインの確認を進めます。macOS が、呼び出したアプリに Tunnelblick の制御を許可するか尋ねることがあります。承認する前に、どのアプリでどの対象かを確認してください。そのダイアログを自動でクリックして通過するのは、ダイアログの意味を損ないます。
connect 要求はトンネル確立前に戻る
Tunnelblick のスクリプトガイドは明示しています。connect は接続完了前に戻ります。終了ステータスがゼロなのは要求が受け付けられたという意味で、通信が流れているという意味ではありません。
状態は別に読み取ります。
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED は接続状態の結果です。ジョブが必要とする非公開リソースに到達できることまでは証明しないため、依存する処理を始める前に別途確認してください。
スクリプトインターフェースの他の制御はより広い操作を対象としており、一つのプロファイルだけを変える場合には不要です。
期限を設けて待ち、失敗させる
無限にポーリングすると、スクリプトは一晩中ぶら下がり、次の実行を妨げます。待機には期限、短い間隔、明示的な失敗結果を与えます。CONNECTED 以外の状態は、遷移中のものも含めてすべて未完了として扱ってください。最後に見た状態を記録すれば、失敗の理由がそこに現れます。
上限付きのループは次のとおりです。
for i in $(seq 1 30); do
state=$(osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"')
if [ "$state" = "CONNECTED" ]; then exit 0; fi
sleep 1
done
echo "tunnel did not reach CONNECTED" >&2
exit 1三十秒はあくまで例であり、普遍的なタイムアウトではありません。プロファイルが実際に使う認証経路から期限を決め、ワークフローの記録に残してください。
状態を確認し、名前で切断する
同じプロファイルを止めるには、同じ名前で disconnect を呼びます。要求は狭いままで、他の構成には触れません。
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'プロファイル名と制御側をワークフローの記録にまとめ、想定される認証と完了の確認も並べて書きます。その記録があるからこそ、半年後でもコマンドを検証できます。
コンピュータ起動時の動作は別のモードです。Tunnelblick の文書化された起動オプションと、それが前提とする資格情報の設定を使ってください。ログイン中のデスクトップセッションで実行するコマンドと、マシンとともに起動するサービスは文脈を共有しません。ログイン中に動くスクリプトが起動時にも動くと考えないでください。起動経路は、同じ期限と同じ記録のもとで単独に試験します。