Cloudflare CDN优选使用指南,加速你的Cloudflare CDN访问体验——Linux篇

昴儿昴儿昴 2025-10-06 12:03 1

原文链接


众所周知,Cloudflare是全球最大的CDN服务提供商之一,被视为互联网基础设施的关键组成部分。其全球性云平台覆盖互联网边缘,旨在通过安全防护、性能优化和可靠性提升,帮助企业保护网络资产并加速内容分发。Cloudflare承担了全球近20%的网络流量。但是其在国内访问的速度有时却并不是很理想。主要原因为Cloudflare使用Anycast且没有在国内部署节点,且默认分配的节点对于大陆的网络并不友好。绕道美国、跑不出速度是常有的事。但是Cloudflare并不限制用户访问的节点IP。这时候,我们就可以优选工具来帮助我们改善访问使用Cloudflare CDN的网站的体验。


这里我们使用一个由Github大佬XIU2开发的项目——CloudflareSpeedTest。



这个项目使用Go语言编写,目前(2025年10月6日)已经在Github上获得了超过23k Stars。该项目支持多平台。我们进入Release页面,选择适合的架构进行下载。



选择合适的架构进行下载,我这里选择linux_amd64架构进行下载。


接下来的操作将会使用Debian12.11(内核版本6.1.0-37-amd64)进行演示。


我们先切换至root环境,方便执行操作。


sudo -i

然后进入/usr/share目录下,创建目录CloudflareSpeedTest并进入该目录。


cd /usr/share
mkdir CloudflareSpeedTest && cd CloudflareSpeedTest

将CloudflareSpeedTest的发行版下载并解压到目录中。


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里,那么你只需要直接运行文件夹中的cfst_hosts.sh就可以了。


但是使用Cloudflare CDN的网站千千万,我们总不能把所有的与Cloudflare CDN有关的域名都添加到hosts里面。


这时候就要使用Linux上特有的神器——iptables。


众所周知,iptables可以对本机流量进行ip重定向,我们只需要将需要重定向的IP段告诉iptables就可以了。


接下来,我将写一个bash脚本来实现全自动更新IP。


本脚本灵感来自于https://github.com/XIU2/CloudflareSpeedTest/discussions/71#discussioncomment-10495648


^-^注意:在运行脚本前,请确保你的机器上已安装iptables和ipset。


apt update && apt install -y ipset iptables

在CloudflareSpeedTest目录下创建CloudflareSpeedTest.sh文件


nano CloudflareSpeedTest.sh

以下是脚本的主要内容,将其复制进入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

运行脚本进行测试。


bash ./CloudflareSpeedTest.sh

运行结束后进行检验。


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

接下来为了使脚本定时运行,我们先创建一个systemd服务。


nano /etc/systemd/system/cloudflare.service

在其中粘贴以下内容。


[Unit]
Description=Cloudflare
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

粘贴完成后按下Ctrl+X→Y→Enter退出。


如果要使脚本开机时运行,输入如下命令。


systemctl enable cloudflare

如果要重新运行脚本。


systemctl restart cloudflare

如果需要定时运行该脚本,我们需要创建一个定时任务。


crontab -e

首次运行可能需要选择编辑器,按照喜好任选1、2、3即可。


进入后在文件最末尾写入定时任务命令。


比如我需要服务器时间每天19:30运行该脚本。


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

写入后保存退出即可。


以上就是教程的全部内容了,有疑问可以在评论区评论,感谢您的阅读。

最新回复 (16)
  • 大帅哥 10-06 13:33
    2楼

    感谢大佬!

  • 天海逍遥 10-06 13:43
    3楼

    感谢大佬分享,社区有您更美丽

  • anyme 10-06 17:51
    4楼

    感谢分享

  • Chocola 10-06 20:54
    5楼

    之前一直是看到优选IP加速网站,在用户侧优选IP加速托管在cloudflare上面的网站访问速度这个我确实没想到还可以这么干!

    天才! ^-^

  • naive 10-06 21:16
    6楼

    其实没太看懂啥意思,只在服务器把cloudflare的ip改为优选ip吗

  • 昴儿昴儿昴 楼主 10-06 21:21
    7楼

    这个教程主要是给使用Linux的用户准备的,并不是为网站站长准备的,如果你的电脑或服务器使用的是Linux发行版而且有访问Cloudflare网站的需求的可以试试。优选之后对几乎所有的托管在Cloudflare上的网站都有效(因为其核心用的是iptables的ip重定向功能)

    这篇文章介绍的软件只介绍了Windows下的优选使用方法,我平时会使用Linux,自然用不了Windows软件,所以就诞生了这个脚本。

  • naive 10-06 21:24
    8楼

    不是为网站站长准备的,如果你的电脑或服务器使用的是Linux发行版而且有访问Cloudflare网站的需求的可以试试。优选之后对几乎所有的托管在Cloudflare上的网站都有效(因为其核心用的是iptables的ip重定向功能)

    这篇文章介绍的软件只介绍了Windows下的优选使用方法,我平时会使用Linux,自然用不了Windows软件,所以就诞生了这个脚本。



    嗷嗷了解了,windows并不需要这个,直接用软件自动更新hosts貌似就行了

  • DisplayKing 10-06 22:06
    9楼

    遍历全网37亿IP撸过

  • 芍霾🏆 10-06 22:10
    10楼

    感谢佬分享

  • GitHub 10-11 21:38
    11楼

    会封号吗?

  • 昴儿昴儿昴 楼主 10-12 00:10
    12楼

    理论上是不会封cf号的,因为这个过程只涉及用户侧的优选,没有涉及到网站ip的更改。简单来说就是你作为用户放心用

  • 1i1l1lliII1ll11ll 10-12 00:58
    13楼

    有没有站长的教程 ^-^

  • 昴儿昴儿昴 楼主 10-12 09:16
    14楼

    如果要站长的教程可以站内搜索或者google一下,我相信其他大佬写得更好

  • Zhang_Kim 06-26 14:42
    15楼

    发现电信的网络都是路由到cloudflare的美西节点,天塌了

  • 昴儿昴儿昴 楼主 06-26 22:31
    16楼

    想不到差不多一年前的帖子还有佬友捞 ^-^感谢支持

    电信的话可以换几个时间段再测,有时候有路由调整,我在大湾区一般会测出NRT(东京)或者SIN(新加坡)的节点,测出全是美西也没关系,美西量大管饱,相对来说稳定些

  • Zhang_Kim 06-26 22:38
    17楼

    佬,我折腾了2天,优选出来的全是美西LAX的节点,唯一一个其他的节点,速度还比LAX的慢,hh,问了两个大模型,基本上都说LAX已经是最优的节点啦,现在速度稳定在600ms左右,本来想着学cloudflare 优选IP实践一下来着,没实践上,哈哈哈

* 帖子来源Linux.do
返回