Files
proxy-station/docs/FFSB-WIREGUARD-SURGE-2026-11-02.md
YANG JIANKUAN a5d980a5e9 feat: 添加 WireGuard 设备管理并完善客户端分流
实现独立加密设备身份、网关 agent、持久生命周期任务和 Surge/FlClash 专属订阅凭证。

完善 Shadowrocket 规则转换与 Clash AI DNS,增加 Surge FFSB 适配、规则快照、运维工具及验收文档。
2026-11-02 22:44:23 +08:00

12 KiB
Raw Blame History

FFSB 由 Surge 原生 WireGuard 独立承载的本机验证

2026-11-02,Mac Studio,Surge 6.11.0 build 12670,FFSB 0.1.27 导出的既有设备身份。用户授权提取本机参数,并在退出 FFSB 后进行独立验证;用户明确选择暂不测试登录后的真实业务。

已证实:本轮测试期间,本机可以由 Surge 原生 WireGuard 承载所测专线流量,无需运行 FFSB GUI 或 daemon。 这不等于脱离 FFSB 服务商、取得服务端管理权限,或已经验证未来授权和节点更新。生产订阅、应用代码与数据库均未修改。

证据链

验证层 结果
身份来源 经 macOS 管理员授权,以标准 WireGuard UAPI get=1 只读导出运行时参数;从私钥派生的公钥与当前 FFSB 身份一致,未读取登录令牌
排除后台依赖 约 10:27(本机 UTC+8)临时 launchctl bootout system/ffsb;之后确认 GUI/daemon 进程均不存在、utun100 不存在;未永久禁用启动项或卸载软件
独立握手 Surge 运行时显示策略类型 WireGuard、handshakeCompleted=true;物理 en0 定向元数据抓包记录 148 字节发起和 92 字节响应,以及后续双向加密数据
物理数据 第二段抓包共 208 包,125 上行、83 下行,其中 80 个下行包大于握手响应长度;抓包仅保存头部摘要,未解密用户内容
独立 DNS 直接向资源节点的隧道地址 UDP/22054 查询 API,NOERROR/有 A 记录,约 96 ms;Surge 请求日志含 WireGuard-DNS Remote DNS completed
系统/显式代理入口 两种 ipify 入口均走原生 WG,返回相同的原 FFSB 出口;未把 fake-IP 当成最终出口
多轮新连接 10:32:45—10:41:18,5 轮 × 7 请求,共 35/35 收到 HTTP 响应;最后一轮 API 根路径约 0.32 秒返回 404
规则范围 当前服务端 Selected 清单 27/27 项原生规则解释均进入 WG;通配项的解释样本不是实际业务穷举
实际域名样本 19 个精确根域+5 个真实通配样本,共 24 个;22 个完成 TLS/HTTP,两个 MCP 根域无 A 记录,未计为连通通过
反向对照 将测试配置端点改为错误 UDP 端口,API 和 ipify 均超时,GitHub 仍为 200;恢复正确端点后重新握手,7/7 请求恢复,无普通代理兜底假成功
较长响应 claude.com 公开页面约 489 KB,以 12 KB/s 限速,39.03 秒完整收完、HTTP 200;这是较长 TCP 响应,不能称为模型 SSE 验收
其他分流 GitHub 仍走日本 Proxy;downloads.claude.ai 仍经隐藏 Claude 组转美国 AI Nodes;其他手动组选择一致,仅 Claude 改选新 WG 策略
原配置完整性 原托管文件与备份 SHA-256 一致;Surge 引擎启动时间保持 09:50:52,未重启引擎;抓包与恢复 watchdog 已停止

测试期间的实际配置变化

测试期间活动配置为 Proxy Station WG Validation,由原托管文件的磁盘内容生成独立本地副本。原 Proxy Station 保留,未改托管 URL、未刷新或上传生产配置。这个本地副本不自动跟随托管订阅更新。用户随后要求回退组合方案,最新运行状态见文末的回退记录,不以测试快照推断当前活动配置。

  • 使用独立名称 FFSB Native WG Validation,由原 Claude select 组选取;其他地区/AI/All Nodes 的选择不变。
  • 原生 WG 使用导出的设备身份、资源节点公网 UDP 端点、MTU 1280、keepalive 25,DNS 指向资源节点隧道地址的 22054 端口。
  • 删除旧 25 项指向本机 FFSB 虚拟 DNS 100.70.255.254 的 Host 映射,不再依赖 utun100。
  • 保留原有普通代理与 AI DNS 设置,未保留试验中指向远端 resolver 的额外全局 Host 覆盖;原生 WG 自己完成隧道内 DNS。
  • 本地验证副本补入服务端新增的 hcaptcha.com/通配项,合计 27 项。仓库生成器源清单与生产 settings 仍是原方案,未修改。
  • 验证副本包含资源节点隧道地址的精确 WG 规则,供普通 dig 独立查询;不放宽整个 CGNAT 网段。
  • WG 内部 allowed-ips=0.0.0.0/0 只负责该策略内部选择 peer;业务仍按域名规则选 WG,不能据此扩大服务器许可范围。

不要在此 WG 配置活动时连接 FFSB:两者复用相同私钥和隧道地址,可能触发端点漫游并抢占流量。 恢复原方案时先切回原 Proxy Station,再恢复 FFSB 服务/连接。具体恢复命令与私有配置均在本机归档说明中。

失败记录与验收边界

初始三轮失败均保留。第一版使用 CLI dump 配置复制节点,其认证字段与磁盘原件不同,导致普通代理对照失败;随后从磁盘原件重建,保留认证字段。旧策略名下还出现旧本机 DNS 映射及状态复用现象;采用独立策略名、移除旧本机 DNS 映射并完成配置加载后恢复。没有严格分离这一阶段的缓存、配置切换及名称复用影响,不把初始失败归因为服务端,也不删掉失败数据。

原生配置及 FINAL 等静态检查通过。scripts/check-surge.py --fetch-rulesets 在远程规则集下载阶段仍失败,全量在线规则集快照校验未通过;这一问题在本轮改动前已存在,不以当前缓存匹配正常宣称所有上游当前可下载。

HTTP 403/404/426 仅证明传输和根路径响应,不等于登录、验证码完成、MCP 会话或模型对话成功。用户选择暂不测真实业务,因此未调用计费模型 API。未验证设备 DNS 泄露探测、睡眠/换网/重启、长时间运行、服务器迁移、设备重新认证或授权撤销后的行为。当前仅使用一个已验证资源节点,没有复制 NetBird 的动态节点发现、ICE、中继与故障切换机制。

本轮能够支持的结论是:所测时间窗口内,本机客户端及后台可以由 Surge 原生 WG 替代。 不能将其扩大为永久无需控制服务、可通用导入其他设备或所有业务已验收。

私有证据

完整归档位于本机 ~/Library/Application Support/ProxyStationFFSB/native-wireguard-validation-20261102-1042/,含 239 个文件及 SHA-256 清单;目录 700,文件 600。包含原始失败/成功结果、原生请求和运行时状态、物理包元数据、原配置备份、实际活动配置、导出身份及复现脚本。真实凭据和节点地址不入仓库、不上传第三方。

其中 independent-validation/evidence-summary.json 为脱敏摘要;surge-ffsb-candidate.conf 为本机实际验证的集成副本;早期最小候选另存,不与验证完成的版本混淆。

管理连接没有被替代

当前实现没有 NetBird 控制客户端或同步脚本。它使用此前管理服务下发的设备身份、地址和节点参数快照,依赖服务端当时仍认可该设备及权限,直接建立 WireGuard 数据隧道。Surge 负责 WireGuard 握手、保活和会话密钥更新;没有接管邮箱登录、设备注册/重新认证、配置与权限同步、ICE、中继或节点故障切换。域名解析可以通过已知节点 DNS 完成,但域名清单与节点变更不会自动同步到此本地副本。

因此后续研究重点是长期身份有效性和配置同步,不是再次证明静态 WireGuard 能握手。不要把一次成功写成管理连接已被 Surge 实现,也不要把 WireGuard 自身的会话换钥误认为必须重新提取设备私钥。

下一次继续的步骤

  1. 先读本文回退记录、AGENTS.md 的最新状态及原生产手动方案,检查实际活动配置和 FFSB 状态。历史归档只作复现材料,不直接覆盖新生产订阅。
  2. 私有归档中 SHA256SUMS.txt 校验历史证据,surge-ffsb-candidate.conf 是当时验证过的完整集成副本;reproduction-scripts/ 保留导出、候选生成、探测、抓包和反向对照脚本。这些脚本含当时路径/PID/节点参数,需审阅后适配,不能直接盲跑。
  3. 从当前 FFSB 状态重读节点和 Selected 域名,必要时用经管理员授权的 WireGuard UAPI get=1 重新导出;派生公钥对比现有身份,避免把历史端点/路由误当最新。私钥只进本机受限权限文件。
  4. 保留当前原始配置与完整组选择,准备自动恢复。先断开 FFSB,再停 daemon 并确认进程和 utun100 消失,最后才加载 WG 测试配置,禁止同身份并行连接。
  5. 使用独立 WG 策略名、节点隧道内 DNS,移除旧本机虚拟 DNS 映射;保留其他分流。若基于最新订阅重建,必须从受限的磁盘原件保留认证字段,不能拿 CLI 脱敏输出直接激活。
  6. 重做握手、隧道 DNS、新建 HTTP、出口与普通代理对照、错误端点失败/恢复测试。只有新增验收授权后再测真实业务、睡眠、换网、重启与长时间控制连接缺席,不把历史成功当作新环境验收。

未修改生产 FFSB 功能或增加自动同步机制;后续若要把原生 WG 正式纳入托管订阅,须另行设计设备独立身份、凭据保存、更新与撤销机制,不能把本机私钥写入共享订阅。

回退至 FFSB+Surge(2026-11-02,11:05 验收)

用户要求固化探索成果后回退日常组合方案。当前已恢复正式托管 Proxy Station,Claude → 🦁 FFSB,FFSB GUI 和 daemon 均运行。 原生 WG 不再活动,验证配置已移出 Surge 配置列表,完整副本保存在私有归档中;不要把上面的试验状态或旧归档 README 当成当前状态。

回退顺序为:保存试验配置与组选择 → 切回原托管配置 → 确认试验策略不存在、活动请求为零 → 恢复 FFSB launchd 服务并连接 → 打开 FFSB GUI。没有同身份并行运行,未重启 Surge 引擎,未修改原托管文件、生产数据或其他手动组选择。

回退后验收:

  • FFSB management/signal Connected,资源 peer P2P Connected;utun100 恢复,MTU 1280,disableDns=true、disableClientRoutes=false。
  • 系统 DNS 仍由 Surge 接管,API 系统查询为 fake-IP;Surge DNS trace 经本机 FFSB DNS 100.70.255.254 返回真实地址,约 95 ms。
  • 11:05:29—11:05:43,3 轮 × 8 请求 24/24 收到 HTTP 响应。API 根路径 404,约 0.33—0.36 秒;系统与显式 Surge 的 ipify 均为原 FFSB 出口。claude.ai/join 测试均完成传输。
  • 原生请求 #4220 API、#4221 Claude、#4218/#4219 ipify、#4222 join 均为 🦁 FFSB / utun100 且双向有数据。
  • #4223 GitHub 保持日本 Proxy;#4224 downloads、#4225 Auth0 保持隐藏 Claude 组 → 美国 AI Nodes;FFSB 外层控制连接 #4140/#4142/#4144 为 DIRECT/en0,双向有字节。
  • 原生产清单 25/25 项原生规则解释进入 FFSB;原托管文件字节未变,其他手动组选择不变。活动配置通过官方 CLI 与 FINAL 等静态检查;本次未宣称全量上游规则集在线快照通过。

这里恢复的是生产原有 25 项方案。FFSB 当前下发的 27 项中,hcaptcha.com/通配项尚未同步进生产 Surge 清单,本次未扩展生产规则;原生 WG 试验中补齐这两项的成功仍保留在历史证据中。没有测试登录、验证码完成或真实对话,不将根路径响应当成业务验收。客户端 fake-IP 警告的既有判断差异也未通过更改 DNS 来隐藏。

本轮回退证据另存本机 ~/Library/Application Support/ProxyStationFFSB/restore-combined-20261102-110255/,目录 700、文件 600,包含回退前配置、组选择、24 次探测、DNS/请求日志与恢复后的状态。原探索归档保持不可变,238 项内容哈希复核通过;后续继续原生 WG 时使用前文步骤,不自动激活旧实验配置。