Cloudflare的API IPv6DDNS

image-20230311073944680

image-20230311074022666

image-20230311074036766

获取Record_ID

vi get_Record_ID.sh,按I键进入编辑模式,粘贴以下内容,修改其中的信息为你自己的,然后按Esc键,输入:wq保存并退出..

# 帐号邮箱
Auth_Email="uo****@163.com"

# 是API_Key,相当于密码,不是API_token
API_Key="2939ac************4bfe50557b45d421c36"

# 域名ID,顶级域名的ID
Zone_ID="98080********b9f21e63bc33aef06be"

# 记录类型 IPv4是A IPv6是AAAA
Record_Type="AAAA"

# 完整的二级域名,例如 tieba.baidu.com
Domain_FullName="ha***s.20**02.xyz"

curl -X GET "https://api.cloudflare.com/client/v4/zones/${Zone_ID}/dns_records?type=${Record_Type}&name=${Domain_FullName}&page=1&per_page=100&order=type&direction=desc&match=all" \
     -H "X-Auth-Email: ${Auth_Email}" \
     -H "X-Auth-Key: ${API_Key}" \
     -H "Content-Type: application/json"
	 

chmod +x get_Record_ID.sh,授权脚本执行权限

./get_Record_ID.sh,执行脚本获取Record_ID,其中ID就是Record_ID

提交IPv6DDNS

vi ipv6ddns.cloudflare.sh,按I键进入编辑模式,粘贴以下内容,修改其中的信息为你自己的,然后按Esc键,输入:wq保存并退出

# 帐号邮箱
Auth_Email="uo****@163.com"

# 是API_Key,相当于密码,不是API_token
API_Key="2939a********596394bfe50557b45d421c36"

# 域名ID,顶级域名的ID
Zone_ID="98080********b9f21e63bc33aef06be"

# 记录类型 IPv4是A IPv6是AAAA
Record_Type="AAAA"

# 记录ID 每一条记录都有一个ID,需要用上面API获取
Record_ID="08f24********097e467f478e038aca6"

# 记录的名称,不带顶级域名 例如 blog
Record_Name="ha***s"

# 实际的IPv6公网
old_IPv6=`cat old_ipv6.txt`
IPv6=`curl 6.ipw.cn`


   

echo "当前时间: "`date "+%F %T"`
echo "Auth_Email: "${Auth_Email}
echo "API_Key: "${API_Key}
echo "Zone_ID: "${Zone_ID}
echo "Record_Type: "${Record_Type}
echo "Record_ID: "${Record_ID}
echo "Record_Name: "${Record_Name}
echo "上次的IPv6公网: "${old_IPv6}
echo "当前的IPv6公网: "${IPv6}

update_Record(){
	curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${Zone_ID}/dns_records/${Record_ID}" -H "X-Auth-Email: ${Auth_Email}" -H "X-Auth-Key: ${API_Key}" -H "Content-Type: application/json" --data "{\"id\":\"${Zone_ID}\",\"type\":\"${Record_Type}\",\"name\":\"${Record_Name}\",\"content\":\"${IPv6}\"}"
}


if [ ${IPv6} = ${old_IPv6} ]; then
    echo "IPv6和上次相同,不提交"
	#如果需要每次都强制提交,那么取消下面这行注释
	#`update_Record`
else
    echo "IPv6和上次不同,需要提交"
    `update_Record`
fi


#最后要把当前的IPv6记录到文件,供下次对比
echo ${IPv6} >  old_ipv6.txt

#把每次的IPv6都记录下来,供查询多久变动一次IPv6
echo `date "+%F %T"`" "${IPv6} >> ipv6ddns.log

chmod +x ipv6ddns.cloudflare.sh,授权脚本执行权限

./ipv6ddns.cloudflare.sh,执行脚本提交动态域名解析,第一次提交时显示一个错误,需要一元表达式,可以无视,第二次就不会出现了,这是因为第一次执行,没有old_ipv6.txt这个文件导致的

设置定时任务

#如果没有安装,那么就安装一下  apt install cron,第一次进入要选择默认编辑器
crontab -e

#按I键进入编辑模式,粘贴以下内容,然后按Esc键,输入:wq保存并退出
#新起一行,写入以下内容,
*/5 * * * * /root/ipv6ddns.cloudflare.sh #这里填入你脚本的实际位置 */5表示每5分钟执行一次


#此时就已经定期执行DDNS了