[macOS] VPN接続時のネットワークプロファイル切り替えが面倒なのでスクリプト化してみた

[macOS] VPN接続時のネットワークプロファイル切り替えが面倒なのでスクリプト化してみた

Clock Icon2023.09.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部の荒平(@0Air)です。

みなさん、AWS Client VPNはお使いですか?
MacOSでVPN接続を切り替える際は、ネットワークプロファイルを変更するのが少し手間です。

[設定]をクリック、[ネットワーク]タブをクリック、3点リーダをクリック、ネットワーク環境を選択、、、
Client VPNへずっと繋ぎっぱなしであれば問題ないのですが、私の環境では繋いだり繋がなかったりする機会が非常に多いので、このクリックが大変煩わしく感じています。

ので、スクリプトを作りました。
※ 私の環境では2つのネットワークプロファイルしかないので、起動する度に切り替える形にしています。3つ以上の切り替えが必要な方はスクリプト内容をお好みに合わせて少し改変する必要があります。

前提条件

以下の環境で動作を確認しています。

  • macOS Ventura 13.5.2
  • zsh 5.9 (x86_64-apple-darwin22.0) ※ macOS 13の標準ターミナル

作成したスクリプト

#!/bin/bash
auto_uuid="ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ123456"
vpn_uuid="ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ987654"

# Get the UUID of the current network location
current_uuid=$(scselect | awk '/^ \* / {print $2}')
echo "Current UUID: $current_uuid"

# Switch network location based on the current UUID
if [ "$current_uuid" == "$auto_uuid" ]; then
    new_uuid="$vpn_uuid"
    new_name="VPN"
elif [ "$current_uuid" == "$vpn_uuid" ]; then
    new_uuid="$auto_uuid"
    new_name="Auto"
else
    echo "Unknown UUID: $current_uuid"
    exit 1
fi

echo "New UUID: $new_uuid"

# Switch the network location
output=$(osascript -e "do shell script \"scselect $new_uuid\"")
echo $output
echo "Switched to $new_name"

使い方

(1) ネットワークプロファイル作成

macOSのネットワーク設定より、「ネットワーク環境」のメニューを開き、プロファイルを追加します。
ここでは、名称を「VPN」として進めますが環境に合わせて読み替えてください。

作成したネットワークプロファイル内でプロキシなどの設定を行い、Client VPN等が使えるようにします。

(2) 切り替えたいネットワークプロファイルのUUIDを取得する

scselect コマンドでネットワークプロファイルの一覧を取得することができます。

$ scselect
Defined sets include: (* == current set)
 * ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ123456 (Auto)
   ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ987654 (VPN)

(3) スクリプト内「auto_uuid」「vpn_uuid」を書き換える

以下の部分を(2)で取得したUUIDの文字列に置き換えます。

auto_uuid="ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ123456"
vpn_uuid="ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ987654"

(4) 任意のパスに配置して実行

編集したスクリプトを任意のパスに保存し、sh {スクリプト名}のような形で実行します。
1回実行でVPN用のプロファイル、2回実行で元のプロファイル(Auto)になることが確認できました。

おわりに

scselectコマンドを利用して、プロファイル名を指定しネットワークプロファイルを切り替えることも可能です。
構文は、scselect {プロファイル名} です。
今回は起動する度に切り替えて欲しかったので、現在の状況を取得→切り替えというスクリプトを作成してみました。

ちなみに、macOSのAutomatorを利用することでShellスクリプトのアプリケーション化が簡単にできます。
必要であればお試しください。

このエントリが誰かの助けになれば幸いです。

それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.