功能定位:为什么只给 Terminal 开小灶
在 macOS 上,kuailian(Kuailian privacy tool,国内亦称 lets 节点)默认接管系统全部流量。开发、运维、科研三类人却常希望:只有 Terminal 走代理,其余 App 保持原 IP,方便审计、避免流媒体二次验证、减少公司 privacy tool 冲突。2026 年 3 月发布的 v7.3.0 把 Split-Tunneling 3.0 下放至 macOS,才让「单应用级」分流真正可用,于是有了这篇macOS 终端独享代理的合规配置笔记。
前置条件与版本边界
1. 系统 ≥ macOS 13 Ventura(需要 NetworkExtension 新 API)
2. 快连客户端 ≥ v7.3.0(截至当前的最新版本;旧版无「进程级分流」)
3. 拥有「可审计」节点权限(个人盲签名账号即可,企业子账号需管理员在后台打开「允许本地抓包」开关,否则后续 tcpdump 会为空)
4. 未开启系统「iCloud 专用代理」,两者同用会导致隧道闪断(官方 FAQ 已确认)。
检查当前客户端版本的最短路径
顶部菜单栏 Kuailian 图标 → 关于 → 弹窗第一行即版本号。若低于 v7.3.0,点击「检查更新」即可增量下载,无需重装。
核心思路:Split-Tunneling 3.0 的「反向分流」
Split-Tunneling 3.0 提供「仅代理列表内流量」模式,也就是反向分流:把 Terminal 相关进程写进「必须代理」白名单,其余默认直连。好处是:
- 系统路由表不被全局篡改,企业内网、网银 U 盾等不会报错;
- Terminal 产生的 ssh/git/curl/wget 全部走加密隧道,CI 日志里出现的是出口 IP,而非真实办公网段,满足合规脱敏;
- 快连自带 RAM-Only 无日志,通过瑞士 Proton Labs 2025 Q4 审计,留存风险低于注册地五眼国家竞品,可放心写入审计报告。
操作路径(桌面端)
步骤 1:建立「Terminal 专用」场景模板
- 打开 Kuailian 主界面 → 右下角「设置」⚙️ → 进入「Split-Tunneling 3.0」
- 模式切换为「仅代理列表内」
- 点击「添加进程」→ 在弹出 Finder 窗口中按快捷键 ⇧⌘G → 输入
/System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal→ 选定可执行文件 - 重复添加自己常用的其他终端,如 iTerm2、Alacritty、Warp(路径同理,均在
/Applications/xxx.app/Contents/MacOS/xxx) - 右上角「保存为模板」→ 命名「Terminal-Only」→ 勾选「设为默认」
步骤 2:把「AI 智能选线 2.0」调成「手动固定」
经验性观察:AI 选线每 90 秒根据丢包重新握手,会导致长连接(ssh、mosh)偶发冻结。做法:在「节点」页搜索目标城市 → 点击右侧「锁定」图标 → 出现绿色图钉即固定。此时 AI 仅做备用故障切换,不会频繁重连。
步骤 3:生成可审计的「出口 IP 清单」
在 Terminal 执行:
while :; do curl -s https://ipinfo.io/ip; sleep 300; done | tee ~/audit/ip.log
该命令每 5 分钟记录一次出口 IP,方便后续与快连后台「会话日志」交叉比对,证明无日志声明是否成立(经验性观察:后台仅显示「已连接/已断开」时间戳,无目标地址)。
验证与观测方法
1. 实时路由验证
打开两个窗口:
A 窗口 ping 1.1.1.1,B 窗口 sudo tcpdump -i utun6 -n host 1.1.1.1(utun6 为 Kuailian 虚拟网卡序号,可能因系统差异为 utun5/7)。若只有 Terminal 进程产生的 ICMP 被 utun6 捕获,而 Safari 同行未被记录,说明反向分流生效。
2. 域名分流验证
在「Split-Tunneling」同一页可追加「域名维度」白名单。示例:把 *.github.com 写进列表,Terminal 内 git clone 即走隧道,而系统浏览器访问 github.com 仍直连。注意:域名维度优先级高于进程,若两者冲突以域名为准。
常见失败分支与回退
现象:关闭 Kuailian 后,Terminal 无法联网
原因:反向分流模式下,Kuailian 会在 utun6 上创建默认路由 0.0.0.0/1;异常退出时未还原。
处置:sudo route -n flush && sudo route -n add default 192.168.x.1(填本地网关)即可手动救回;v7.3.0 已内置「异常退出自动还原」守护进程,若仍失效,请在「设置→高级→重置网络」一键回滚。
提示:macOS 15.x 升级后隧道自动断开
Apple 在 15.x 把「iCloud 专用代理」与第三方 NetworkExtension 优先级硬编码为互斥。升级后第一次重启会强制卸载所有扩展。
解法:系统设置→Apple ID→iCloud→专用代理→关闭,再执行 sudo kmutil unload -b com.quickconnect.macos.driver && sudo kmutil load -b com.quickconnect.macos.driver,重新加载扩展即可。
不适用场景清单
- 需要全局变更 IP 的流媒体解锁(如 Netflix 4K)—— 请切回「全局代理」场景模板;
- 高频并行下载 (>500 MB/s) —— 单进程限速在 200 MB/s 左右,经验性观察:utun6 驱动目前仅跑在单核,CPU 占用可窥见 100 %;
- 合规要求「全流量留存 180 天」的金融机构 —— 虽然 Kuailian 通过无日志审计,但本地仍需自行留存,反向分流会导致「部分流量逃逸」,不满足全量镜像。
最佳实践 6 条(检查表)
- 模板命名带版本号,如「Terminal-Only-v730」,方便半年后回溯;
- 锁定节点而非城市,减少 AI 重连;
- 把公司 *.corp.com 写进「域名例外」,防止内网 GitLab 被代理;
- 长任务(make world)前先在 screen/tmux 内跑
while+curl日志,断线可感知; - 每月手动导出「会话日志」CSV,与本地 ip.log 交叉比对,验证无日志声明;
- 升级系统小版本前,先在测试机重复一遍「kmutil 卸载/加载」脚本,确认无蓝屏再推至生产。
FAQ(使用 FAQPage Schema)
Split-Tunneling 3.0 为何找不到「进程」入口?
客户端版本低于 v7.3.0,或系统低于 macOS 13。升级后仍不可见,请在「设置→实验室」打开「进程级分流」开关。
锁定节点后延迟反而升高?
经验性观察:晚高峰骨干拥塞时,AI 选线会把您切到二线 ISP 出口。手动锁定节点后失去弹性,建议仅对延迟 < 80 ms 且丢包 < 1 % 的节点使用锁定。
公司同时要求 Cisco AnyConnect,能否共存?
可以。把 AnyConnect 的进程「ACAgent」写进 Split-Tunneling「例外列表」,让它走本地物理网卡;Terminal 仍走 Kuailian,互不干扰。若顺序启动后 AnyConnect 闪断,请关闭 Kuailian 的「DNS 覆盖」选项。
无日志审计报告多久更新一次?
官方承诺每年一次第三方审计,最近公开报告为 2025 Q4。新版本发布不强制伴随新报告,若需向监管提交,可发邮件至 [email protected] 获取「审计报告更新通知列表」。
收尾:下一步行动
完成上述 3 步后,您的 Terminal 已独享 Kuailian 加密隧道,系统其余流量保持原 IP。记得每月跑一次「交叉比对」验证无日志,并在小版本升级前先在测试机确认驱动兼容性。若后续需要把 Homebrew、Docker Desktop 也纳入代理,只需在同一模板继续追加进程即可——所有取舍与边界,都已在本篇写明。



