自动更新 Cloudflare 中的域名解析记录为最快 IP(Windows/Linux 脚本+手动教程)
自动更新 Cloudflare 中的域名解析记录为最快 IP(Windows/Linux 脚本+手动教程)
First一、获取 API 令牌
任何 API 操作都需要提供账号邮箱和 API 令牌用来验证身份。
- 前往 Cloudflare API 令牌页面。
- 点击
Global API Key
后面的 [查看] 按钮。 - 输入 Cloudflare 账号的 密码 ,并通过人机验证。
- 点击复制 API 令牌并保存好。
二、准备依赖
我比较习惯用 cURL 来 POST 提交数据,所以以下用的都是 cURL 命令。
Linux 系统
虽然大部分的 Linux 系统都自带了 cURL,但是还是提前检查一下是否已安装:
curl --help |
如果提示没找到命令,那么就需要手动安装了:
# CentOS 系统 |
三、获取域名 ID
域名 ID 指的是你在 Cloudflare 中托管一级/顶级域名的 ID(如 xxx.yyy
,而不是子域名)。
注意 :以下的 命令都是一个整体 ,修改后要 一起粘贴、运行 ,
\
和^
符号是命令分行用的,这样写方便大家理解。
Linux 系统
curl -X GET "https://api.cloudflare.com/client/v4/zones" \ |
四、查找域名 ID
运行命令后,会输出一大串 JSON 内容,因为没有经过格式化,所以看起毫无可读性,可以随便找个在线 JSON 格式化网站,复制 JSON 内容到左边输入框中即可在右边看到格式化后的 JSON 内容,然后 找到以下内容 :
注意 :复制 JSON 内容去格式化的时候,别复制错了,JSON 是以
{
开头,以}
结尾的。
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", |
id | 域名 ID |
name | 托管在 Cloudflare 的(顶级/一级)域名 |
保存好这个域名 ID ,后面还需要用到。 |
五、获取域名解析记录 ID
域名解析记录 ID 指的是域名解析的完整子域名的 ID(完整子域名如 xxx.yyy.zzz
,而不是 yyy.zzz
)。
注意 :以下的 命令都是一个整体 ,修改后要 一起粘贴、运行 ,
\
和^
符号是命令分行用的,这样写方便大家理解。
## Linux 系统
curl -X GET "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records?page=1&per_page=20&order=type&direction=asc" \ |
六、查找域名的解析记录 ID
运行命令后,会输出一大串 JSON 内容,因为没有经过格式化,所以看起毫无可读性,可以随便找个在线 JSON 格式化网站,复制 JSON 内容到左边输入框中即可在右边看到格式化后的 JSON 内容,然后 找到以下内容 :
注意 :复制 JSON 内容去格式化的时候,别复制错了,JSON 是以
{
开头,以}
结尾的。
"id":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", |
id | 域名解析记录 ID |
zone_id | 所属的域名 ID |
zone_name | 所属的(顶级/一级)域名 |
name | 完整(子)域名 |
type | 解析记录类型 |
content | 解析 IP 地址 |
proxied | 是否走 CDN 代理,是:true,否:false |
ttl | 解析记录生存时间,值为 1 则是自动,单位:秒 |
保存好这些信息,后面还需要用到。 |
七、更新域名解析记录
即修改指定子域名的解析记录信息。
注意 :以下的 命令都是一个整体 ,修改后要 一起粘贴、运行 ,
\
和^
符号是命令分行用的,这样写方便大家理解。
## Linux 系统
curl -X PUT "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/解析记录ID" \ |
八、成功?失败?
运行命令后,会输出的一大串 JSON 内容,在其末尾看到,
- 如果写的是
"success":true
则说明 成功 。 - 如果写的是
"success":false
则说明 失败 ,原因会在后面的messages
中说明。
九、关于命令中的 JSON 数据说明
指的就是更新解析记录命令中的这段内容:
{"type":"A","name":"xxx.yyy.zzz","content":"最快 IP","ttl":1,"proxied":true} |
名称 | 示例 | 说明 |
---|---|---|
type | A | 解析记录类型 ,如:A, AAAA, CNAME, HTTPS, TXT, SRV, LOC, MX, NS, SPF, CERT, DNSKEY… |
name | xxx.yyy.zzz | 完整的域名 ,不能只写子域名名称,最长 255 个字符 |
content | 127.0.0.1 | 解析 IP 地址 ,IPv4、IPv6 |
ttl | 1 | 解析记录生存时间 ,值为 1 则是自动,单位:秒 |
proxied | true | 是否走 CDN 代理 ,是:true,否:false |
十、自动更新脚本
因为时间优先,我就先简单的写了两个脚本,可能比较简陋。。。所以有什么建议可以跟我说。
## Linux 系统
脚本以内置到压缩包内了,只需要赋予其执行权限即可:
chomd +x cfst_ddns.sh |
然后复制以下内容修改后, 一起粘贴运行 ,即可生成配置文件 cfst_ddns.conf
:
echo -e "FOLDER=/root/CloudflareST |
配置文件说明:
变量名 | 值 |
---|---|
FOLDER | CloudflareST 测速程序所在路径 |
ZONE_ID | 域名 ID |
DNS_RECORDS_ID | 域名解析记录 ID |
账号邮箱 | |
KEY | API 令牌 |
TYPE | 解析记录类型 |
NAME | 完整域名 |
TTL | 解析记录生存时间,值为 1 代表自动,单位:秒 |
PROXIED | 是否走 CDN 代理,是:true,否:false |
然后运行脚本试试看: |
bash cfst_ddns.sh |
## 其他说明
- 以上脚本只是一个示例,大家可以按需修改,比如在
./CloudflareST
后面添加其他参数。 - 如果是在路由器上面跑该脚本(如 OpenWrt),请先 关闭路由器内的代理 ,否则测速结果会不准确。
十一、定时任务
## Linux 系统
Linux 自然要用 Cron 来定时执行脚本。
### 安装 Cron
一般各 Linux 系统都自带了 Cron,执行 crontab -l
命令,如果提示 命令不存在 ,说明没有安装, 反之则跳过该步骤 。
# 确认你是哪个系统,然后选择对应的命令安装 Cron 程序。 |
### 配置 Cron
开始编辑定时任务,
crontab -e |
首次使用可能会提示你如下内容:
# 这就是让你选一个文本编辑器,新手建议用默认的 nano,直接回车即可。 |
然后就会看到一大片的文本,不用管,那些只是注释(井号 # 开头的都是注释),写的是使用方法。
- 如果你选的是 nano 编辑器,那么可以直接开始编辑了。
- 如果你选的是 vim 编辑器,则需要按下
I 键
进入编辑模式。
定时任务格式其实很简单:
* * * * * cd /xxx && ./cfst_ddns.sh |
还是看不懂?没关系,我直接给你几个示例(脚本下载):
# 假设脚本位于 /root 目录下(其他位置自己改下面示例),那么: |
写入后,保存定时任务:
- nano :按下
Ctrl+X
键、按下Y
键、按下回车键,即可保存。 - vim :按下
Esc
键退出编辑模式,直接输入:wq
并回车(英文模式下),即可保存。
这时候再去查看定时任务,看看是否保存成功:
crontab -l |