向诚

向诚

巷子里的猫很自由,却没有归宿。
telegram
email

CloudFlare优选IP轮询+解析批量导入(瑕疵方案)

先前的服务器和 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 记录的功能。

image-20240723221516797

内容如下

image-20240723221934997

经测试,文本文档只要有部分相同格式即可快速导入解析。

优选结果转换#

请根据自己的域名修改脚本为适合你的情况!!!

在 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。

image-20240723222707016

解析批量删除#

新建一个 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 令牌

image-20240723223733682

image-20240723223744745

image-20240723223814629选中需进行有关操作的域名,最终得到 API TOKEN。

ZONE ID 的获取#

打开 CloudFlare 域名面板管理页

image-20240723224014617

最后,我们通过如下命令在命令提示符中进行进行 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


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。