Skip to content

IP 优选实验室(实验性) ​

实验室使用指定 IP 建立 TLS 连接,并发送带 Host / SNI 的真实 HTTP 请求,按状态码筛选后按延迟排序。它可以保留历史、统计未命中段、定时执行,并把选中的 IPv4 地址写入华为云 DNS A 记录。普通 DNS 管理、域名优选绑定和 AI 助手不受实验开关影响。

开启与迁移 ​

  1. 升级前备份数据库及 APP_ENCRYPTION_KEY,保留原加密密钥以读取已有华为云凭据。
  2. 使用管理员账号登录,在管理后台开启实验性功能。Web 导航和 Android 更多菜单会显示 IP 优选实验室。
  3. 检查恢复的配置、历史和凭据。旧配置没有 TXT 授权时,定时任务保持停用;打开开关或完成验证都不会代替你开启定时任务。
  4. 完成域名验证,保存探针配置,再先用少量候选 IP 手动执行;两套配置可独立填写。

全新安装默认关闭实验功能。关闭开关后入口隐藏,实验室 API 返回 404,运行中的任务会取消,不再继续后续 DNS 更新。停止操作还会关闭定时任务;已经被 DNS 服务接受的写入无法撤回。

选择静态探针 ​

使用自己部署或明确授权的轻量探针。仓库的 examples/ip-probe/ 提供 ip-check.txt 和 Pages 路由示例;在现有 Vite 项目中可把文件放进 public/,重新构建后部署。

推荐路径为 /ip-check.txt,接受状态码为 200。当前只检查状态码,不匹配正文。不要把第三方官网或其他安装者的域名当成默认探针。

Cloudflare Pages 只有不调用 Functions 的静态请求才不消耗函数调用额度。在有 Functions 的项目中,需把探针路径加入部署产物 _routes.json 的 exclude:

json
{
  "version": 1,
  "include": ["/*"],
  "exclude": ["/ip-check.txt"]
}

已有路由文件时只合并排除项,不能覆盖原规则。还需检查域名前置 Worker 或代理;在函数里直接返回 200 仍然会执行函数。参见 Pages 调用路由 和 静态请求计费说明。

TXT 验证只证明域名控制权,不能证明请求不经过 Functions。某个 Host 探测成功,也不保证同一 IP 对其他 Workers、Pages 或 Tunnel 业务始终可用。

DNS TXT 验证 ​

  1. 填写自己管理的验证域名,不能选择公共后缀。无需先填写或保存探测配置。
  2. 验证域名与探测 Host / SNI 独立,不必相同或属于同一根域名。探测目标仍须自行部署或取得授权。
  3. 已绑定可用 Cloudflare 账户时,Web 和 Android 会显示“一键填写并验证”。它用当前账户添加 TXT 并检查解析,不保存或修改探测 Host / SNI;验证域名必须属于该账户,且凭据具备 DNS 写入权限。
  4. 未绑定账户、域名不在当前账户或没有写入权限时,使用“生成 TXT”,在 DNS 服务商处手动添加页面给出的完整记录名与随机记录值。验证域名为 example.com 时,记录名为 _tunnel-manager-verify.example.com。DNS 控制台若自动补全根域名,只填写对应的主机记录部分。手动验证无需提供 DNS API 密钥。
  5. 若提示等待解析生效,稍后点击“检查 TXT 记录”,不要反复生成新记录。一键写入成功不等于域名已验证,必须以实际 DNS 检查结果为准。

一键操作只使用当前用户选中的 Cloudflare 连接,不借用其他用户的账户。管理员未选择有效连接时,可使用项目已有的静态 Cloudflare 凭据;选中的授权失效时不会自动切换到其他账户。页面显示的可用状态只表示已绑定凭据,域名归属及写入权限仍在操作时检查。

同一有效挑战重复点击会复用记录,不重复添加相同 TXT,不覆盖其他 TXT 或 A / CNAME。操作会关闭定时任务,也不会开始扫描;验证后如需定时,请手动开启并保存。

记录值绑定当前实例和管理员。待验证记录超过 24 小时需重新生成;新记录会撤销旧授权并关闭定时任务。修改 Host / SNI 不会撤销验证;更换操作管理员需重新验证。验证通过后,Web 和 Android 会收起记录名和值,只显示已验证域名。

