AI 指令:搭建 vless + Cloudflare 临时隧道 + 流量统计 WebUI
本页面向 AI 提供「如何搭建一套 vless_cf 系统」的固定指令。AI 通过 URL 访问本页后,按下列规则为用户实现该系统。
目标概览
搭建一套自托管的代理接入与智能运维系统:
- 本地 VLESS 服务端:用 Xray-core 在本机仅监听 127.0.0.1(不暴露公网,即「只运行本地连接」)。
- Cloudflare 临时隧道:用
cloudflared的临时(quick)隧道把本地端口暴露为公网https://*.trycloudflare.com。 - 隧道与配置信息落盘:把隧道地址、VLESS 链接以及鉴权 Token 等写入
vless_cf.json。 - WebUI 一键重启双服务:网页控制台提供可视化按钮,可一键重启 VLESS 与 CF 临时隧道(重建连接并刷新隧道地址)。
- 多客户端智能订阅(Token=3588):提供
/sub?token=3588订阅端点,默认 Token 为3588(后台可修复/修改);自适应支持 Throne、Sing-box、Xray / v2rayN 等客户端直接订阅。 - 每小时链路自检与故障自愈:编排器后台每小时测试一次 CF 出口链路(检测是否能正常访问
google.com);若不通畅则将时间与原因写入errorlog(error.log),并自动重启 VLESS 与 CF 两个服务恢复网络。 - Go 写 WebUI 控制台:端口
3589、默认密码temp123,页面展示节点链接、订阅管理、一键重启、健康监控与流量统计。
第一步:本地 VLESS 服务端(只运行本地连接)
VLESS 服务端必须只监听
127.0.0.1,公网可达性完全依赖后面的 CF 隧道,不要在 0.0.0.0 上监听。下载对应平台的 Xray-core(首次运行自动下载,或用户提供)。生成服务端配置,要点:
- 入站协议
vless,监听127.0.0.1:10808(端口可固定)。 - 传输用 WebSocket:
method=websocket,path=/vless;服务端本身security=none(TLS 由 Cloudflare 终止)。 - 开启流量统计:顶层
"stats": {},policy.system.statsInboundUplink/Downlink=true,入站打 tag(如vless-in)。 - 开启 Xray Metrics 导出:
"metrics": {"tag":"metrics","listen":"127.0.0.1:10809"},供 WebUI 从/debug/vars抓取流量。
{
"stats": {},
"metrics": { "tag": "metrics", "listen": "127.0.0.1:10809" },
"policy": {
"levels": { "0": { "statsUserUplink": true, "statsUserDownlink": true } },
"system": { "statsInboundUplink": true, "statsInboundDownlink": true }
},
"inbounds": [
{
"tag": "vless-in",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "vless",
"settings": { "clients": [ { "id": "<UUIDv4>", "level": 0 } ], "decryption": "none" },
"streamSettings": {
"method": "websocket",
"security": "none",
"wsSettings": { "path": "/vless", "headers": {} }
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "direct" }
]
}
第二步:Cloudflare 临时隧道连接
用 cloudflared 把本地端口暴露为公网。临时隧道无需登录。
cloudflared tunnel --url http://127.0.0.1:10808 --no-autoupdate
运行主机按服务器环境处理:保持稳定的上游网络、DNS,以及允许出站访问 Cloudflare(TCP 443;QUIC 使用 UDP 7844)。保持协议为默认 auto,UDP 不可用时允许自动回退到 HTTP/2。
从 stdout 解析形如 https://<随机>.trycloudflare.com 的地址(正则:https://[a-z0-9-]+\.trycloudflare\.com)。该地址即 VLESS 客户端的连接主机。
临时隧道地址是易变的:每次程序启动 / cloudflared 重连都会得到新地址,旧地址即刻失效。
第三步:隧道与订阅信息写入 vless_cf.json
把解析到的隧道信息、鉴权 Token 与生成内容写入 vless_cf.json,每次成功拿到新隧道地址或修改 Token 时都更新:
{
"uuid": "<UUIDv4>",
"localPort": 10808,
"token": "3588",
"tunnelUrl": "https://<随机>.trycloudflare.com",
"vlessUrl": "vless://<UUIDv4>@<随机>.trycloudflare.com:443?encryption=none&security=tls&type=ws&path=%2Fvless&host=<随机>.trycloudflare.com#vless_cf",
"allowInsecure": false,
"tunnelUpdatedAt": "2026-08-28T12:00:00+08:00",
"createdAt": "2026-08-28T11:30:00+08:00"
}
token:订阅防盗链密钥,初始默认为3588,可在 WebUI 后台随时修改与修复。tunnelUpdatedAt:本次隧道地址写入时间(ISO8601,带时区)。createdAt:整套系统首次创建时间。
第四步:生成 VLESS 节点链接与多客户端订阅(Throne / Sing-box / Xray)
多端自适应:提供统一订阅接口
/sub?token=3588,能自动满足 Throne、Sing-box、Xray / v2rayN 等各种代理客户端的订阅格式要求。1. 单节点通用 URL 规范
vless://<UUID>@<隧道主机>:443?encryption=none&security=tls&type=ws&path=%2Fvless&host=<隧道主机>#vless_cf
默认开启公共 TLS 校验;如特定客户端确需跳过,可选择带 &allowInsecure=1 参数。
2. 各主流客户端订阅支持方案
- Throne 客户端 (Android / iOS):基于 sing-box 内核,同时完全支持通用 Base64 订阅与 sing-box 格式。在 Throne 中直接填入订阅地址
http://<IP>:3589/sub?token=3588即可直接拉取并连通。 - Sing-box 客户端:当请求头
User-Agent包含sing-box,或携带参数?format=singbox时,后端返回合法的outboundsJSON 配置(包含 vless、ws 传输与 tls 节点定义)。 - Xray / v2rayN / Shadowrocket 客户端:默认返回经 Base64 编码的节点单行/多行链接,并携带标准流量及节点名称响应头。
第五步:用 Go 写编排器 + WebUI(一键重启 / 订阅分发 / 每小时自愈)
写一个 Go 程序(建议仅用标准库),作为系统的核心编排器与 WebUI 控制中枢:
- 启动与子进程管理:确保 Xray / cloudflared 可用(缺失则按平台自动下载到
bin/),拉起两个子进程,实时从 cloudflared 的 stderr/stdout 解析临时隧道地址并写入vless_cf.json。 - 端口、密码与 Token 可配置:
# 命令行参数 ./vless_cf -port 3589 -password temp123 -token 3588 # 或环境变量 VLESS_CF_PORT=3589 VLESS_CF_PASSWORD=temp123 VLESS_CF_TOKEN=3588 ./vless_cf-port/VLESS_CF_PORT:WebUI 监听端口,默认3589。-password/VLESS_CF_PASSWORD:Web 控制台登录密码,默认temp123。-token/VLESS_CF_TOKEN:订阅防盗链密钥,默认3588(支持在后台直接修改/修复)。
- 鉴权体系:
- Web 控制台与
/api/*:整站采用 Basic Auth(用户admin+ 配置密码)。 - 客户端订阅端点
/sub:开放访问但必须校验?token=3588,未带 Token 或不匹配直接返回403 Forbidden。
- Web 控制台与
- 路由体系:
GET /:返回前端单页面控制台(Vanilla HTML/JS)。GET /api/status:返回tunnelUrl、vlessUrl、token、tunnelUpdatedAt、上次自检时间与网络状态。POST /api/restart:一键重启服务。接收{"target": "all" | "vless" | "cf"},安全终止对应子进程并重新拉起。若是重启 CF 隧道,则重新监听隧道日志解析新地址并同步更新vless_cf.json。GET /sub:多端订阅端点。校验token后,根据客户端 UA 或format参数自适应返回:- Sing-box 格式(
format=singbox或 UA 匹配):输出标准 Sing-box 1.8+outboundsJSON; - 通用 Base64 格式(Throne / Xray / v2rayN 通用):输出标准 Base64 编码的
vless://...链接。
- Sing-box 格式(
POST /api/token:在后台修改订阅 Token,写入vless_cf.json立即生效(后台修复/防盗刷)。POST /api/test-now:立即手动触发一次访问google.com连通性测试。GET /api/logs与POST /api/logs/clear:查看与清空error.log。GET /api/stats:抓取 Xray 内部 Metrics(127.0.0.1:10809/debug/vars)返回上下行流量与实时速率。GET /api/resources:采样并返回 Xray 与 cloudflared 的 CPU / 内存指标。
- 每小时链路自检与故障自愈保活:
后台健康检测 Goroutine(每小时探测):
1. 编排器启动后每隔 3600 秒(1小时,首次启动延迟 30 秒)向https://www.google.com/generate_204发起 HTTP GET 测试请求(走本地代理127.0.0.1:10808,超时 10 秒)。
2. 若返回 HTTP 200/204,判定 CF 链路正常,刷新 WebUI 显示的连通状态与延迟。
3. 若发生超时、网络拒绝或状态异常:
• 立即将当前时间戳、故障原因与旧隧道地址追加写入error.log;
• 自动触发一键重启两个服务(重新拉起 Xray 与 cloudflared 隧道);
• 重新抓取新隧道地址更新vless_cf.json,并将自愈成功/失败结果记录在error.log。 - 优雅退出:捕获
SIGINT/SIGTERM信号,同步优雅终止两个子进程,避免孤儿进程残留。
第六步:WebUI 页面展示与操作要点
临时隧道每次重启都会生成全新公网域名,WebUI 必须提供明确的时间戳与一键重启操作,方便用户随时恢复或刷新。
前端页面(内置 Vanilla JS,不依赖外部大型库)需包含以下核心控制区:
-
一键重启控制区:
- 一键重启全部 (VLESS + CF):一键重启双进程并刷新隧道,前端显示加载等待圈,完成后自动刷新页面。
- 仅重启 VLESS / 仅重启 CF 隧道:便于按需排查单边故障。
-
订阅分发与 Token 管理区:
- 展示通用订阅链接:
http://<服务器IP>:3589/sub?token=3588,附带「复制链接」按钮。 - 展示 Sing-box 订阅链接:
http://<服务器IP>:3589/sub?token=3588&format=singbox,支持一键复制。 - 后台修改/修复 Token:输入框展示当前 Token(默认
3588),点击「保存修改」调用POST /api/token更新密钥,旧密钥立即失效。
- 展示通用订阅链接:
-
每小时自检状态与错误日志(error.log)监视面板:
- 显示上次 Google 连通性检测时间、当前网络状态(正常绿色徽标 / 异常红色徽标)及延迟。
- 提供「立即测试连通性」按键,点击后即时请求验证。
- 嵌入实时错误日志查看窗口,展示
error.log最近的巡检报警与自动重启记录,并提供「清空日志」按钮。
-
实时状态与监控:当前隧道 URL、隧道最后更新时间(
tunnelUpdatedAt)、实时上行/下行速率与累计流量、Xray 和 cloudflared 的 CPU / 内存采样。
第七步:交付标准与自检流程
- 产出规范:
vless_cf.html(本指令页)、main.go+go.mod(内置 WebUI、一键重启、订阅、每小时自检与自愈)、运行时生成vless_cf.json与error.log(加入.gitignore)、bin/目录(加入.gitignore)。 - WebUI 验证:打开
http://localhost:3589,用temp123登录,界面能正常展示节点信息与订阅链接;点击「一键重启全部」,双服务成功重新拉起且页面时间戳更新。 - 客户端订阅验证:
- 直接访问
http://localhost:3589/sub?token=3588能拉取 Base64 订阅,导入 Throne 或 Xray/v2rayN 均能成功解析; - 带参数
?format=singbox能拉取合法的 Sing-box JSON 配置; - 访问
/sub?token=wrong_token能够严格返回403 Forbidden;在 WebUI 修改 Token 为新值后,新值即刻生效。
- 直接访问
- 故障自愈验证:点击「立即测试连通性」能准确返回当前访问 Google 状态;手动断开网络或结束 CF 进程模拟异常,系统能将报错记录在
error.log并自动触发重启自愈恢复。