DeepSeek Harness 在企业代理下不可用:Zscaler 回环与 CA 配置判定
「我的电脑能正常用 cc、codex、copilot CLI,只有 dsh 不行」——这句话本身就是判断线索:不是外网不通,而是本机回环那条路被代理接管了。 Zscaler 会在本地开一个监听端口接管流量,而 DSH 自己也要在本机起一个随机端口做客户端与 Host 的通信(#10439)。先判环境,再分层配置。
DeepSeek Harness 第一步:三条判据确认是企业网络问题
同时满足这三条,基本可以按企业代理处理,不必去查安装或权限。
- 机器上装了安全网关客户端(例如 Zscaler),并且它有本地监听端口。
- 本机回环通信被它接管:用
curl http://127.0.0.1:<本地端口>/观察是否被重定向或拦下。 - 现象是「外网部分能用、本地那一条不通」,而不是全部请求超时。
补充两条旁证:同类 CLI 能用但 DSH 不行;关掉代理软件后一切正常。前者说明是路径差异,后者说明是代理介入。
DSH插件 第二步:让本机通信直连
把 localhost、127.0.0.1、::1 从代理里排除出去,这一步优先于任何代理配置。
- 系统代理或 PAC 里,把上述三个主机设为直连。
NO_PROXY里显式写入localhost,127.0.0.1,::1。- 保留原来的内网条目,用英文逗号拼接。
- 不要用分号分隔——分号会让整条豁免失效。
- 也不要写
10.*.*.*这类通配符,它不生效;内网段要写具体主机名或域名。
这一步做完,桌面端至少应该能启动并连上自己的 Host,剩下的才是外网请求问题。
DeepSeek Harness 第三步:让外网请求真的走代理
Node 内置 fetch 默认不读代理变量,必须显式开启,否则你设了 HTTPS_PROXY 也没用。
- 确认 Node 版本在 22.21+ 或 24.x,旧版本没有这个开关。
- 设置
HTTP_PROXY、HTTPS_PROXY,需要时再加ALL_PROXY。 - 设置
NODE_USE_ENV_PROXY=1。 - 用一个外部地址验证:能拿到响应说明代理链路生效。
- 再回到 DSH 里发一条消息,确认外网请求正常。
DeepSeek插件 第四步:信任企业 CA
如果报 SELF_SIGNED_CERT_IN_CHAIN,说明公司做了 HTTPS 检查,需要把企业根证书加进信任链。
- 向 IT 索取企业根证书的 PEM 文件。
- 设置
NODE_EXTRA_CA_CERTS=<证书路径>,路径写绝对路径。 - 重启应用后再试。
- 不要用
NODE_TLS_REJECT_UNAUTHORIZED=0,那等于关掉全部证书校验。 - 如果证书更新导致再次报错,先换新证书,再怀疑其它配置。
DeepSeek Harness 一份可直接用的环境变量清单
社区报告者最终就是用这一组变量解决的;按你的代理地址与证书路径替换即可。
$proxy = "http://127.0.0.1:9000"
$env:HTTP_PROXY = $proxy
$env:HTTPS_PROXY = $proxy
$env:ALL_PROXY = $proxy
$env:NO_PROXY = "localhost,127.0.0.1,::1"
$env:NODE_USE_ENV_PROXY = "1"
$env:NODE_EXTRA_CA_CERTS = $caBundle
几点提醒:代理地址要换成你机器上真实的监听端口;NO_PROXY 里如果要保留内网主机,直接追加在逗号后面,别用分号;$caBundle 指向 PEM 的绝对路径。
DSH插件 为什么桌面端要写用户级变量
桌面端从图标启动时不继承你终端里临时设置的变量,写在当前会话里等于没写。
- 在系统设置里把上述变量写成用户级环境变量。
- 完全退出应用,包括托盘图标与任务管理器里的残留进程。
- 重新启动,再验证本机与外网两条链路。
- 如果仍然失败,从终端启动 app 二进制做对照——能通就说明是环境变量作用域问题。
一套验证顺序:先本机,再外网,最后应用
每次只验证一层,失败就能定位到具体配置项。
- 本机:
curl http://127.0.0.1:<Host端口>/,应当直连返回而不是被重定向。 - 外网:
curl https://api.deepseek.com/,应当返回正常响应而不是证书错误。 - 应用:启动 DSH 并发一条消息,确认无代理相关报错。
- 任一层失败,回到对应步骤单独修,不要同时改多个变量。
注意事项
- 不要靠关闭 Zscaler 绕过。这是公司安全策略,绕开既不现实也不合规。
- 不要只配外网代理。回环被接管时,外网通了也没用。
- 不要用分号分隔 NO_PROXY。一条分号能让整条豁免失效。
- 不要用通配符写内网段。写具体域名或主机名。
- 不要关闭 TLS 校验。用企业根证书解决问题,而不是把校验关掉。
如果配置完仍然只有 DSH 失败,而同类 CLI 正常,把两者的代理变量与 Node 版本逐项对齐,差异点通常就是原因。相关排查见 DeepSeek Harness 环境变量与凭据排查:git 调用失败、凭据变量名匹配漏掉、子进程不走代理与凭据格式代差。
常见问题
多数情况不是不兼容,而是回环流量被代理接管,DeepSeek Harness 因此起不来。DSH 会在本地起一个随机端口,客户端与 Host 之间走 127.0.0.1;代理把这些流量也拦下就会失败。把 localhost、127.0.0.1、::1 加进 NO_PROXY 即可,不用关 Zscaler。
因为 DeepSeek Harness 和它们的网络路径不同。DSH 除了外网请求,还依赖本机回环通信;回环被代理接管时,外网部分可能正常,本地那一条却断了。
不够,DeepSeek Harness 依赖的 Node 内置 fetch 默认不读代理环境变量,需要 Node 22.21+ 或 24.x 并显式设置 NODE_USE_ENV_PROXY=1,否则代理变量只对部分请求生效。
这是 DeepSeek Harness 遇到的 HTTPS 检查证书链问题。用 NODE_EXTRA_CA_CERTS 指向 IT 下发的企业根证书 PEM,不要用 NODE_TLS_REJECT_UNAUTHORIZED=0 关闭校验。
DeepSeek Harness 桌面端不一定继承终端的环境变量。建议写进用户级环境变量,然后完全退出应用(含托盘与后台进程)再启动。
相关术语
- Zscaler
- Zscaler 是企业常用的安全网关客户端,会在本机开启监听端口并把流量导向它。它可能一并接管回环流量,从而影响依赖 127.0.0.1 通信的应用。— https://github.com/deepseek-ai/deepseek-harness/discussions/10439
- NO_PROXY
- NO_PROXY 是代理排除列表,命中的主机不走代理。多个条目用英文逗号分隔,本机回环应写 localhost、127.0.0.1、::1。— https://github.com/deepseek-ai/deepseek-harness/discussions/10439
- NODE_USE_ENV_PROXY
- NODE_USE_ENV_PROXY 是让 Node 的 fetch 使用 HTTP_PROXY/HTTPS_PROXY 等环境变量的开关。缺少它时,Node 内置 fetch 默认不读代理配置。— https://github.com/deepseek-ai/deepseek-harness/discussions/10439
- NODE_EXTRA_CA_CERTS
- NODE_EXTRA_CA_CERTS 是 Node 的附加根证书路径,用于信任企业 HTTPS 检查用的根证书。它只增加信任,不会关闭证书校验。— https://github.com/deepseek-ai/deepseek-harness/discussions/10439
来源
- #10439 — 本地电脑 zscaler 代理导致 dsh 不可用· deepseek-ai(GitHub Discussions)
- deepseek-ai/deepseek-harness(源码仓库)· GitHub