Skip to content

Cloudflare DDNS

グローバル IPv4 を取得し、Cloudflare の A レコードを更新する。
IP が変わったときだけ更新し、任意で Discord に通知する。スクリプト本体は ddns/cloudflare-ddns.sh

必要なもの

  • curl
  • jq
  • Cloudflare API トークン(対象 Zone の DNS Edit 権限)

セットアップ

  1. スクリプトを配置する
sudo install -m 755 cloudflare-ddns.sh /usr/local/bin/cloudflare-ddns.sh
  1. 設定ファイルを作成する
sudo cp cloudflare-ddns.env.example /etc/cloudflare-ddns.env
sudo chmod 600 /etc/cloudflare-ddns.env
sudo edit /etc/cloudflare-ddns.env
変数 必須 説明
CF_API_TOKEN Cloudflare API トークン
CF_ZONE_ID Zone ID(未設定時は CF_ZONE_NAME が必要)
CF_ZONE_NAME Zone 名(例: example.com)。CF_ZONE_ID があれば不要
CF_RECORD_NAME 更新する A レコード(例: mail.example.com
CF_TTL TTL(秒)
CF_PROXIED Cloudflare Proxy の有無(true / false
DISCORD_WEBHOOK_URL × 設定時のみ Discord 通知
  1. 動作確認
sudo /usr/local/bin/cloudflare-ddns.sh

設定ファイルのパスを変える場合:

ENV_FILE=/path/to/cloudflare-ddns.env /usr/local/bin/cloudflare-ddns.sh

cron 例

5 分ごとに実行する場合:

*/5 * * * * /usr/local/bin/cloudflare-ddns.sh >> /var/log/cloudflare-ddns.log 2>&1

動作概要

  1. 複数ソースからグローバル IPv4 を取得
  2. Cloudflare 上の現在の A レコードと比較
  3. 差分がある場合のみ更新
  4. 更新成功・失敗時に Discord 通知(Webhook 設定時)