【2019年版】cloudflareでDDNS、shとcronだけでできるぞ!!

スポンサーリンク

cloudflareでDDNS

皆さんこんにちは、今回はDDNSの話。

cloudflareは公式ではDDNSに対応していませんがAPIを発行しておりそれを利用することでDDNSができます。
ちなみにDDNSは固定じゃない動的なグローバルIPにDNSを対応させる技術名称(だとおもう)

仕組みとしてはサーバーに一定時間ごとにグローバルIPを取得させそのIPをcloudflareに登録するというやり方。

つまりグローバルIPが変わった瞬間に更新はできないが更新間隔を短くするとこである程度対応できる。

だがまあ、グローバルIPはルーターの設定をいじったりプロバイダによって不定期なのでそんなに問題ないとは思うが。

では早速やり方を紹介。

shを利用

とある外人の方がcloudflareのAPIを利用したコードを作っているのでそちらを使わさせてもらいます。

このページの「cfupdater-v4」のソースコードをわかり易い名前で保存します。
例: [変更するドメイン]_ddns.sh 等

改行コードは「LF」で文字コードは「UTF-8」がいいとのこと
参照記事: https://tabikumo.com/ddns-auto-update-script/

あとはこのshを一部編集します。

# Forked by benkulbertis/cloudflare-update-record.sh
# CHANGE THESE
auth_email="cloudflareに登録したメールアドレス" # The email used to login 'https://dash.cloudflare.com’
auth_key="プロフィールからglobal apiでわかります" # Top right corner, “My profile" > “Global API Key"
zone_identifier="ドメインのOverViewでわかります" # Can be found in the “Overview" tab of your domain
record_name="ここに変更するドメインのフル(サブドメインも含む)" # Which record you want to be synced

record_nameはipv4のものを今回は指定します。
例: example.orgのサブドメイン(test)にIPを指定する場合は
test.example.org
という感じに指定

cronに登録

とりあえず先程のshは任意の場所に入れてください。
自分はホームディレクトリにshフォルダを作りそこに格納しました。

readmeによると他のファイルを/usr/local/binに格納するよう指示されていますが自分の環境ではcronで自動実行させるので問題ないです(実行時エラーが出ると思いますがちゃんと同期されるので大丈夫です。)

次にshフォルダにcdして、「vi ddns.conf」を実行して以下のように記述
*/10 * * * * /home/ホームディレクトリ/sh/ 設定した名前_ddns.sh

上の記述は10分おきにshフォルダにある、ddns.shを起動するよう指示されています。

ちなみに感覚を短くしすぎるとスパム扱いされるので短くても5分にしましょう。

また複数のshを指定する場合は改行してconfに記述してください。

後はddns.confを保存、「crontab ddns.conf」を実行することでcronに登録され10分おきにshが起動します。
cronを確認する場合は「crontab -l」

テスト

試しにcloudflareの設定したドメインのIPを適当に変更して、サーバーでshを叩いてみます。

まずは適当なIPを指定、次に「sh /(ddns.shまでのフルパス)」を実行
例:「sh /home/ホームディレクトリ/sh/(設定した名前)_ddns.sh」

これでIP synced toと出て、cloudflareの画面を更新するとちゃんとIPが更新されているはずです。

お疲れ様でした。