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"