CloudflareとddclientでDDNSを自作:ホームサーバー向けの「0円」ソリューション

Network tutorial - IT technology blog
Network tutorial - IT technology blog

自宅サーバーで動的IPを使用する際の悩み

NASを構築して家族の写真を保存したり、外出先からVPNで自宅にアクセスしたりしていませんか?そこで必ず直面するのが「動的IP」の壁です。ベトナムのプロバイダー(Viettel、FPT、VNPTなど)では、ルーターの再起動時や24〜48時間の間隔でパブリックIPアドレスがリセットされるのが一般的です。

外出先で急に資料が必要になったのに、Connection timed out というエラーが出たことはありませんか?理由は単純で、自宅のIPが変わってしまったからです。以前、50人規模のオフィスのインフラを管理していた際、専用線のバックアップとしてDDNSを利用していました。固定IPに毎月数千円から一万円以上の追加費用を払う代わりに、このソリューションを導入することで、コストを大幅に抑えつつスムーズなリモートアクセスを実現できました。

仕組みは非常にシンプルです。ツールが新しいIPを自動検出し、DNSレコードを更新します。Cloudflareは安定したAPIを無料で提供しており、現在最も有力な選択肢です。一方、ddclientLinux上で動作する超軽量なクライアントで、メモリ消費量は10MB未満。この同期作業に最適です。

なぜCloudflareとddclientを選ぶのか?

No-IPのような多くのDDNSサービスでは、毎月のメール確認が必要で非常に面倒です。独自のドメイン(lab.itfromzero.com など)を所有している場合、Cloudflareと組み合わせることで、よりプロフェッショナルな運用が可能になります。

ddclient はバックグラウンドサービス(デーモン)として動作します。古いPCやRaspberry Piを、どこからでもアクセス可能なサーバーに変えてくれます。もう長いIPアドレスを覚える必要はなく、覚えやすいドメイン名でアクセスできるようになります。

ステップ1:CloudflareでAPIトークンを作成する

セキュリティのため、Global API Keyは絶対に使用しないでください。以下の手順に従い、最小権限の原則(Principle of Least Privilege)に基づいてAPIトークンを作成します。

  1. Cloudflareダッシュボードにアクセスし、My Profile > API Tokens を開きます。
  2. Create Token を選択し、Edit zone DNS テンプレートを使用します。
  3. Permissionsを設定:Zone - DNS - Edit および Zone - Zone - Read
  4. Zone Resources で、対象のドメインを正しく選択します。
  5. Continue to summary をクリックし、トークン文字列をコピーします。

注意:Cloudflareはこのトークンを一度しか表示しません。必ずパスワード管理ツールなどに保存してください。

ステップ2:システムにddclientをインストールする

UbuntuやDebianへのインストールは、apt を使って非常に素早く行えます。ターミナルを開き、以下のコマンドを実行してください。

sudo apt update
sudo apt install ddclient libjson-any-perl libdata-validate-ip-perl -y

青い設定画面(ncurses)が表示されることがありますが、Enter または Cancel を押してスキップして構いません。Cloudflareの最新のAPI v4と完全に互換性を持たせるため、設定ファイルは手動で作成します。

ステップ3:ddclientの詳細設定

/etc/ddclient.conf にある設定ファイルを開きます。既存の内容をすべて削除し、以下のコードを貼り付けてください。サーバーが多重NAT環境下にある場合でもWeb経由でIPを取得できるよう最適化してあります。

# /etc/ddclient.conf
use=web, web=checkip.dyndns.org
protocol=cloudflare
server=api.cloudflare.com/client/v4
login=token
password='YOUR_CLOUDFLARE_API_TOKEN'

# メインドメイン (Zone)
itfromzero.com

# サーバーを指し示すサブドメイン
home.itfromzero.com

重要な注意点:

  • use=web: ddclient がローカルIP(192.168.x.x)ではなく、実際のパブリックIPを取得できるようにします。
  • login=token: APIトークンを使用する場合の必須構文です。ここに個人のメールアドレスを入力する必要はありません。

ステップ4:権限設定と接続確認

設定ファイルには重要なトークンが含まれているため、アクセス権限を制限して漏洩を防ぎます。

sudo chmod 600 /etc/ddclient.conf
sudo chown root:root /etc/ddclient.conf

すべてが正しく設定されているか確認するために、以下のデバッグコマンドを実行します。

sudo ddclient -daemon=0 -debug -verbose -noquiet

画面に SUCCESS: updating home.itfromzero.com と表示されれば成功です。Cloudflareの管理画面をリロードして、DNSレコードが最新のIPに更新されていることを確認してください。

ステップ5:自動実行の設定

ddclient がシステム起動時に自動的に開始され、IPの変更を監視するようにサービスを有効化します。

sudo systemctl enable ddclient
sudo systemctl start ddclient

動作状況を確認するには、sudo systemctl status ddclient コマンドを使用します。デフォルトでは、スクリプトは5分ごとにIPをチェックします。IPに変更がない場合、CloudflareのAPIへの負荷を避けるため、何も行いません。

ホームラボ運用のための実践的なアドバイス

数年間、自宅でシステムを運用してきた経験から、非常に重要な3つのポイントをお伝えします。

  1. プロキシ(オレンジ色の雲)をオフにする: ドメインを使用してSSH接続やVPNを利用する場合、DNSレコードを Gray Cloud(DNSのみモード)に設定してください。CloudflareプロキシはHTTP/HTTPSのみをサポートしているため、オンにするとサーバーへのSSH接続ができなくなります。
  2. ログを確認する: IPが更新されない場合は、grep ddclient /var/log/syslog コマンドを使用してください。多くの場合、トークンの期限切れや設定ファイルの記述ミスが原因です。
  3. ルーターのポート開放: DDNSはあくまで「道案内」の役割です。サーバーにアクセスするには、ルーター側で ポートフォワーディング を設定し、サーバーのローカルIPに正しく転送する必要があります。

DDNSをマスターすることは、コストをかけずに個人サービスを自由に展開するための第一歩です。ぜひラボの構築に成功し、自宅でのプロフェッショナルなサーバー管理を楽しんでください!

Share: