openwrt自动更新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文件,其中将{主域名}替换为你自己的,如我的就是: ztjal.info

#! /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.ztjal.info

#! /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/sh

donelog='/tmp/log/cf_done'

if [ ! -f "$donelog" ]; then

	current_ip=$(ifconfig|grep P-t-P|cut -d : -f 2|cut -d " " -f1)
	#echo "$current_ip"

	ip_a=$(echo "$current_ip"|cut -d "." -f1)
	#echo "$ip_a"
	#判断IP的A段,换成你自己的
	if [ $ip_a -eq 14 ];then
		cResult=$(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":false
		bbbbb=$(echo "$cResult"|cut -d "," -f1)
		cccccc=$(echo "$bbbbb"|cut -d ":" -f2)
		if [ "$cccccc" == "false" ] ; then
			echo "cloudflare return false!"
		else
			echo $cResult > $donelog
			echo "cloudflare done"
		fi
	else
		echo "cloudflare ip false!"
	fi

fi
linux自写程序