寮においてあるパソコンに,自宅からリモートデスクトップ接続できるようにVPNを構築する。SoftEtherの開発者に大感謝。真似する場合のセキュリティ対策は自己責任でどうぞ。
環境
接続される側のPC
- Windows 11 Pro
- AMD Ryzen 5 4500
- 16GB RAM
- NVIDIA GeForce RTX 5060 Ti
- 16GB VRAM
接続する側のPC
- Mac OS Sequoia 15.6
- Mac Book Pro 2018
- Intel Core i5
- 8GB RAM
VPNソフトウェア
- SoftEther VPN 4.0 ( Ver. 4.44, Build9807 )
ネットワーク
- 寮 : BB Excite (エキサイトMEC光)
- 自宅 : Biglobe光
ネットワーク詳細とVPN接続方法
ネットワークの知識はほとんどないので間違っている可能性大
寮側で契約しているBB ExciteはIPoE(Transix)でありIPv4のアドレスが他人と共有されている状況になっている。この状況では特定のポート開放ができず,結果的にL2TP over IPsecを用いたVPN接続ができない。
(IPoEではない回線やIPv4での固定IPサービスなどを申し込めばよいのだろうが,そこまでして実現する動機はなかった。)
L2TP over IPsecが使えないということは,Mac OSに標準搭載されている機能を使ってのVPN接続ができない。そこでMS-SSTPを用いることとした。
接続される側(VPNサーバ)の準備
- SoftEther VPN セットアップウィザードを用いて”SoftEther VPN Server”をインストールし動作させる(インストール手順は様々なサイトに記載されているので割愛)。
- インストール先はデフォルトのままにする
- リモートアクセス VPNサーバとして構築する
- パスワード認証でユーザを作成する
- VPN Azureを有効にする
- MS-SSTPを有効にする
- 次の項目をメモする
- SoftEther VPN Azure ホスト名
- SoftEther ユーザ名
- SoftEther パスワード
- ローカルIPアドレス(192.168.xx.xx)
- 一定時間の操作がなかった場合に電源が自動で落ちるような設定をすべて解除する。
- VPNがうまく接続できなかった場合に備えてChrome Remote DesktopやTeam Viewerなどの代替手段を用意する。
- 一度だけMicrosoftアカウントを用いてWindowsへログインしておく
- サインイン方法は 設定 > アカウント > サインイン オプションから変更可能。
- 一度だけログインした後は,Windows HelloやPINでのログインに戻してよい。
接続する側の準備
- Homebrewをインストールする(インストール手順は様々なサイトに記載されているので割愛)
- Microsoft Remote DesktopをApp Storeからインストールする
- MS-SSTPを使うために"sstp-client"をインストールする
brew install sstp-client
- sstpcが使えるか確認する
sstpc --version
- (パスが通っていなかったので)どこにあるか確認
/usr/local/sbin にあったのでPATHに追加する
find "$(brew --prefix)" -name sstpc
- .zshrcを開く
open ~/.zshrc
- 最後の行に以下を追記する
export PATH="/usr/local/sbin:$PATH"
- 反映させる
source ~/.zshrc
接続する
- sstpcを用いて接続を行う
バックグラウンドで実行したい場合は最後に & をつける。
sudo sstpc (VPN Azureホスト名) --user (ユーザ名) --password (パスワード) --log-stderr --cert-warn usepeerdns require-mschap-v2 noauth noipdefault refuse-eap noccp --tls-ext
- VPNインターフェースを確認する
ppp0みたいなものが出てきたらそれで正解。以降はppp0がVPNインターフェースとして記載する。
ifconfig
- VPNサーバへのルートを追加する
sudo route add -host (ローカルIPアドレス) -interface ppp0
- ルートを確認する
結果がこんな感じになっていればOK
route -n get (ローカルIPアドレス)
route to: (ローカルIPアドレス) destination: (ローカルIPアドレス) interface: ppp0
- Microsoft Remote Desktopで接続する
- PC Name : (ローカルIPアドレス)
- User Account : (Microsoft Account e.g. hogehoge[アットマーク]outlook.com)
切断する
- sstpcのプロセスを確認する
ps aux | grep sstpc
- 若い番号のプロセスを落とす
sudo kill (プロセスID)
はまったところ
- L2TP over IPsecを用いた通信ができなかった。
- 別のWindows端末からSoftEtherのクライアントソフトを使って接続はできていたがL2TPを使っていないだけだろう。
- VPN接続後もVPNを使わない通信ができてしまう。
- default routeはVPNになっているがRDPの通信VPNを迂回していた。
- Microsoftアカウントでサインインしている端末へのログインIDとパスワードが分かりにくい。
- MicrosoftAccount/アカウント名 とか MicrosoftAccout/アカウント名から@以降を除いたもの とかいろいろ試した。
- 一度サインインしておくことが必要と気が付くまでに時間がかかった。
- 必ずsstpcのプロセスが2つできる。
- 片方はKillできない。なぜかは調べていない。
- sstpcコマンドはバックグラウンドで実行したほうが操作性がよい。