openwrt自动更新cloudflare的域名解释实现DDNS

实例介绍在openwrt上用curl更新cloudflare的域名解释,以实现开机自动DDNS。

一、官方例子

例子连接:https://api.cloudflare.com/#dns-records-for-a-zone-list-dns-records

将例子简单化:

curl -X PUT "https://api.cloudflare.com/client/v4/zones/{主域名zoneID}/dns_records/{要做DDNS的域名ID}" \
-H "X-Auth-Email: 你cloudflare登陆EMAIL" \
-H "X-Auth-Key: 你的API Key" \
-H "Content-Type: application/json" \
--data '{"id":"{要做DDNS的域名ID}","type":"A","name":"{要做DDNS的域名}","content":"{要做DDNS域名的IP}","zone_id":"{主域名zoneID}","zone_name":"{主域名}"}'

 

二、定位数据

通过上面简单化的例子,关键是要获取三个KEY。

1,X-Auth-Key:可以在https://www.cloudflare.com/a/account/my-account 下找到,下面的Global API Key就是了。

2,主域名zoneID:

写一个*.sh文件,其中将{主域名}替换为你自己的,如我的就是: xxxx.com

#! /bin/sh
curl --insecure -X GET "https://api.cloudflare.com/client/v4/zones?name={主域名}&status=active&page=1&per_page=20&order=status&direction=desc&match=all" \
-H "X-Auth-Email: 你cloudflare登陆EMAIL" \
-H "X-Auth-Key: 你的API Key" \
-H "Content-Type: application/json" \

执行完之后,会看到,如:

{"result":[{"id":"12346789abcdefghijklmnopqrstuvw","name":"ztjal.info","status":"active","paused":false...后略

id后面的“12346789abcdefghijklmnopqrstuvw”就是主域名的zoneID

3,要做DDNS的域名ID

继续使用刚才的*.sh文件,其中将{要做DDNS的域名}替换为你自己的,如我的就是: myddns.xxxx.com

#! /bin/sh
curl --insecure -X GET "https://api.cloudflare.com/client/v4/zones/12346789abcdefghijklmnopqrstuvw/dns_records?type=A&name={要做DDNS的域名}&page=1&per_page=20&order=type&direction=desc&match=all" \
-H "X-Auth-Email: 你cloudflare登陆EMAIL" \
-H "X-Auth-Key: 你的API Key" \
-H "Content-Type: application/json" \

执行完之后,会看到,如:

{"result":[{"id":"zyxwvutsrqponmlkjihgfedcba9876543","type":"A","name":"myddns.ztjal.info","content":...后略

id后面的“zyxwvutsrqponmlkjihgfedcba9876543”就是要做DDNS的域名ID

 

三、测试

继续用回原来的*.sh文件,将其中要替换的内容都换成你自己的。这里的IP当然是换成你自己的。

#! /bin/sh
curl --insecure -X PUT "https://api.cloudflare.com/client/v4/zones/12346789abcdefghijklmnopqrstuvw/dns_records/zyxwvutsrqponmlkjihgfedcba9876543" \
-H "X-Auth-Email: your@email.com" \
-H "X-Auth-Key: 12709394abcdefg" \
-H "Content-Type: application/json" \
--data '{"id":"zyxwvutsrqponmlkjihgfedcba9876543","type":"A","name":"myddns.ztjal.info","content":"192.168.10.20","zone_id":"12346789abcdefghijklmnopqrstuvw","zone_name":"ztjal.info"}'

执行完,没意外就可以看到

{"result":{"id":"zyxwvutsrqponmlkjihgfedcba9876543","type":"A","name":"myddns.ztjal.info","content":"192.168.10.20",...后略

结果和上面第三步一样的,说明成功了。失败的是{"success":false...后略。

 

四、自动化脚本

放在路由器使用,肯定要全自动化,将上面用的*.sh文件内容换成下面的就行了,最后加权限crontab完成了。

#! /bin/shdonelog='/tmp/log/cf_done'if [ ! -f "$donelog" ]; thencurrent_ip=$(ifconfig|grep P-t-P|cut -d : -f 2|cut -d " " -f1)#current_ip=$(curl ifconfig.me)#echo "$current_ip"ip_a=$(echo "$current_ip"|cut -d "." -f1)#echo "$ip_a"#判断IP的A段,换成你自己的if [ $ip_a -eq 14 ];thencResult=$(curl --insecure -X PUT "https://api.cloudflare.com/client/v4/zones/12346789abcdefghijklmnopqrstuvw/dns_records/zyxwvutsrqponmlkjihgfedcba9876543" \-H "X-Auth-Email: your@email.com" \-H "X-Auth-Key: 12709394abcdefg" \-H "Content-Type: application/json" \--data '{"id":"zyxwvutsrqponmlkjihgfedcba9876543","type":"A","name":"myddns.ztjal.info","content":"'$current_ip'","zone_id":"12346789abcdefghijklmnopqrstuvw","zone_name":"ztjal.info"}')#echo $cResult# 截取 {"success":falsebbbbb=$(echo "$cResult"|cut -d "," -f1)cccccc=$(echo "$bbbbb"|cut -d ":" -f2)if [ "$cccccc" == "false" ] ; thenecho "cloudflare return false!"elseecho $cResult > $donelogecho "cloudflare done"fielseecho "cloudflare ip false!"fifi


 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部