分析一下 https://github.com/Echo-Smith/Routekeeper 项目,你认为它的优势和缺点分别是什么?是否是「过时设计」
回复 贝尔 我把 README 从头读完了,先说结论:它不算过时设计,问题在别处:它用「验证」的方式做了「保证」做不到的事,而它愿意相信的底层能力(sandbox-exec、未签名的 Network Extension)恰恰是 macOS 上最不稳固的一层。 优势 定位很准。大多数代理工具只回答说“连上了”,它回答的是“从哪出去的、这证据还有效吗、断了会不会漏”。把 system proxy、TUN、IPv6、DNS、UDP/STUN、外部出口观测这五条路径拉平做对比,这个思路是对的:双栈错配、IPv6 物理暴露、出口漂移,正是现实中真正导致流量泄漏的地方。 证据有效期这个设计我比较欣赏。15 分钟过期,网络、DNS、代理、休眠唤醒、重启都会让证据失效,未知一律不算通过。这是安全工程里少见的克制,“没检查”不等于“通过”这句话写在文档里也落实在状态机里。 fail-closed 做得完整。网关保护、隔离启动、清理三处都停而不是猜;relay 不可用就失败,不回落直连;LAN 默认禁;休眠立即断网、唤醒要重新验证、手动暂停不自动恢复。这些都是经验主义和糊弄最容易漏的点。 实验隔离 + 授权交接的设计是对的。workspace 只读拷贝源项目、独立 HOME、独立浏览器 profile、写回只能走 JSON manifest + 人工批准 + 只应用 unstaged patch,不自动 commit/push。这个边界划得比多数 agent 工具干净。 工程完成度不低。226 个测试、有环境门控的网络验收、CLI 只读自检 + JSON 输出 + 明确退出码、报告可脱敏导出、清理想法有归属标记和符号链接拒绝。一个人做的 macOS 原生项目做到这个份上,说明作者知道自己要什么。 缺点 最根本的一条:sandbox-exec 是苹果明确标记 deprecated 的东西,README 自己也承认了。整个隔离模型压在它身上,意味着升级一个 macOS 版本就可能整体失效,而且它给不了 VM 级的隔离:接口名、本地地址、路由、resolver 配置它都虚拟化不了。既然目标是给敏感工作(尤其是给 agent 跑的任务)一个边界,那 Sandbox + Seatbelt 的上限就是“防误操作”,不是“防对手”。要真隔离,macOS 上该走的是 VM(Apple 虚拟化框架)或至少是容器化方案。 第二条:Network Extension 的按进程过滤在源码里有,但当前 ad-hoc 签名版本激活不了。这等于说它最好的那个能力,用户拿到的是个不能用的。临时签名 + 未公证,还得让用户去系统设置里手动放行,作为“安全工具”,它的分发形态本身就先破坏了自己的可信链。 第三条:范围膨胀。网络验证是个收敛的问题,能做到很扎实;执行隔离是个发散的问题,文件、进程、签名校验、桌面应用登录态、浏览器 profile、交接审批、清理白名单……每一项都是无底的。项目把这两件事捆在一个 app 里,短期看起来功能完整,长期会变成“网络部分被拖累着没法打磨”。而实际用户需求大多是:我只要知道流量有没有漏。 第四条:0 star、单作者、0.3.x 版本、无第三方包。这不是质量问题,是生态风险:这类工具的价值一半在持续跟进 macOS 和代理生态的变化(新代理内核、新的 TUN 实现、QUIC、新版系统权限模型),单点维护注定滞后。 第五条:许可证是 PolyForm Noncommercial,source-available 但不是开源。“过时设计”经常被拿来说另一个词,其实是“变现路径”问题:非商业限制 + 单作者 + 安全类工具需要长期维护,这三者很难共存。 关于「过时设计」 从设计理念上说它恰恰是现在时的:fail-closed、证据链、可复核的出口验证,这些在 agent 时代的可信执行/沙箱讨论里反而是主流方向,Zed、Anthropic 那批人都在往这个方向走。它不“过时”,更像是“野心超过地基”。 如果要给作者建议,我会排这个优先级:先把网络验证这部分单独打磨到能替代现有检测脚本(这是最容易被采纳的部分);隔离层改用 VM 或明确降级为 “best-effort 防误操作” 并在 UI 上说清楚;拿到签名和公证再说自己是安全工具。