一,官方例子
例子连接:https://api.cloudflare.com/#dns-records-for-a-zone-list-dns-records
将例子简单化:
1 2 3 4 5 |
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
1 2 3 4 5 |
#! /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" \ |
执行完之后,会见到,如:
1 |
{"result":[{"id":"12346789abcdefghijklmnopqrstuvw","name":"ztjal.info","status":"active","paused":false...后略 |
id后边的“12346789abcdefghijklmnopqrstuvw”就是主域名的zoneID
3,要做DDNS的域名ID
继续用返刚才的*.sh文件,其中将{要做DDNS的域名}替换为你自己的,如我的就是: myddns.ztjal.info
1 2 3 4 5 |
#! /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" \ |
执行完之后,会见到,如:
1 |
{"result":[{"id":"zyxwvutsrqponmlkjihgfedcba9876543","type":"A","name":"myddns.ztjal.info","content":...后略 |
id后边的“zyxwvutsrqponmlkjihgfedcba9876543”就是要做DDNS的域名ID
三,测试
继续用返刚才的*.sh文件,将其中要替换的内容都换成你自己的。这里的IP当然是找成你自己的。
1 2 3 4 5 6 |
#! /bin/sh curl --insecure -X PUT "https://api.cloudflare.com/client/v4/zones/12346789abcdefghijklmnopqrstuvw/dns_records/zyxwvutsrqponmlkjihgfedcba9876543" \ -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"}' |
执行完,没意外就见到
1 |
{"result":{"id":"zyxwvutsrqponmlkjihgfedcba9876543","type":"A","name":"myddns.ztjal.info","content":"192.168.10.20",...后略 |
结果和上边第三步的一样的,就是成功了。失败的是{"success":false...后略。
四,自动化脚本
放系路由器度用,梗系要全自动先得,将上边用的*.sh文件内容换成下边的就得了,最后自己加crontab完成了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#! /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-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 |