CloudFlare DDNS をスクリプトで自動更新 Synology NAS

更新をすべて自動化

前回の記事ではワイルドカードの取得を行いました。

freenom+Cloudflare+Synology NASでhttps 独自ドメイン運用 (Let’s Encrypt ワイルドカードSSL対応)
今回は、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 StationFTPなどでアップロードします。
場所はタスクスケジューラーが読み込める場所であればOKです。

たとえば、以下のように配置します。

/volume1/script/cloudflare_ddns.sh

タスクスケジューラーで実行

SSHで動作確認する場合は

SSH
sh /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

[aside type=”warning”]ログの場所ををスクリプトを置くディレクトリと同じところを絶対パスで入力しないと、タスクスケジューラーで動かしたときにうまくいきません。[/aside]

スクリプトをアップロードして先ほどと同じように実行してみます。

更新されない場合は、APIキーなどの設定を見直してみましょう。

参考メモ

以下をSSHで実行することで、DNSレコードの詳細が確認できます。

SSH
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"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です