基于 Cloudflare Workers/Pages 的 IP 优选工具,集成带宽测试、延迟测试、智能 DNS 更新、多国家分流、Telegram 通知等功能。
⚠️ 重要提示:优选 IP 不等于落地 IP。本项目优选的 IP 是 Cloudflare CDN 节点的注册地 IP,实际网络流量可能会路由到不同的落地位置。地理位置显示为 IP 注册地,而非实际网络出口位置。
| 功能 | 描述 |
|---|---|
| 📡 IP 智能测速 | 自动发现、延迟测试、带宽测试 |
| 🎯 双池管理 | 带宽优质池 + 备用池智能分类 |
| 🌍 访客感知 | 自动识别访客地理位置,推荐最优 IP |
| 🌐 DNS 自动更新 | 智能分流更新到不同国家/地区的域名 |
| 📱 Telegram 通知 | 测速完成、DNS 更新实时推送 |
| 📥 数据导出 | 支持 CSV 格式导出优质/备用 IP |
| 🗑️ 自动清理 | 智能清理失效 IP 和黑名单 |
| 📝 日志管理 | 3-7 天自动清理,支持实时查看 |
- 🎨 卡片式布局 - 模块化设计,支持折叠展开
- ⚙️ 可视化配置 - 参数设置一目了然
- 📊 实时数据 - 测速结果即时展示
- 🔍 智能搜索 - IP 快速筛选定位
- 🌙 深色主题 - 护眼配色方案
- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages
- 点击 创建服务
- 服务名称填写
cf-best-ip - 点击 部署
注意:两种方式功能相同,任选其一即可。混淆加密版本代码经过压缩混淆,体积更小但不可读。
进入 设置 → 变量,添加:
ADMIN_PASSWORD = your_secure_password
- 进入 Workers 和 Pages → D1
- 点击 创建数据库,名称
cf-best-ip-db - 回到 Worker → 设置 → 绑定 → 添加
- 选择 D1 数据库,变量名
DB,选择刚创建的数据库
注意:数据库表结构会自动初始化,无需手动执行 SQL。
- 进入 Workers 和 Pages → KV
- 点击 创建命名空间,名称
cf-best-ip-kv - 回到 Worker → 设置 → 绑定 → 添加
- 选择 KV 命名空间,变量名
KV,选择刚创建的命名空间
进入 设置 → 触发器 → 添加 Cron 触发器:
0 * * * * # 每小时执行一次
⚠️ 子请求限制说明: Cloudflare Workers 免费版每个请求最多 50 个子请求。代码已优化,使用完整 50 个子请求限制:单域名模式(只设置主域名或只设置国家域名):
- 测速阶段:最多 17 个 IP × 2 个子请求 = 34 个子请求
- DNS 更新阶段:约 8-11 个子请求(查询 1 + 删除 2-3 + 创建 3 + KV 操作 2-4)
- 通知:1 个子请求
- 总计:约 48-50 个子请求 ✅
双域名模式(同时设置主域名和国家域名):
- 测速阶段:最多 14 个 IP × 2 个子请求 = 28 个子请求
- DNS 更新阶段:约 10-12 个子请求(双域名 DNS 操作 + KV 操作)
- 通知:1 个子请求
- 总计:约 48-50 个子请求 ✅
动态调整机制:
- 测速阶段根据实际子请求消耗动态控制 IP 数量
- 单域名稳定上限:17 个 IP(超过可能无法完成 DNS 更新和通知)
- 双域名稳定上限:14 个 IP(DNS 预算更多,测速 IP 相应减少)
- DNS 更新支持 1-3 个 IP,根据剩余子请求自动调整
- 国家域名采用轮询机制,每次只更新一个国家
Pages 部署适合需要快速部署前端界面,同时支持后端 Functions 的场景。注意:Pages 不支持 Cron 定时任务。
点击右上角 Fork 按钮,将项目复制到你的 GitHub 账户。
项目使用 pages/ 目录作为部署根目录:
pages/
├── _worker.js # 主程序入口
├── wrangler.toml # 配置文件
├── package.json # 依赖配置
├── migrations/
│ └── 001_init.sql # 数据库初始化脚本
└── public/
└── index.html # 静态页面
- 创建 D1 数据库:
- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages → D1
- 点击 创建数据库,名称填写
cf-best-ip-db - 记录数据库 ID
- 创建 KV 命名空间:
- 进入 Workers 和 Pages → KV
- 点击 创建命名空间,名称填写
cf-best-ip-kv - 记录命名空间 ID
编辑 pages/wrangler.toml,填入数据库和 KV ID:
[[d1_databases]]
binding = "DB"
database_name = "cf-best-ip-db"
database_id = "your-database-id" # 替换为你的数据库 ID
[[kv_namespaces]]
binding = "KV"
id = "your-kv-id" # 替换为你的 KV ID
preview_id = "your-kv-preview-id"- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages → 创建项目 → Pages
- 点击 连接到 Git
- 授权并选择你 Fork 的仓库
- 构建设置:
- 框架预设:
None - 构建命令:留空(无需构建)
- 构建输出目录:留空
- 根目录:
pages← 关键配置,指向 pages 目录
- 框架预设:
- 点击 保存并部署
- 进入 Pages 项目 → 设置 → 函数
- KV 命名空间绑定:
- 变量名:
KV - 选择刚创建的 KV 命名空间
- 变量名:
- D1 数据库绑定:
- 变量名:
DB - 选择刚创建的 D1 数据库
- 变量名:
- 点击 保存
在 Pages 项目 → 设置 → 环境变量 中添加:
ADMIN_PASSWORD = your_secure_password
在 Pages 控制台点击 重新部署,使绑定和环境变量生效。
注意:数据库表结构会在首次访问时自动初始化,无需手动执行 SQL。
适合不想使用 Git 的用户。
- 下载本仓库代码
- 进入
pages/目录,确保文件结构如下:pages/ ├── _worker.js ├── wrangler.toml ├── package.json ├── migrations/ │ └── 001_init.sql └── public/ └── index.html - 将
pages/目录内的文件打包成 zip 压缩包
- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages → 创建项目 → Pages
- 点击 直接上传
- 项目名称填写
cf-best-ip - 上传准备好的 zip 压缩包
- 点击 部署
同方案 A 的步骤 3、5、6。
| 变量名 | 说明 | 示例 |
|---|---|---|
ADMIN_PASSWORD |
管理员密码 | MySecureP@ss123 |
| 变量名 | 说明 | 默认值 | 范围 |
|---|---|---|---|
DEFAULT_IP_COUNT |
默认返回 IP 数量 | 3 |
1-10 |
DEFAULT_TEST_COUNT |
默认测试 IP 数量 | 30 |
10-100 |
DEFAULT_THREAD_COUNT |
默认测试线程数 | 10 |
1-10 |
DEFAULT_BANDWIDTH_FILE_SIZE |
带宽测试文件大小(MB) | 3 |
3-10 |
FAILED_IP_COOLDOWN_DAYS |
失败 IP 冷却天数 | 15 |
1-30 |
MAX_HIGH_QUALITY_POOL_SIZE |
带宽优质池最大容量 | 20 |
10-50 |
- 访问部署后的域名(如
https://cf-best-ip.your-subdomain.workers.dev) - 输入管理员密码登录
- 进入 DNS 设置 配置:
- Cloudflare API Token
- 区域 ID
- 域名映射
- 进入 运行参数 调整测试配置
- 点击 开始测速
在 DNS 设置 → 国家域名映射 中配置:
| 国家 | 域名 |
|---|---|
| CN | cf-cn.your-domain.com |
| US | cf-us.your-domain.com |
| JP | cf-jp.your-domain.com |
系统会自动将对应国家的 IP 更新到相应域名。
- 创建 Telegram Bot(@BotFather)
- 获取 Chat ID(@userinfobot)
- 在 DNS 设置 → Telegram 通知 中填入
- 登录 Cloudflare Dashboard
- 点击右上角头像 → My Profile
- 选择 API Tokens → Create Token
- 使用 Custom token 模板
- 权限配置:
- Zone:Read
- Zone.DNS:Edit
- Cloudflare Pages:Edit(如使用 Pages)
- D1:Edit
- Workers Scripts:Edit
- 资源选择你的账户和域名
- 点击 Create Token
cf-best-ip/
├── worker.js # 主程序入口
├── migrations/
│ └── 001_init.sql # 数据库初始化脚本
├── public/
│ └── index.html # 静态页面(可选)
├── wrangler.toml # Wrangler 配置
├── package.json # 项目依赖
└── README.md # 本文件
| 文件 | Workers 部署 | Pages 自动部署(Git) | Pages 直接上传 | 说明 |
|---|---|---|---|---|
worker.js |
✅ 直接使用 | ✅ 直接使用 | 主程序文件 | |
_worker.js |
❌ 不使用 | ❌ 不使用 | ✅ 直接使用 | 主程序文件(Pages 专用) |
functions/[[path]].js |
❌ 不使用 | ✅ 推荐使用 | ✅ 推荐使用 | Pages Functions 入口(推荐) |
wrangler.toml |
✅ 必需 | 配置文件 | ||
migrations/001_init.sql |
✅ 必需 | ✅ 必需 | ✅ 必需 | 数据库初始化脚本 |
注意:
- Pages 自动部署(Git):推荐使用
functions/[[path]].js,这是 Pages 的现代推荐方式- Pages 直接上传:可以使用
_worker.js或functions/[[path]].js- Workers 部署:直接使用
worker.js,无需重命名
| 方式 | 文件要求 | 定时任务 | 推荐度 |
|---|---|---|---|
| 方式一 Workers | worker.js |
✅ 支持 | ⭐⭐⭐ 最推荐 |
| 方式二 A Pages 自动部署(Git) | functions/[[path]].js |
❌ 不支持 | ⭐⭐ 推荐 |
| 方式二 B Pages 直接上传 | _worker.js 或 functions/[[path]].js |
❌ 不支持 | ⭐⭐ 推荐 |
A: 未正确绑定 D1 数据库。请检查 Workers/Pages 设置中的绑定配置。
A: 检查 API Token 是否有 Zone.DNS:Edit 权限,以及区域 ID 是否正确。
A: 确认 Bot Token 和 Chat ID 正确,且已向 Bot 发送过 /start。
A: Pages 不支持 Cron 触发器,如需定时任务请使用 Workers 部署。
A: 确认根目录存在 _worker.js 文件,这是 Pages 识别 Worker 的必要条件。
- 运行时: Cloudflare Workers / Pages Functions
- 数据库: Cloudflare D1 (SQLite)
- 缓存: Cloudflare KV
- 前端: 原生 HTML + CSS + JavaScript
- 部署: Cloudflare Dashboard 控制台
- 优化双池智能管理算法
- 新增访客地理位置感知
- 改进 UI 响应式设计
- 修复 DNS 批量更新问题
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!


