CloudFlare上のDNS設定を行うスクリプトでいいものがないか探していたところ、cf-ddnsコマンドがpipで簡単に用意できて良さげだった。
実際に使ってみるとAPI Tokenが使える上に複数ドメインも対応可能とかなり便利だったのでメモしておく。
参考
確認環境
- Ubuntu 18.04.03
手順
CloudFlareのAPI Tokenを作成
Global API Keyでも設定可能だが漏れた時に何でもできてしまうのは気分が良くないので、DNSの編集のみ可能なAPI Tokenを作成して使用する。
- CloudFlareのダッシュボードにアクセスし、右上から「My Profile」をクリック。

- 「API Tokens」から「Create Token」をクリック。

- 「Token name」に適当な名前を入れる。
- Permissionsに以下の2つの権限を設定
- [Zone][DNS][Edit]
- [Zone][Zone][Read]
- 「Continue to summary」をクリック。

- 「Create Token」をクリック。

- この画面で設定に必要なAPI Tokenが表示されます。
再表示はできないため、どこか安全なところへ忘れずコピーしておきましょう。

cf-ddnsのインストール
Pythonの実行環境とpipを用意し、cf-ddnsをインストール。
sudo apt install -y python python-pip
pip install --upgrade cf-ddns
動作確認としてコマンドを実行。
以下はsubdomain.domain.tldというサブドメインのIPを変更する例。
env CF_API_TOKEN={CloudFlareのAPI Token} cf-ddns --name subdomain.domain.tld
CRONへの自動実行設定
CRONは環境によって読み込むパスが異なるので、安心のためにフルパスを調べて設定する。
which cf-ddns
>/home/{user}/.local/bin/cf-ddns
「crontab -e」等で以下のように設定を入れる。
以下の例では、サブドメインを空白で区切って2つ指定している。
API Tokenを指定する環境変数はコマンドより上になるよう注意する。
#Environment Variables for CloudFlare DDNS
CF_API_TOKEN={CloudFlareのAPI Token}
# m h dom mon dow command
*/30 * * * * /home/{user}/.local/bin/cf-ddns --name subdomain1.domain.tld subdomain2.domain.tld
コメント