Skip to content

v2.1.2: feat: 原生 VLESS+WS+TLS 支持,直连 Cloudflare CDN 节点

Choose a tag to compare

@debbide debbide released this 16 Sep 10:18
· 3 commits to master since this release
用纯 Node.js 实现 VLESS over WebSocket over TLS 客户端,让面板能直接
使用 CF 中转的 vless:// 节点,无需任何第三方二进制或额外 npm 依赖。

背景:现有 http/socks 上游走 proxy-chain,无法表达 CDN 中转的 VLESS
节点;而 proxy-chain 的 SOCKS 路径显式绕过 HTTP agent 连接池,每次请求
新建连接,边缘 IP 被钉死,高峰期抖动明显。

新增 backend/vless/:
- uuid.js / vless-header.js  协议编解码(IPv4/IPv6/域名地址)
- websocket.js               手写 RFC 6455 客户端:握手/掩码/分片/控制帧
- link.js                    vless:// 解析与能力校验
- cf-edges.js                CF 边缘池、延迟探测、失败冷却
- dialer.js                  TLS+WS+VLESS 隧道、跨边缘重试、保活
- http-proxy.js              自建 HTTP 代理监听,CONNECT 与明文 HTTP 都走隧道

面板集成:
- parseProxyUri 放行 vless,start()/testProxy() 对 vless 分流到自建监听器
- parseProxyInput 识别 vless://,节点名默认取链接的 #fragment
- 前端提示文案补充 VLESS

关键设计:
- 明文 HTTP 必须经隧道转发。proxy-chain 只对 CONNECT 建隧道,明文请求
  会直连出去造成真实 IP 泄漏;对 vless:// 上游更是直接返回 500。
- 明文 HTTP 走 http.Agent 连接池复用隧道(实测 6 次请求只拨号 1 次,
  复用后延迟降至 1/4),这是 SOCKS 路径缺失的能力。
- WebSocket 保活:CF 会掐断空闲连接(实测空闲 150s 失效,每 30s ping
  则保持可用)。
- 不支持的能力在解析阶段明确报错,不静默降级:Reality、XTLS Vision、
  gRPC、XHTTP、mKCP、UDP,以及多路复用(服务端未开启)。

已知限制:
- fp=chrome 无法实现:Node tls 不暴露 ClientHello 字节,无法伪装 TLS
  指纹,链接会记录 fingerprintApplied=false。
- 服务端若开启 multiplex 仍可工作,但不复用连接。

测试:新增 15 项集成测试(无需网络),项目测试 67/67 通过。另有可选的
真实链路探针脚本(check/stress/keepalive-probe/reuse-probe/leak-proof/
proxy-e2e/panel-e2e/api-e2e)。