使用 shell script 更新 cloudflare 的 DNS 記錄

 記錄一下使用 shell script 更新 cloudflare 的 DNS 記錄(DDNS)

 工作環境:
    Linux
        curl
        jq

使用 curl 和 cloudflare API 溝通,就可以達成更新 DNS 記錄的目的,基本上就是提供 zone ID 和 API Token 給 cloudflare ,指定要更新的域名(FQDN),當然,要抓到目前使用的「對外」的 IP 位址一併提供

 範例:updateCfDDNS flkjfldajldfj ddns.your.domain lfkdalfjldjf;lajd;lf

#!/bin/sh
# update DDNS records with curl using cloudflare API
# input: zoneID, FQDN, APIToken, get internet IP addr.
# output: none but DNS record update dynamicly
# pre-requirements: config cloudflare API token
# post-requirement: config crontab to update DDNS regularly
# usage: updateCfDDNS zoneID FQDN APIToken

if [ -z $1 ]
        then
                echo "please provide zoneId, fqdn, apiToken, thank you..."
else

MYIP=`curl https://ipinfo.io/ip`

RECID=`curl -X GET "https://api.cloudflare.com/client/v4/zones/${1}/dns_records?name=${2}" -H "Authorization:Bearer ${3}" -H "Content-Type: application/json" | jq -r ".result[] | select(.name == (\"${2}\")) | .id"`

curl -X PUT "https://api.cloudflare.com/client/v4/zones/${1}/dns_records/${RECID}" -H "Authorization: Bearer ${3}" -H "Content-Type: application/json" --data '{"type":"A","name":"'${2}'","content":"'${MYIP}'","ttl":120,"proxied":false}'

fi

先在 cloudflare 管理頁面把目標網域名稱的 IP 設成 1.2.3.4 之類的值,執行後如果 IP 改好了,就是成功了

成功後再把這個 script 加到 crontab 裏,它就會定時更新 DDNS 了



收工!



============================================

手動查詢的相關指令:

curl -X GET https://api.cloudflare.com/client/v4/zones/"$1"/dns_records?name="$2" -H Authorization:Bearer "$3" -H Content-Type: application/json | python -m json.tool

curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records?name=FQDN_TO_UPDATE" -H "Authorization:Bearer API_Token_HERE" -H "Content-Type: application/json" | jq -r ".result[] | select(.name == (\""$2"\")) | .id + \":\" + .name"

在 windows 環境下配置 batch 批次檔:注意 cmd 不支援 ' 單引號,所以 --data 有用到單引號的部份("'  '"),要用 \" 的方式來替代,不然會出現類似資料格式還是內容不符、更新失敗的錯誤訊息

 

留言

這個網誌中的熱門文章

使用 Excel 計算2個地點之間的直線距離

LINE 儲存的檔案傳到 email 不方便 很不方便 非常不方便 但是有解的筆記

合併列印標籤漏印