xChar
·4 months ago

先前的服务器和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


Loading comments...