软路由自动优选ip并上传DNS记录到cloudflare
cfst项目地址:
https://github.com/XIU2/CloudflareSpeedTest下载cfst项目文件放在你软路由的root目录下,然后执行以下命令:
# 1. 进入 root 目录
cd /root/
# 2. 解压文件
tar -zxf cfst_linux_arm64.tar.gz
# 3. 赋予执行权限
chmod +x cfst
# 4. 开始测速!
./cfst
再输入以下命令:
cat result.csv | head -n 5
自动优选任务
第一步:获取你的 Cloudflare API 信息
你需要去 Cloudflare 的后台拿到三个关键信息,先用记事本存好:
1. Zone ID(区域 ID): 登录 CF 后台,点击你的主域名,在右下角的“API”区域可以找到一串很长的字符。
2. API Token(API 令牌): 在刚才 Zone ID 下方,点击“获取您的 API 令牌” -> “创建令牌” -> 选择“编辑区域 DNS”模板 -> 包含特定区域(你的域名) -> 继续以摘要 -> 创建令牌。把生成的那串 Token 复制下来(它只显示一次)。
3. 你的子域名: 比如你想用的域名是 cf.xxx.com。
第二步:创建自动化更新脚本
回到你的 SSH 黑框框,我们要创建一个脚本文件。
1. 输入 vi /root/cf_update.sh 并回车。
2. 按一下键盘上的 i 键,进入编辑模式(左下角会显示 I 或 Insert)。
3. 把下面这段代码复制并粘贴进去。记得把最上面的三行中文替换成你刚才在第一步获取的真实信息! 代码如下:
#!/bin/sh
# ================= 配置区 =================
CF_TOKEN="这里填你的_API_Token"
CF_ZONE_ID="这里填你的_Zone_ID"
CF_DOMAIN="
http://这里填你的子域名_例如_cf.xxx.com/"# ==========================================
# 1. 进入测速工具所在目录
cd /root/
# 2. 运行测速并等待完成
./cfst
# 3. 从 result.csv 中提取排名前 3 的 IP
IP1=$(sed -n '2p' result.csv | awk -F ',' '{print $1}')
IP2=$(sed -n '3p' result.csv | awk -F ',' '{print $1}')
IP3=$(sed -n '4p' result.csv | awk -F ',' '{print $1}')
# 检查是否成功抓取到 IP
if [ -z "$IP1" ]; then
echo "测速失败,未获取到 IP"
exit 1
fi
echo "测速完成,前3名 IP 为: $IP1, $IP2, $IP3"
echo "正在更新 Cloudflare DNS 记录..."
# 4. 获取并删除现有的 A 记录 (防止记录无限叠加)
RECORD_IDS=$(curl -s -X GET "
https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?type=A&name=${CF_DOMAIN}" \
-H "Authorization: Bearer ${CF_TOKEN}" \
-H "Content-Type: application/json" | grep -Eo '"id":"[a-zA-Z0-9]{32}"' | cut -d'"' -f4)
for ID in $RECORD_IDS; do
curl -s -X DELETE "
https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${ID}" \
-H "Authorization: Bearer ${CF_TOKEN}" \
-H "Content-Type: application/json" > /dev/null
done
# 5. 写入最新的 3 个 A 记录 (注意必须关闭小黄云 proxied:false)
for IP in $IP1 $IP2 $IP3; do
if [ -n "$IP" ]; then
curl -s -X POST "
https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records" \
-H "Authorization: Bearer ${CF_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"'${CF_DOMAIN}'","content":"'${IP}'","ttl":60,"proxied":false}' > /dev/null
fi
done
echo "DNS 更新大功告成!"
1. 粘贴好并修改完配置后,按一下键盘的 Esc 键退出编辑模式。
2. 输入 :wq 并回车,保存并退出文件。
给这个脚本加上运行权限:
代码如下:
chmod +x /root/cf_update.sh
第三步:设置定时任务(每天早 9 点、晚 9 点)
确保脚本手动运行成功后,我们把它丢给系统,让它每天自动跑。
1. 在 OpenWrt 的网页后台,找到菜单:系统 (System) -> 计划任务 (Scheduled Tasks)。(或者在 SSH 里输入 crontab -e)
2. 在里面的空白处,新起一行,加入这行代码:
0 9,21
* /root/cf_update.sh >/dev/null 2>&1
如果你想跑出来的ip质量稍微高一点需要再输入以下命令
sed -i 's|./cfst.*|./cfst -f /root/my_ip.txt -tl 160 -sl 40 -dt 15 -n 150 -dn 5 -p 5|g' /root/cf_update.sh
具体指令对应的意思可自行去cfst查找