はじめに
Dynamic DNSによりダイナミックIPアドレスを固定のホスト名に紐づける
次に、IPアドレスの変化の有無をモニターし、変化すればDNSを更新するDynamic Update Client(以下、DUCと呼称)をRPi5にセットアップする。
はじめにRPi5にツールをダウンロードする。
$ wget --content-disposition https://www.noip.com/download/linux/latest
ダウンロードしたらファイルを解凍する。
$ tar xf noip-duc_3.3.0.tar.gz
以下のコマンドでARM64bit版のDUCをインストールする。
$ cd noip-duc_3.3.0/binaries $ sudo apt install .\noip-duc_3.3.0_arm64.deb
インストールしたら次のコマンドを実行し、DUCが動作することを確認する。
$ noip-duc -g all.ddnskey.com --username DDNSキーのユーザー名 --password DDNSキーのパスワード
コマンドの実行結果例を以下に示す。
[2025-09-23T01:01:27Z INFO noip_duc::public_ip] Attempting to get IP with method Dns(No-IP Anycast DNS Tools) [2025-09-23T01:01:27Z INFO noip_duc::observer] got new ip; current=202.xxx.xxx.xxx, previous=0.0.0.0 [2025-09-23T01:01:28Z INFO noip_duc::observer] update successful; current=202.xxx.xxx.xxx, previous=0.0.0.0 [2025-09-23T01:01:28Z INFO noip_duc::observer] checking ip again in 5m [2025-09-23T01:06:28Z INFO noip_duc::public_ip] Attempting to get IP with method Dns(No-IP Anycast DNS Tools) [2025-09-23T01:06:28Z INFO noip_duc::observer] checking ip again in 5m
RPi5のIPアドレスは、WiFiルータからDHCPによって割り当てられるプライベートIPアドレスであるが、上記コマンドの出力を見るとISPからWiFiルータに割り当てられているグローバルIPアドレスを取得しているため、RPi5が内部ネットワークに所在している場合でも問題なく動作している模様である。
RPi5を起動する度にDUCを手動で起動することは難なため、次に述べる手順により自動でDUCを起動できるようにする。はじめにユニットファイルのひな型をシステムの所定の場所にコピーする。
$ sudo cp debian/service /etc/systemd/system/noip-duc.service
設定ファイル/etc/default/noip-ducを新規に作成し、以下の内容を書き込む。
## /etc/defaults/noip-duc (Debian) or /etc/sysconfig/noip-duc (RedHat, Suse) ## or anywhere you like. NOIP_USERNAME=DDNSキーのユーザー名 NOIP_PASSWORD=DDNSキーのパスワード ## Comma separated list of hostnames and group names NOIP_HOSTNAMES=all.ddnskey.com
編集したら設定ファイルを保存し、systemdデーモンをリロードする。
$ sudo systemctl daemon-reload
サービスを有効にする。
$ sudo systemctl enable noip-duc
サービスを有効後、RPi5を再起動する。再起動後、サービスが起動していることを以下のコマンドで確認する。
$ systemctl status noip-duc
サービスが起動している場合、以下のようなステータスが表示される。
● noip-duc.service - No-IP Dynamic Update Client
Loaded: loaded (/etc/systemd/system/noip-duc.service; enabled; preset: enabled)
Active: active (running) since Tue 2025-09-23 09:13:27 JST; 5h 12min ago
Main PID: 858 (noip-duc)
Tasks: 1 (limit: 9252)
CPU: 58ms
CGroup: /system.slice/noip-duc.service
└─858 /usr/bin/noip-duc
Sep 23 14:04:09 raspberrypi noip-duc[858]: [2025-09-23T05:04:09Z INFO noip_duc::public_ip] Attempting to get IP with m>
Sep 23 14:04:09 raspberrypi noip-duc[858]: [2025-09-23T05:04:09Z INFO noip_duc::observer] checking ip again in 5m
これでRPi5が起動すると、IPアドレスの変更をモニターし、IPアドレスが変更された場合はDNSを更新するデーモンが起動するようになる。
本節の情報は以下のWebサイトを参考にした。
PiVPNをインストールする
$ curl -L https://install.pivpn.io | bash
コマンドを実行すると以下のウィザードが表示されるので、OKを選択する。
OKを選択する。
Yesを選択する。
有線LANのインタフェースを表すeth0を選択し、OKを押下する。
当環境の場合、RPi5の有線LANのインタフェースのIPアドレスは、WiFiルータからDHCPによって固定的に割り当てられるプライベートIPアドレスを用いるため、Yesを選択する。
OKを選択する。
piを選択し、OKを押下する。
使用するVPNのアプリに関し、WireGuardを選択し、OKを押下する。
VPNの接続端点であるポート番号に関し、デフォルト設定のままOKを押下する。
Yesを選択する。
Windows PCやiPhoneなどこのRPi5にVPNで接続するクライアントが使用するDNSプロバイダとしてここではGoogleを選択の上、OKを押下する。
クライアントが外出先からこのRPi5を指定する方法として、IPアドレスを直に指定するのではなく、ホスト名を指定するDNS Entryを選択し、OKを押下する。
No-IPに登録したホスト名を入力し、OKを選択する。
Yesを選択する。
OKを選択する。
OKを選択する。
当環境の場合、諸事情のためソフトウェアの自動更新をしないため、NOを選択する。
OKを選択する。
直ちに再起動するため、Yesを選択する。
OKを選択し、直ちにRPi5を再起動する。
UDPポートを開放する
ここでWireGuardの場合、開放するポートはTCPでなくUDPポートであることに注意する。誤ってTCPのポートを開放した場合はVPNに接続不可となる。
VPNクライアントをセットアップする
$ pivpn add
上記コマンドを実行すると、次の2点の入力を求められる。
- クライアントに割り当てるIPアドレス
- 任意のクライアント名
IPアドレスの指定は、入力せずにそのままEnterキーを押下すれば自動的に空いているIPアドレスを割り当ててくれる。またクライアント名は、複数のクライアントを識別するための適当な名前を入力する。
これらを入力するとVPNに接続するための設定ファイルが$HOME/configsディレクトリに生成される。この生成された設定ファイルをscpコマンドなどでクライアントであるWindows PCにコピーする。
その後、モバイルネットワークなど外部のネットワークに所在している状態でWindows PCにインストールしたWireGuardのクライアントを起動し、画面に表示されている「ファイルからトンネルをインポート」からコピーした設定ファイルを指定する。























