Cloudflare 优选 IP / 优选域名:原理 + 实操 + 避坑

目录

把节点套上 Cloudflare CDN 之后,速度往往比直连还慢——因为 CF 默认分配给你的 IP 不一定离你近。这时候就需要“优选”:从 CF 的几千个 IP 里挑出对你这条线路最快的几个,让客户端只连这些 IP。

但“优选”这个词在社区里被用得很乱,官方优选 IP / 反代优选 IP / 优选域名 是三个不同的东西。这篇先把概念分清楚,再给操作流程。

一、三种“优选”的区别

流程图流程图
类型 入口 IP 来源 端口要求 稳定性
官方优选 IP Cloudflare 自家 IP 段 13 个端口通吃(80/443/2052/…) 最稳
反代优选 IP 别人 VPS 跑反代的 IP IP 和端口强绑定,扫到啥端口用啥 一般,反代主人随时可能停
优选域名 大厂域名解析出来的 IP 看域名后面挂的是官方 IP 还是反代 IP 取决于背后

💡 关键认知:CF CDN → 你的源站这一段路由是固定的,优选只能优化“你 → CF 入口”这一段。

二、CF 官方 IP 段

所有 CF 公网 IP 的完整列表:

https://www.cloudflare.com/ips/

主要是这几个段(IPv4):

173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22

任意 CF 官方 IP 都能做你域名的入口(前提是你的域名套了 CF CDN)。

三、官方优选 IP 实操

3.1 用 CloudflareSpeedTest

https://github.com/XIU2/CloudflareSpeedTest

下载对应平台的二进制(Windows/macOS/Linux 都有)。基本用法:

# Linux / macOS
./CloudflareST

# Windows
.\CloudflareST.exe

常用参数:

参数 含义
-n 200 延迟测试线程数(默认 200)
-t 4 每个 IP 测延迟次数
-dn 10 下载测速数量(最快的几个进入下载阶段)
-dt 10 下载测速时间(秒)
-tl 200 平均延迟上限(ms),超过的不要
-tll 40 平均延迟下限(避免数据中心间假快)
-tlr 0.2 丢包率上限
-p 10 输出前 N 个结果
-f ip.txt 指定 IP 段文件
-o result.csv 输出 CSV

实战示例:

# 标准跑法
./CloudflareST -n 500 -t 4 -dn 20 -dt 10 -tl 200 -tll 40

# 限定国家段(手动准备 ip.txt 只放某个段的)
./CloudflareST -f ip.txt -p 10 -o result.csv

跑完输出 IP 列表 + 延迟 + 下载速度。把最快的几个填到你的客户端节点配置里替换 CDN 入口域名。

3.2 输出示例

IP 地址          已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.20.157.18     4       4      0.00     35.21     12.45
172.67.128.45     4       4      0.00     38.10     10.21
104.18.32.99      4       4      0.00     41.50      9.87

3.3 写进客户端

把 CF 入口 IP 写到节点 server 字段:

# mihomo 节点示例
proxies:
  - name: CF-Fast
    type: vless
    server: 104.20.157.18           # ← 优选出来的 IP
    port: 443
    uuid: your-uuid-here
    tls: true
    servername: your-cdn-domain.com # ← 真实的 CDN 域名(SNI 不能改)
    network: ws
    ws-opts:
      path: /your-path
      headers:
        Host: your-cdn-domain.com

🪤 核心:server 换成优选 IP,但 servername(SNI)和 Host 头必须保留原域名——否则 CF 不知道你要访问哪个域名。

四、反代优选 IP 是什么

反代优选 IP 是别人的 VPS 在帮你“转发到 Cloudflare”:

  1. 某人在云厂商(甲骨文 / AWS / 阿里 / 腾讯)开了台 VPS
  2. 在上面架了 Nginx,把 443 → 转发到一个 CF 域名
  3. 你通过扫描发现“这台 VPS 的 IP + 这个端口可以当 CF 入口”
  4. 你把它当 CF 入口 IP 用

特征:

  • IP 常见 8.x.x.x、47.x.x.x 这类常见云厂商段
  • IP 和端口强绑定:扫到 443 就只能用 443
  • 稳定性差:反代主人随时可能关掉 / 改配置

⚠️ 反代 IP 本质是“借用别人的带宽”,不建议长期依赖。商业行为甚至涉及法律风险,玩玩可以,重要服务不要押宝在这上面。

五、优选域名

优选域名不是新技术,是用域名打包一堆 IP。

5.1 类型 A:解析为 CF 官方 IP

