Closed XIU2 closed 3 years ago
任何 API 操作都需要提供账号邮箱和 API 令牌用来验证身份。
Global API Key
后面的 [查看] 按钮。我比较习惯用 cURL 来 POST 提交数据,所以以下用的都是 cURL 命令。
虽然大部分的 Linux 系统都自带了 cURL,但是还是提前检查一下是否已安装:
curl --help
如果提示没找到命令,那么就需要手动安装了:
# CentOS 系统
yum install -y curl
# Debian/Ubuntu 系统
apt-get install -y curl
为了方便,我在 Windows 系统上也用的是 cURL,下载(32位 / 64位)并解压到任意位置。
考虑到很多人可能不会设置环境变量,那下面的 cURL 命令中就直接用绝对路径好了。
如果你会设置环境变量,那么将 cURL 加入环境变量后,就可以把下面的 cURL 命令中的绝对路径改成
curl
即可了。
解压 cURL 压缩包后,进入 curl\bin
文件夹看到 curl.exe
文件,这时候在地址栏复制当前文件夹路径,并替换下面 cURL 示例命令中的 D:\Program Files\curl\bin\curl.exe
路径。
域名 ID 指的是你在 Cloudflare 中托管一级/顶级域名的 ID(如 xxx.yyy
,而不是子域名)。
注意:以下的命令都是一个整体,修改后要一起粘贴、运行,
\
和^
符号是命令分行用的,这样写方便大家理解。
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "X-Auth-Email: 账号邮箱" \
-H "X-Auth-Key: 前面获取的 API 令牌" \
-H "Content-Type: application/json"
"D:\Program Files\curl\bin\curl.exe" -X GET "https://api.cloudflare.com/client/v4/zones" ^
-H "X-Auth-Email: 账号邮箱" ^
-H "X-Auth-Key: 前面获取的 API 令牌" ^
-H "Content-Type: application/json"
运行命令后,会输出一大串 JSON 内容,因为没有经过格式化,所以看起毫无可读性,可以随便找个在线 JSON 格式化网站,复制 JSON 内容到左边输入框中即可在右边看到格式化后的 JSON 内容,然后找到以下内容:
注意:复制 JSON 内容去格式化的时候,别复制错了,JSON 是以
{
开头,以}
结尾的。
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"name": "yyy.zzz",
"status": "active",
id | 域名 ID |
name | 托管在 Cloudflare 的(顶级/一级)域名 |
保存好这个域名 ID,后面还需要用到。
域名解析记录 ID 指的是域名解析的完整子域名的 ID(完整子域名如 xxx.yyy.zzz
,而不是 yyy.zzz
)。
注意:以下的命令都是一个整体,修改后要一起粘贴、运行,
\
和^
符号是命令分行用的,这样写方便大家理解。
curl -X GET "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records?page=1&per_page=20&order=type&direction=asc" \
-H "X-Auth-Email: 账号邮箱" \
-H "X-Auth-Key: 前面获取的 API 令牌" \
-H "Content-Type: application/json"
"D:\Program Files\curl\bin\curl.exe" -X GET "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records?page=1&per_page=20&order=type&direction=asc" ^
-H "X-Auth-Email: 账号邮箱" ^
-H "X-Auth-Key: 前面获取的 API 令牌" ^
-H "Content-Type: application/json"
运行命令后,会输出一大串 JSON 内容,因为没有经过格式化,所以看起毫无可读性,可以随便找个在线 JSON 格式化网站,复制 JSON 内容到左边输入框中即可在右边看到格式化后的 JSON 内容,然后找到以下内容:
注意:复制 JSON 内容去格式化的时候,别复制错了,JSON 是以
{
开头,以}
结尾的。
"id":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"zone_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"zone_name":"yyy.zzz",
"name":"xxx.yyy.zzz",
"type":"A",
"content":"X.X.X.X",
"proxied":true,
"ttl":1,
id | 域名解析记录 ID |
zone_id | 所属的域名 ID |
zone_name | 所属的(顶级/一级)域名 |
name | 完整(子)域名 |
type | 解析记录类型 |
content | 解析 IP 地址 |
proxied | 是否走 CDN 代理,是:true,否:false |
ttl | 解析记录生存时间,值为 1 则是自动,单位:秒 |
保存好这些信息,后面还需要用到。
即修改指定子域名的解析记录信息。
注意:以下的命令都是一个整体,修改后要一起粘贴、运行,
\
和^
符号是命令分行用的,这样写方便大家理解。
curl -X PUT "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/解析记录ID" \
-H "X-Auth-Email: 账号邮箱" \
-H "X-Auth-Key: 前面获取的 API 令牌" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"xxx.yyy.zzz","content":"最快 IP","ttl":1,"proxied":true}'
# 如果你只需要更新该域名解析记录中单独 “一个” 信息(上面那个只能同时设置域名解析记录的所有信息),那么可以改成这样:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/解析记录ID" \
-H "X-Auth-Email: 账号邮箱" \
-H "X-Auth-Key: 前面获取的 API 令牌" \
-H "Content-Type: application/json" \
--data '{"content":"最快 IP"}'
"D:\Program Files\curl\bin\curl.exe" -X PUT "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/解析记录ID" ^
-H "X-Auth-Email: 账号邮箱" ^
-H "X-Auth-Key: 前面获取的 API 令牌" ^
-H "Content-Type: application/json" ^
--data "{\"type\":\"A\",\"name\":\"xxx.yyy.zzz\",\"content\":\"最快 IP\",\"ttl\":1,\"proxied\":true}"
# 如果你只需要更新该域名解析记录中单独 “一个” 信息(上面那个只能同时设置域名解析记录的所有信息),那么可以改成这样:
"D:\Program Files\curl\bin\curl.exe" -X PATCH "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/解析记录ID" ^
-H "X-Auth-Email: 账号邮箱" ^
-H "X-Auth-Key: 前面获取的 API 令牌" ^
-H "Content-Type: application/json" ^
--data "{\"content\":\"最快 IP\"}"
运行命令后,会输出的一大串 JSON 内容,在其末尾看到,
"success":true
则说明成功。"success":false
则说明失败,原因会在后面的 messages
中说明。指的就是更新解析记录命令中的这段内容:
{"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 |
来自:https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record
因为时间优先,我就先简单的写了两个脚本,可能比较简陋。。。所以有什么建议可以跟我说。
如果你只需要在测速后获得最快的 IP,那么可以看一下这个 Issues!
Linux 自然要用 Cron 来定时执行脚本。
Windows 自带了一个任务计划程序,虽然比较简陋,但还能凑活着用。
这个得出的最快ip,直接就填在域名的A记录里面,然后cdn代理又为真开启。那我域名本身对应的ip,应该是我服务器的ip,这样就没法用了。
@doutuo
该教程的目的是更新 Cloudflare 域名解析记录为最快 IP,受众面窄。 你说的情况,是因为该教程不适用于你的需求。
前几天有个人想要在他的路由器上自动运行并更新域名解析记录(V2ray 梯子),我远程协助帮他搞了搞,不过他的域名解析商用的不是 Cloudflare ,正好我有个 Github 文件下载加速网站(将域名解析为最快 IP 可以提高速度),因此我也自己捣鼓过自动更新域名解析记录,干脆就把我自用的脚本改了改写成教程了。
看看有没有人需要,反正这教程受众比较小,闲的没事写着玩。
@doutuo 等我稍后写两个自动更新 Hosts 的脚本,应该适用于你的需求了。
@doutuo 自动更新 Hosts 的脚本写完了,你可以去试试。
@doutuo 自动更新 Hosts 的脚本写完了,你可以去试试。
谢谢,辛苦你了!
@doutuo 不用谢,用着好用的话,点个 ⭐ 就行了~
和 @doutuo 有同样的疑问(且没看懂 @XIU2 下面的回复):
如果我的域名 company.domain
已经托管在CF,并开启了CDN,那这时候再修改它A记录的IP不就死循环了吗?
@getizumo
这个教程针对的是其他情况,比如:
一开始写这个教程的时候,我没拐过来弯(还想着上两种情况),写完上面那个人一说,才发现这个教程有点鸡肋,受众面太窄了,所以我又写了个自动更新 Hosts 的脚本。
域名添加到CF的合作伙伴,使用第三方DNS管理解析记录,比如DNSPOD,测出最快IP后只要更新DNSPOD的记录就行了
@892947707
在第三方网站用 CNAME 接入 Cloudflare CDN,然后在其他的域名解析网站(如 DNSPOD)去指定自选 IP。
但我在 DNSPOD 没有域名(连账号都没注册,因为还要实名验证),而要写 API 相关教程/脚本我必须要亲自测试过才行。
不过网上似乎已经有人写过使用 API 自动更新 DNSPOD 域名解析记录的脚本了。
但是很多是 Python 的脚本,这我不熟,而 Shell 的脚本则太老了。。。
You cannot use this API for domains with a .cf, .ga, .gq, .ml, or .tk TLD (top-level domain). To configure the DNS settings for this domain, use the Cloudflare Dashboard
免费的域名,,用不了这个API
华为云应该怎样用,给了三个API User Name,Access Key Id,Secret Access Key
@vistaspl
你可以看看这个:https://github.com/XIU2/CloudflareSpeedTest/discussions/56
「在第三方网站用 CNAME 接入 Cloudflare CDN,然后在其他的域名解析网站(如 DNSPOD)去指定自选 IP」大佬能否实现自动化脚本,定时去执行直接第三方解析最快的API,小弟可以提供DNSPOD子账号,供大佬测试~
这个得出的最快ip,直接就填在域名的A记录里面,然后cdn代理又为真开启。那我域名本身对应的ip,应该是我服务器的ip,这样就没法用了。 cfst_ddns.conf里最后一行PROXIED=true改成PROXIED=false就可以了
大佬,怎么批量更新啊,有很多cfworkers
大佬,怎么批量更新啊,有很多cfworkers
@beer-on-ice 多复制几个脚本中的 curl 代码呗,如果是在同一个根域名下,那么只需要改改域名就行了。
大佬,怎么批量更新啊,有很多cfworkers
@beer-on-ice 多复制几个脚本中的 curl 代码呗,如果是在同一个根域名下,那么只需要改改域名就行了。
嗯嗯成
Success'':false,errors'':((code'':10000,message'':Authentication error)) 这种如何解决呢,令牌和ID准确无误
大佬是否可以解析到阿里云
这个有用配合paopao dns,不要太好用,可以直接本地cname,自动更新cname后的那个域名,这样本地的IP也更新了 paopao DNS可以 这样 xxx.com@@@123.xxx.com 自动更新123.xxx.com的ip 就等于更新了xxx.com
按照步骤来了 但是重定向太多
Linux自动更新的脚本在哪个压缩包里啊,找了好久没找到
如果你的域名托管在 Cloudflare,那么其实可以通过 Cloudflare 官方提供的 API 去更新域名解析记录。
写完才反应过来受众面比较窄,不过可以用于 Cloudflare Workers 的自选 IP~
自动更新 Hosts 为最快 IP(Windows/Linux 脚本)
还在一个个添加 Hosts?完美本地加速所有使用 Cloudflare CDN 的网站方法来了!
# 操作步骤观看顺序:
如果看不到图片,只需把下面这条内容添加到
C:\Windows\System32\drivers\etc\hosts
文件中并重启浏览器: