# 任务 #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 Hysteria2（UDP/443）和 xray
  VLESS+REALITY（TCP/11443），两协议均已通过 phase-0 线路验证（晚高峰 YouTube 1080p
  流畅、REALITY 未见主动探测封锁）。
- **客户端路线图**（`plan/phase-3-自研与规模化.md`）明确以 **sing-box libbox（gomobile）**
  作为 Flutter 端隧道内核，libbox 原生支持 REALITY/Hy2/WireGuard 三种出站，无需额外
  桥接层。
- WireGuard 在 iOS/macOS 沙盒环境下依赖 Network Extension，而 libbox TUN 模式同样需要
  Network Extension，且 libbox 已统一抽象平台差异。

### 备选方案对比

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

### 结论

采用 **方案 C：libbox 统一承载 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 联调时切换到
> 控制面动态下发。
