X
X-Tunnel
2025 · 技术线路展示
Cloudflare CDN 前置 WSS · TLS 1.3 ECH 支持 多通道竞速

X-Tunnel :面向低延迟的 长连接隧道

基于 WebSocket over TLS 1.3(wss://) 的多通道长连接隧道。 通过 Cloudflare CDN 访问服务端,结合 ECH(Encrypted Client Hello)0-RTT 会话恢复潜力、竞速选路与上下行链路自动发现,面向复杂网络环境实现更稳定、更低时延的数据转发。

发布年份
2025
核心链路
多通道 WSS 长连接
协议风格
TLV-like 二进制帧
架构速览
Client ⇄ Cloudflare ⇄ Server
本地应用 SOCKS5 / HTTP / TCP 转发 UDP 关联(可封锁 443) Cloudflare CDN WSS · TLS 1.3 ECH(可选)/ 会话恢复 多通道长连接 X-Tunnel 服务端 目标拨号:TCP / UDP 可选 SOCKS5 前置代理 X-Tunnel 客户端核心 ECHPool:多通道、竞速、选路 上行/下行链路自动发现 互联网目标 TCP: CONNECT / 直连转发 UDP: Relayer / SOCKS5 UDP 链路:长连接承载私有二进制帧
架构中最关键的点是:“少握手、多复用、自动选路”。 外层使用 WSS 长连接承载内层私有协议,降低频繁 TLS ClientHello 暴露与被中间设备干扰的概率,并为多通道竞速提供基础。

技术线路(端到端)

从本地代理入口到 Cloudflare CDN,再到服务端拨号与回传:每一步都围绕“稳定与低延迟”设计。

  1. 01
    入口:本地监听(SOCKS5 / HTTP / TCP)
    将应用流量统一收敛到 X-Tunnel 客户端。支持认证、CONNECT、以及 TCP 端口映射式转发。
  2. 02
    承载:多通道 WSS 长连接(TLS 1.3)
    客户端维护若干条 WebSocket 连接(可按 IP * 通道数扩展)。 通过 Ping/Pong 保活与写队列调度,持续承载数据帧。
  3. 03
    中间层:Cloudflare CDN 前置访问服务端
    以 CDN 作为入口:改善可达性与链路分布;对外仅呈现标准 WSS 行为。 在 TLS 1.3 场景中可利用会话恢复带来的 0-RTT(库/环境支持时)降低重连代价。
  4. 04
    服务端:按连接 ID 维护状态(TCP / UDP)
    服务端为每条内层连接创建状态机,支持:TCP 拨号、UDP Relayer、以及(可选)SOCKS5 前置代理。
  5. 05
    回传:下行链路自动选择与绑定
    客户端对同一连接的多通道回包进行“竞速”,由首个有效回包触发下行通道绑定; 上行通道在服务端确认后回告,从而形成稳定的 TX/RX 双向路径。
链路特性摘要
长连接 + 选路 + 私有帧
  • 外层:WSS/TLS 1.3 长连接,减少频繁握手与 ClientHello 暴露。
  • 内层:TLV-like 二进制帧,按连接 ID 复用,支持 TCP/UDP 多路复用。
  • 低延迟:多通道并发 + 下行竞速选择 + 上行确认绑定。
  • 网络策略:IP 优先规则(IPv4/IPv6)与 UDP 端口封锁(默认阻断 443 以规避 QUIC/HTTP3 形态)。
  • 隐私增强:ECH 支持(可回落普通 TLS 1.3)。
注:0-RTT 描述指 TLS 1.3 的会话恢复/早期数据能力;是否实际启用取决于运行环境与 TLS 库支持。

低延迟机制:竞速与上下行链路自动查找

核心思想:把“不确定的网络抖动”留给并行通道,让业务连接尽快绑定到最优路径。

多通道池(ECHPool)
N 条并行 WSS

客户端按“每个 IP × 连接数”建立 WebSocket 通道。 每个通道独立保活(PingInterval)、读写超时控制,并通过全局写队列限制避免拥塞扩散。

关键点 A
写队列聚合:同一连接的 TCPData 在发送端进行合并,减少帧开销与系统调用。
关键点 B
自动重连:通道断开后按 ReconnectDelay 复建,保持池规模与可用性。
上下行链路自动选择
竞速/绑定

每条内层连接以 ConnID 识别。 上行(TX):由服务端在接受 Connect 后回发 MsgUplink 标记。 下行(RX):客户端对首个到达的回包通道发送 MsgSelectDownlink,完成绑定。

为什么它更低延迟?
  • 1多通道并行:把不稳定链路的尾延迟转化为“最先返回者胜”。
  • 2一次绑定:连接建立后固定 RX 通道,避免回包抖动在不同通道间来回切换。
  • 3UDP 竞速:UDP 关联通过 StartUDPRace 先广播连接请求,再在拿到 uplink 后切换到定向发送。
动效示意(非真实测速)
点击上方“模拟”按钮
Race Timeline
待触发
通道 1
通道 2
通道 3
说明:多通道并行后,首个返回的通道会被绑定为下行路径。

私有协议:TLV-like 二进制封装

外层是标准 WebSocket(二进制帧);内层是一套固定头 + 变长字段的帧格式,用于多路复用 TCP/UDP 与状态控制。

帧头定义(8 字节)

Header: [Type:1][ConnIDLen:1][MetaLen:2][PayloadLen:4]。 然后依次拼接:ConnIDMetaPayload

0               1               3               7
+---------------+---------------+---------------+---------------+
|   Type (1)    | ConnIDLen (1) |   MetaLen (2) | PayloadLen(4) |
+---------------+---------------+---------------+---------------+
|           ConnID (variable)   |   Meta (var)  | Payload (var) |
+---------------------------------------------------------------+

Type:  消息类型(TCP/UDP/控制)
ConnID: 连接标识(字符串,最多 255 字节)
Meta:   元信息(例如:IP 策略 + 目标地址)
Payload:数据负载(TCP/UDP 数据)
Meta 的关键用法
Connect 类消息的 Meta 以 1 字节 IPStrategy 开头,后续拼接目标字符串。
多路复用的核心
多个 ConnID 在同一条 WSS 连接上并行传输,降低握手次数并提升资源利用率。
消息类型(概要)
MsgTCPConnect建立 TCP 连接
MsgTCPDataTCP 数据
MsgTCPClose关闭 TCP
MsgUDPConnect建立 UDP 关联
MsgUDPDataUDP 数据
MsgUDPClose关闭 UDP
MsgConnStatus连接结果状态
MsgUplink标记上行通道
MsgSelectDownlink绑定下行通道
该封装在形式上属于“TLV-like”:以 Type 作为 T,长度字段提供 L,后续字段承载 V。 相比纯文本协议,更适合高吞吐与低开销转发。

安全与抗干扰:长连接、ECH 与减少握手暴露

重点不是“花哨加密”,而是把连接行为尽可能收敛为常见形态,并减少可被干预的握手次数。

WSS 长连接

外层采用 WebSocket 长连接承载大量内层连接数据。 相比“每条业务连接都重新 TLS 握手”,长连接能显著减少 TLS ClientHello 出现频率,降低被中间设备触发阻断/干扰的机会。

实现特征
Ping/Pong 保活、读写超时、断线重连、队列限流。
TLS 1.3 + ECH(可选)

客户端支持通过 DoH 查询 ECHConfigList,并在 TLS 1.3 握手中携带 ECH 参数。 这有助于隐藏 SNI/握手中的敏感信息,使连接行为更接近常见的 CDN TLS 访问形态。 若 ECH 不可用,可启用 fallback 回落到普通 TLS 1.3。

DoH 查询 HTTPS 记录 ECHConfigList 回落模式
0-RTT(连接恢复潜力)

在 TLS 1.3 会话恢复场景下,协议具备 0-RTT 早期数据能力。 对于“断线重连”型网络,若运行环境启用会话票据与早期数据,可进一步降低重连时延。

实践建议
优先保持连接不断;0-RTT 用于“不可避免的重连”场景补偿时延。
通过 Cloudflare CDN 访问服务端
X-Tunnel 将服务端暴露为标准的 wss:// 入口,客户端通过 Cloudflare CDN 进行访问。 结合长连接与 ECH,可让链路外观更贴近日常的 CDN HTTPS 流量形态。

网络策略能力:IP 优先规则 & UDP 端口封锁

把“能控制的”变成策略:让连接优先走更可用的地址族,避免某些 UDP 端口带来的流量形态(例如 QUIC/HTTP3)。

IP 优先访问规则(IPv4/IPv6 策略字节)

客户端通过参数解析得到 IPStrategy,在发起 Connect 时写入 Meta 的首字节。 服务端据此在直连模式下进行 TCP 拨号/UDP 解析: 支持 仅 IPv4仅 IPv6、以及 IPv4 优先 / IPv6 优先

策略编码
0 默认 · 1 IPv4Only · 2 IPv6Only · 3 4,6 · 4 6,4
限制说明
若服务端启用 SOCKS5 前置代理,DNS/地址选择可能由代理侧决定,策略可能无法完全生效。
策略演示
仅用于说明
Meta 预览
[IPStrategy=0] + "example.com:443"
UDP 端口封锁:降低 QUIC/HTTP3 形态

客户端可配置 UDP 端口拦截列表(默认包含 443)。 对于 UDP 代理/转发场景,这能阻止某些 QUIC/HTTP3 类流量直接通过 UDP 443 发送,减少可识别的流量特征,并让流量回到更可控的 TCP/WSS 承载。

快速查看
udpBlockPorts = {443}
备注:这是一种策略性过滤,实际是否需要取决于业务与网络环境。
配合低延迟机制
TCP 通过多通道竞速选路;UDP 通过关联与 uplink 确认后定向发送,减少广播开销。