今天带来功能更强大的 Linux 一键脚本!它不仅能自动测试 Cloudflare 全球 IP 的下载速度,还能将最快的 IP 自动解析到你的域名,实现真正的“智能优选 + 动态 DNS 更新”。
特别适合部署在 需要套 Cloudflare 的源站服务器 上(例如自建网站、反代节点、游戏服务器等),让访问者始终通过最优路径连接你的服务。
⚠️ 重要前提:此脚本必须部署在你实际提供服务的那台 Linux 服务器上(即 Cloudflare 所代理的源站),因为测速结果会因地理位置不同而差异巨大。在本地电脑或非目标服务器上运行,结果无效!
🚀 一键实现两大功能
- 自动测速:使用
cfst(CloudflareSpeedTest)对数百个 CF IP 进行并发测速; - 自动更新 DNS:将速度最快的 IP 通过 Cloudflare API 写入你的域名 A 记录。
📦 安装与部署步骤
官方项目地址:XIU2/CloudflareSpeedTest
# 如果是第一次使用,则建议创建新文件夹(后续更新时,跳过该步骤)
mkdir cfst
# 进入文件夹(后续更新,只需要从这里重复下面的下载、解压命令即可)
cd cfst
# 下载 CFST 压缩包(自行根据需求替换 URL 中 [版本号] 和 [文件名])
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# 如果你是在国内网络环境中下载,那么请使用下面这几个镜像加速之一:
# wget -N https://ghfast.top/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_arm64.tar.gz
# wget -N https://wget.la/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_arm64.tar.gz
# wget -N https://ghproxy.net/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_arm64.tar.gz
# wget -N https://gh-proxy.com/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_arm64.tar.gz
# wget -N https://hk.gh-proxy.com/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_arm64.tar.gz
# 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm cfst_linux_amd64.tar.gz )
# 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名)
tar -zxf cfst_linux_amd64.tar.gz
# 赋予执行权限
chmod +x cfst
# 运行(不带参数)
./cfst
# 运行(带参数示例)
./cfst -tl 200 -dn 20
🔑 配置 Cloudflare API 权限
- 登录 Cloudflare 控制台;
- 进入 My Profile → API Tokens;
- 点击 Create Token → 选择模板
Edit zone DNS; - 权限范围:仅勾选你要操作的域名;
- 生成后,复制 API Token(不是 Global API Key!);
- 同时记下该域名的 Zone ID(在域名 Overview 页面底部)。
📝 创建自动化脚本
↓↓↓↓↓↓↓↓↓↓重点是接下来的部分↓↓↓↓↓↓↓↓↓↓
- 在解压的文件里面,新建一个sh文件,名字随便,我这边用run_cf_ddns.sh演示
- 填入以下代码
- 需要修改的内容都在配置信息里面
API_TOKEN # Cloudflare API Token,必须有 Zone.DNS:Edit 权限
ZONE_ID # Cloudflare Zone ID
RECORD_NAME # 要更新的域名
记得给文件添加可执行权限,chmod 777 run_cf_ddns.sh,然后运行看看效果./run_cf_ddns.sh
运行成功的话,效果如下图
![图片[1]-CF优选IP Linux版一键脚本:自动测速 + 自动更新最快Cloudflare IP到域名(支持DDNS)-VPS SO](https://www.vpsso.com/wp-content/uploads/2026/01/2026-01-17_163711_899.jpg)
#!/bin/bash
# ================= 配置信息 =================
API_TOKEN=""
ZONE_ID=""
RECORD_NAME=""
SPEED_URL="https://testfileorg.netwet.net/500MB-CZIPtestfile.org.zip"
# cfst 参数优化
CFST_PARAMS="-n 300 -t 4 -dn 10 -dt 15 -tp 443 -url $SPEED_URL -httping -tl 250 -tlr 0.00 -sl 5 -o result.csv"
# ============================================
# 获取脚本所在绝对路径
BASE_DIR=$(cd "$(dirname "$0")"; pwd)
cd "$BASE_DIR" || exit 1
RESULT_FILE="$BASE_DIR/result.csv"
echo "--- 任务开始: $(date '+%Y-%m-%d %H:%M:%S') ---"
# 1. 环境清理
[ -f "$RESULT_FILE" ] && rm -f "$RESULT_FILE"
# 2. 执行测速 (同步阻塞)
if [ -f "./cfst" ]; then
echo "[步骤1/4] 正在运行 cfst 测速..."
chmod +x ./cfst
./cfst $CFST_PARAMS
else
echo "错误: 目录下未找到 cfst 执行文件"
exit 1
fi
# 3. 结果校验与提取
sleep 1
if [ ! -s "$RESULT_FILE" ]; then
echo "错误: 测速失败,未生成有效的 result.csv"
exit 1
fi
# 提取最优 IP 和 速度 (假设 IP 在第 1 列,速度在第 6 列)
# 使用 awk 直接读出这两个值
READ_DATA=$(awk -F, 'NR==2 {print $1,$6}' "$RESULT_FILE")
read -r IP SPEED <<< "$READ_DATA"
# --- 核心判断:速度校验 ---
# 如果速度为空或小于等于 0.01 MB/s 则跳过更新
CHECK_RESULT=$(echo "$SPEED" | awk '{if($1 <= 0.01) print "stop"; else print "go"}')
if [ "$CHECK_RESULT" == "stop" ] || [ -z "$IP" ]; then
echo "------------------------------------------------"
echo "停止更新: 本次最优 IP 的下载速度仅为 $SPEED MB/s。"
echo "原因: 速度接近 0 或测速无效,保持原 DNS 解析不变。"
echo "------------------------------------------------"
exit 0
fi
echo "[步骤2/4] 测速通过!最优 IP: $IP, 速度: $SPEED MB/s"
# 4. 更新 Cloudflare (修正了导致错误的语法结构)
echo "[步骤3/4] 正在获取 Record ID..."
# 使用反斜杠 \ 确保 curl 命令的长行换行被正确识别
RECORD_INFO=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json")
# 提取 ID
RECORD_ID=$(echo "$RECORD_INFO" | sed -n 's/.*"id":"\([^"]*\)".*/\1/p' | head -n 1)
if [ -z "$RECORD_ID" ] || [ ${#RECORD_ID} -lt 10 ]; then
echo "错误: 无法获取 Record ID。"
echo "API 返回内容: $RECORD_INFO"
exit 1
fi
echo "[步骤4/4] 正在同步 DNS 记录..."
UPDATE_RES=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$IP\",\"ttl\":60,\"proxied\":false}")
if [[ "$UPDATE_RES" == *"\"success\":true"* ]]; then
echo "=========================================="
echo " 更新成功!"
echo " 域名: $RECORD_NAME"
echo " 地址: $IP ($SPEED MB/s)"
echo "=========================================="
else
echo "更新失败!API 原始返回:"
echo "$UPDATE_RES"
exit 1
fi
🔁 定时自动运行(推荐)
你可以通过 cron 每小时自动执行一次优选:
# 编辑定时任务
crontab -e
# 添加一行(每2小时运行一次,路径请替换为你的实际路径)
0 */2 * * * /root/cfst/run_cf_ddns.sh >> /root/cfst/cf_ddns.log 2>&1
💡 注意事项
- 脚本默认使用
https://testfileorg.netwet.net/500MB-CZIPtestfile.org.zip作为测速文件,你也可以替换为其他稳定的大文件; - 若测速结果普遍低于
0.01 MB/s,脚本会自动跳过更新,避免误切到劣质 IP; - 确保服务器能正常访问 Cloudflare API(
api.cloudflare.com); - 首次运行前务必检查
API_TOKEN、ZONE_ID、RECORD_NAME是否正确。
🎉 结语
有了这个脚本,再也不用担心 Cloudflare 分配的 IP 质量差了!无论是搭建网站、反代服务还是上网中转,都能获得更稳定的网络体验。
如果你觉得有用,欢迎点赞、收藏、转发!也欢迎在评论区分享你的优化建议或适配的商家列表~
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END




















