前言¶
DSH(DeepSeek Harness)的出站网络默认走启动时的网络策略,通常是直连。当你需要临时把模型 API、web_search、web_fetch、MCP、插件下载、bash 子进程这几路流量统一指向代理时,常见做法是改系统代理或改 .env,然后重启进程。改系统代理的问题是同机其它程序(浏览器、NAS 服务)也被带走;改 .env 需要重启,无法在运行时按需切换。
dsh-proxy-gate 解决的是这个问题:在插件设置页或会话里用 /proxy 命令一键切换 DSH 进程的出站代理,不改系统代理、不改 .env、不重启 DSH,同机其它程序始终直连。
这是什么¶
dsh-proxy-gate 是 elliotsu1107 维护的 DSH 插件,分类为联网工具,在社区目录 SkillHub 上有目录页。它只作用于 DSH 进程自身的流量:开启时把 undici 全局 dispatcher 换成指向指定代理的 dispatcher,关闭时恢复 DSH 启动时的网络策略。
有两点需要先说清楚:
- 它不是系统代理开关,NAS 上其它程序不受影响。
- 它改的是运行时状态。地址非法时命令直接报错,不会静默回退直连。
安装与启用¶
README 给出的安装命令是:
dsh plugin --profile web add "$PWD" --ignore-scripts
也可以通过 plugin_manager 以本目录安装,行 id 为 include:proxy-gate。装卸前建议先读一遍源码,运行时依赖从 DSH 安装解析 @deepseek-ai/dsh-http-proxy 和 @deepseek-ai/schemastery,两者都是 optional peerDependency,没有第三方运行时依赖。
装好后打开 设置 → 插件 → 出站代理,面板顶部是状态胶囊(已开启 / 已关闭 / 已开启(未生效)),下面是代理地址输入框和「启用代理 / 关闭代理」按钮,还有「测试连通性」。面板与 /proxy 命令读写同一份配置,两边操作互相可见,面板每 2.5 秒刷新一次状态。
卸载命令:
dsh plugin --profile web remove dsh-proxy-gate
卸载时插件 dispose 会调用安装时拿到的 restore 函数,恢复进程原有 dispatcher 与环境变量。
典型用法¶
下面这条路线不依赖图形界面,适合脚本化或无头环境。
1、查看当前状态。当前出口来自 DSH 自己的路由判定 proxyRouteFor,与真实请求同一套逻辑,不是读环境变量:
/proxy
# 或
/proxy status
2、设置代理地址并启用:
/proxy set http://192.168.1.100:7890
/proxy on
/proxy set 可以省略 http://。代理地址可以是局域网内另一台机器,例如同网段里跑 Clash 的路由器或虚拟机。
3、做一次连通性测试,走当前通道打一次 HTTP,输出状态码、耗时和响应片段:
/proxy test
# 也可以指定 URL
/proxy test https://www.google.com
4、关闭代理,恢复直连:
/proxy off
代理挂掉时 /proxy off 仍然可用:命令在 Host 侧执行,不经过模型,Web UI 又走回环直连。
配置项¶
配置项在插件配置里可改,也可以只用命令。四个字段都是 volatile,保存后原地生效,不需要重启插件:
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
false |
是否启用代理 |
proxyUrl |
http://127.0.0.1:7890 |
代理地址;只支持 http(s),不支持内嵌账号密码 |
noProxy |
空 | 额外直连名单(逗号分隔,不支持 CIDR);回环地址由核心强制直连 |
testUrl |
https://www.gstatic.com/generate_204 |
/proxy test 默认地址;直连时打不开属正常,说明没走代理 |
行为细节¶
有几条边界值得在用之前知道。
- 回环地址(
localhost/127.0.0.1/::1/[::1])始终直连,Web UI 不会绕进代理。 - 子进程(bash 工具、
curl、git、pnpm)通过proxyEnvironmentForChild()继承同一策略,HTTP_PROXY/HTTPS_PROXY/NO_PROXY大小写都会写入。 - 代理不可达时插件不会自动改配置,需要手动
/proxy off回直连或/proxy set换代理。
README 里记录了两种验证方式,可以做参考:单元测试 node --test test/*.test.mjs 共 6 项,覆盖地址校验、volatile 读取、开启/关闭/非法地址/释放状态机;实机切换用本机起的临时代理做对照,开启后子进程环境出现 HTTP_PROXY/HTTPS_PROXY=http://127.0.0.1:18090、NO_PROXY=localhost,127.0.0.1,::1,[::1],对照代理记录到模型 API 域名的 CONNECT 与测试请求,关闭后这些变量全部消失、对照代理不再收到新连接。截至当前 README,作者也标注了未验证的部分:/proxy 在聊天框人工提交后的实际执行结果,以及面板在浏览器中的实际渲染与交互。
适用场景与注意¶
适合需要在运行时临时切换出站通道的场景:模型 API 与工具调用想走代理、又不想影响同机其它程序;或者代理源经常变化,不想改 .env 重启进程。
有三件事需要注意。第一,插件以当前 DSH 进程的权限运行,能控制进程内全部出站流量,包括 bash 子进程的环境变量,权限面比看起来大,安装前应检查源码与许可证。第二,proxyUrl 只支持 http(s),SOCKS、内嵌账号密码、带路径的地址都会被拒绝,用之前确认代理类型匹配。第三,社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,安装与版本以 GitHub 仓库为准。
链接与文档¶
- 目录页:https://www.skillhub.cn/plugins/elliotsu1107/dsh-proxy-gate
- GitHub:https://github.com/elliotsu1107/dsh-proxy-gate
- 项目文档:https://github.com/elliotsu1107/dsh-proxy-gate/blob/main/docs/README.md
- 变更记录:https://github.com/elliotsu1107/dsh-proxy-gate/blob/main/CHANGELOG.md