家鯖 VPN に必要なパーツを検討し終えたら、環境構築していきます。
まずはラズパイの準備。2019年に安い Raspberry Pi 3 Model B を入手していたので、これを活用します。初代ラズパイもあるけど・・・どっちも使っていないので新しい方を使いましょう。画面も出さず、WiFi も使わないので性能が十分なら、初代の活用もアリかもしれないです。構築後に考えよう・・・
ラズパイの構築は、ググれば山ほど情報は出てくるので、ササっと文字だけで手順のみ記録しておきます。
- Raspberry Pi Imager をダウンロードして、Windows 上で起動
- 使う OS を選択。今回は CUI のみで良いので Raspberry Pi OS Lite
- MicroSD は 32GB のそれほど高級じゃないヤツを利用。ツールはダウンロードして MicroSD に書き込みまでしてくれます
- SSH で接続できるように、boot パーティションの根っこに「ssh」という空ファイルを作成
- MicroSD をラズパイに装着し、起動!!
- SSH で接続。TeraTerm でも良いし、DOS窓なら「ssh -l pi raspberrypi.local」で同じサブネット内の PC からアクセス。パスワードはデフォルトで「raspberry」
- pi ユーザーのパスワード変更
- hostname も変更しておく
- IPアドレスの固定化。/etc/dhcpcd.conf を書き換えて再起動するだけ
- 色々とアップデートをかけておく
アップデートは下記の5行でOK。
sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt clean
sudo reboot
さて、こんな感じでラズパイのベースができあがったら、DDNS Now を登録。ひとまず開いているホスト名があるか調べて登録して、コマンドラインからアドレスを登録・・・っていうか、シェルスクリプトにしておく。
!/bin/sh USER="User Name of DDNS NOW" PASSWD="API Token of DDNS NOW" URL="https://f5.si/update.php" URLv6="https://v6.f5.si/update.php" curl -X GET $URL?domain="$USER"\&password="$PASSWD" curl -X GET $URLv6?domain="$USER"\&password="$PASSWD" exit 0
このシェルスクリプトを実行して(当然 USER と PASSWD は DDNS Now に登録したものを記載しておく)、OKが出れば IP アドレスが登録されます。IPアドレスは v4 と v6 も念のため設定しておきました。
登録された結果は、DDNS Now にログインして詳細ページを確認できます。また、このページで手動で設定することも可能。IPアドレスがコロコロ変化するなら、crontab で作ったシェルスクリプトを定期的に実行させればよいですな。
さて、今度は PiVPN を使って VPN サーバーに必要な設定を行います。ダイアログに従って選択したりちょっとしたものを入力するだけなので、超簡単でした♪
- curl -L https://install.pivpn.io | bash でダウンロードして起動
- choose a VPN では OpenVPN ではなく WireGuard をチョイス
- ポートはデフォルトの 51820 から変更(変更先はヒミツ)
- DNS Provider は悩んだ結果 CloudFlare を選択
- DDNS に設定した DNS Name を設定
いやはや、こんなに簡単にインストールできちゃうなんて、素晴らしいです♪
pivpn add コマンドでユーザー登録し、作成された conf ファイルを WireGuard アプリをインストールした端末(まずは Android 端末)に登録。pivpn -qr で QRコードを表示して読み込ませるのが楽ですが、TeraTerm だと文字化けして QR コードにならんので、DOS窓からの SSH が良いです。
まずはこの状態で、同じサブネット内というか、WiFi で繋がった環境から接続テスト。traceroute すると、VPN Client(泥端末) → VPN 鯖(ラズパイ) → ゲートウェイ(ルーター) → インターネット・・・ ってな感じでラズパイを経由してくれました。ちゃんと VPN サーバとして機能してくれているようです♪
さて、最後の仕上げはルーターにポートフォワーディングの設定をして、外部からもアクセス可能なように・・・ん? あれれ?? 我が家のルーターにポートフォワーディングがない???
・・・というわけで、ここからハマリの道が待っていましたので、続きます。