使用 CloudFlare API 实现动态 DNS

在ChatGPT的帮助下我有了以下脚本:

#/bin/bash
# 设置Cloudflare的API密钥、电子邮件地址和区域ID
api_key=""
email=""
zone_identifier=""
record_identifier=""

# 设置要更新的DNS记录的信息

record_name="aaa.example.com"
proxied=false
record_type="AAAA"
comment="IPv6 update"
#以IPv6为例
ipv6_address=""

curl --request PUT \
    --url "https://api.cloudflare.com/client/v4/zones/${zone_identifier}/dns_records/${record_identifier}" \
    --header 'Content-Type: application/json' \
    --header "X-Auth-Email: ${email}" \
    --header "X-Auth-Key: ${api_key}" \
    --data "{
    \"content\": \"${new_ipv6_address}\",
    \"name\": \"${record_name}\",
    \"proxied\": ${proxied},
    \"type\": \"${record_type}\",
    \"comment\": \"${comment}\"
}"

其中的空项大都可以通过登录CloudFlare查询到。需要注意的是record_identifier一项,它也需要通过api获取:

#curl -X GET "https://api.cloudflare.com/client/v4/zones/$zone_ID/dns_records"      -H "X-Auth-Email: "      -H "X-Auth-Key: "      -H "Content-Type: application/json"

在上述命令中替换上自己的zone_ID、电子邮件和X-Auth-Key即可获得一个包含了record_identifier.json文件。

至于我为什么以IPv6为例呢?看到DDNS,看到IPv6...自然是因为可以通过这样来实现用家里云提供公网服务啦。