Skip to content

完整实现 FinalMask 客户端、服务端与全量配置#44

Draft
MiChongs wants to merge 1 commit into
codex/protocol-tuic-validation-fixfrom
codex/transport-finalmask-full
Draft

完整实现 FinalMask 客户端、服务端与全量配置#44
MiChongs wants to merge 1 commit into
codex/protocol-tuic-validation-fixfrom
codex/transport-finalmask-full

Conversation

@MiChongs

Copy link
Copy Markdown
Owner

背景与目标

本 PR 完整实现 Xray-core 26.7.11 的 FinalMask 传输层,并将配置解析、客户端、服务端、TCP/UDP/QUIC 数据面、套接字策略、入站监听与启动路径一次性接通。实现以 Xray-core v26.7.11 的固定提交 50231eaff98ccc31b5cbd247a721c16e97fe5ec1 为行为基线,不使用空壳、透传或“仅解析不执行”的降级方案。

完整配置注册

新增强类型、严格未知字段校验的 streamSettings 模型,注册并校验:

  • network
  • sockoptmarktcpFastOpentproxyacceptProxyProtocoldomainStrategydialerProxy、TCP keepalive、拥塞算法、接口、v6only、窗口/MSS/user-timeout、penetrate、MPTCP、自定义 sockopt、地址端口策略、Happy Eyeballs、可信 X-Forwarded-For 标记头;
  • FinalMask TCP:header-customfragmentsudokuxmc
  • FinalMask UDP:header-custommkcp-legacynoisesalamandersudokuxdnsxicmprealm
  • quicParams:拥塞模式、调试、BBR profile、Brutal 上下行带宽、UDP Hop、流/连接接收窗口、空闲与保活、PMTU 开关、最大入站流数;
  • Header Custom 的客户端/服务端/错误步骤、捕获与复用、字节类型及完整表达式树;
  • Sudoku 官方键名及历史兼容键名;
  • Realm 完整 TLS 对象,与 XHTTP 的高级 TLS、证书、固定指纹、ECH 等能力共用同一强类型执行路径。

范围、枚举、平台相关 sockopt、XDNS 迁移字段、QUIC 窗口与超时、UDP Hop、FinalMask 层级组合均在配置阶段失败关闭,不把不可执行配置留到运行时。

TCP FinalMask

  • 按 Xray 层级逆序应用 TCP 掩码;
  • header-custom 实现客户端、服务端与错误响应状态机,支持随机字节、范围、捕获、复用、转换表达式及严格资源上限;
  • fragment 支持普通分片、tlshello 语义、长度/延迟序列与最大拆分;
  • sudoku 实现官方表生成、Go 随机序列、ASCII/熵布局、提示元组、上下行编解码与分块边界;
  • xmc 实现 Minecraft 握手、RSA 密钥流程、CFB8 加密与双向代理;
  • TCP FinalMask 接入普通 TCP、TLS、Boring TLS、REALITY、XHTTP 和 Mixed/REALITY/XHTTP 入站,掩码位于 TLS/REALITY 握手外层,顺序与 Xray 一致。

UDP FinalMask

  • 实现多层 UDP 掩码的客户端与服务端组合,保持 Xray level 顺序;
  • 连续 Header Custom 聚合但不跨越其他变换层;
  • header-custom 支持 prefix/standalone、逐对端服务端状态隔离、捕获/复用/表达式与边界限制;
  • mkcp-legacy 实现 original/AES-128-GCM 及 DNS、DTLS、SRTP、uTP、微信、WireGuard 等官方头形状;
  • noise 实现重置、随机噪声、数据类型与延迟;
  • salamander 实现 BLAKE2b 派生、简单模式和 Gecko 分片/重组/去重/资源回收;
  • sudoku 实现逐数据报重新起表的官方 UDP 编解码;
  • xdns 实现 DNS 查询/响应封装、全部官方记录模式、截断与错误码处理、服务端解码与响应;
  • xicmp 实现 IPv4/IPv6 ICMP、校验和、序号窗口、防重放及 DGRAM 模式;
  • realm 实现官方 URL、HTTP API、Bearer 认证、SSE、心跳/恢复、STUN、NAT 候选扩展、打洞与完整 TLS;
  • 每层均提供真实客户端和服务端包装器,并包含组合数据报往返测试。

QUIC、Brutal、UDP Hop

  • 使用 quinn/quinn-proto 构建真实 QUIC 客户端与服务端;
  • 使用 rsteria2 提供真实 Brutal 拥塞控制器,同时支持 Reno、BBR、force-brutal 与可切换策略;
  • 将官方 BBR profile 映射到真实 BBR 控制器启动参数;
  • 应用流/连接窗口、空闲超时、保活、PMTU、最大入站流、数据报缓冲等参数;
  • 实现 UDP Hop 端口列表、区间、周期与承载切换;
  • QUIC PacketConn 桥保持数据报边界、GSO、背压和服务端多对端路由;
  • 接入 XHTTP/3 客户端与服务端,以及 Hysteria2 客户端。

套接字策略与运行时接线

  • 新增强类型出站套接字策略包装器,并在注册表中为所有节点统一应用;
  • 实现接口绑定、mark、TFO、MPTCP、TCP keepalive/拥塞/窗口/user-timeout/MSS、Happy Eyeballs、地址与端口策略、自定义 sockopt;
  • dialerProxy 支持后向引用并在所有节点注册完成后解析,缺失目标会明确报错;
  • 入站支持 PROXY Protocol v1/v2,保留首个业务字节并正确覆盖 IPv4/IPv6 端点;
  • Mixed 监听保持主程序资源仲裁要求的精确端口绑定,同时应用监听 socket 配置与 TCP FinalMask;
  • XHTTP H1/H2/H3、REALITY 与主程序启动路径均传递并执行 streamSettings
  • 对当前数据面无法执行的入站 UDP/QUIC 组合明确失败关闭。

依赖与安全边界

  • 使用 rsteria2quinnhickory-resolverhickory-protorsaggstd 等真实协议/密码/网络依赖;
  • 所有长度、队列、重组、状态表、捕获值、递归表达式、DNS 载荷与连接资源均设置硬上限;
  • 非法包、截断、重放、跨对端状态污染、错误层级顺序与配置歧义均有定向测试;
  • Cargo.lock 已完整更新。

上游对齐

新增 scripts/verify-xray-finalmask-oracle.ps1 和中文说明文档。脚本固定并校验 Xray-core v26.7.11 提交,拒绝错误提交或有受跟踪改动的 Oracle 工作区,再运行官方 FinalMask Go 测试与本项目定向测试。

已在固定提交上运行全部官方 FinalMask 测试,结果全部通过,包括:

  • FinalMask 总体 TCP/UDP 测试;
  • Header Custom;
  • Sudoku;
  • XDNS;
  • XICMP;
  • XMC;
  • 其余无独立测试文件的官方包完成编译。

本项目验证

  • core-config:121/121;
  • core-outbound:413/413,其中 FinalMask 定向 54/54;
  • core-inbound:138/138;
  • core-reality:104/104;
  • xray-transport:5/5;
  • wuther-core:16/16;
  • cargo check --workspace --all-targets:通过;
  • cargo fmt --all -- --check:通过;
  • git diff --check:通过。

分支与提交关系

本 PR 基于 codex/protocol-tuic-validation-fix。该基线是全量回归中发现并独立提交的 TUIC 注册校验修复;本分支相对该基线仅包含 1 个 FinalMask 完整实现提交,从而保持“一个实现一个提交”,不把 TUIC 修复与 FinalMask 混在同一提交中。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant