这是 ym 系列的第二篇。上一篇的博客解决「在哪写」,这一篇的 ym-cfip 解决「优选 IP 清单在哪拿」:它把全网几十个公开优选源自动聚合到一个页面上,你勾地区、定数量、设门槛,生成清单,还能在自己的浏览器里现场实测、存成能自动更新的订阅链接。它和姊妹站 ym-ip 的分工是:监测站负责「验」(把某个 IP 的底细查清楚),优选站负责「发」(成批地把清单发出来、发得明白)。这篇把为什么做它、有什么功能、怎么一步步部署、Fork 之后和原站差在哪、出问题怎么查怎么修,一次讲清。

一、为什么做它

用过 Cloudflare 优选 IP 的人都熟这个场面:清单散落在几十个源站和群文件里,各家格式不一样、更新节奏不一样,有的日更有的半小时一更;好不容易拼出一份,里面每条的延迟和速度还是源站在他们自己测试地测出来的,搬到你家网络上准不准,全靠运气。

还有一个更别扭的问题:数字唬人。有些清单动辄「一个地区几千条」,听着很富裕,真拿去测,一大半连不上——因为那些根本不是测好的优选,而是拿官方网段批量扫出来的地址,扫到 ≠ 测过。

所以做 ym-cfip 的思路就三条:

  1. 聚合交给机器:把公开优选源全部接进来,每 2 小时自动重新聚合一遍,人不用再东拼西凑。
  2. 实测回到本地:源站的成绩只作参考,页面上提供本地检测和本地测速,在访客自己的浏览器、自己的网络上现场测,测出来的才算数。
  3. 数量不许注水:主池只收「别人实测后发布的成品清单」,没有地区标注的剔除、重复的去重;想要海量地址可以,但单独放一个「大池采样」并明说「未实测」,不许混进主池充数。

二、功能全清单

数据这一头

  • 24 个数据源自动聚合:18 个 IP 源 + 6 个域名源,包括单地区实测源、微测 WeTest、CFYes、麒麟 UOUIN、CM 优选、辣椒、洛璃、Mia、天诚、vvHan、NiREvil 等;统一整理成 IP:端口#地区 [类型] 格式,没有地区标注的条目一律不收。
  • 三个池子分开放:IPv4 主池(全球 1000+ 条、66+ 个地区)、独立的 IPv6 池(源不带地区标注,单独成池)、优选域名池(6 源聚合去重 800+ 个,每行备注带出处,聚合时还会做 DNS 解析、把失效域名筛掉)。
  • 三网专区:少数源只按运营商实测、不标地区,这类条目破例收进一个专区(代号 SW),可以像地区一样勾选、进订阅,只是它只有运营商口径、没有地区。
  • 今日推荐:高速优选源按测速排名的 Top 20(前 20 名),现成可用,能复制、能下载、能复制直链。

挑选这一头

  • 地区墙:66+ 个地区,每个都带实时条数,点选、多选都行,还有美日 / 亚洲 / 欧洲 / 美洲 / 全选等快捷预设。
  • 运营商四网多选:移动 / 电信 / 联通 / 广电任意组合,带标注的条数实时显示。需要说明:全网暂时没有公开的广电实测优选源,选广电时返回通用条目并给提示,广电用户请用本地检测在自家网络里筛。
  • 数量自己定:统一设「每地区最多 N 个」,也可以给每个地区单独定数量。
  • 门槛自己定:最大延迟、最低速度、端口(全部 / 仅 443 / TLS 常用端口),取数方式还能选质量优先或随机抽取。计数旁边会标注被运营商和门槛滤掉了多少条,账算得清清楚楚。
  • 整套选项可存成分享链接,别人打开自动恢复你这套配置。

验证这一头(重点,都在访客浏览器本地跑)

  • 检测本地可用:全池逐个试连,或只检测已选地区;每个地区钮上标出「✓可用数」,还能一键「只选有可用的地区」。所有探测超时统一 5 秒。
  • 清单本地测速:每条双测取低值,可按延迟排序;生成清单时能勾「只生成本地测通的」。
  • 优选域名批量实测:逐个测真实延迟与落地机房。
  • ⑥ 大池采样:从 Cloudflare 官方 IP 段(约 190 万个地址)里随机抽样,500–5000 有预设档、也可以自定义到 10000,每条都标注「未实测」;本地检测之后自动识别可用条目的真实落地地区,可按地区筛选、只复制可用的,还能存成快照订阅。要把话说透:采样阶段的裸地址没有地区和运营商数据,地区是检测后按落地识别出来的——这是 Anycast 的事实,谁声称能「按地区采样」谁就是在编。

