cfst软路由优选ip

一、安装 cfst

# 1. 下载并解压(跳过 tar 头)
wget https://ghfast.top/github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.5/cfst_linux_mipsle.tar.gz -O cfst.tar.gz
gunzip cfst.tar.gz
dd if=cfst.tar of=cfst bs=512 skip=1
chmod +x cfst
rm cfst.tar

二、部署 IP 更新脚本

创建 /root/update_ip.sh

cat > /root/update_ip.sh << 'EOF'
#!/bin/sh
URL1="https://ip.v2too.top/api/nodes"
URL2="https://ip.164746.xyz/ipTop10.html"
IP_FILE="/root/ip.txt"
LOG_FILE="/root/update_ip.log"

echo "$(date): 开始获取优选 IP" >> $LOG_FILE

wget -q -O - --timeout=15 $URL1 | tr ',' '\n' | grep '"ip"' | sed 's/.*"ip":"//;s/".*//' > /tmp/ips1.tmp
wget -q -O - --timeout=15 $URL2 | tr ',' '\n' > /tmp/ips2.tmp

cat /tmp/ips1.tmp /tmp/ips2.tmp 2>/dev/null | sort -u > $IP_FILE
rm -f /tmp/ips1.tmp /tmp/ips2.tmp

COUNT=$(wc -l < $IP_FILE)
echo "$(date): 合并去重后共 $COUNT 个 IP" >> $LOG_FILE
EOF

chmod +x /root/update_ip.sh

三、部署 cfst 测速及 DNS 更新脚本

创建 /root/cf_update.sh(注意替换 CF_TOKENCF_ZONE_IDCF_DOMAIN 为你自己的信息):

cat > /root/cf_update.sh << 'EOF'
#!/bin/sh
# ================= 配置区 =================
CF_TOKEN="cfut_o6rh3Dvyu4ptw8JsrWnBH9CaPcPLo9hX05BCXRSya4f8d557"
CF_ZONE_ID="779b0efe8bba316350488c3d96025e84"
CF_DOMAIN="emby-proxy.fleey.dpdns.org"
# ==========================================

# 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 更新大功告成!"
EOF

chmod +x /root/cf_update.sh

四、设置定时任务

# 写入 crontab
cat << 'CRON' | crontab -
0 8,20 * * * /root/update_ip.sh
0 9,21 * * * /root/cf_update.sh >> /root/cf_update.log 2>&1
CRON

# 验证
crontab -l

五、运行测试

# 先手动获取一次 IP
/root/update_ip.sh
cat /root/ip.txt

# 手动执行一次完整测速(确保在 /root 目录下运行)
cd /root
./cf_update.sh
cat /root/cf_update.log

六、检查状态

crontab -l
ls -l /root/cfst /root/update_ip.sh /root/cf_update.sh /root/ip.txt
wc -l /root/ip.txt

评论区: