更新をすべて自動化
前回の記事ではワイルドカードの取得を行いました。
今回は、Cloudflare AレコードのIPアドレスを自動更新する方法
をシェアします。更新にはSynology NASを使っています。
CloudFlare DNSレコード自動更新する
動的IPアドレスの場合、NASのIPアドレスが変更されてしまうと外部からアクセス
できなくなってしまいます。
IPアドレスが変更するたびにCloudFlareのサイトを開いてIPアドレスを更新する必要がありますが、外出先では変更されてしまったNASのIPアドレスを知ることは難しいと思います。
Synology NASにはDDNS更新機能があるので対応しているDDNSを使用していれば自動でDDNSを更新してくれますが、標準ではCloudFlareには対応していません。
そのため、自分でDNSレコードを更新するスクリプトを用意して自動更新させましょう。
自動更新スクリプトを編集
Github gistでスクリプトが公開されているので使わせてもらいます。
https://gist.github.com/lifehome/eb3f7d798f9bc6720cdc7d2be1238d4f
ソースをコピーして 改行コード 「LF」 文字コード 「UTF-8」で ファイル名を
「cloudflare_ddns.sh」などにして保存します。
変更すべきところは以下です。
auth_email=”[email protected]”
CloudFlareに登録したメールアドレスを入力。
auth_key=”f1nd7h47fuck1n6k3y1ncl0udfl4r3c0n50l3″
グローバルAPIキーを入力。
「Overview」「Get your API key」「Global API Key」「View」で確認できます。
zone_identifier=”f1nd7h3fuck1n6z0n31d3n71f13r4l50″
ゾーンIDを入力。
「Overview」「Domain Summary」「Zone ID」に表示されています。
record_name=”example.org”
登録しているドメイン名を入力。

CDN (HTTPプロキシ)を使う場合はスクリプトの38行目の
proxied“:falseをproxied“:true にします。
編集が終わったら、File StationやFTPなどでアップロードします。
場所はタスクスケジューラーが読み込める場所であればOKです。
たとえば、以下のように配置します。
/volume1/script/cloudflare_ddns.sh
タスクスケジューラーで実行
SSHで動作確認する場合は
/volume1/script/cloudflare_ddns.sh
で実行。
IP synced to xxx.xxx.xxx.xxx
などと表示されれば更新できているはずです。
NASのローカルIPアドレスを入力してからDSMのコントロールパネル開きます。
(ドメインのURLだと以下の確認のとき失敗します。)
「タスクスケジューラー」を開いて新規のタスクを作成します
「予約タスク」「ユーザー指定のスクリプト」
コマンドを以下のように設定します。

スケジュールは30分毎くらいにしておきましょう。
CloudFlareのDNSレコード管理画面を開いて、手動でIPアドレスをでたらめな
ものに変更したあと、このスクリプトをタスクスケージューラーから実行してみます。
成功すればすぐに反映されるのでCloudFlareの画面でIPアドレスがNASのものに
なっているはずです。
うまく更新できないときは
紹介したスクリプトでは動作しないこともあるようです。
その場合は別のスクリプトを試してみましょう。
https://gist.github.com/benkulbertis/fff10759c2391b6618dd
同じように、LF、UTF-8でスクリプトを保存します。
少し変更箇所が変わります。
auth_email=”[email protected]”
Cloudflareに登録したメールアドレス
auth_key=”c2547eb745079dac9320b638f5e225cf483cc5cfdda41″
グローバルAPIキーを入力
zone_name=”example.com”
ドメイン名
record_name=”example.com”
同じようにドメイン名を入力
ip_file=”ip.txt”
絶対パスに直します。/volume1/script/ip.txt
id_file=”cloudflare.ids”
同様に /volume1/script/cloudflare.ids
log_file=”cloudflare.log”
/volume1/script/cloudflare.log
Synology NASで利用する場合、ログの場所ををスクリプトを置くディレクトリと同じところを絶対パスで入力しないと、タスクスケジューラーで動かしたときにうまくいきません。
スクリプトをアップロードして先ほどと同じように実行してみます。
更新されない場合は、APIキーなどの設定を見直してみましょう。
もしくは、少し時間を置いてスクリプトを実行してみてください。

参考メモ
以下をSSHで実行することで、DNSレコードの詳細が確認できます。
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/[ゾーンID]/dns_records" -H "X-Auth-Email: [メールアドレス]" -H "X-Auth-Key: [APIキー]" -H "Content-Type: application/json"