Skip to content

assast/cf_snippets_extend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

111 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CF-Snippets/Pages-Extend

一个功能强大的 Cloudflare Pages 代理管理工具,集成 ProxyIP、全局出站、CFIP 管理和订阅生成功能

本项目为老王的Snippets/Worker/Argo脚本功能扩展(SS/VLESS/VMess),需要先部署老王的Snippets/Worker/Argo,再部署这个,这个只负责根据配置的proxyIP、优选IP/域名、全局出站代理生成订阅,实际的节点还是走原本的 主要是为了方便更换优选域名/IP和proxyip

📢 部署说明

本项目采用 Cloudflare Pages 部署方式

  • ✅ 支持 Git 集成,自动部署
  • ✅ 无限请求额度
  • ✅ 静态资源与 API 分离,性能更优
  • ✅ 部署简单,维护方便

如需 Worker 部署方式,请切换到 worker 分支查看(worker代码非最新), 已经部署worker的,可以直接绑定原来的数据库即可完成迁移

📝 更新记录

详细改动记录见 CHANGELOG.md


✨ 功能特性

1️⃣ ProxyIP 管理

  • 支持 IP/域名代理配置
  • 批量添加/启用/禁用/删除
  • 自动类型识别(IPv4/IPv6/域名)
  • 备注管理,方便识别

2️⃣ 全局出站管理

  • 支持 SOCKS5HTTP 代理协议
  • 支持用户名密码认证
  • 批量测速:测试代理延迟和连通性
  • 出站检测:自动检测代理出口 IP 的国家、城市、ASN 等信息
  • 详细信息查看:查看代理的入口和出口详细信息(IP、地理位置、运营商、风险评分等)
  • 地址隐藏/显示切换,保护隐私

3️⃣ CFIP 管理

  • 优选 Cloudflare IP/域名配置
  • 自定义端口(默认 443)
  • 批量操作支持
  • 支持 DNS 黑名单和节点黑名单两套独立规则
  • DNS 黑名单中的 CFIP 不参与 CF/DNS 同步,节点黑名单中的 CFIP 默认不参与订阅生成
  • 管理列表会保留已拉黑 CFIP,便于后续解黑或继续维护备注、测速和状态

4️⃣ 订阅生成

  • VLESS 订阅:一键生成 VLESS 协议订阅链接
  • Shadowsocks 订阅:一键生成 SS 协议订阅链接
  • ARGO 优选订阅:支持通过 ARGO 隧道模板生成优选订阅
    • 支持 VLESS 和 VMess 模板解析
    • 自动替换优选 IP/域名和端口
    • 批量生成多节点订阅
  • 自动组合 CFIP × ProxyIP/Outbound,生成所有可用节点
  • 节点命名规则:CFIP备注-ProxyIP备注-协议(如:香港-代理1-VLESS
  • Base64 编码订阅输出
  • 支持 Clash 订阅转换
  • 数据持久化:配置自动保存,刷新页面后自动加载
  • 支持自定义 UUID/密码、域名和路径

5️⃣ 数据管理

  • 导出/导入:支持 JSON 格式数据备份和迁移
  • 导出内容包含:ProxyIP、全局出站、CFIP、VLESS 订阅配置、SS 订阅配置
  • 两种导入模式:作为新数据导入(追加)或完全覆盖导入(替换)
  • 自动数据库初始化
  • 30 天免登录会话

📸 功能截图

登录界面

登录界面

使用 API Key 登录,支持 30 天免登录

ProxyIP 管理

ProxyIP 管理 ProxyIP 管理-卡片

管理普通 IP/域名代理,支持批量操作

全局出站管理

全局出站管理

管理 SOCKS5/HTTP 代理,支持测速和出站检测 全局出站管理-卡片样式

出站详细信息

出站详细信息

查看代理的入口和出口详细信息

CFIP 管理

CFIP 管理 CFIP 管理-卡片

管理 Cloudflare 优选 IP/域名

订阅生成

订阅生成

一键生成 VLESS 订阅链接

ARGO 优选订阅管理

ARGO 优选订阅管理

支持 ARGO 优选域名/IP 管理,自动生成优化订阅链接


🚀 部署教程(小白专用)

无需安装任何软件,只需浏览器即可完成部署!

前置要求

  • 一个 Cloudflare 账号(没有的话去 cloudflare.com 免费注册)
  • 一个 GitHub 账号(用于 Fork 项目)

步骤 1:Fork 项目

  1. 访问本项目的 GitHub 页面
  2. 点击右上角的 Fork 按钮
  3. 将项目 Fork 到你的 GitHub 账号下
  4. 顺便点个 Star ⭐ 支持一下!

步骤 2:创建 D1 数据库

  1. 登录 Cloudflare Dashboard
  2. 在左侧菜单找到 Storage & databases,点击进入
  3. 切换到 D1 SQL 数据库 标签页
  4. 点击 创建数据库 按钮
  5. 数据库名称填写:snippets-manager-db
  6. 点击 创建 按钮

创建 D1 数据库

创建成功后,数据库会自动初始化,无需手动执行 SQL。


步骤 3:部署到 Cloudflare Pages

  1. 在左侧菜单找到 Compute & AI,点击进入
  2. 返回 Workers 和 Pages 主页
  3. 点击 创建应用程序 按钮
  4. 选择 Pages 标签页 page
  5. 点击 连接到 Git
  6. 授权 Cloudflare 访问你的 GitHub 账号
  7. 选择刚才 Fork 的项目仓库
  8. 配置构建设置:
    • 项目名称cf-snippets-extend(可自定义)
    • 生产分支main
    • 构建命令:留空
    • 构建输出目录public 其他的默认
  9. 点击 保存并部署 按钮

部署过程大约需要 1-2 分钟,请耐心等待。


步骤 4:绑定 D1 数据库

  1. 部署成功后,进入 Pages 项目设置页面
  2. 点击左侧 设置函数D1 数据库绑定
  3. 点击 添加绑定 按钮
  4. 配置绑定:
    • 变量名称DB(必须是大写的 DB)
    • D1 数据库:选择 snippets-manager-db(步骤 2 创建的数据库)
  5. 点击 保存 按钮

绑定数据库 绑定数据库


步骤 5:设置 API Key

  1. 在 Pages 项目设置页面,点击 设置环境变量
  2. 点击 添加变量 按钮
  3. 配置环境变量:
    • 变量名称API_KEY(必须是大写)
    • :你自己设定的登录密码(例如:mySecretKey123
    • 环境:选择 生产预览(都勾选)
  4. 点击 保存 按钮

设置 API Key

注意:这个密钥将用于登录管理界面,请妥善保管!


步骤 6:重新部署

由于绑定和环境变量需要重新部署才能生效:

  1. 点击 部署 标签页
  2. 找到最新的部署记录
  3. 点击右侧的 ... 菜单
  4. 选择 重试部署

等待部署完成后,你的应用就可以使用了!


步骤 7:访问管理界面

  1. 在 Pages 项目主页,复制你的项目地址(格式:https://cf-snippets-extend.pages.dev
  2. 在浏览器中打开这个地址
  3. 使用步骤 5 中设置的 API Key 登录即可!

步骤 8:导入初始数据(可选)

为了快速开始使用,项目提供了初始数据文件 initial-data.json,包含:

  • 2 个 ProxyIP 示例
  • 5 个 CFIP 优选域名/IP

导入步骤:

  1. 下载项目中的 initial-data.json 文件
  2. 登录管理界面后,点击右上角 📥 导入 按钮
  3. 选择 📥 作为新数据导入(推荐)或 ⚠️ 完全覆盖导入
  4. 选择下载的 initial-data.json 文件
  5. 导入成功后,即可看到示例数据

提示

  • 作为新数据导入:将示例数据添加到现有数据中,不会删除任何数据
  • 完全覆盖导入:删除所有现有数据,然后导入示例数据(慎用)

你也可以跳过此步骤,手动添加自己的数据。


📖 使用指南

0. 快速开始:导入初始数据(推荐 也可以跳过这步自己加CFIP、ProxyIP、全局出站)

如果你是第一次使用,可以先导入项目提供的初始数据快速体验:

  1. 下载项目中的 initial-data.json 文件
  2. 点击右上角 📥 导入 按钮
  3. 在弹出的模态框中选择 📥 作为新数据导入
  4. 选择 initial-data.json 文件
  5. 导入成功后,会自动添加示例 ProxyIP 和 CFIP

两种导入模式说明:

  • 📥 作为新数据导入:将导入的数据添加到现有数据中,不会删除任何现有数据(推荐)
  • ⚠️ 完全覆盖导入:删除所有现有数据,然后导入新数据(危险操作,会有二次确认)

1. 添加 CFIP(必需)

进入 CFIP 标签页,点击 + 添加,输入优选的 Cloudflare IP 或域名:

  • 示例 1:162.159.192.1(优选 IP)
  • 示例 2:icook.hk(优选域名)
  • 端口:默认 443,可自定义

支持批量添加,每行一条,格式:IP/域名:端口#备注


2. 添加 ProxyIP(可选)

进入 ProxyIP 标签页,添加普通代理 IP/域名:

  • 示例:cdn.xn--b6gac.eu.org
  • 备注:ProxyIP-1

注意:ProxyIP 不支持 SOCKS5/HTTP 协议,如需添加请使用"全局出站"功能。


3. 添加全局出站(可选)

进入 全局出站 标签页,添加 SOCKS5 或 HTTP 代理:

  • SOCKS5 示例:socks5://user:pass@host:1080
  • HTTP 示例:http://user:pass@host:8080

添加后可以:

  • 点击 测速 按钮测试延迟
  • 点击 出站检测 查看代理出口 IP 信息
  • 点击出站信息列查看详细信息(国家、城市、ASN、风险评分等)

4. 生成订阅

VLESS 订阅

进入 订阅生成VLESS 标签页:

  1. 填写 UUID : 使用已经部署的老王订阅的UUID
  2. 填写 Snippets/Worker 域名: 使用已经部署的老王订阅的域名
  3. 填写 Path(默认:/?ed=2560
  4. 点击 💾 保存并生成订阅

生成后会显示:

  • 订阅地址(格式:https://你的Pages域名/sub/你的UUID,例如:https://cf-snippets-extend.pages.dev/sub/你的UUID
  • Clash 订阅地址(自动转换为 Clash 格式)

Shadowsocks 订阅

进入 订阅生成SS 标签页: 如果使用substore的话需要注意,生成的SS订阅链接用substore转换为clash会丢数据,建议是先用老王的或者其他人的订阅转换转成clash订阅再加入到substore

  1. 填写 密码 (Password) 使用已经部署的老王订阅的密码
  2. 填写 Snippets/Worker 域名 使用已经部署的老王订阅的域名
  3. 填写 Path(可选,留空则使用密码作为路径)
  4. 点击 💾 保存并生成订阅

生成后会显示:

  • 订阅地址(格式:https://你的Pages域名/sub/ss/你的密码,例如:https://cf-snippets-extend.pages.dev/sub/ss/你的密码
  • Clash 订阅地址(自动转换为 Clash 格式)

ARGO 优选订阅

进入 ARGO优选订阅 标签页:

  1. 填写模板链接

    • 支持 VLESS 格式:vless://uuid@host:port?...
    • 支持 VMess 格式:vmess://base64编码的配置
  2. 选择优选 CFIP

    • 勾选需要使用的优选 IP/域名
    • 可以选择多个 CFIP 批量生成节点
  3. 生成订阅

    • 点击 生成订阅 按钮
    • 系统会自动解析模板,替换地址和端口
    • 为每个选中的 CFIP 生成一个节点
  4. 获取订阅链接

    • 生成后会显示订阅地址
    • 支持一键复制
    • 可以直接导入到客户端使用

ARGO 订阅特性:

  • 自动解析 VLESS/VMess 模板配置
  • 保留原始配置的所有参数(加密、传输方式等)
  • 只替换地址(add)和端口(port)字段
  • 节点备注格式:原始备注-CFIP备注
  • 支持中文备注(已修复编码问题)

订阅特性:

  • 自动组合所有启用且符合订阅配置的 CFIP 和 ProxyIP/Outbound
  • 节点命名格式:CFIP备注-ProxyIP备注-协议(如:香港-代理1-VLESS美国-代理2-SS
  • 配置自动保存,刷新页面后自动加载
  • 支持一键复制订阅地址
  • 支持指定ID生成订阅:通过URL参数指定特定的ProxyIP、Outbound或CFIP ID

高级用法:指定ID生成订阅

你可以通过在订阅URL后添加参数来生成指定ID的订阅链接: 主要用于一个全局落地作为一个订阅源一致 可以设置自动检测最低延迟的,落地一致

参数说明:

  • proxyip:指定ProxyIP的ID,多个ID用逗号分隔
  • outbound:指定全局出站的ID,多个ID用逗号分隔
  • cfip:指定CFIP的ID,多个ID用逗号分隔
  • speedTop:在订阅最前面追加“最大速度”节点的数量
  • latencyTop:在订阅最前面追加“最低延迟”节点的数量
  • speedToplatencyTop 只会从 IP 类型的 CFIP 中挑选,自动排除域名类型

使用示例:

  1. 指定单个ProxyIP

    https://你的Pages域名/sub/你的UUID?proxyip=1
    

    生成ID为1的ProxyIP × 所有启用且符合订阅配置的CFIP的订阅

  2. 指定多个ProxyIP

    https://你的Pages域名/sub/你的UUID?proxyip=1,3,5
    

    生成ID为1、3、5的ProxyIP × 所有启用且符合订阅配置的CFIP的订阅

  3. 指定全局出站

    https://你的Pages域名/sub/你的UUID?outbound=2,4
    

    生成ID为2、4的全局出站 × 所有启用且符合订阅配置的CFIP的订阅

  4. 同时指定ProxyIP和全局出站

    https://你的Pages域名/sub/你的UUID?proxyip=1&outbound=2
    

    生成ID为1的ProxyIP和ID为2的全局出站 × 所有启用且符合订阅配置的CFIP的订阅

  5. 指定CFIP

    https://你的Pages域名/sub/你的UUID?cfip=1,2,3
    

    生成所有启用的ProxyIP/全局出站 × ID为1、2、3且符合订阅配置的CFIP的订阅

  6. 完全自定义组合

    https://你的Pages域名/sub/你的UUID?proxyip=1,2&outbound=3&cfip=1,2
    

    生成ID为1、2的ProxyIP和ID为3的全局出站 × ID为1、2的CFIP的订阅

  7. 追加高速和低延迟节点

    https://你的Pages域名/sub/你的UUID?speedTop=5&latencyTop=2
    

    在订阅最前面追加 5 个最大速度节点和 2 个最低延迟节点

SS订阅同样支持:

https://你的Pages域名/sub/ss/你的密码?proxyip=1,2&cfip=1,2,3&speedTop=3&latencyTop=3

重要说明:

  • 指定ID时,不管该ID是否启用状态,都会被包含在订阅中;节点黑名单 CFIP 是否包含由订阅配置决定
  • 未指定参数时,使用所有启用状态的项目
  • 指定proxyipoutbound参数时,只会使用指定的ID,不会包含其他启用的项目
  • 指定cfip参数时,只会使用指定且符合订阅配置的 CFIP ID
  • 可通过 include_blacklisted_cfip=1 临时让公开订阅包含节点黑名单 CFIP,例如:/sub/你的UUID?include_blacklisted_cfip=1
  • 可以灵活组合参数,生成不同的订阅链接
  • 节点数量 = (指定的ProxyIP数量 + 指定的Outbound数量) × 指定且符合订阅配置的CFIP数量
  • DNS 黑名单始终影响 CF 同步,不会从管理列表删除记录;节点黑名单是否参与订阅输出由对应订阅配置决定

使用场景:

  • 为不同设备生成不同的订阅(如:手机用低延迟节点,电脑用高速节点)
  • 测试特定节点组合的效果
  • 为不同用户分配不同的节点
  • 临时禁用某些节点但保留在订阅中
  • 单落地多入口优选:为单个全局出站(落地)生成独立订阅,配合客户端自动选择最低延迟功能,实现同一落地的多入口自动优选,保证落地一致性(例如:一个美国落地配置多个优选域名/IP,客户端自动选择延迟最低的入口)

5. 导入到客户端

复制订阅地址,粘贴到你的 V2Ray/Clash/Shadowrocket 等客户端中,更新订阅即可!


🔧 高级功能

批量操作

  • 勾选多个项目后,可批量启用/禁用/删除
  • 支持批量测速和出站检测
  • CFIP 支持按失败次数阈值批量删除,例如删除失败次数大于等于指定值的记录

数据导出/导入

导出数据

  • 点击右上角 📤 导出 按钮
  • 自动下载 JSON 格式的备份文件(文件名格式:cf-snippets-managerend-YYYY-MM-DD.json
  • 备份文件包含:
    • 所有 ProxyIP 配置
    • 所有全局出站配置
    • 所有 CFIP 配置
    • VLESS 订阅配置(UUID、域名、路径)
    • SS 订阅配置(密码、域名、路径)

导入数据

  1. 点击右上角 📥 导入 按钮
  2. 选择导入模式:
    • 📥 作为新数据导入(推荐)
      • 将导入的数据添加到现有数据中
      • 不会删除任何现有数据
      • 适合合并多个备份文件或添加新数据
      • 订阅配置会被更新(不会重复)
    • ⚠️ 完全覆盖导入(危险)
      • 先删除所有现有数据(包括订阅配置)
      • 然后导入新数据
      • 会有二次确认提示
      • 适合完全恢复备份或重置数据
  3. 选择 JSON 备份文件
  4. 等待导入完成

导入模式选择

使用场景:

  • 备份数据:定期导出数据,防止数据丢失
  • 迁移数据:在不同部署之间迁移配置
  • 分享配置:与他人分享你的优选 IP/域名配置
  • 批量添加:使用初始数据文件快速添加常用配置
  • 恢复配置:误删数据后快速恢复

注意事项:

  • 导出的 JSON 文件包含所有配置,请妥善保管
  • 导入前建议先导出当前数据作为备份
  • 完全覆盖导入会删除所有数据,请谨慎使用

地址隐藏

  • 在全局出站页面,点击 👁️ 显示地址 / 🔒 隐藏地址 切换显示模式
  • 隐藏模式下,SOCKS5/HTTP 地址会显示为 ***,保护隐私
  • 适合在公共场合或截图分享时使用

📝 格式说明

ProxyIP 格式

# 单行格式
IP/域名#备注

# 批量添加示例
210.61.97.241#香港节点
proxy.example.com#美国节点

全局出站格式

# SOCKS5(无认证)
socks5://host:port#备注

# SOCKS5(有认证)
socks5://user:pass@host:port#备注

# HTTP(无认证)
http://host:port#备注

# HTTP(有认证)
http://user:pass@host:port#备注

CFIP 格式

# 单行格式
IP/域名:端口#备注

# 批量添加示例
162.159.192.1:443#优选IP-1
icook.hk#优选域名

❓ 常见问题

Q1:测速显示"离线"怎么办?

  • 检查代理地址格式是否正确
  • 确认代理服务器是否在线
  • 本地代理(127.0.0.1)无法从 CF 访问,会显示离线

Q2:出站检测失败?

  • 确保代理支持 TCP 连接
  • 检查代理是否有流量限制
  • 部分代理可能不支持出站检测

Q3:订阅生成后无法使用?

  • VLESS 订阅
    • 确认 UUID 格式正确(标准 UUID 格式,并且是部署的老王的snip订阅的uuid)
    • 确认 Snippets/Worker 域名填写正确(不要带 https://
    • 确认至少添加了一个启用且符合当前订阅配置的 CFIP
  • SS 订阅
    • 确认密码已填写
    • 确认 Snippets/Worker 域名填写正确
    • Path 可以留空(会自动使用密码作为路径)
    • 确认至少添加了一个启用且符合当前订阅配置的 CFIP

Q4:如何修改 API Key?

在 Cloudflare Pages 设置页面:

  1. 进入 Pages 项目设置
  2. 点击 设置环境变量
  3. 找到 API_KEY 变量
  4. 点击 编辑,输入新密钥
  5. 点击 保存
  6. 部署 标签页重新部署项目

Q5:导入数据时应该选择哪种模式?

  • 首次使用:选择"作为新数据导入",导入 initial-data.json 快速开始
  • 添加新数据:选择"作为新数据导入",不会影响现有数据
  • 合并配置:选择"作为新数据导入",可以合并多个备份文件
  • 恢复备份:选择"完全覆盖导入",完全恢复到备份时的状态
  • 重置数据:选择"完全覆盖导入",清空所有数据后导入新配置

Q6:导入失败怎么办?

  • 检查 JSON 文件格式是否正确
  • 确认文件是从本项目导出的或使用 initial-data.json
  • 查看浏览器控制台(F12)的错误信息
  • 尝试重新导出数据或使用初始数据文件

Q7:VLESS 和 SS 订阅有什么区别?

  • VLESS:更现代的协议,支持更多特性,推荐使用
  • SS (Shadowsocks):经典协议,兼容性好,部分客户端可能只支持 SS
  • 两种订阅可以同时使用,互不影响
  • 节点数量和质量完全相同,只是协议不同

Q8:为什么订阅配置会自动保存?

  • 为了方便使用,填写的 UUID/密码、域名、路径会自动保存到数据库
  • 刷新页面后会自动加载上次的配置
  • 如果已有配置,进入页面时会自动显示订阅地址
  • 导出数据时会包含订阅配置,导入时也会恢复

Q9:ARGO 优选订阅支持哪些格式?

  • VLESS 格式vless://uuid@host:port?encryption=none&security=tls&...
  • VMess 格式vmess://base64编码的JSON配置
  • 系统会自动识别协议类型并解析
  • 保留原始配置的所有参数,只替换地址和端口

Q10:ARGO 订阅生成失败怎么办?

  • 检查模板格式:确保是完整的 vless:// 或 vmess:// 链接
  • VMess 编码问题:如果包含中文备注,确保已更新到最新版本(已修复编码问题)
  • 至少选择一个 CFIP:必须勾选至少一个优选 IP/域名
  • 查看错误提示:页面会显示具体的错误信息

Q11:ARGO 订阅和普通订阅有什么区别?

  • ARGO 订阅:基于现有的 VLESS/VMess 节点模板,只替换优选 IP/域名
  • 普通订阅:从零开始配置,需要填写完整的 UUID、域名、路径等参数
  • 使用场景
    • ARGO 订阅:适合已有节点配置,想快速生成多个优选节点
    • 普通订阅:适合从头配置新的订阅服务

Q12:Pages 部署和 Worker 部署有什么区别?

  • Pages 部署(本项目采用):
    • 静态文件与 API 分离,结构更清晰
    • 支持 Git 集成,代码更新自动部署
    • 无限请求额度,无需担心流量限制
    • 部署更简单,维护更方便
  • Worker 部署(传统方式):
    • 单文件包含所有代码,部署简单但维护困难
    • 每天 100,000 请求限制
    • 需要手动上传代码更新
  • 功能完全相同,只是部署方式不同
  • 如需 Worker 部署,请切换到 worker 分支

📄 开源协议

本项目采用 MIT 协议开源,欢迎 Fork 和 Star!


📁 项目文件说明

cf_snippet_extend/
├── public/               # 静态文件目录
│   └── index.html       # 前端页面
├── _worker.js           # Pages Worker(处理 API 和订阅请求)
├── wrangler.toml        # Cloudflare 配置文件
├── initial-data.json    # 初始数据文件(可选导入)
├── screenshots/         # 截图目录
└── README.md            # 项目说明文档

文件说明:

  • public/index.html:前端页面,包含所有 HTML、CSS、JavaScript
  • _worker.js:Pages Worker 代码,处理所有 API 请求和订阅生成
  • wrangler.toml:Cloudflare Pages 配置,包含数据库绑定信息
  • initial-data.json:提供的初始数据,包含示例 ProxyIP 和 CFIP,可选导入
  • README.md:完整的使用文档和部署教程

Pages 部署特点:

  • 静态文件(HTML/CSS/JS)与 API 逻辑分离
  • _worker.js 自动处理所有动态请求
  • 无需构建步骤,直接部署即可
  • 支持 Git 集成,代码更新自动部署

🤝 贡献

欢迎提交 Issue 和 Pull Request!


⚠️ 免责声明

本项目仅供学习交流使用,请勿用于非法用途。使用本项目所产生的一切后果由使用者自行承担。

📢 致谢声明

本项目并非原创,而是基于以下优秀开源项目的扩展融合:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors