如何在 Cloudflare 使用优选 IP
把本站每天更新的优选 IP,接到你自己的 Cloudflare 站点上,让中国大陆用户连到更合适的节点。
先看适用范围
数据只代表一个测速节点(Alibaba Cloud 的网络)。电信、联通、移动以及不同省份的线路可能不同,港澳台和海外用户不适用。IP 也会变化,请把效果当作"可以试试",而不是保证。
同一个 Cloudflare 站点,用户具体连到哪个 Cloudflare IP,决定了走哪条线路。默认情况下由 Cloudflare 的 DNS 随机分配,中国大陆用户有时会被分到绕路的 IP。优选 IP 的做法,就是让用户的请求落到实测更快的那几个 IP 上。
方法一:在自己的 SaaS 里建入口
本站只提供优选 IP 的列表和接口,不提供 CNAME 入口。你需要在自己的 Cloudflare 里建一个入口域名,放几条灰云 A 记录,再把自己的域名 CNAME 到它。
结构是:你的域名 → CNAME → 你自己的入口域名(灰云 A 记录,值来自本站) → Cloudflare CN 优选 IP → 你的源站。前提是你的域名已经接入 Cloudflare for SaaS(自定义主机名),否则 Cloudflare 不认识这个主机名,请求无法转发到你的源站。下面是完整步骤。
-
开通 Cloudflare for SaaS
在 Cloudflare 控制台选一个域名,进入
SSL/TLS → 自定义主机名,按提示启用。首次开通通常需要在账号里绑定支付方式;免费额度内不收费,额度以 Cloudflare 官网为准。 -
创建回退源(Fallback Origin)
在这个域名下添加一条橙云(已代理)的 A 记录,指向你的源站 IP,例如
saas-origin.example.com。然后在"自定义主机名"页面把它设为回退源,等状态变为 Active。 -
添加自定义主机名
添加你要对外使用的域名,例如
api.example.com。验证方式选 TXT,按页面提示在该域名的 DNS 里添加所有权验证(_cf-custom-hostname)和证书验证(_acme-challenge)两类 TXT 记录。主机名和证书都显示 Active 之后再继续。 -
建立入口并 CNAME
在 SaaS 区域(也就是你设置回退源的那个域名)下建一个入口,例如
best.saas-example.com,放 3 到 5 条灰云(仅 DNS)的 A 记录,值取自 /api/cn/ips.txt,用下面的脚本可以自动同步。然后把你的域名设为:Type CNAME Name api Target best.saas-example.com Proxy DNS only (grey cloud)
必须是灰云(仅 DNS),不要开橙云。入口建议放在 SaaS 区域内,原因见常见问题。
-
验证
等 DNS 生效(通常几分钟),确认能正常返回,并看看落到了哪个数据中心:
dig +short api.example.com # should show your entry name and a set of IPs curl -sI https://api.example.com/ | grep -iE '^(HTTP|cf-ray)' # the last three letters of cf-ray are the data center, e.g. NRT (Tokyo), HKG (Hong Kong)
请了解这几点:数据只代表一个测速节点;IP 每天更新一次,本站无法保证可用性,建议你保留随时切回默认(橙云)的办法;优选 IP 的做法是否符合 Cloudflare 的服务条款,官方没有明确说明,请自行评估风险。
自动同步脚本
下面的脚本每次运行时读取本站的 ips.txt,把前几个 IP 同步成入口域名的 A 记录:先添加新的,再删除不在列表里的旧记录,中间不会出现解析为空的空窗。需要 Linux 的 bash 4 以上,以及 curl、jq。
#!/usr/bin/env bash
set -euo pipefail
TOKEN="your API token" # permission: Zone > DNS > Edit, limited to the entry zone
ZONE_ID="ID of the zone that holds the entry name (the SaaS zone)"
NAME="best.saas-example.com"
COUNT=3
API="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records"
auth=(-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json")
mapfile -t IPS < <(curl -fsS https://cf.norixor.org/api/cn/ips.txt | head -n "$COUNT")
[ "${#IPS[@]}" -gt 0 ] || { echo "no ips"; exit 1; }
existing=$(curl -fsS "${auth[@]}" "$API?type=A&name=$NAME")
for ip in "${IPS[@]}"; do
echo "$existing" | jq -e --arg ip "$ip" '.result[] | select(.content == $ip)' >/dev/null && continue
curl -fsS "${auth[@]}" -X POST "$API" \
--data "{\"type\":\"A\",\"name\":\"$NAME\",\"content\":\"$ip\",\"ttl\":60,\"proxied\":false}" >/dev/null
done
echo "$existing" | jq -r '.result[] | "\(.id) \(.content)"' | while read -r id content; do
printf '%s\n' "${IPS[@]}" | grep -qx "$content" || curl -fsS "${auth[@]}" -X DELETE "$API/$id" >/dev/null
done
保存为 update-best.sh,用 cron 每天跑一次即可,数据本身每天才更新一次。API Token 只给 DNS 编辑权限并限定一个 zone,不要使用全局 Key。
方法二:客户端直连(自己用)
只想让自己的电脑或代理客户端走优选 IP,不需要改任何 DNS 配置:
- hosts 文件:添加一行
优选IP 你的域名,只对这台机器生效。IP 可以从 首页 或 /api/cn/ips.txt 获得。 - 代理 / 订阅类客户端:把节点的"地址"填成优选 IP,"SNI"和"Host"保持你的域名不变。
这种方式只改变连接的目标 IP,域名、证书和站点内容都不变。
常见问题
为什么入口要放在 SaaS 区域内?
我们实测:自定义主机名的 CNAME 链如果经过同一个 Cloudflare 账号下的其他区域,会返回 403 / Error 1034;入口在 SaaS 区域内才正常。官方文档只给出了 1034 的一般含义,没有解释这个差别,所以这是实测结论,不是文档保证。社区里常见的另一种做法,是 CNAME 到不在你账号里的公共优选域名,我们没有验证过。
返回 403,页面写着 Error 1034 怎么办?
先确认 CNAME 目标是 SaaS 区域内的入口域名,而不是同账号其他区域下的名字;再确认自定义主机名状态和证书都是 Active。DNS 刚改过时,边缘可能要几分钟才生效。
返回 403,页面写着 Error 1000 怎么办?
通常是因为 CNAME 指向了另一个 Cloudflare 客户的自定义主机名。把入口换成自己的、只含 A 记录的域名即可。
首页的"推荐"和"已测速"有什么区别?
"推荐"是综合延迟和速度挑出的前几个,每个网段最多取几个,保证线路多样,建议优先用它。"已测速"是本次逐个测过速的全部 IP,包含没达标的(延迟、丢包或速度没过门槛),达标的排在前面,还附带"可用网段"。同一个 /24 网段的 IP 走同一条路由,所以网段信息可以帮你判断哪一段线路好用。
为什么入口域名要放多个 IP?
单个 IP 偶尔会不可达或变慢。放 3 到 5 个 A 记录,DNS 会轮流返回,单点故障的影响小很多。
多久更新一次?我该多久同步一次?
本站数据每天更新一次,页面顶部会显示最后更新时间。你的脚本每天同步一次就够,请不要高频轮询接口。
用了之后没有变快怎么办?
先对比使用前后的耗时(同一地点、同一运营商、多测几次)。本站只在一个节点测速,你的用户所在的网络可能和它不同。没有明显改善时,最稳妥的办法是撤掉入口,改回默认的橙云。
列表里为什么只有很少的几个 IP?
从大陆访问,大多数 Cloudflare IP 会绕到海外节点,延迟和速度都不理想,真正合格的并不多。本站只收录通过延迟、丢包和速度门槛的 IP,宁缺毋滥。
接口怎么调用?
curl -s https://cf.norixor.org/api/cn/ips.txt # recommended IPs, one per line curl -s https://cf.norixor.org/api/cn/ips.json # recommended list, all fields curl -s https://cf.norixor.org/api/cn/ips-all.txt # qualified IPs, one per line curl -s https://cf.norixor.org/api/cn/ips-all.json # every tested IP (incl. unqualified) and prefixes curl -s https://cf.norixor.org/api/cn/status.json # update status