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

65 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 任务 #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)将数据面定为 **WireGuard**peer 注册模式,
节点 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 联调时切换到
> 控制面动态下发。