Cloudflare CDN 国内加速指南:使用 CloudflareSpeedTest 优选IP
📅 2026年05月19日 · 技术
为什么需要 Cloudflare CDN 加速
Cloudflare 是全球最大的 CDN 服务提供商之一,承担了全球近 20% 的网络流量,被广泛视为互联网基础设施的关键组成部分。其全球云平台覆盖互联网边缘节点,通过安全防护、性能优化和可靠性提升,帮助无数网站保护网络资产并加速内容分发。
然而,对于国内用户而言,Cloudflare 的访问速度常常不尽人意。主要原因是 Cloudflare 采用 Anycast 技术且未在国内部署节点,默认分配的海外节点对大陆网络并不友好——绕道美国、延迟飙升、吞吐量低下是家常便饭。但好在 Cloudflare 并不限制用户访问的节点 IP,这意味着我们可以通过优选工具,手动筛选出对国内线路最优的节点 IP,从而大幅改善访问体验。
项目介绍: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
方案一: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 addr 或 ifconfig 查看,常见的有 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 在国内网络环境下的显著加速效果。整个方案的核心流程总结如下:
- 测速:cfst 工具定期对 Cloudflare IP 库进行延迟和速度测试
- 筛选:从测试结果中提取最优 IP(第二行记录为最优)
- 重定向:iptables + ipset 将所有 Cloudflare 流量导向优选 IP
- 持久化:systemd 服务 + crontab 实现开机自启和定期刷新
需要注意的是:
- 优选 IP 的时效性取决于你的网络环境和地理位置,建议至少每天刷新一次
- iptables 规则在服务器重启后不会自动保留,务必配置 systemd 服务
- 该方法对服务器本机的出站流量生效,不影响其他机器通过本机转发
- 如果服务器安装了防火墙(如 ufw、firewalld),请确保 80/443 端口已放行