-
Notifications
You must be signed in to change notification settings - Fork 4k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
自动更新 Cloudflare 中的域名解析记录为最快 IP(Windows/Linux 脚本+手动教程) #40
Comments
获取 API 令牌任何 API 操作都需要提供账号邮箱和 API 令牌用来验证身份。
|
# 准备依赖我比较习惯用 cURL 来 POST 提交数据,所以以下用的都是 cURL 命令。 ## Linux 系统虽然大部分的 Linux 系统都自带了 cURL,但是还是提前检查一下是否已安装: curl --help 如果提示没找到命令,那么就需要手动安装了: # CentOS 系统
yum install -y curl
# Debian/Ubuntu 系统
apt-get install -y curl ## Windows 系统为了方便,我在 Windows 系统上也用的是 cURL,下载(32位 / 64位)并解压到任意位置。
解压 cURL 压缩包后,进入 |
# 获取域名 ID域名 ID 指的是你在 Cloudflare 中托管一级/顶级域名的 ID(如
## Linux 系统curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "X-Auth-Email: 账号邮箱" \
-H "X-Auth-Key: 前面获取的 API 令牌" \
-H "Content-Type: application/json" ## Windows 系统"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" # 查找域名 ID运行命令后,会输出一大串 JSON 内容,因为没有经过格式化,所以看起毫无可读性,可以随便找个在线 JSON 格式化网站,复制 JSON 内容到左边输入框中即可在右边看到格式化后的 JSON 内容,然后找到以下内容:
保存好这个域名 ID,后面还需要用到。 |
# 获取域名解析记录 ID域名解析记录 ID 指的是域名解析的完整子域名的 ID(完整子域名如
## Linux 系统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" ## Windows 系统"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" # 查找域名的解析记录 ID运行命令后,会输出一大串 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,
保存好这些信息,后面还需要用到。 |
# 更新域名解析记录即修改指定子域名的解析记录信息。
## Linux 系统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"}' ## Windows 系统"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 内容,在其末尾看到,
# 关于命令中的 JSON 数据说明指的就是更新解析记录命令中的这段内容: {"type":"A","name":"xxx.yyy.zzz","content":"最快 IP","ttl":1,"proxied":true}
|
# 自动更新脚本因为时间优先,我就先简单的写了两个脚本,可能比较简陋。。。所以有什么建议可以跟我说。 ## Linux 系统[ 点击展开 查看内容 ]脚本以内置到压缩包内了,只需要赋予其执行权限即可: chomd +x cfst_ddns.sh 然后复制以下内容修改后,一起粘贴运行,即可生成配置文件 echo -e "FOLDER=/root/CloudflareST
ZONE_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DNS_RECORDS_ID=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
[email protected]
KEY=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
TYPE=A
NAME=xxx.yyy.zzz
TTL=1
PROXIED=true" > cfst_ddns.conf 配置文件说明:
然后运行脚本试试看: bash cfst_ddns.sh ## 其他说明
## Windows 系统[ 点击展开 查看内容 ]脚本已内置到压缩包内了,只需 右键脚本 - 编辑,会看到如下脚本内容: @echo off
Setlocal Enabledelayedexpansion
CloudflareST.exe -p 0
for /f "tokens=1 delims=," %%i in (result.csv) do (
Set /a n+=1
If !n!==2 (
Echo %%i
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\":\"完整域名\",\"content\":\"%%i\",\"ttl\":1,\"proxied\":true}"
goto :END
)
)
:END
pause 修改其中的域名 ID、域名解析记录 ID、账号邮箱、API 令牌、完整域名等信息。 最后保存,双击运行脚本试试看。
## 其他说明
如果你只需要在测速后获得最快的 IP,那么可以看一下这个 Issues! |
# 定时任务## Linux 系统Linux 自然要用 Cron 来定时执行脚本。 [ 点击展开 查看内容 ]### 安装 Cron一般各 Linux 系统都自带了 Cron,执行 # 确认你是哪个系统,然后选择对应的命令安装 Cron 程序。
# CentOS 系统:
yum install vixie-cron
yum install crontabs
# Debian/Ubuntu 系统:
apt-get install cron ### 配置 Cron开始编辑定时任务, crontab -e 首次使用可能会提示你如下内容: # 这就是让你选一个文本编辑器,新手建议用默认的 nano,直接回车即可。
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed 然后就会看到一大片的文本,不用管,那些只是注释(井号 # 开头的都是注释),写的是使用方法。
定时任务格式其实很简单: * * * * * cd /xxx && ./cfst_ddns.sh
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59) 还是看不懂?没关系,我直接给你几个示例(脚本下载): # 假设脚本位于 /root 目录下(其他位置自己改下面示例),那么:
# 每天凌晨 5 点 0 分,执行一次脚本
0 5 * * * cd /root && ./cfst_ddns.sh
# 每天凌晨 5 点 30 分,执行一次脚本
30 5 * * * cd /root && ./cfst_ddns.sh
# 每 6 个小时(0 分时),执行一次脚本
0 */6 * * * cd /root && ./cfst_ddns.sh
# 每小时 0 分,执行一次脚本
0 * * * * cd /root && ./cfst_ddns.sh 写入后,保存定时任务:
这时候再去查看定时任务,看看是否保存成功: crontab -l ## Windows 系统Windows 自带了一个任务计划程序,虽然比较简陋,但还能凑活着用。 [ 点击展开 查看内容 ]按下 点击右上角的 [创建基本任务...] 选项。 输入任务名称(随意,必填),描述(可留空),点击 [下一步] 继续。 任务触发时间选择 [每天](或其他的),点击 [下一步] 继续。 选择开始时间(每日),不用管日期,只需要修改后面的时间(即每天这个时间开始运行),点击 [下一步] 继续。 选择启动程序,点击 [下一步] 继续。 点击 [浏览] 按钮,选择
确认没什么问题,点击 [完成]。 这时候还不能运行该任务,还需要简单修改下 D:
cd "D:\Program Files\CloudflareST"
# 这两行代码的意思是进入 D 盘分区,再进入 CloudflareST 文件夹内
# 所以记得把 D: 改成你的 CloudflareST 所在分区的盘符,例如 C:
# 把 D:\Program Files\CloudflareST 改成你电脑上 CloudflareST 所在文件夹路径 以下是完整脚本示例: @echo off
Setlocal Enabledelayedexpansion
d:
cd "D:\Program Files\CloudflareST"
CloudflareST.exe -p 0
for /f "tokens=1 delims=," %%i in (result.csv) do (
Set /a n+=1
If !n!==2 (
Echo %%i
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\":\"完整域名\",\"content\":\"%%i\",\"ttl\":1,\"proxied\":true}"
goto :END
)
)
:END
pause 另外,如果你想要每次运行完自动退出,请记得删除脚本末尾的
|
这个得出的最快ip,直接就填在域名的A记录里面,然后cdn代理又为真开启。那我域名本身对应的ip,应该是我服务器的ip,这样就没法用了。 |
该教程的目的是更新 Cloudflare 域名解析记录为最快 IP,受众面窄。 前几天有个人想要在他的路由器上自动运行并更新域名解析记录(V2ray 梯子),我远程协助帮他搞了搞,不过他的域名解析商用的不是 Cloudflare ,正好我有个 Github 文件下载加速网站(将域名解析为最快 IP 可以提高速度),因此我也自己捣鼓过自动更新域名解析记录,干脆就把我自用的脚本改了改写成教程了。 看看有没有人需要,反正这教程受众比较小,闲的没事写着玩。 |
@doutuo |
@doutuo |
谢谢,辛苦你了! |
@doutuo |
这个教程针对的是其他情况,比如:
一开始写这个教程的时候,我没拐过来弯(还想着上两种情况),写完上面那个人一说,才发现这个教程有点鸡肋,受众面太窄了,所以我又写了个自动更新 Hosts 的脚本。 |
域名添加到CF的合作伙伴,使用第三方DNS管理解析记录,比如DNSPOD,测出最快IP后只要更新DNSPOD的记录就行了 |
在第三方网站用 CNAME 接入 Cloudflare CDN,然后在其他的域名解析网站(如 DNSPOD)去指定自选 IP。 但我在 DNSPOD 没有域名(连账号都没注册,因为还要实名验证),而要写 API 相关教程/脚本我必须要亲自测试过才行。 不过网上似乎已经有人写过使用 API 自动更新 DNSPOD 域名解析记录的脚本了。
|
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 |
「在第三方网站用 CNAME 接入 Cloudflare CDN,然后在其他的域名解析网站(如 DNSPOD)去指定自选 IP」大佬能否实现自动化脚本,定时去执行直接第三方解析最快的API,小弟可以提供DNSPOD子账号,供大佬测试~ |
|
大佬,怎么批量更新啊,有很多cfworkers |
@beer-on-ice 多复制几个脚本中的 curl 代码呗,如果是在同一个根域名下,那么只需要改改域名就行了。 |
嗯嗯成 |
Success'':false,errors'':((code'':10000,message'':Authentication error)) 这种如何解决呢,令牌和ID准确无误 |
大佬是否可以解析到阿里云 |
这个有用配合paopao dns,不要太好用,可以直接本地cname,自动更新cname后的那个域名,这样本地的IP也更新了 |
按照步骤来了 但是重定向太多 |
Linux自动更新的脚本在哪个压缩包里啊,找了好久没找到 |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
如果你的域名托管在 Cloudflare,那么其实可以通过 Cloudflare 官方提供的 API 去更新域名解析记录。
写完才反应过来受众面比较窄,不过可以用于 Cloudflare Workers 的自选 IP~
自动更新 Hosts 为最快 IP(Windows/Linux 脚本)
还在一个个添加 Hosts?完美本地加速所有使用 Cloudflare CDN 的网站方法来了!
# 操作步骤观看顺序:
如果看不到图片,只需把下面这条内容添加到
C:\Windows\System32\drivers\etc\hosts
文件中并重启浏览器:The text was updated successfully, but these errors were encountered: