外出先から自宅のネットワークに安全にアクセスするために、Raspberry Pi(ラズパイ)とWireGuard、No-IPを使ってVPN環境を構築しました。
以前はOpenVPNが主流でしたが、今回はより軽量で高速、かつスマートフォンなどのバッテリー消費も少ないWireGuardを採用します。
また、家庭用のインターネット回線は定期的な変更やルーターの再起動によってグローバルIPアドレスが変動するため、VPNへ繋がらなくなることがあります。これを永続的に解決するため、無料のDDNSサービス「No-IP」を組み合わせ、IPアドレスが変わっても安定して接続できる環境を構築する手順を備忘録としてまとめます。
今回の各項目説明
- ラズパイ:常時起動しておくVPNサーバ
- WireGuard:オープンソースVPNプロトコル
- No-IP:DDNSサービスを提供する有名な外部プラットフォーム
著者の主観的な背景
自宅のラズパイにFlaskのWebサーバーやimmichサーバー、OMVサーバー(NAS)、そしてwindowsの自作PCがあり、外出先からアクセスできるようにしたかったため。
前提条件・環境
- ハードウェア: Raspberry Pi (ここではRaspberry Pi 4 または 5を想定)
- OS: Raspberry Pi OS Lite (Debianベース)
- ネットワーク: ラズパイのローカルIPアドレスがルーター側で固定されていること
- 自宅ルーターがポート開放(ポートフォワーディング)を設定することができること
構成図

※ OMVサーバ、Immichサーバ、Webサーバ、自作PCは今回関係ありませんが、ローカルにあるサービスへどのように接続できるかを理解するために書き加えています。
手順
1. No-IP (DDNS) の設定
自宅のグローバルIPアドレスが変動しても、常に同じドメイン名(例: 任意の名前.ddns.net)でアクセスできるようにします。
STEP 1: DDNS(No-IP)の登録
- No-IP公式サイトにて無料アカウントを作成する
- 任意のホスト名(例:
{任意の名前}.ddns.net)を取得する
パスワード設定の注意点ルーターとの連携を安定させるため、パスワードは必ず英数字のみで構成してください。バッファロールーターなど一部の機器では、特殊文字を含んだパスワードを設定するとDDNSの更新に失敗する現象が発生します 。失敗した場合は、No-IP側でパスワードを英数字のみに変更し、ルーター側にも同じものを設定し直してください。
STEP 2: ルーター側の設定
- ルーターの管理画面を開き、「ダイナミックDNS」設定へ移動する。
- サービスとして「No-IP」を選択する。
- 登録したメールアドレス、パスワード、ホスト名を入力して適用する。
- ステータスが「成功」または「更新完了」になることを確認する。
※ルーターがNo-IPに対応していない場合は、ラズパイにNo-IPの更新用クライアント(DUC: Dynamic Update Client)をインストールして定期通知を行ってください。
2. PiVPNのインストール
ラズパイにWireGuardをセットアップしていきます。
VPN環境を構築する前に、ラズパイのシステムを最新の状態にしておきます。
sudo apt update
sudo apt upgrade -y
WireGuardをゼロから構築すると鍵の生成などが少し手間ですが、ラズパイ向けインストーラーである「PiVPN」を使うことで、対話形式で簡単に構築できます。
以下のコマンドを実行します。
curl -L https://install.pivpn.io | bash
実行後、青い背景の対話型セットアップ画面が表示されます。以下のポイントに沿って進めます。
- IPアドレスの固定: 現在のIPアドレスを固定(Static IP)するか聞かれるため、「Yes」を選択します。
-
ローカルユーザーの選択: 設定を管理するユーザー(例:
pi)を選択します。 - VPNプロトコルの選択: WireGuard を選択します 。
-
ポート番号の設定: WireGuardのデフォルトは
51820(UDP) です。基本はそのままでOKですが、任意の番号に変更しても構いません。 - DNSプロバイダの選択: クライアントがVPN接続時に使用するDNSを選択します(例: Google や Cloudflare)。
-
パブリックIP or DDNS: 外出先から接続するためのアドレスを指定します。ここで「DNS Entry」を選択し、STEP 1でNo-IPに登録したホストネーム(例:
{任意の名前}.ddns.net)を入力します 。
セットアップが完了すると再起動を促されるので、ラズパイを再起動します。
3. ルーターのポート開放
VPNの通信をラズパイに届けるため、ご自宅のルーター設定画面にログインし、ポート開放(ポートフォワーディング)を行います。
- プロトコル: UDP
-
ポート番号:
51820(インストール時に変更した場合はその番号) - 転送先IP: ラズパイのローカルIPアドレス
※ルーターにより「静的IPマスカレード」「ポートマッピング」「仮想サーバー」など名称が異なります。
4. クライアント用プロファイルの作成
再起動後、VPNに接続する端末(スマホやPC)ごとのプロファイルを作成します。
pivpn add
クライアントの名前を聞かれるので入力します(例: iphone)。これで設定ファイル(.conf)が ~/configs ディレクトリに生成されます。
5. クライアントから接続
WireGuardアプリを各プラットフォームでダウンロードします。
PCの場合は、生成された .conf ファイルをセキュアな方法(SFTPなど)でPC側にコピーし、PC版のWireGuardアプリにインポートします。
トラブル防止チェック:Endpointの確認設定ファイル(.conf)の Endpoint(または接続先アドレス)の項目が、正しくNo-IPのホスト名になっているか確認してください。
もし数字のIPアドレスのままになっている場合は、以下のように修正して保存します。
修正前: Endpoint = {現在のIPv4}:{VPNのポート番号}
修正後: Endpoint = {No-IPで登録した任意の名前}.ddns.net:{VPNのポート番号}
スマートフォンであれば、QRコードによる設定読み込みが楽です。以下のコマンドをラズパイで実行します。
pivpn qr
作成したクライアント名を選択すると、ターミナル上にQRコードが表示されます。
スマートフォンのWireGuardアプリを開き、「+」ボタン >「QRコードから作成」を選んで読み取るだけで設定が完了します。
6. 接続確認
クライアント側で動作確認をします。クライアントデバイスのWi-Fiを切り、モバイル通信(4G/5G)や別のネットワークからアクセスする状態でWireGuardアプリの接続スイッチをオンにします。そのまま自宅LAN内の機器やルーターの設定画面等にアクセスできれば、VPNの構築は完了です。
⚠️ 【重要】 今後の運用・メンテナンス
No-IPの無料プランを維持するためには、約30日ごとの更新作業が必要になります。
約1ヶ月に一度届く確認メールから、「ドメインの継続利用(Confirm)」を数回のクリックで行います。
これを忘れるとDDNSの紐付けが切れ、外出先からVPNが繋がらなくなります 。もし外出中に繋がらなくなり、かつ更新忘れやルーター再起動でグローバルIPが変わってしまった場合は、帰宅して自宅ネットワークから現在のIPを確認し、各デバイスのアプリ側で一時的に Endpoint を直接IPアドレスに書き換えて凌ぐか、帰るまで復旧を諦める必要があります。
おわりに
PiVPNを利用することで、煩雑な鍵の管理や設定なしに、モダンで高速なWireGuard環境を構築できました。
No-IPによるDDNSと組み合わせることで、家庭用回線でも固定IPライクに運用でき、外出先からでもセキュアかつ快適に自宅ネットワークへアクセスできるようになります。30日ごとの定期更新だけ忘れずに運用していけば、無料で安全に外出先から家のネットワークにアクセスできるのでよかったです。
参考
No-IP:DDNSに使用。
PiVPN:ラズパイ上のVPNサーバ構築に使用。
本記事作成に使用したツール
whimsical:構成図の作成に使用。
Gemini (モデルはGemini 3.1 Pro):本記事の校正に使用。