為 Cloudflare 設定動態 DNS (DDNS)

在家裡架設小型伺服器,卻因為網路供應商只提供動態 IP 地址而感到煩惱?市面上有不少產品提供動態 IP 轉址,如 dydns 及 No-IP 等,不過今年迅速興起的 Cloudflare 提供快速且免費的 CDN 服務,有效提升網頁內容傳送速度,吸引不少中小企業、開發者及家庭用家使用。Cloudflare 本身沒有提供任何軟件方便使用者更新 IP 位址,但幸好它提供 Cloudflare API,利用第三方軟件或自行撰寫 Shell script 更新 IP。

利用 Shell Script 及 Crontab 定期更新 (Mac / Linux 適用)

使用 Shell Script 更新必須事先知道該域名的 DNS Record ID,執行以下指令以獲得所有域名的資訊:

curl https://www.cloudflare.com/api_json.html -d 'a=rec_load_all' 
  -d 'tkn=CloudFlare_API_Key' 
  -d 'email=CloudFlare_Email_Address' 
  -d 'z=mydomain.com'

更改 CloudFlare_API_Key 為你的 API Key,可以在 Cloudflare 賬戶管理中取得。
更改 CloudFlare_Email_Address 為你的登記電郵。
更改 mydomain.com 為適用的域名。

你會獲得一堆 JSON 格式的文字,利用網上的 JSON 檢視工具以方便閱讀。

尋找適當的 name 及 type (A record) 及記下 rec_id。接著使用自選的文字編輯器建立 Shell script:

#!/bin/sh
NEW_IP=`curl -s http://ip.appspot.com`
CURRENT_IP=`cat /var/tmp/current_ip.txt`

if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "No Change in IP Adddress"
else
        curl https://www.cloudflare.com/api_json.html \
          -d 'a=rec_edit' \
          -d 'tkn=Cloudflare_API_Key' \
          -d 'email=Cloudflare_Email_Address' \
          -d 'z=mydomain.com' \
          -d 'id=rec_id' \
          -d 'type=CloudFlare_Record_Type' \
          -d 'name=CloudFlare_Record_Name' \
          -d 'ttl=1' \
          -d "content=$NEW_IP"
        echo $NEW_IP > /var/tmp/current_ip.txt
fi
  • 更改 CloudFlare_API_Key 為你的 API Key,
  • 更改 CloudFlare_Email_Address 為你的電郵,
  • 更改 mydomain.com 為你的網域,
  • 更改 CloudFlare_Record_ID 為 JSON 結果中得 rec_id,
  • 更改 CloudFlare_Record_Type 為 A,也可以是 CNAME、AAAA、MX、SRV 等等,
  • 更改 CloudFlare_Record_Name 為你想設定為 DDNS 的子域名,如 www,但不包括 mydomain.com。

把檔案放到你喜歡的地方,如 ~/Scripts,儲存為 cloudflare_ddns.sh (副檔名必須為 .sh)。把 cloudflare_ddns.sh 設定為可執行檔案:

chmod +x cloudflare_ddns.sh

然後在 /var/tmp 建立一個空的 current_ip.txt 純文字檔案:

touch /var/tmp/current_ip.txt

建立自動排程,於 Terminal 終端機輸入

crontab -e

按一下 i 進入 insert 模式,並輸入

*/120 * * * * ~/Scripts/cloudflare_ddns.sh

120 代表每 120 分鐘更新一次,你可設定為更少數值,如 60 分鐘、30 分鐘或 5 分鐘。
然後按 Esc,再按 :wq 儲存並關閉修改器。

適用於 Windows 的 Cloudflare DDNS 更新軟件

以下軟件都能支援 Cloudflare 更新動態 IP 地址: