Cloudflare DDNSスクリプト

Internet

 (写真は飯テロ、記事は小ネタです)

 我が家では、IPoEとPPPoEの2セッションでインターネット接続しており、このうち、PPPoEのセッションは、Sophos Firewall (仮想マシン)で接続、定義したDMZネットワークに配備したサーバをインターネットに実験公開しています。IPoEはOpenWrt仮想マシンでの接続です。

 PPPoE セッションの切断、再接続により、プロバイダから割り当てられるグローバル IP アドレスが変更となるため(固定 IP サービス未契約の場合)、サーバ公開のためには、都度 DNS レコードを自動更新する必要があります。

このシェルスクリプトは、Cloudflare API を利用して、指定したドメインの A レコードを現在のPPPoEセッションに割り当てられたグローバル IP アドレスに自動更新するものです。
(スクリプト自体は、常時稼働中のPhotonOS仮想マシンで定期的に実行しています)

#!/bin/sh

# 設定セクション
domain="mydomain.com"  # 管理するドメイン名
target_hostname="www"  # 更新対象のホスト名
target_domain="${domain}"  # 完全修飾ドメイン名(FQDN)

# API アクセス情報

# Cloudflare ゾーンID(ドメインに対応)
zone_id="ssssttttuuuuvvvvwwwwxxxxyyyyzzzz"

# DNSレコードID(更新対象のDNSレコード)
dns_record_id="xx11yy22zz33aa44bb55cc66dd77ee88"

# Cloudflare 認証用のメールアドレス
mailaddr="its-me@mydomain.com"

# Cloudflare APIトークン
api_token="Token11112222333344445555666677778888000"

# 現在のグローバルIPアドレスを取得
current_global_ip_addr=$(curl -s https://inet-ip.info)  # Webサービスを利用して現在のグローバルIPを取得

echo "Current:${current_global_ip_addr}"  # 取得したIPアドレスを表示
echo "-"

# 現在のDNSレコードに設定されているIPアドレスを取得
domain_ip_addr=`dig ${target_hostname}.${domain} +short`  # DNSで設定されているIPアドレスを取得

echo "domain_ip_addr:$domain_ip_addr"  # DNSのIPアドレスを表示
echo "-"

# IPアドレスが異なる場合は更新
if [ "${current_global_ip_addr}" != "${domain_ip_addr}" ]; then
  # CloudflareのAPIを使用してDNSレコードを更新
  curl --request PUT \
    --url https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$dns_record_id \
    --header 'Content-Type: application/json' \
    --header "X-Auth-Email: $mailaddr" \
    --header "Authorization: Bearer $api_token" \
    --data '{
      "content": "'"$current_global_ip_addr"'",
      "name": "'"${target_hostname}.${domain}"'",
      "proxied": false,
      "type": "A",
      "comment": "Domain verification record"
    }'

  echo "Update ${domain_ip_addr} => ${current_global_ip_addr}"  # 更新結果を表示

else
  echo "NOP"  # IPが一致する場合は何もしない
fi

 当初、DNSゾーンの管理には「お名前.com DNS管理サービス」を利用していました。

 お名前DNSでも、lets’ encrypt ワイルドカード SSL 証明書の初回取得はできたのですが、自動更新のやり方がわからず、ネームサーバを お名前.comからCloudflare に変更しました。

ネームサーバの移行によって、DDNSスクリプトもCloudflare管理となるDNSレコードを書き換える必要がありましたので、お名前.com用スクリプトをCloudflare用に書き換えたものです。

 考え方は同じ(現在のIPアドレスとDNSレコードが異なる場合、DNSレコードの更新処理を実行)でしたので、DNSレコードの更新処理の箇所だけ、簡単な差し替えで済みました。

コメント

タイトルとURLをコピーしました