Featured image of post 自己动手写一个cf-ddns脚本

自己动手写一个cf-ddns脚本

写个cf-ddns脚本,并利用cron每5分钟执行一次

自己动手写一个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有好几种方法得到! 最简单的就是:

  1. 查看登录页的 [API-区域ID] 就是了

    image-20220816104617936

  2. 利用命令查询

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 令牌来拿到的

image-20220816105857322

一般来说,点进去都会有一个 Global API Key,查看你的 Global API Key就可以了

image-20220816110303939

然后你就可以顺利的拿到类似的数据:

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}'

上面所有的操作都是为这一步的,而且上面的数据是固定的,或者是你不主动修改不会变的,那么咱们就可以一劳永逸了,都干到这里了,随便写个脚本让cron5min执行一下

编写脚本

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

好的,已经一步到位了,暂时不愁了