先前的服务器和 CDN 都不打算继续续费使用了,所以前端搬到了 Vercel,后端搬到了另外一台服务器。之前 CloudFlare Partners 方案自选 IP 失效后我就一直没有办法去自选 IP,现在 CloudFlare 可以通过 SaaS 回源优选 IP 了,心底按耐不住的白嫖力量开始隐隐作祟🤣
关于自选 IP 的教程网上有很多,我是看这篇学会的。PayPal 用国内的身份的也可以,只需要绑定银行卡验证,无需扣款。我先是借助CloudflareSpeedTest这个项目测速出了我所在区域的最快速的优选 IP,而 CloudFlare 是支持 A 解析负载均衡的,所以我全部解析上多个 ip 地址也没什么问题。但问题就来了,每一次手动删除修改解析很麻烦,加上测速快点都得十几二十分钟,我在想有没有什么好的方案可以较为快捷的达到我的需求。
查阅了一番 CloudflareSpeedTest 项目的文档后得到了一个【自动更新 Cloudflare 中的域名解析记录为最快 IP(Windows/Linux 脚本 + 手动教程)】的教程,比较可惜的是它只能修改单个解析。不断的试错让我发现似乎通过 api 批量修改解析是个不现实的想法,所以最终我通过以下步骤实现了我的需求:
优选 IP 测速 => 将导出的结果转化为 CloudFlare 可识别的 DNS 导入文本 => 导入到 CloudFlare
那么在第一次导入过后,只需要在每一次命令前加入批量删除 DNS 解析的请求即可~下列附各项功能的实现过程
分析快速导入#
CloudFlare 的 DNS 管理面板是这个样的,其中有一个快捷导入 / 导出 DNS 记录的功能。
内容如下
经测试,文本文档只要有部分相同格式即可快速导入解析。
优选结果转换#
请根据自己的域名修改脚本为适合你的情况!!!
在 CloudflareSpeedTest 同目录下,新建一个命令提示符脚本。
@echo off
setlocal EnableDelayedExpansion
REM 获取当前脚本所在目录
set "scriptPath=%~dp0"
REM 设置输入和输出文件路径
set "inputFile=%scriptPath%result.csv"
REM 获取当前用户桌面路径
set "desktopPath=C:\Users\你的用户名\Desktop"
REM 设置输出文件路径
set "outputFile=%desktopPath%\output.txt"
REM 清空输出文件
type nul > "%outputFile%"
REM 在输出文件开头添加 ";; A Records"
echo ;; A Records >> "%outputFile%"
REM 读取 result.csv 文件的每一行(跳过表头)
for /f "usebackq skip=1 tokens=1-6 delims=," %%A in ("%inputFile%") do (
REM 获取每一行中的 IP 地址(第一列)
set "ip=%%A"
REM 在文本文档中添加 "arey.tools.tf. 1 IN A" 和 IP 地址的数据
echo arey.tools.tf. 1 IN A !ip! >> "%outputFile%"
)
本脚本可快速将 Windows 平台下的 CloudflareSpeedTest 输出结果转换为如下图所示的格式,如需其他平台支持,请询问 ChatGPT。
解析批量删除#
新建一个 PowerShell 脚本(一般后缀为.ps1),内容如下:
$API_TOKEN = "<API TOKEN>"
$ZONE_ID = "<ZONE ID>"
$baseUrl = "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records"
$headers = @{
'Authorization' = "Bearer $API_TOKEN"
'Content-Type' = "application/json"
}
$listUrl = $baseUrl + '?per_page=500'
Write-Host $listUrl
$records = Invoke-RestMethod -Uri $listUrl -Method 'GET' -Headers $headers
$records = $records | Select-Object -ExpandProperty result
foreach ($record in $records) {
Write-Host "Deleting $($record.name) that points to $($record.content)"
$deleteUrl = $baseUrl + '/' + $record.id
Invoke-RestMethod -Uri $deleteUrl -Method 'DELETE' -Headers $headers
Write-Host $deleteUrl
}
如果你有其他重要解析,请勿误操作导致有关解析被删除!你可以备份好你的解析在优选进程结束后,在导入前将提前备份好的其他解析文本段加入到 output.txt 中!
API TOKEN 的获取#
链接直达:API 令牌
选中需进行有关操作的域名,最终得到 API TOKEN。
ZONE ID 的获取#
打开 CloudFlare 域名面板管理页
最后,我们通过如下命令在命令提示符中进行进行 PoweShell 脚本运行的操作。
powershell.exe -ExecutionPolicy Bypass -File <name>.ps1
稍微整合一下#
@echo off
del result.csv ::删除先前的导出结果
CloudflareST.exe ::进行优选
powershell.exe -ExecutionPolicy Bypass -File <name>.ps1 ::运行脚本删除先前的解析
setlocal EnableDelayedExpansion
REM 获取当前脚本所在目录
set "scriptPath=%~dp0"
REM 设置输入和输出文件路径
set "inputFile=%scriptPath%result.csv"
REM 获取当前用户桌面路径
set "desktopPath=C:\Users\你的用户名\Desktop"
REM 设置输出文件路径
set "outputFile=%desktopPath%\output.txt"
REM 清空输出文件
type nul > "%outputFile%"
REM 在输出文件开头添加 ";; A Records"
echo ;; A Records >> "%outputFile%"
REM 读取 result.csv 文件的每一行(跳过表头)
for /f "usebackq skip=1 tokens=1-6 delims=," %%A in ("%inputFile%") do (
REM 获取每一行中的 IP 地址(第一列)
set "ip=%%A"
REM 在文本文档中添加 "arey.tools.tf. 1 IN A" 和 IP 地址的数据
echo 解析域. 1 IN A !ip! >> "%outputFile%"
)
随后在 DNS 解析面板中导入即可。
电饭锅往你嘴里塞#
嫌麻烦直接解析到我的自选这里吧,cname 是arey.tools.tf
不保证好用,反正我是这样用,更新时间不定,一周肯定有一次。你可以进阶一下用服务器 Crontab 来跑,但是我的服务器在海外,自选 ip 指定 url 测速比较影响我的网络情况,所以我只能在自己的电脑上跑了。
此文由 Mix Space 同步更新至 xLog
原始链接为 https://de3ay.com/posts/tech/cloudflare-fastly-ips-import