cloudflare官方案例文档使用脚本更新案列详解【DDNS动态域名解析】


Cloudflare API V4来制作DDNS脚本 文档


必需项

  • Global API Key【全局令牌】
  • 账户邮箱
  • 用Cloudflare解析的DNS的域名

获取账号Global API Key【全局密钥】

打开页面点击查看获取令牌

更新域名IP的流程

用域名获取属于域名的Zone ID ->
用Zone ID获取records ID ->
用Zone ID和records ID更新域名

请求头固定参数

Content-Type:application/json
X-Auth-Email:email@gmail.com                     #这里放邮箱
X-Auth-Key:fad44cfad44cfad44cfad44cvfad44cfad44C #放Global API Key

获取ZONE ID

根域名用name.com作为演示

#GET 请求链接
https://api.cloudflare.com/client/v4/zones?name=name.com

#返回结果 截取部分
{
    "result": [
        {
            "id": "00e3500e3500e3500e3500e3500e3511",
            "name": "name.com",
            "status": "active",
            "paused": false,
            "type": "full",
            "development_mode": 0,
            "name_servers": [
                "jonah.ns.cloudflare.com",
                "rihana.ns.cloudflare.com"
            ],
        }
    ],
.....
}

获取到Zone ID=00e3500e3500e3500e3500e3500e3511

获取records ID

#GET 请求链接 zones/后面接Zone ID
https://api.cloudflare.com/client/v4/zones/00e3500e3500e3500e3500e3500e3511/dns_records

#返回结果 截取部分
{
    "result": [
        {
            "id": "2be73022be73022be73022be73022be7",
            "zone_id": "00e3500e3500e3500e3500e3500e3511",
            "zone_name": "name.com",
....
}

获取到records id=2be73022be73022be73022be73022be7

更新域名解析

PUT 请求链接
https://api.cloudflare.com/client/v4/zones/00e3500e3500e3500e3500e3500e3511/dns_records/2be73022be73022be73022be73022be7
要带json数据Data发送
id=records_id
type=记录类型
name=域名或二级域名
content=内容
proxied=云朵 是否开启cdn代理加速
{"id":"2be73022be73022be73022be73022be7","type":"A","name":"name.com","content":"1.1.1.1","proxied":false}

更新成功

返回
{
    "result": {
        "id": "00e3500e3500e3500e3500e3500e3511",
        "zone_id": "2be73022be73022be73022be73022be7",
        "zone_name": "name.com",
        "name": "www.name.com",
        "type": "A",
        "content": "1.1.1.4",
        "proxiable": false,
        "proxied": false,
......
}

ddns.sh代码在GitHub上开源 欢迎使用

点击查看代码
#!/bin/bash
###############  [CloudFlare DDNS] 授权信息(需修改成你自己的) ################ xiajibashe
# CloudFlare 注册邮箱
email="qq@email.com"
# CloudFlare Global API Key,
GAK="11231232132413241325qwdqer1312312345e"
# 做 DDNS 的根域名
zone_name="ym.com" 
# 更新的二级域名,如果想不用,直接填写根域名
record_name="www.ym.com"
# 域名类型,IPv4 为 A,IPv6 则是 AAAA
record_type="A"
# 是否代理dns解析 cdn加速。否:false 是:true。  dns页面的小云朵
proxy="false"
##外网api
ipv4api="https://api.ipify.org/"
ipv6api="https://api6.ipify.org/"

#获取IP地址
if [ $record_type = "A" ];then
    ip=`curl -ksG ${ipv4api}`        
else
    ip=`curl -ksG ${ipv6api}`     
fi

#pushplus TOKEN 一对一
#一对一token
pushtoken="dasdadasd123213sdasd"
#一对多 群组代码 不推就不填
pushtpoic=""
#推送标题
pushtitle="CloudfalreDNS-Update"
#推送内容
pushcontent=`echo $ip`

#start Get zone identifier
zone_id=`curl -ksX GET "https://api.cloudflare.com/client/v4/zones?name=${zone_name}" -H "X-Auth-Email: ${email}" -H "X-Auth-Key: ${GAK}" -H "Content-Type: application/json" | cut -b 19-50`
record_id=`curl -ksX GET "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records" -H "X-Auth-Email: ${email}" -H "X-Auth-Key: ${GAK}" -H "Content-Type: application/json" | cut -b 19-50`

#update
curl -ksX PUT "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id}" -k -H "X-Auth-Email: ${email}" -H "X-Auth-Key: ${GAK}" -H "Content-Type: application/json" --data "{\"id\":\"$record_id\",\"type\":\"$record_type\",\"name\":\"$record_name\",\"content\":\"$ip\",\"proxied\":$proxy}"

#push
curl -ksX GET "http://www.pushplus.plus/send?token=${pushtoken}&title=${pushtitle}&content=${pushcontent}&template=html&topic=${pushtpoic}"

echo -e "\n\n---------------------------------"
echo "[CloudFlare]" "${record_name} : ${ip}"
echo -e "---------------------------------\n\n"
nslookup ${record_name}
echo -e "\n\n---------------------------------\n\n"