はじめに

Hello, VPNラバーなみなさん(??)。これからラバーになるみなさん。

昨今、巷を駆け巡るセキュリティ問題。その中で特定のWebサイトやサービスにVPN接続を必須とすることも多いんじゃないでしょうか?

私は普段Macで開発をしているのですが、VPNはメニューバーからポチポチと接続していました。 が、いらないステップが多すぎると感じ、Geminiさんにやり方を聞きながら、Terminalからシンプルに接続できるようにしました。

とてもシンプルな記事ですので、さらっと読んでもらえたら嬉しいです。

目次

結論

  • networksetup -connectpppoeservice "VPNの名前"で接続する
  • networksetup -disconnectpppoeservice "VPNの名前"で切断する

> ⚠️ 注意: > > – このコマンドは本来PPPoE接続用のコマンドであり、L2TP/IPSecなどPPPベースのVPNでは動作するが、IKEv2など他のVPNタイプでは動作しない > – VPN接続の正規のコマンドとしてはscutil --nc startがあるが、自分の環境では動作しなかったため、代替としてこちらを利用している。詳しくははまったところを参照

設定方法

  1. MacでVPNを設定する

    • macOS Tahoeの場合、"システム設定 > VPN"から設定ができる
    • 細かい設定方法は各社や使用するVPNサービスによって違うと思うので解説しません
  2. 任意のTerminalを開く

  3. networksetup -listallnetworkservicesという一覧表示コマンドを実行する。そうすると使用しているVPN設定の名前が表示される

    $ networksetup -listallnetworkservices
    An asterisk (*) denotes that a network service is disabled.
    USB 10/100/1G/2.5G LAN
    Thunderbolt Bridge
    Wi-Fi
    VPNの名前
    

    表示されない場合ははまったところへ

  4. VPNの名前を確認できたら、以下のコマンドで接続ができる

    • networksetup -connectpppoeservice "VPNの名前"
  5. 切断する場合は以下

    • networksetup -disconnectpppoeservice "VPNの名前"

エイリアスを設定する

上記のコマンドで接続はできますが、長いのでzshにaliasを設定します

  1. ~/.zshrcを開く(.bashrcを使っている場合は適宜読み替える)

  2. 以下を登録

    alias vpnc='networksetup -connectpppoeservice "VPNの名前"'
    alias vpnd='networksetup -disconnectpppoeservice "VPNの名前"'
    
  3. 開いているTerminalを再起動するか、source ~/.zshrcを実行

  4. 以下でVPNの接続・切断ができる

    vpnc # 接続
    vpnd # 切断
    

ちなみにtipsとしては、.zshrcにaliasを書きすぎると見えづらくなるので、以下のように.zsh_aliasesとして別ファイルに定義し、.zshrcから読み込むようにするといい感じになります。

.zshrc

# custom aliases
# (.zshrcと同じ階層にファイルがあると仮定します)
if [ -f ~/.zsh_aliases ]; then
  source ~/.zsh_aliases
fi

はまったところ

仕事用Macを移行する際に、Macの移行ツールを利用してVPN設定も移行していました。 するとどうでしょう?一覧表示コマンドでVPNが表示されませんでした。

結論的には一度該当のVPN設定を削除し、新しく設定し直したら表示されるようになりました。 困りますね。

> Note: > > – 今回使用したnetworksetup -connectpppoeserviceは本来PPPoE接続用のコマンドであり、L2TP/IPSecなどPPPベースのVPNで動作する。IKEv2など他のVPNタイプでは動作しない点に注意してください > – VPNの接続・切断の正規コマンドとしてはscutil --nc start "VPNの名前"とscutil --nc stop "VPNの名前"がある > – しかし自分の環境ではIPSec共有シークレットが見つかりません。設定を確認して、接続し直してください。というエラーで接続できなかったため、代替としてnetworksetupを利用することにした > – scutilには共有シークレットを指定する方法もあるようだが、コマンドに直接書くとTerminalの履歴やプロセス表示に残る可能性があるため、検討から除外した

おまけ

最近、Stream Deck Mobileというものを知りました。

物理ボタンでMacなどを操作するアクションを設定できるものがあったのですが、物理ボタンを用意しなくてもスマホアプリから操作できるものが出たようです。 基本無料ですが、無料で使えるのは6キーまでです。

そちらにも設定してみました!

本題ではないので、インストールなどの詳しい手順は省きます。

  1. Mac用のStream Deckとスマホ用のStream Deck Mobileをインストールし、2つのアプリを結びつける

  2. AppleScriptを用意する

    • 保存先はStream Deckから呼び出せればどこでもOK
    tell application "System Events"
        tell network preferences
            tell current location
                set myVPN to service "VPNの名前" -- 先ほど接続していたVPN名に置き換え
                if connected of current configuration of myVPN then
                    disconnect myVPN
                else
                    connect myVPN
                end if
            end tell
        end tell
    end tell
    
  3. MacのStream Deckアプリのボタンに"システム > 開く"を設定

    • アイコンや名前は好きなものを設定する
      • 今回は適当にNetworkと調べて出てきたアイコンと、VPNという名前を設定
  4. "App/ファイル"という欄に先ほど作成したAppleScriptを設定

  5. Stream Deck MobileにVPN切り替えボタンが出ていると思うので、そちらをタップし動作確認

簡単ね!

まとめ

シンプルなTips的な記事でした!

一日に何度もVPNに接続する場合は多少めんどくさくても設定しておくと楽です!

それでは良きエンジニアライフを!!



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる