Cloudflare CDN 国内加速指南:使用 CloudflareSpeedTest 优选IP

📅 2026年05月19日 · 技术

为什么需要 Cloudflare CDN 加速

Cloudflare 是全球最大的 CDN 服务提供商之一,承担了全球近 20% 的网络流量,被广泛视为互联网基础设施的关键组成部分。其全球云平台覆盖互联网边缘节点,通过安全防护、性能优化和可靠性提升,帮助无数网站保护网络资产并加速内容分发。

然而,对于国内用户而言,Cloudflare 的访问速度常常不尽人意。主要原因是 Cloudflare 采用 Anycast 技术且未在国内部署节点,默认分配的海外节点对大陆网络并不友好——绕道美国、延迟飙升、吞吐量低下是家常便饭。但好在 Cloudflare 并不限制用户访问的节点 IP,这意味着我们可以通过优选工具,手动筛选出对国内线路最优的节点 IP,从而大幅改善访问体验。

💡 核心原理:Cloudflare 的 Anycast 网络会为每个域名分配一个 Anycast IP,但用户访问任一节点时实际连接的是哪个具体 IP 是可定制的。通过本地测速筛选延迟最低的 IP,再用 iptables 做流量重定向,就能实现"用脚投票"的加速效果。

项目介绍:CloudflareSpeedTest

本文使用的核心工具是 GitHub 大佬 XIU2 开发的 CloudflareSpeedTest(简称 cfst)。该项目使用 Go 语言编写,截至 2025 年已在 GitHub 上获得超过 23,000 颗 Star,支持 Windows、macOS、Linux 等多平台。其工作原理是向 Cloudflare 的 IP 地址段发起延迟和速度测试,筛选出综合表现最优的节点。

环境准备与工具下载

本教程以 Debian 12.11(内核 6.1.0-37-amd64)为例进行演示。首先切换到 root 环境:

sudo -i

/usr/share 下创建专用目录:

cd /usr/share
mkdir CloudflareSpeedTest && cd CloudflareSpeedTest

下载并解压 CloudflareSpeedTest 的 Linux amd64 发行版:

wget https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
tar -xzvf cfst_linux_amd64.tar.gz
rm cfst_linux_amd64.tar.gz
📌 提示:如果你的服务器架构不是 amd64,请从 GitHub Release 页面 选择对应架构的压缩包。

方案一:Hosts 方式(简单直接)

如果你只想加速特定的某个网站,并且该网站的域名已写入 /etc/hosts,那么可以直接运行文件夹中的 cfst_hosts.sh 脚本,它会自动测速并更新 hosts 文件:

bash ./cfst_hosts.sh

这种方法简单有效,但局限性也很明显——你无法覆盖所有使用 Cloudflare CDN 的站点,手动维护 hosts 条目既不现实也不可持续。

方案二:iptables 自动优选(推荐)

对于需要全局加速的场景,Linux 自带的 iptables 配合 ipset 是更优雅的解决方案。其核心思路是:将 Cloudflare 的 IP 地址段存入 ipset 集合,然后通过 iptables 的 DNAT 规则将所有发往这些 IP 的流量重定向到优选出的最佳节点。

安装依赖

确保系统已安装 iptables 和 ipset:

apt update && apt install -y ipset iptables

编写自动优选脚本

在 CloudflareSpeedTest 目录下创建自动化脚本:

nano CloudflareSpeedTest.sh

粘贴以下完整脚本内容:

#!/bin/bash

# 定义 CloudflareST 的绝对路径
CLOUDFLAREST_PATH="/usr/share/CloudflareSpeedTest"

# 记录开始时间
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 脚本开始执行。"

# 读取上一次使用的目的 IP 地址
if [ -f "$CLOUDFLAREST_PATH/last_dst_ip.txt" ]; then
    old_dst_ip=$(< "$CLOUDFLAREST_PATH/last_dst_ip.txt")
fi

# 如果存在上一次的 IP 地址,则删除旧的 OUTPUT 规则
if [ -n "$old_dst_ip" ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 删除旧的 OUTPUT 规则,目标 IP 为 $old_dst_ip。"
    iptables -t nat -D OUTPUT -m set --match-set cf dst -j DNAT --to-destination "$old_dst_ip" 2>/dev/null
fi

# 运行 CloudflareST 测速,结果会写入 result.csv
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 运行 CloudflareST 进行测速。"
"$CLOUDFLAREST_PATH/cfst" -url https://speed.cloudflare.com/__down?bytes=500000000 \
  -f /usr/share/CloudflareSpeedTest/ip.txt \
  -o /usr/share/CloudflareSpeedTest/result.csv

# 从 result.csv 中提取第二行的 IP 地址(最优节点)
dst_ip=$(sed -n '2p' "$CLOUDFLAREST_PATH/result.csv" | cut -d',' -f1)

# 检查 dst_ip 是否有效
if ! [[ "$dst_ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误:未能提取到有效的目的 IP 地址。"
    exit 1
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 提取到的目的 IP 地址为 $dst_ip。"

# 创建或刷新名为 cf 的 IP 集合
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 创建或刷新 IP 集合 cf。"
ipset -exist create cf hash:net

# 清空集合 cf 中的所有现有条目
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 清空 IP 集合 cf。"
ipset flush cf

# 读取 ip.txt 中的 IP 地址或子网,并添加到集合中
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 读取并添加 IP 地址到集合 cf 中。"
for i in $(grep -oE "[0-9\.\/]+" "$CLOUDFLAREST_PATH/ip.txt"); do
    ipset add cf "$i"
done

# 插入新的 OUTPUT 规则(仅针对本机出站流量)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 添加新的 OUTPUT 规则,目标 IP 为 $dst_ip。"
iptables -t nat -I OUTPUT -m set --match-set cf dst -j DNAT --to-destination "$dst_ip"

# 保存当前的目的 IP 地址以备下次使用
echo "$dst_ip" > "$CLOUDFLAREST_PATH/last_dst_ip.txt"

# 记录结束时间
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 脚本执行完成。"

保存文件(Ctrl+X → Y → Enter)后赋予执行权限:

chmod +x CloudflareSpeedTest.sh

添加 MASQUERADE 规则

确保转发流量使用本机 IP 作为源地址(将 enp1s0 替换为你的实际网卡名称):

iptables -t nat -I POSTROUTING -o enp1s0 -j MASQUERADE
⚠️ 重要:网卡名称可通过 ip addrifconfig 查看,常见的有 eth0、ens3、enp1s0 等。使用错误的网卡名称会导致规则不生效。

首次运行测试

执行脚本进行首次测速和 IP 优选:

bash ./CloudflareSpeedTest.sh

运行结束后,验证 iptables 规则是否已正确写入:

iptables -t nat -L -n

成功时输出应类似:

Chain OUTPUT (policy ACCEPT)
target     prot opt source         destination
DNAT       0    --  0.0.0.0/0      0.0.0.0/0    match-set cf dst to:172.64.159.120

其中 172.64.159.120 即为本次优选出的最佳 Cloudflare 节点 IP。

配置开机自启与定时更新

为了在服务器重启后自动运行优选脚本,也为了定期更换已失效或变慢的 IP,建议配置 systemd 服务 + crontab 定时任务。

创建 systemd 服务

新建服务文件:

nano /etc/systemd/system/cloudflare.service

写入以下内容:

[Unit]
Description=Cloudflare CDN Preferred IP Service
After=network.target

[Service]
WorkingDirectory=/usr/share/CloudflareSpeedTest
ExecStart=/usr/share/CloudflareSpeedTest/CloudflareSpeedTest.sh
User=root
Type=simple
Restart=no

[Install]
WantedBy=multi-user.target

启用开机自启:

systemctl enable cloudflare

手动重启脚本(更新优选 IP):

systemctl restart cloudflare

配置定时任务

Cloudflare 的优选 IP 并非永久有效,建议每天定时刷新。使用 crontab 实现:

crontab -e

首次运行会提示选择编辑器,按喜好选择 nano、vim 或 emacs 即可。在文件末尾添加定时任务,例如每天 19:30 执行优选脚本:

30 19 * * * /usr/bin/systemctl restart cloudflare

保存退出后,cron 会自动按计划运行。你也可以根据需要调整执行频率,比如每 6 小时执行一次:

0 */6 * * * /usr/bin/systemctl restart cloudflare

总结与注意事项

通过 CloudflareSpeedTest + iptables 的组合,你可以实现 Cloudflare CDN 在国内网络环境下的显著加速效果。整个方案的核心流程总结如下:

需要注意的是:

✅ 进阶建议:如果你有多个服务器或需要更精细的 IP 优选,可以考虑将测得的优选 IP 用于 DNS 解析层面的负载均衡,或使用 xray/v2ray 等代理工具配合优选 IP 使用,效果更佳。

参考来源

🔧 在线开发者工具 — JSON格式化 · Base64 · UUID生成 · 正则测试 等80+免费工具