# FFSB / Surge 实施及验收(2026-10-19) > 历史方案:本机自动协调层已退役,当前状态以 [FFSB 手动订阅方案](FFSB-MANUAL-SUBSCRIPTION-2026-10-19.md) 为准。 ## 当前结论 本机已启用 `Proxy Station Claude` 配置及用户级自动协调任务。核心分流、FFSB 关闭回退、重新连接恢复、浏览器与命令行入口、DNS 和外层 DIRECT 已通过实际连接验证。**尚未达到全部场景验收**:用户明确选择暂不重启 Surge,故两种完整启动顺序未测;真实 Claude 登录/模型流、长期运行、睡眠唤醒及换网也未验收。 此前设计文档的“不允许回退”要求已被用户最新要求替代。当前职责是: - `Claude`:本机 25 项自动入口,FFSB 就绪时优先 FFSB;FFSB 关闭后使用 `🦀 Claude`。 - `🦀 Claude`:独立的 Surge 出口选择组,当前保留美国选择。旧 Claude 规则中超出 FFSB 25 项的地址始终走这里。 - `🤖 AI`:其余 AI 服务,原有选择未改。本次真实 ChatGPT 请求仍是 AI → AI Nodes → 美国 Direct。 用户明确确认“25 项 FFSB,其余 Claude Surge”,随后指定回退组名称为 `🦀 Claude`。 ## 清单来源与生产变更 25 项确实来自本机 `/usr/local/bin/ffsb-service networks list` 的 Selected 网络,FFSB GUI 同时显示 25/25。原始输出保存在私有证据目录,可公开复查的域名快照为 [ffsb-domains.json](../rules/ffsb-domains.json):18 个精确项、7 个通配项。 合并来源包括上述清单、生产显式 Claude 补充规则以及当时 Sukka AI 列表中的 `anthropic.com`、`clau.de`、`claude.ai`、`claude.com` 后缀。按集合覆盖去重得到 **21 条业务规则**,另加 **1 条 Claude DNS 传输规则**。生产最终为 14 组、277 条规则,唯一启用 FINAL 位于末尾。远端混合 AI 列表仍服务其他 AI;Claude 在其之前被独立规则接住,不修改第三方列表。 21 条业务规则: - 9 个后缀:anthropic.com、clau.de、claude.ai、claude.com、claudemcpclient.com、claudemcpcontent.com、claudeusercontent.com、ffsb.sg、ip.net.coffee。 - 10 个精确域:api.ipify.org、icanhazip.com、ifconfig.me、join.fufeishangban.com、servd-anthropic-website.b-cdn.net、anthropic.com.cdn.cloudflare.net、anthropic.auth0.com、anthropic-com.ghost.io、browser-intake-us5-datadoghq.com、http-intake.logs.us5.datadoghq.com。 - 2 个原有官方 inbound 范围:160.79.104.0/23、2607:6bc0::/48(no-resolve)。 本机 FFSB 覆盖仍严格使用原 25 项,不把合并后的宽泛后缀全部交给 FFSB。因此 `downloads.claude.ai` 使用 `🦀 Claude`,已经真实请求确认。 移除旧的三个服务器 IP /32 DIRECT 补丁、整个 FFSB App 路径 DIRECT,以及已被靠前 Anthropic 后缀覆盖的 statsig 冗余规则。保留真实服务进程 `/Applications/FFSB.app/Contents/MacOS/ffsb-service` DIRECT、独立 bootstrap 域名直连和真实解析。其他应用的 STUN 防护、Tailscale 规则、AI/普通代理选择保留。 生产 DNS:Claude 合并域名显式使用 `https://1.0.0.1/dns-query`,1.0.0.1/32 走 `🦀 Claude`;其余 AI 保持原 1.1.1.1 路径。FFSB 开启时,本机 25 项更靠前的 Host 覆盖使用 FFSB DNS;关闭时撤除覆盖。没有将所有公共 DNS 改送 FFSB。 生产在线备份:`before-claude-independent-ffsb-20261019-115104.db`,已核对 root 属主、600 权限、6,692,864 字节。所有写入经管理 API,未部署应用代码。 ## 实现与依据 源码为 [scripts/ffsb](../scripts/ffsb/README.md)。协调任务每 10 秒检查 FFSB 管理/信令连接及 DNS 是否可回答;生成并校验完整本机配置后,原子替换并 reload/flush DNS。生产配置每小时经原 HTTPS 地址拉取、校验,缓存和凭据仅落本机私有目录;不手改原托管文件。 FFSB 策略为 direct,显式 `interface=utun100`、`allow-other-interface=false`、`dns-follow-interface=true`,探测 URL 属于 FFSB 25 项。Surge 增强模式的普通 DIRECT 绑定物理接口,不能用来代替业务的 utun100 绑定;这恰好用于 FFSB 外层服务避免套远端代理。[Surge 原理](https://manual.nssurge.com/book/understanding-surge/en/)、[策略参数](https://manual.nssurge.com/policies/parameters.html)。 DNS 与连接出口是两个独立环节;本次同步切换 Host 与策略组成员,不把“FFSB DNS + 公共 DNS 并列”误当顺序备用。Host 首条匹配,多个 DNS 并列会竞争回答。[Host 官方说明](https://manual.nssurge.com/dns/local-dns-mapping.html)。 使用原生 fallback 探测选择优先成员,关闭 FFSB 后本地配置只保留 `🦀 Claude` 成员;探测、协调和连接缓存都有延迟,不承诺瞬时切换或迁移旧连接。[fallback 官方说明](https://manual.nssurge.com/policy-groups/fallback.html)。 曾考虑使用模块加入策略,但官方模块不能调整 Proxy/Proxy Group,因此最终使用本机完整生成层,保留生产源及回滚入口。[模块限制](https://manual.nssurge.com/profile/module.html)。 ## 测试记录 | Case | 结果 | 证据/范围 | |---|---|---| | FFSB 清单提取与去重 | 通过 | CLI Selected 25 项;GUI 25/25;21 条合并业务规则 | | 生产 HTTPS 与规则集 | 通过 | 官方 Surge CLI OK;49/49 远程规则集下载与快照校验成功,静态遮蔽提示 0 | | 本机开启/关闭配置 | 通过 | 两种候选官方 CLI OK;4 个离线测试覆盖精确范围、旧规则回退、改名、清单漂移拒绝 | | Surge DNS | 通过 | api.anthropic.com → 160.79.104.10;dns trace 上游 100.70.255.254 | | Node 系统与 c-ares 解析 | 通过 | lookup 与 resolve4 均为真实 160.79.104.10,无 198.18 fake-IP | | IPv6/HTTPS RR | 限定通过 | 已测样本 AAAA 无结果;TYPE65 返回 NOERROR 空回答并注明 netbird 不支持该查询类型,不代表支持 HTTPS RR 或所有 IPv6 场景 | | 18 个精确域 HTTPS | 16 个完成传输 | 另外两个 MCP 根域无可用 A;403/404 等仅算 TLS/HTTP 传输完成,不算业务认证成功 | | 通配域样本 | 4 个有效样本完成 | www.anthropic.com、platform.claude.com、bridge.claudeusercontent.com、c.ffsb.sg;www.clau.de 无可用地址;两个 MCP 通配域缺真实业务子域 | | 显式 Surge 代理 | 通过 | #53773 / #53780:Claude → FFSB,DNS 100.70.255.254,socket 明确绑定 utun100 | | FFSB 域名与控制 IP 重合 | 当前样本通过 | #53782 c.ffsb.sg 绑定 utun100 完成 HTTP 200;其后管理/信令均 Connected,不据 route get 单独判定环路 | | FFSB 外层 | 通过 | #53827 控制连接 DIRECT,socket 绑定 en0;外层 WireGuard UDP 双向有流量;#53752 STUN DIRECT 上行20/下行32字节 | | 关闭回退(手动触发协调) | 通过 | 两种 curl 入口均 HTTP 200、出口104.28.195.192;DNS 切到1.0.0.1 DoH | | 自动关闭/恢复(LaunchAgent) | 通过 | 不手动运行协调脚本:本次关闭约1秒回退;重连后约12.05秒恢复;前后真实请求成功,出口切回138.75.58.11 | | 浏览器 | 出口测试通过 | Chrome api.ipify.org:关闭时104.28.195.192,恢复刷新后138.75.58.11 | | 集合外 Claude | 通过 | #53785 downloads.claude.ai → 🦀 Claude → 美国 Warp,HTTP403仅为根路径响应 | | 其他 Surge 流量 | 通过 | #53786 GitHub → Proxy HTTP200;#53787 ChatGPT → AI,保持原选择 | | Tailscale | 部分回归通过 | Running、Quad100 MagicDNS 返回答案;本轮未测 tailnet HTTP/SSH 和蜂窝入站 | | 订阅刷新 | 通过 | --refresh 拉取改名后的生产配置,保留本机覆盖与组选择,经 CLI 校验 | | 两种完整启动顺序 | 未验证 | 用户选择“暂不重启,记录该项未验证”;没有重启 Surge 引擎 | | Claude Code / Desktop 登录、模型流 | 未验证 | 按用户要求未调整现有 Base URL;未发送计费模型请求。Node DNS 与 curl 不能代替该验收 | | 短时连续新连接 | 通过 | 约123秒、两种入口交替共24次,全部成功且出口均138.75.58.11;不代表长流测试 | | 长期、睡眠、换网 | 未验证 | 短时新连接测试不能替代这些场景 | 私有原始证据包括 `automatic-test.json`、`fresh-request-evidence.json`、`outer-active-evidence.json`、`domains-on-test.json`、生产 API 前后快照及配置校验日志,已归档到本机 `~/Library/Application Support/ProxyStationFFSB/evidence-2026-10-19/acceptance/`,原 `/private/tmp/claude-policy-implementation/` 副本保留。其中可能含节点和本机网络信息,不提交仓库、不公开上传。 ## 失败、修正与限制 第一轮原生 DNS 测试超时;随后发现 FFSB 当时管理/信令断线、其 DNS 直接返回 SERVFAIL。恢复 FFSB 后,同样的原生 DNS 配置成功,不能据第一轮超时断言 Surge 不支持 FFSB DNS。曾观察控制 IP 的全局路由指向 utun100,但实际 socket 记录证明外层控制连接绑定 en0;因此“必然回路”没有得到证实。 自动审批曾拒绝没有同流程恢复保证的关闭测试。随后改成 try/finally 保证恢复的单一流程,通过审批并完成测试;没有绕过拒绝执行原命令。 FFSB 自身设置未改变,仍会安装系统分域 DNS 和真实地址路由。因此当前实现验证的是**正常就绪分流及显式关闭回退**。接口仍存在但 FFSB 内部故障时,残留的系统 resolver/路由可能影响普通客户端,不能将此方案描述为覆盖所有半故障状态的无损恢复。当前网络没有实际 IPv6 出口场景,不能宣称所有 IPv6 客户端路径已验收。 外部加密代理、应用私有 DoH、硬编码共享 IP 等可能隐藏目标域名;无法从外层 IP 无条件还原“任意进程的任意请求”。客户端升级、接口/DNS/范围改变后需复测。本次不承诺“万无一失”。 ## 收尾完成(2026-10-19) 先前归档和安装曾因自动审批服务返回“Selected model is at capacity”而未执行。用户切换 full access 并明确要求继续后,已完成以下操作,没有重启 Surge 或切换 FFSB: - 将 116 个原始证据文件复制到 `~/Library/Application Support/ProxyStationFFSB/evidence-2026-10-19/acceptance/`,逐文件核对 SHA-256,并保存 `sha256-manifest.json`。原临时文件保留;归档目录权限 700、文件权限 600,已检查。 - 先用官方 CLI 确认活动配置为 `Proxy Station Claude`,再将 `FFSB-Core-Probe.conf` 移到归档的 `retired-profiles/`,校验内容哈希一致,Surge Profiles 中不再保留该测试文件。 - 将旧协调脚本备份为归档中的 `reconcile-before-logging.py`,原子安装新脚本,并确认与仓库源码逐字节一致。 - 真机执行 `--refresh` 返回退出码 0,输出 `Refresh succeeded; configuration unchanged; mode=FFSB; no reload`。执行前后生成配置 SHA-256 一致,活动配置仍为 `Proxy Station Claude`。结果保存在归档的 `closeout-verification.json`。 8 项离线测试通过(原覆盖层 4 项、刷新日志 4 项);新增测试覆盖手动成功、后台静默、下载失败、原生校验失败,并确认无变化不 reload、不输出订阅 URL。刷新失败且已有有效缓存时明确提示沿用缓存,不能只看退出码认定远端刷新成功。此次收尾未扩大上文网络验收范围,未验证项继续保留。 其他客户端范围:本次生产分组/规则也会影响共享订阅的其他格式;未完成 Clash 原生解析器或 iOS 真机复验,不能将 Surge 验收推广到其他客户端。