Cloudflare Worker 自建节点教程:edgetunnel 部署、KV 绑定与订阅生成
Cloudflare Worker 自建节点教程:edgetunnel 部署、KV 绑定与订阅生成
本文记录一套基于 Cloudflare Workers/Pages 的自建节点方案,使用开源项目 cmliu/edgetunnel。项目源码、完整 Worker 代码和配置说明可以从官方仓库获取;本文中提到的相关代码也整理在参考文章中:
一、先说明这套方案到底是什么
这里说的“自建”,指的是自己部署 Worker、自己绑定 KV、自己管理域名和订阅配置。它不是在 VPS 上安装完整的 Xray 或 sing-box 服务端。
实际链路大致是:
客户端 → 你的域名 → Cloudflare Worker → Cloudflare 边缘或配置的上游 → 目标网站
因此,出口线路、速度和稳定性会受到 Cloudflare 节点、地区网络、优选 IP 和上游配置影响。如果你的要求是“所有流量固定从自己的 VPS 公网 IP 出口”,还需要另外部署 VPS 服务端,本文最后会说明接入方式。
二、需要准备什么
- 一个 Cloudflare 账号。
- 一个已经接入 Cloudflare 的域名,建议使用子域名,例如
node.example.com。 - 一个 Cloudflare Workers KV 命名空间。
- 一个单独设置的后台密码和订阅路径密钥。
不建议使用来路不明的修改版代码或安装包。部署时直接从项目官方仓库获取 _worker.js。
三、创建 KV 命名空间
- 登录 Cloudflare 控制台。
- 进入
Workers & Pages,找到KV。 - 创建一个新的命名空间,例如
edgetunnel-config。
命名空间名称可以自定义,后面真正重要的是绑定名称必须填写为 KV。
四、创建并部署 Worker
- 进入
Workers & Pages。 - 点击创建 Worker,先使用默认名称完成创建。
- 打开代码编辑器。
- 从官方仓库复制
_worker.js的完整内容,替换编辑器中的示例代码。 - 点击保存并部署。
官方源码地址:
https://github.com/cmliu/edgetunnel/blob/main/_worker.js
这份文件比较长,不建议在博客中复制一份容易过时的完整源码。项目更新后,以官方仓库中的版本为准。
五、设置环境变量
打开 Worker 的设置页面,在 Variables、Variables and Secrets 或类似名称的页面中添加以下变量。
| 变量 | 是否必需 | 用途 | 建议 |
|---|---|---|---|
ADMIN | 必需 | 后台管理密码 | 使用独立的高强度密码,并按 Secret 保存 |
KEY | 建议 | 订阅地址的路径密钥 | 使用随机字符串,区分大小写 |
UUID | 可选 | 固定节点 UUID | 必须是 UUID v4;不设置时由程序自动生成 |
OFF_LOG | 建议 | 关闭 KV 请求日志 | 设置为 1 |
DEBUG | 不需要 | 调试日志 | 生产环境不要开启 |
PROXYIP | 可选 | 指定反代地址 | 先留空,不要把普通 VPS IP 直接填进来 |
URL | 可选 | 默认伪装页面 | 先留空,使用项目默认页面 |
最小配置只需要:
ADMIN=请换成你自己的后台密码
KEY=请换成随机订阅密钥
OFF_LOG=1
如果想固定 UUID,可以在 WSL、Linux 或 macOS 中生成一个 UUID v4:
python -c 'import uuid; print(uuid.uuid4())'
注意:如果不设置 UUID,程序会根据后台密码和密钥计算节点 UUID。以后修改 ADMIN 或 KEY,订阅 Token 和自动生成的 UUID 可能随之变化。
六、绑定 KV
- 进入 Worker 的设置页面。
- 找到
Bindings或KV namespace bindings。 - 添加一个 KV 命名空间绑定。
- 绑定名称填写:
KV。 - 选择前面创建的
edgetunnel-config命名空间。 - 保存并重新部署。
如果绑定名称不是 KV,后台配置无法正常保存,通常会出现 noKV 或配置初始化失败。
七、绑定自定义域名
- 进入 Worker 的 Domains、Routes 或 Custom Domains 页面。
- 添加一个自己的子域名,例如
node.example.com。 - 等待 Cloudflare 完成 DNS 和 HTTPS 证书配置。
如果暂时没有自定义域名,也可以先使用 Cloudflare 分配的 Worker 域名测试。正式使用时建议绑定自己的子域名,并且只使用 HTTPS。
八、进入后台初始化配置
访问:
https://node.example.com/admin
输入 ADMIN 密码。第一次访问时,程序会在 KV 中初始化默认配置。
默认配置通常会使用 VLESS、WebSocket、TLS 和本地优选地址。可以先保持默认值,确认节点能够使用后,再逐项调整。不要一开始同时修改协议、传输方式、路径和优选地址,否则出错时不容易判断原因。
九、生成订阅地址
假设环境变量设置为:
KEY=n9KxExampleKey
通用订阅地址为:
https://node.example.com/n9KxExampleKey
也可以根据客户端类型显式指定格式:
# Clash / Mihomo
https://node.example.com/n9KxExampleKey?clash
# sing-box
https://node.example.com/n9KxExampleKey?singbox
# Surge
https://node.example.com/n9KxExampleKey?surge
订阅路径中的 KEY 区分大小写。不要把这个地址公开到群聊、截图或公开文章中,否则别人可以直接使用你的 Worker 和订阅配置。
十、部署后的检查方法
- 访问
/admin,确认可以登录。 - 在后台保存一次配置,确认没有 KV 错误。
- 把订阅地址导入客户端,确认能够拉取配置。
- 先测试普通网页,再测试视频和需要代理的服务。
- 观察 Cloudflare 的 Worker 请求量和错误日志。
常见现象:
- 打开后台显示 noKV:检查 KV 是否绑定,绑定名称是否精确为
KV。 - 订阅地址返回 404:检查
KEY是否设置,路径大小写是否一致,以及是否已经重新部署。 - 订阅能拉取但节点不可用:先保持默认协议和路径,检查域名 HTTPS 是否正常,再检查优选地址和网络线路。
- 修改密码后旧订阅失效:这是预期现象。修改
ADMIN或KEY后,重新生成并导入订阅。 - 速度不稳定:Worker 本身不是固定 VPS 出口,线路质量会随 Cloudflare 节点、地区和优选 IP 变化。
十一、如果要接入自己的 VPS
本文这套 Worker 部署不等于已经拥有自己的 VPS 出口。要使用自己的服务器,需要先在 VPS 上部署兼容的 Xray、sing-box 或 Trojan 服务端,再将自己的节点订阅接入后台。
项目源码提供了两种方向:
- 在后台关闭本地优选生成,并填写自己的订阅地址到
SUB。 - 使用项目文档中提供的 Trojan fallback 路径,例如:
/trojan=你的VPS地址:端口
Trojan fallback 对上游服务有额外要求,包括密码、TCP、TLS 和 WebSocket 形式需要匹配。不要把任意 VPS IP 直接填入 PROXYIP,它是反代地址配置,不是通用的 VPS 节点字段。
如果目标是“固定从自己的 VPS 出口”,建议先单独完成 VPS 服务端部署和直连测试,再接入 Worker。这样排查问题时,可以明确区分 VPS 服务端、Cloudflare 转发和客户端订阅三部分。
十二、隐私和安全提醒
- 项目源码默认会把请求 IP、ASN、地区、访问 URL 和 User-Agent 写入 KV 日志;不需要日志时,设置
OFF_LOG=1。 - 不要在后台填写 Cloudflare Global API Key。只有确实需要统计功能时,才使用权限尽量小的 API Token。
- 订阅转换功能可能会调用外部转换服务。敏感订阅不要直接交给不信任的第三方转换器。
- 不要打开
DEBUG后长期运行,也不要把ADMIN、KEY、UUID发布出来。 - Cloudflare 的额度、网络策略和服务条款会影响实际使用。所谓“免费”和“无限流量”不能当作稳定性或额度保证。
- 请遵守所在地区法律法规、Cloudflare 条款和目标网站的服务条款。
参考资料
项目更新较快,部署前请以官方仓库当前 README 和源码为准。本文只介绍部署和配置思路,不提供任何公开共享节点。
评论
发表评论