先前的伺服器和 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 在文本文檔中添加 "解析域. 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