自己动手写一个cf-ddns脚本
首先我建议你去看一下官网的api介绍,因为你需要了解的知识这里都写的清清楚楚.
https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record
了解如何修改dns记录:
从官网文档里可以看到以下信息:
1
|
PUT zones/:zone_identifier/dns_records/:identifier
|
首先我们需要了解的是:zones后面的:zone_identifier
参数是个啥? 在哪里搞到的.然后是dns_records后面的:identifier
参数又是个啥.
我也不拐弯抹角了,直接说了哈!
:zone_identifier查询
:zone_identifier
有好几种方法得到! 最简单的就是:
-
查看登录页的 [API-区域ID] 就是了
-
利用命令查询
1
2
3
4
|
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:b3373w343489u23n34340923b7we454873565" \
-H "X-Auth-Email:[email protected]"
|
当然这个时候你看到X-Auth-Key
肯定是懵逼的,那个email大概还可以猜得出来是登陆的邮箱,那这玩意又是个啥呢?
其实啊! X-Auth-Key == Global API Key
,
就是点击刚刚区域ID下面的获取您的 API 令牌来拿到的
一般来说,点进去都会有一个 Global API Key,查看你的 Global API Key就可以了
然后你就可以顺利的拿到类似的数据:
1
2
3
4
5
6
7
8
|
{
"result": {
"id": "63346566745de46456fe345u3473oe56",
... ...
"success": true,
"errors": [],
"messages": []
}
|
第一个id就是我们需要的!
:identifier查询
这一步是没办法了, 必须要整命令来查询了
1
2
3
4
|
curl -X GET "https://api.cloudflare.com/client/v4/zones/63346566745de46456fe345u3473oe56/dns_records?type=AAAA&name=example.top&match=all" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: e65080e7e929d926d600888a4fe3326ab5d73" \
-H "Content-Type: application/json"
|
注意: 这里的.../v4/zones/
后面的参数,就是刚刚前面查到的参数,然后不出意外,你又可以查到以下参数
1
2
3
4
5
6
|
{
"result": [{
"id": "xxx777xxx777xxx",
"zone_id": "63346566745de46456fe345u3473oe56",
... ...
}
|
这个id就是我们需要的 :identifier
了,然后,用上面所查到的所有参数,来构建我们最终需要修改DNS记录的一条命令
更新DNS记录
使用下面的命令进行更新IPv6的DNS记录
1
2
3
4
5
|
curl -X PUT "https://api.cloudflare.com/client/v4/zones/63346566745de46456fe345u3473oe56/dns_records/xxx777xxx777xxx" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: b3373w343489u23n34340923b7we454873565" \
-H "Content-Type: application/json" \
--data '{"type":"AAAA","name":"example.top","content":"2409:aaaa:aaaa:aaaa::1","ttl":1}'
|
上面所有的操作都是为这一步的,而且上面的数据是固定的,或者是你不主动修改不会变的,那么咱们就可以一劳永逸了,都干到这里了,随便写个脚本让cron
5min执行一下
编写脚本
1
2
3
4
5
6
7
8
|
#!/bin/sh
ipv6=`ifconfig enp2s0 | grep 2409 | awk '{print $2}'`
curl -X PUT "https://api.cloudflare.com/client/v4/zones/63346566745de46456fe345u3473oe56/dns_records/xxx777xxx777xxx" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: b3373w343489u23n34340923b7we454873565" \
-H "Content-Type: application/json" \
--data `echo '{"type":"AAAA","name":"xxx.example.com","content":"'$ipv6'","ttl":1}'`
|
1
|
*/5 * * * * sh /home/li/.bin/cf-ddns
|
好的,已经一步到位了,暂时不愁了