過去記事でちょこちょこVPNについて触れていたけど、やっとVPN環境を構築できたのでメモ。
結論から言えば、Dockerを使えば5分で組めるレベルだった。L2TPなのでiPhone/iPad/Macから標準機能でアクセス可能、サーバーMacminiの再起動にも対応可能でほぼ完璧。
事前準備
まずDDNS環境を構築し、グローバルIPの代わりになる固定アドレスを確保しておく。Macminiからcronでひたすら更新をかけるよう設定すればOK。前記事参照。
またMacminiのIPアドレスで以下のポート解放が必要。MacminiのローカルIPを固定した上で、ルーター側で設定を済ませておく。
- UDP 500
- UDP 1194
- UDP 4500
- TCP 1701
- TCP 5555
前提知識
Dockerとは
今回はDockerを使ってかなり簡略化出来ている。Dockerとは単一機能を持った仮想マシンとその起動環境のことで、単一機能を与えられた仮想マシンのことを「コンテナ」と呼ぶ。
起動環境であるDockerから目的のコンテナを呼び出すことで、まるでアプリケーションのように仮想マシンと与えられた機能を実行出来る。
Macでは標準のVPNサーバー機能であるvpndがほぼ機能停止しており、Linuxで使われる手法を転用しなければならないのが現状。
今回使うDockerのコンテナはLinuxをベースに構築されており、中身は以前にも触れたSoftEther VPN。
今回の目的
主にサーバーMacminiへのアクセス。SMBのファイルアクセスとVNCの画面共有を行うことを目的とする。
DDNSを用いたアクセスでも実現できたものの、接続先がDDNSアドレス・ユーザ名・パスワードの組み合わせとなるため自宅内/外出先で設定を切り替える必要があった。
VPNを導入することで接続中は自宅内と同一環境になるため、自宅用の設定一つを用意すればVPNのオンオフによって切り替えられる。
そのため基本的に同じアドレスを使い回せるようになり、設定がシンプルになる。
手順
Dockerの準備
公式サイトからダウンロード(DMGファイル)。ご丁寧にAppleシリコン用とIntel用がある。
今回はM1MacminiなのでAppleシリコン用。
ダウンロードが済んだらDMGを開き、中身のアプリケーション本体をアプリケーションフォルダに移動しておく。よくある導入手順。

移動が済んだら早速起動し、初期設定を画面の通りに進めていく。
規約が出るのでAccept、設定方法が出るのでそのままFinish。


サインアップ画面が出るので指示通りにアカウント作成へ進む。Google/GitHubアカウントも使い回せる。
終わったらDockerへ戻りサインイン。ダッシュボードが表示されれば下準備完了。

右上の歯車から設定に飛び、2つほど変更しておく。

一番上のStart Docker Desktop when you sign in to your computerを有効。
一つ下のOpen Docker Dashboard when Docker Desktop startsを無効にする。
これは「Macmini起動時に自動でDockerを実行するが、ダッシュボードは表示しない」という設定。
サーバー用途なのでこれが最適。
コンテナの準備〜初回起動
上部の検索ボックスより「softethervpn」で検索。siomiz/softethervpnをPull(ダウンロード)して確保。
ちなみにコマンドでもPull可能。詳細はここに。

Pullが完了したらターミナルを開き、以下のコマンドを入力。
docker run --privileged --name vpnserver \
-p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp -p 1194:1194/udp -p 5555:5555/tcp \
-e PSK=シークレット \
-e USERS=ユーザー名:パスワード \
siomiz/softethervpn
シークレット・ユーザー名・パスワードは任意で置き換え。外からVPN接続するために必要になるので数分間は忘れないように。(一応後から確認できるけど、わかりにくいしめんどくさい)
これで初回起動が完了するので動作テスト。iPhoneで設定Appを開き、一般→VPNとデバイス管理→VPNと進む。

「VPN構成を追加」を押し、設定画面へ。
タイプをL2TPへ変更。DDNSアドレス・アカウント・パスワード・シークレットを打ち込む。説明は設定Appでの表示名なので好きに入力、他は初期設定(RSA SecurIDはオフ・すべての信号を送信はオン)。右上の完了を押せば終了。

設定が終わったらWi-Fi切断・モバイル回線に切り替えてLANから抜ける(同一LAN内からVPNアクセスは不可能なので)。
VPN状況をオンにして接続済みになったら成功。

VPN接続中はLAN内にいるのと同等なので、ファイルApp→サーバへ接続からMacminiのローカルIPを打てばSMBアクセスが出来る。

更にはルーターの設定画面にすらアクセス出来る。

接続時にローカルIPを打ち込むだけでいいというのがポイントで、DDNSアドレスを毎回打ち込む必要もなくなりすっきりする。
自動起動の設定
このままだとMacminiを再起動するだけで終了してしまうので、自動実行の設定を行なっておく。
先ほどDocker本体は自動起動するように設定したので、今度はDocker起動時にコンテナを自動起動する設定。

まずDockerのダッシュボードからコンテナ一覧を表示。Pullされた一覧からvpnserverを探し、Name欄下部のコンテナ名(ランダムな英数字)を控える。そして念の為に右端のActionsの四角ボタンを押しコンテナを一時停止。
ターミナルを開き、以下のコマンドを実行。
docker update --restart=always コンテナ名
コンテナ名は先ほど調べた英数字に置き換え。これで自動起動の設定が完了。
macOSを再起動するとDockerが起動し、Dockerが起動するとSoftEtherVPNのコンテナが起動する。
以下のコマンドを実行することで、自動起動を設定したコンテナを確認できる。
docker inspect -f "{{.Name}} {{.HostConfig.RestartPolicy.Name}}" $(docker ps -aq) | grep always

vpnserverが表示されていれば成功。Macminiを再起動して自動実行されるか確かめ、再度LAN外のiPhoneから接続できれば完成。
ここまで済ませれば、iPadやMacでも同様の設定で接続可能になる。VNCやSMBアクセスが自由に行えて便利。
ただし全ての通信でMacminiを挟むようになる上、L2TP自体が高速な接続プロトコルではないので、必要な時以外はVPNをオフにしておくのが望ましい。
VPNはプライバシー面でのメリットもあると言われるが、これについてはiCloudプライベートリレーがあれば十分。LANに入る時とそうでない時で、プライベートリレーとの使い分けが大事。
M1 Mac miniの更なる可能性
基本的なサーバー機能を全て備え、DDNS通知+VPNサーバー構築も独力で可能。
省電力・高性能でデスクトップ機としても運用でき、UltraFine・StudioDisplay等のThunderboltモニターを使えばサーバー運用/デスクトップ運用をケーブル1本で切り替えられる。
Dockerは仮想化技術を用いているが、高性能なM1Macminiにとって負荷はほとんどない。
この性能を最大39Wで叩き出せるのはAppleシリコンならでは。
macOS故に他デバイスとの親和性も高く、AppleMusic/iTunesMatchやiCloudフォトのライブラリ管理を任せると持ち前のサーバー機能を最大限に活かせる。
今後も自宅サーバーとして重宝するのは間違いない。