典型的“大厂套 CF 域名”,比如某些跨国公司用了 CF:

visa.com           ← 解析出来是 CF 官方 IP
wto.org            ← 同上

用法:

  • 客户端 server 字段填这个大厂域名
  • servername / Host 仍然填你自己的 CDN 域名

效果跟“官方优选 IP”等价,只是入口换成了“这个域名当前解析到的 CF 官方 IP”。

5.2 类型 B:解析为一堆反代 IP

域名的 A 记录是一池子反代 VPS 的 IP:

cdn-fast.example.com  A  8.1.2.3
cdn-fast.example.com  A  47.4.5.6
cdn-fast.example.com  A  103.7.8.9

客户端每次连接,DNS 轮询选一个。两个关键注意点:

  1. IP 地区要尽量一致:如果日本/新加坡/美国混在一起,每次连可能国家在跳,敏感站会风控。
  2. 所有 IP 的端口要统一:如果节点写 443,A 记录里每个 IP 都必须在 443 上跑有效反代。

5.3 优选域名列表

社区维护的现成列表:

https://www.wetest.vip/page/cloudflare/cname.html

里面给了一堆“扫好的”域名,标注了对应的运营商 / 地区。

六、DNS 知识补课:一域名多 IP 是怎么实现的

理解优选域名要先理解 DNS 多记录:

cdn.example.com  A  1.1.1.1
cdn.example.com  A  2.2.2.2
cdn.example.com  A  3.3.3.3

DNS 解析时一次返回所有 IP,客户端选一个连(不同系统策略不同:轮询、按顺序、最快)。

也可以 IPv4 + IPv6 同时挂:

cdn.example.com  A     1.1.1.1
cdn.example.com  AAAA  2400:xxxx::xxx

或者用 CNAME 指向另一个域名,间接拥有一堆 IP:

cdn.example.com  CNAME  fast-pool.cdn-provider.xyz

fast-pool.cdn-provider.xyz 下面挂着十几个 IP,由 CDN 提供方维护。

七、自动化:定时优选 + 自动写回 DNS

进阶玩法:用脚本定时跑 CloudflareST,把 Top N 的 IP 写到自己 CF 域名的 A 记录里:

#!/usr/bin/env bash
set -e

# 1. 跑优选
./CloudflareST -n 500 -t 4 -dn 10 -dt 10 -tl 200 -p 5 -o result.csv

# 2. 解析前 5 个 IP
IPS=$(awk -F, 'NR>1 {print $1}' result.csv | head -5)

# 3. 调 CF API 把这些 IP 写到 DNS(伪代码)
for ip in $IPS; do
    curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
        -H "Authorization: Bearer $CF_TOKEN" \
        -H "Content-Type: application/json" \
        --data '{"type":"A","name":"fast","content":"'$ip'","ttl":120,"proxied":false}'
done

挂到 cron:

0 4 * * * /path/to/auto-optimize.sh > /var/log/cf-optimize.log 2>&1

每天凌晨 4 点重新优选 + 更新 DNS。

⚠️ 这个脚本是示意,实际需要先清除旧 A 记录再加新的。CF API 文档:Cloudflare API Docs

八、踩坑清单

现象 原因 解决
优选完速度反而更慢 servername/Host 没保留原域名 改回原域名
测的快用起来慢 CF IP 是数据中心的 anycast,测速好但实际可能绕远路 多测几次 + 看下载速度而不只看延迟
反代 IP 用着用着失效 反代主人停了/改了 找新的,或转回官方 IP
优选域名忽快忽慢 A 记录里 IP 来自不同地区 选地区一致的
公司网/校园网测不准 公网出口走的代理/CDN 用家庭网络测,或者用 VPS 测
CF 反 DDoS 时优选 IP 全废 CF 紧急情况下会临时切流 等几小时

九、几条实用经验

  • 测速看下载速度,不只看延迟——延迟 30ms 但下载只有 200KB/s 的 IP 没意义。
  • -tll 40 加上:CF 数据中心之间偶尔会出现 < 10ms 的“假延迟”,但实际拉不动文件,过滤掉。
  • 优选 IP 别贪多:写 3-5 个就够,客户端会自动选最快的。
  • 官方 IP > 反代 IP:稳定性差太多,重要服务永远首选官方。
  • 不同时段测速结果不一样:晚上 8-11 点高峰期测最准。
  • CF Workers/Pages 加速不需要优选:它们走的是 Cloudflare 自己的边缘网络,比走 CDN 入口更快。

把这套理解透,你的 CF 节点速度就能跑满线路带宽,不再受默认 IP 的限制。