向诚

向诚

巷子里的猫很自由,却没有归宿。
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 在文本文檔中添加 "解析域. 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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。