Cloudflare DDNS
グローバル IPv4 を取得し、Cloudflare の A レコードを更新する。
IP が変わったときだけ更新し、任意で Discord に通知する。スクリプト本体は ddns/cloudflare-ddns.sh。
必要なもの
curljq- Cloudflare API トークン(対象 Zone の DNS Edit 権限)
セットアップ
- スクリプトを配置する
sudo install -m 755 cloudflare-ddns.sh /usr/local/bin/cloudflare-ddns.sh
- 設定ファイルを作成する
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 通知 |
- 動作確認
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
動作概要
- 複数ソースからグローバル IPv4 を取得
- Cloudflare 上の現在の A レコードと比較
- 差分がある場合のみ更新
- 更新成功・失敗時に Discord 通知(Webhook 設定時)