TXT 必须持续保留。每次任务启动前、自动 DNS 写入前都会复查;记录缺失、解析失败或授权用户失效时不继续执行。DNS 缓存可能影响移除记录被观察到的时间。

通过 API 人工复查 TXT 时,会先请求取消当前任务,再进行检查;复查失败会关闭定时任务。保存配置、重新签发授权和停止操作同样会先取消任务,不会等 DNS 查询结束后才处理取消。服务商已经接受的写入无法撤回。

探测与预算 ​

配置说明
Host / SNI真实 HTTP Host 与 TLS Server Name,SNI 留空使用 Host;要求合法域名并验证证书
路径站内路径,不能包含完整 URL、空格或控制字符;不会跟随重定向
接受状态码如 200,204;不合格的 403、418 不会入选,除非主动将其设为接受状态
超时每个连接 1 至 15 秒
并发1 至管理员配置的上限,默认 32;每秒请求数也由管理员配置,所有探测共享,默认 10
Top N1 至 100,按延迟排序;并发限速等待时间不计入 HTTP 响应延迟
IP 段公网单 IP、CIDR、IPv4 起止范围;去重后每轮最多 65,536 个,拒绝私网、回环、链路本地和保留地址

管理员可在“管理后台 → 系统设置 → IP 优选”配置每日请求预算(1 至 10,000,000)、每秒请求数(1 至 1,000)和并发上限(1 至 256),默认分别为 100,000、10 和 32。这是面板自有预算,不是 Cloudflare Functions 额度或实际云端用量。

手动和定时任务共享实例预算,按 UTC 日期重置,启动时按完整候选数量预留;失败、停止或取消不退还,重启也不会清零。修改限制从下一轮生效,当前任务沿用启动时的限制;调低预算不清空已用量,旧配置高于新并发上限时按上限执行。同一时间只运行一轮,启动间隔至少 60 秒,每轮最多运行两小时,并在 UTC 跨日前终止。

页面会显示预算、冷却、验证状态、扫描进度和错误。“保存并执行”使用保存后的配置;运行时可点击“停止并关闭定时”。刷新和轮询不会覆盖正在编辑的探测表单。

执行历史最多保留 20 条,包含扫描数、命中数、入选 IP、错误与 DNS 更新状态。未命中段可以复制或从当前输入中剔除;剔除只匹配原始输入段,不会按地址范围猜测删除新配置。

新执行还会保留本次 Host、SNI、路径、接受状态码,以及最多 100 条未命中详情。Web 和 App 的“未命中原因”区分 HTTP 状态不符合与连接、TLS、超时等错误,失败任务也能查看。旧历史没有这些详情,需要重新执行;大批次可单独复测某个 IP。

未命中不等于 IP 完全不可用。 例如接受 200 时,某个 IP 即使能建立 TLS 连接,返回 403 仍不会入选;同一 Host 按普通 DNS 解析得到 200 也不能保证指定 IP 的路由行为相同。先检查该 IP 对实际 Host、SNI 和路径的响应,不要为了“命中”关闭证书验证、盲目接受错误状态码或立即剔除整个网段。

华为云 DNS 与定时任务 ​

自动更新 DNS 是可选项,需要 Zone 名称或 Zone ID、完整 A 记录名、TTL、Access Key 和 Secret Key。默认端点为 https://dns.myhuaweicloud.com,只接受 HTTPS,TTL 范围为 60 至 86,400 秒。A 记录仅适用于 IPv4 候选;纯 IPv6 优选应关闭此项。

Secret Key 使用 APP_ENCRYPTION_KEY 加密存储,接口只返回是否已设置。留空保持原密钥,切换 API Endpoint 必须重填 Secret Key;DNS API 请求也不跟随重定向。

只有扫描成功、结果非空、配置未变且 TXT 复查通过后才会更新 DNS。探测失败、取消、验证异常、解密失败或 DNS API 出错时会记录错误,不用空结果覆盖原记录。

完成授权后,可手动开启定时任务并保存,间隔为 5 至 1440 分钟。服务启动后按配置间隔安排下一轮,不补跑停机期间的任务;修改配置会取消当前任务,重新签发授权或停止操作会关闭定时。

Cloudflare Tunnel 可视化管理面板