Files
pangolin/doc/plans/11-libbox-bridge.md
T
wangjia ab2bbaf683 tsk_9uMrd9kUpmVA: 数据面定稿 + 修订 ARCHITECTURE.md connect 契约
决策:libbox 统一承载 REALITY/Hy2 outbound(方案 C),弃用 WireGuard peer 注册。
现网 deploy/ 基础设施(singbox Hy2 + xray REALITY)已验证,零改动复用。

变更文件:
- design/server/ARCHITECTURE.md v0.2:
  · §0 数据面描述改为 sing-box libbox (REALITY/Hy2)
  · §1 拓扑图更新(wireguard+agent → singbox+agent,客户端标注 libbox 内嵌)
  · §2 devices 表移除 pubkey;nodes 表改为 reality_public_key/short_id/uuid/hy2_password
  · §3 connect 响应由 WireGuard 配置改为完整 sing-box config JSON
  · §3.1(新增)connect 契约详细规范:四块 inbounds/outbounds/route/dns、
    客户端透传原则、字段与 deploy/ 模板逐字段对照、占位符替换说明
  · §4.3 连接流程更新(peer 注册 → config JSON 渲染下发)
  · 附录 A(新增)v0.1→v0.2 变更汇总
- doc/plans/11-libbox-bridge.md(新建):
  完整决策记录(背景/备选/结论/影响面),任务链 11A→11C→11D/E/F→11H
- doc/plans/client-connect-config.example.json(新建):
  最小示例 config,字段与 deploy/ 模板对齐,可用 sing-box check -c 校验

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 01:43:17 +08:00

3.3 KiB
Raw Blame History

任务 #11 libbox 桥接方案

任务链:11A(本文,数据面定稿) → 11C(Dart 桥接 PoC → 11D/11E/11F(隧道/DNS/路由验证) → 11H(M6 联调)


关键技术选型 —— 数据面协议决策记录

日期2026-06-13
状态:已定稿(tsk_9uMrd9kUpmVA
影响范围#5/#6(控制面 connect 接口实现)· 11C(客户端桥接 PoC)· 11H(M6 联调)

背景

design/server/ARCHITECTURE.md 初稿(v0.1)将数据面定为 WireGuardpeer 注册模式, 节点 agent 下发 endpoint/pubkey/内网 IP/DNS)。但实际情况如下:

  • 现网基础设施deploy/)已运行 sing-box Hysteria2UDP/443)和 xray VLESS+REALITYTCP/11443),两协议均已通过 phase-0 线路验证(晚高峰 YouTube 1080p 流畅、REALITY 未见主动探测封锁)。
  • 客户端路线图plan/phase-3-自研与规模化.md)明确以 sing-box libboxgomobile 作为 Flutter 端隧道内核,libbox 原生支持 REALITY/Hy2/WireGuard 三种出站,无需额外 桥接层。
  • WireGuard 在 iOS/macOS 沙盒环境下依赖 Network Extension,而 libbox TUN 模式同样需要 Network Extension,且 libbox 已统一抽象平台差异。

备选方案对比

方案 优点 缺点
A. WireGuard peer 注册(原方案) 内核级性能;行业标准 需独立 wintunWin/ NEPacketTunneliOS);与现网基础设施不兼容;节点 agent 需实现 peer CRUD
B. 订阅链接下发(Clash/sing-box URL 服务端极简 客户端需内置订阅解析器或依赖三方 App;改品牌客户端难精控格式
C. libbox + 完整 config JSON 下发(本方案) 复用现网 REALITY/Hy2 基础设施;libbox 三协议皆支持;客户端零组装;gomobile 跨 iOS/Android/DesktopWireGuard 可作 outbound 随时补加 服务端需按订阅/设备生成完整 JSON;节点 agent 由 peer 注册改为凭证上报

结论

采用 方案 Clibbox 统一承载 REALITY/Hy2 outbound(必要时追加 WireGuard outbound)。

核心理由:最不后悔原则 —— libbox 三协议皆支持,现网基础设施零改动,客户端接入 最简,未来切换协议只需修改服务端生成的 JSON,架构不动。

影响面

组件 变更
ARCHITECTURE.md §0 数据面描述:WireGuard → sing-box libbox (REALITY/Hy2)
ARCHITECTURE.md §1 拓扑图:wireguard+agent → singbox+agent
ARCHITECTURE.md §3 connect 响应:WireGuard 配置 → 完整 sing-box config JSON
ARCHITECTURE.md §4.3 连接流程:peer 注册 → config JSON 下发
节点 agent 职责 由 WireGuard peer CRUD → 向控制面注册节点凭证(REALITY 公钥/Hy2 口令)
客户端(11C 接收 JSON 后原样传入 libbox.start(configJson),不做任何组装
#5/#6 connect 接口响应体按 §3.1 规范实现
11H M6 联调 以本契约为准,不依赖旧 WireGuard 格式

§3.1 详细契约(摘要见 ARCHITECTURE.md §3

完整规范见 design/server/ARCHITECTURE.md §3 及 §3.1 子节。

示例配置文件:doc/plans/client-connect-config.example.json

PoC 阶段(11D/11E/11F)可本地直接使用示例文件,不依赖控制面;11H 联调时切换到 控制面动态下发。