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: [email protected]" \
-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)
    #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 ];then
		cResult=$(curl --insecure -X PUT "https://api.cloudflare.com/client/v4/zones/12346789abcdefghijklmnopqrstuvw/dns_records/zyxwvutsrqponmlkjihgfedcba9876543" \
		-H "X-Auth-Email: [email protected]" \
		-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


 

你可能感兴趣的:(路由器,ddns,路由器,openwrt)