日常开发中经常需要通过终端工具调用外部大模型 API。最近在使用 opencode 时遇到一个典型问题:浏览器能正常访问外网,但终端请求却持续报错、无法连通 API。

本文记录了完整的排查过程,包括使用 Proxifier 的尝试与踩坑,以及最终采用 Clash TUN 模式的解决方案。

1. 发现问题与初步尝试:Proxifier 登场

初步分析后发现,opencode 等终端工具不会读取 Windows 系统代理配置,而是直接通过 Socket 接口向目标 IP 发起连接,导致流量绕过了 Clash。

常见解决方案是使用 Proxifier 进行进程级流量拦截。配置分两步:

  1. 建立代理通道:在 Proxifier 中添加 127.0.0.1:7890,协议选择 SOCKS5
  2. 设置分流规则:指定目标程序走代理,Clash 本身走直连

成功接入大模型

2. 踩坑实录:语法错误与无限死循环

在配置规则过程中遇到了两个典型错误:

错误一:路径语法导致读取失败

直接从桌面复制快捷方式名称 Clash for Windows.exe - 快捷方式 (2),系统报错:

1
Unexpected blank space found...

解决:使用真实的 .exe 执行文件路径,空格路径用英文双引号 "" 包裹,多程序用英文分号 ; 分隔。

错误二:遗漏核心进程导致 Infinite Loop

修正语法后,Proxifier 弹出严重警告:Infinite loop connection detected

根因分析

  • 我只放行了图形界面 clash for windows.exe
  • 遗漏了真正负责网络收发的核心进程 clash-win64.exe
  • Proxifier 把 Clash 核心发出的代理数据包强行拦截,又塞回 7890 端口,形成死循环

解决:将 clash-win64.exe 加入直连规则,opencode 改为 Proxy。

Proxifier 配置成功

3. 探寻更优解:从 API 劫持到 TUN 虚拟网卡

虽然 Proxifier 方案可行,但它是闭源商业软件(31天试用),且基于 Winsock API Hooking,部分程序可能绕过。

更彻底的方案是 Clash 原生 TUN 模式

TUN 模式工作机制

在 Clash「常规」设置中安装 Service Mode 并开启 TUN 后:

  1. 网卡层接管:系统创建 wintun 虚拟网卡
  2. 路由表重构:所有应用程序的 IP 数据包在路由阶段被强制送入虚拟网卡
  3. Fake-IP 机制:DNS 解析返回假 IP (198.18.0.x),Clash 在内存中完成域名映射后代理发出

TUN 模式配置

4. 最终结论

最终选择关闭 Proxifier,直接启用 Clash TUN 模式:

  • 无需手动配置进程规则
  • 避免遗漏核心进程导致的死循环风险
  • 终端工具的网络请求被 TUN 网卡透明捕获并代理

这是目前解决终端网络代理问题最具普适性和稳定性的方案。


本站由 Hank Hill 使用 Stellar 1.33.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站总访问量 本文总阅读量
🤴
Legendary Chest Unlocked!
感谢阅读到底部。