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 时,后端返回合法的 outbounds JSON 配置(包含 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。
  • 路由体系:
    • 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+ outbounds JSON;
      • 通用 Base64 格式(Throne / Xray / v2rayN 通用):输出标准 Base64 编码的 vless://... 链接。
    • 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 并自动触发重启自愈恢复。