Skip to content

Releases: debbide/ProxyBridge

v2.1.6

Choose a tag to compare

@debbide debbide released this 16 Sep 22:27
feat: optimize Cloudflare edge selection

v2.1.5

Choose a tag to compare

@debbide debbide released this 16 Sep 13:18
fix(vless): support websocket path fallback

v2.1.3

Choose a tag to compare

@debbide debbide released this 16 Sep 10:52
fix: keep proxy endpoint displayed as localhost

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

Choose a tag to compare

@debbide debbide released this 16 Sep 10:18
用纯 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)。

v2.1.1: fix: reject an upstream that points at a managed local port

Choose a tag to compare

@debbide debbide released this 15 Sep 23:35
A node whose upstream resolves to one of our own managed ports forwards into
itself. A self-reference, a two-node A<->B cycle and a three-node cycle all
spin at roughly 1700 connections per second, pinning the CPU until the request
times out, and the port stays saturated for a while afterwards.

start() only validated the URI format, so nothing stopped this. Restore the
check that was dropped in b4688d7, this time reporting it as a 400 with a
readable reason instead of a generic error, so the panel can show why the node
refused to start.

Only local addresses (localhost, 127.0.0.0/8, ::1) that land on a managed port
are refused. Remote upstreams and unrelated local ports such as a separate
proxy on 1080 are unaffected. Because the check lives in start(), restore()
applies it on boot too, so an already-broken row cannot restart the loop.

v2.1.0

Choose a tag to compare

@debbide debbide released this 06 Sep 11:25
fix(update): bypass mock systemctl deadlocks and improve panel update…

v2.0.0

Choose a tag to compare

@debbide debbide released this 06 Sep 11:05
fix: bind proxy tests to correct tunnel

v1.9.0

Choose a tag to compare

@debbide debbide released this 06 Sep 10:42
fix: extend update service timeout

v1.8.0

Choose a tag to compare

@debbide debbide released this 06 Sep 10:40
fix: extend update service timeout

v1.6.0

Choose a tag to compare

@debbide debbide released this 06 Sep 10:25
feat: add panel update workflow