导出与订阅这一头

  • 导出格式自定义:清单的备注名用模板自己拼,一共 11 个变量——{地区} {代码} {序号} {延迟} {网速} {运营商} {来源} {端口} {日期} {标签} {旗帜},有 6 个预设一键套用;模板同时套用到复制、下载和订阅链接,导出时自动按地区重新编号(比如 #JP1、日本排完再到下一个地区),不会留缺口。
  • 实时订阅 /sub:把你在页面上的选项拼进链接,客户端每次拉取都按最新数据现算清单,聚合更新了它就跟着新。
  • 快照订阅:把当前清单一键存成专属链接 /s/<id>,存进 Cloudflare KV 定格保留 180 天。存的时候三档自选:当前清单全部 / 只含本地测通的 / 只含测速 ≤ 你设的阈值。这一档的意义是:本地测速的成果终于也能进订阅了——实时订阅在服务端现算,没法复现你浏览器里的测速结果;快照就是把你测过的那批原样冻住。
  • 各源原始直链:24 个来源里除静态种子外的 23 条源站原始链接照原样列出,带更新节奏和复制按钮。想绕开本站聚合、直接用某一家原味订阅的,拿了就能走,内容由源站自己更新。
  • 访客属地识别条:三路接口兜底,在页面上显示访客自己的出口省市与运营商,并提示它和数据源测试地的关系,方便你判断源站成绩对你有没有参考价值。
  • 界面:顶部 9 个分类类目(今日推荐 / 选 IP / 订阅 / 域名 / IPv6 / 大池 / 直链 / 来源 / 说明),点哪个只看哪个,不用在长页面里翻半天,手机上尤其清爽;站内「说明」类目还有图文版四步上手。
ym-cfip 实际界面(示例数据):按地区与运营商自选清单
ym-cfip 实际界面(示例数据):按地区与运营商自选清单
ym-cfip 手机版(示例数据):今日推荐与清单生成
ym-cfip 手机版(示例数据):今日推荐与清单生成

三、特点与优点

  • 数据是活的:GitHub Actions 每 2 小时把全部源重新抓一遍、从零重建总池——源增它增、源减它减,同一个 IP 被多个源收录也只算一次。总池数字每轮小幅浮动是个位数到几十条的正常呼吸,页面底部还留着最近 30 次聚合的条数记录可查。
  • 条条有出处:每个源在本轮拉了多少条、源站什么更新节奏、本站什么时候抓的,页面上逐源列明,能自己对账;哪个源临时出问题、为什么显示 0 条,也会如实注明,不拿脏数据充数。
  • 测的是你自己的网:本站自己不测速,给的延迟/速度来自各源的测试地;真正的判断靠你浏览器里的本地检测和本地测速——这才是对你有效的数字。
  • 订阅有两种活法:图省事用实时订阅,客户端自己定时换新;图准头用快照订阅,把本地测通的那批定格,谁也别想把你的成果冲掉。
  • 免费额度内运行:纯静态页面 + Pages Functions,没有服务器、没有数据库主机,部署在 Cloudflare 免费档上就够跑。
  • 口径诚实:主池走「有出处、有地区、去过重」的严口径,数量比扫描型清单小一个量级,这是主动取舍;想要量,大池采样敞开供应,但白纸黑字标注未实测。

四、一步一步部署(新手向导)

全程在浏览器里点,不用写代码。准备两个免费账号:GitHub(放代码)和 Cloudflare(放站点)。

第 1 步:Fork 仓库

打开仓库页,点右上角 Fork → 选自己的账号 → Create fork,得到你自己的一份代码。

ym-cfip 仓库主页:最新一条提交正是机器人自动聚合的数据,带时间戳
ym-cfip 仓库主页:最新一条提交正是机器人自动聚合的数据,带时间戳

第 2 步:把站点连到 Cloudflare Pages

进 Cloudflare 控制台 → Workers 和 Pages → 创建 → Pages → 连接到 Git,选你刚 Fork 的仓库。构建设置照着填:框架预设选「无」、构建命令留空、输出目录填 /、生产分支 main。保存并部署,站点就上线了,订阅端点 /sub 由仓库里的函数自动提供,不用额外配置。

第 3 步(可选):绑自己的域名

Pages 项目 → 自定义域 → 添加你的域名(前提是域名 DNS 已托管在 Cloudflare)。不绑也能用 Pages 给的默认地址。

第 4 步:启用自动更新工作流

回 GitHub 仓库 → Actions 页 → 把 聚合优选 IP 数据 工作流启用(Fork 来的仓库,Actions 默认是关的,要手动开一次,详见第五节)。开好后它每 2 小时自动聚合、自动提交、Pages 自动重新部署。想改频率就改 .github/workflows/update.yml 里 cron 那一行(默认 20 /2 ,每 2 小时一次)。

第 5 步(可选):开启快照订阅

快照要用到 KV 存储:Cloudflare 控制台 → KV → 建一个命名空间 → 回到 Pages 项目 → 设置 → 绑定 → 添加 KV 命名空间绑定,变量名必须填 SNAP。不绑完全不影响其他功能,只是点「存快照」时会提示未配置。

部署自查清单

  • [ ] 首页能打开,顶部「更新于」时间是最近的
  • [ ] 勾几个地区能生成清单,条数和计数标注对得上
  • [ ] 点一次「本地测速」,能出结果(在你自己的网络上测的才算数)
  • [ ] 仓库 Actions 里 聚合优选 IP 数据 是启用状态,最近一次运行是绿勾
  • [ ] (绑了 KV 的)存一次快照,生成的 /s/<id> 链接能打开

补一条进阶路线:如果你的 GitHub 账号已经绑过另一个 Cloudflare 账号,新账号点「连接 GitHub」会一直跳回设置页、看不到仓库(GitHub 上的 Cloudflare 应用只能绑一个 CF 账号)。这时改走令牌路线:新账号里用「直接上传」建 Pages 项目,再创建一个有 Pages 编辑权限的 API 令牌,把令牌和账号 ID 存进仓库 Settings → Secrets and variables → Actions(名字就叫 CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_ACCOUNT_ID),工作流会在每次聚合后自动把最新站点推送部署上去,效果和连 Git 一样。没配这两个 Secrets 时,那个推送步骤会自动跳过,聚合和数据提交照常进行,不会报错卡住。

五、和原站的区别:Fork 之后为什么一开始没有全自动更新

这是被问得最多的事,一次说清。先给结论:Fork 拿到的代码和原站一模一样,全自动更新的能力全在代码和工作流里;你一开始用不上,不是因为代码阉割了,而是 GitHub 的几条安全规则让「现成的配置」不能跟着 Fork 走。逐条看:

  1. Secrets 不跟着复制。原仓库里存着部署用的令牌这类加密配置,GitHub 出于安全,Fork 时不复制原仓库的 Secrets。所以如果走令牌直推部署路线,你的 Fork 里没有令牌,工作流的那一步就推不了——它会如实跳过,而不是把别人的令牌借给你用。
  2. Fork 的 Actions 默认关闭。这也是 GitHub 的规则:怕你 Fork 回去一堆定时任务在不知情的情况下乱跑。所以聚合工作流(包括它的定时触发)默认不运行,必须你本人去 Actions 页手动启用一次。没启用,数据就不会每 2 小时更新——这是「我的站怎么不自动更新」的头号原因。
  3. 数据本身不设门槛。聚合工作流每 2 小时跑一次,抓的 24 个源全是公开地址,源列表就写在脚本里,谁的 Fork 都能拉。只要你把 Actions 启用、(走令牌路线的)把 Secrets 配好,自动更新的节奏和内容就和原站完全一样,不需要原作者给你开任何权限。
  4. 还有一条 60 天规则。GitHub 会把「60 天没有任何活动」的仓库的定时工作流自动停用。原仓库顶得住,是因为数据每 2 小时就产生新提交、再加工作流里有心跳保活步兜底,永远轮不到触发这条。你的 Fork 只要聚合在正常跑,同样一直有新提交,也不会被停;但如果你把工作流关了长期不用,回来发现定时没了,去 Actions 页重新启用即可。
  5. 账号里的东西只能你自己建。快照用的 KV 命名空间在你的 Cloudflare 账号里,部署令牌也在你的账号里签发——这些是账号资产,不可能从原作者那边复制,你在自己账号里点几下建好、绑好就行。
  6. 新版本不会自己流进来。原仓库以后发新版,你的 Fork 不会自动跟上(GitHub 里 Fork 和上游是各过各的)。想升级时,在你的 Fork 页面点 Sync fork 手动同步一次即可;同步只带代码,你的数据和配置不受影响。

想获得和原站同款的全自动更新,把这四件事补齐:

  • [ ] 启用 Actions:仓库 Actions 页把 聚合优选 IP 数据 工作流启用
  • [ ] 配两个 Secrets:CLOUDFLARE_API_TOKEN、CLOUDFLARE_ACCOUNT_ID(走令牌直推部署才需要;连 Git 部署的这一步可跳过,工作流会自动略过它)
  • [ ] 建 KV 并绑定:在自己的 Cloudflare 账号建 KV 命名空间,绑到 Pages 项目上,变量名 SNAP(快照订阅用)
  • [ ] 确认工作流跑绿:手动触发一次或等它自动跑一次,Actions 里看到绿勾、站点「更新于」时间刷新,就算全线打通
ym-cfip 的 Actions 记录:聚合优选 IP 数据工作流定时运行,32 次全绿
ym-cfip 的 Actions 记录:聚合优选 IP 数据工作流定时运行,32 次全绿

反过来说,原站和你的 Fork 真正的差别只剩两样:原站的这些配置是作者已经配好的,你的要自己配一遍;以及作者那边还有一层日常巡检在盯着(那是作者自己的运维安排,不在代码里)。除此之外,你的就是你的,和原站平级,不存在「二等公民」版本。

六、出问题怎么办

先说排查顺序,从最省事的地方看起:

  1. 站内先看:打开站点,「来源」类目里逐源列着本轮条数和抓取时间,页面顶部有「更新于」时间戳。时间是新的、条数正常,数据链就是好的,多半是你筛选条件的问题;时间停在很久以前,才往下查。
  2. 查工作流:GitHub 仓库 → Actions → 聚合优选 IP 数据,看最近一次运行是不是绿勾。红了就点进去,看是哪一步红的、报错写的什么——十有八九答案就在那一行。
  3. 查部署:Cloudflare 控制台 → Workers 和 Pages → 你的项目 → 部署记录,看最新一次部署成没成。代码提交了但站点没变,多半卡在这一步。

常见故障对照表:

现象多半是什么原因去哪改
清单不更新、「更新于」时间不动工作流没启用,或被 60 天规则停用仓库 Actions 页启用 聚合优选 IP 数据,先手动跑一次看绿勾
工作流运行是红叉点开看失败步骤:单源抓取失败一般当轮跳过、自愈;部署步失败多是令牌问题令牌路线查 Secrets 里令牌的权限与账号 ID 是否填对;连 Git 的查 Pages 部署记录
站点部署失败 / 打不开构建设置不对,或 Git 连接绑错了账号构建设置核对:框架「无」、命令留空、输出目录 /、分支 main;绑错账号改走第四节的令牌路线
快照存不了、提示未配置没绑 KV,或变量名写错Pages 项目设置 → 绑定 → KV 命名空间,变量名必须是 SNAP
订阅拉到的内容不对参数口径没对上regions 地区、n 每地区数量、ms 最大延迟、mbps 最低速度、carrier 运营商、ports 端口、fmt 导出格式;页面上「我的订阅链接」卡会随选项自动拼好,优先复制那条
测通的节点进不了订阅用的是实时订阅——它在服务端现算,复现不了你浏览器的本地结果改用快照订阅,存的时候选「只含本地测通的」那一档
检测了 301 个、生成只有 295 个不是丢数据,是运营商/延迟/速度/端口过滤在生效(检测只看通不通)页面计数旁有「滤掉 N 条」的标注,对上账即可,不用修
某个源显示「已聚合 0 条」该源当轮条目和别的源重复、或没有可识别的地区标注被剔除正常现象,不用修;源站恢复或有新增条目,下一轮自动回来
想改聚合频率—改 .github/workflows/update.yml 的 cron 一行;注意它和订阅里的「建议更新间隔」是两回事,后者只是写给客户端看的建议
想加自己的 IP / 加新源—静态条目加进 seed-usjp.txt;新源改 scripts/aggregate.py 顶部的源列表(要能解析出地区才收)

更细的口径在仓库 README 的「常见问题」和「口径与边界」两节里,排查时先翻那里,基本都有答案。

七、隐私与边界

  • 不记录访客:本站纯静态、无后端、无统计,不记录任何访客信息;页面设置只存在访客自己的浏览器里。
  • 属地只给本人看:访客属地识别在访客自己的浏览器内完成(经 Cloudflare trace 与公共 IP 库),结果只显示在访客自己页面上,不回传、不存储。它的用途是帮访客判断「源站的成绩离我有多远」,不是收集谁在哪。
  • 不搞外部探针:本站不使用 Globalping 这类第三方探针网络替你测速——所有「本地」字样的检测都发生在访客自己的浏览器里。页面上标注的延迟/速度是各源在自家测试地的成绩,和你本地实测是两笔账,别混。
  • 「本地可用」≠ 好用:它只说明超时内能完成握手有响应,不代表节点能正常用、速度达标;开着代理测的还是经代理的连通性。
  • 广电的实话:全网暂无公开的广电实测优选源,本站不会拿别家运营商的数据冒充——选广电返回通用条目,靠本地检测自己筛。
  • 本项目仅聚合公开数据供学习与网络优化参考,不提供任何代理服务;优选 IP 时效性强,请以本地实测为准。

八、地址汇总

  • 本站仓库:github.com/YiMing918/ym-cfip(部署细节、订阅参数全表、数据来源逐源清单都在仓库 README 里,故障排查看「常见问题」一节)
  • 姊妹站 ym-ip(IP 监测):仓库在本博客的同系列文章里有专篇,负责「验」,本站负责「发」,配合着用

最后提醒一句:优选 IP 这东西,任何清单都只是半成品,测过你自己网络的那一份才是成品。这个站做的全部工作,就是把「找清单」和「验清单」这两步的成本降到最低。