前言¶
在 DeepSeek Harness(DSH)里接多个模型供应商时,出网路径往往不一致:有的 endpoint 直连超时,有的能连但延迟很高,有的本地就能稳定访问。DSH 自带的 @deepseek-ai/dsh-http-proxy 读取 HTTPS_PROXY、HTTP_PROXY、ALL_PROXY、NO_PROXY,在启动时装一次、全进程生效——除了 NO_PROXY 里的主机,其余请求一律走代理。那是「绕过名单」,方向与「默认直连、只让少数主机走代理」相反;单靠 no_proxy 写不出白名单语义。
下面介绍社区插件 dsh-proxy-whitelist(维护者 lilith1257,分类:联网工具)。它保留 DSH 原有 dispatcher 作为直连路径,只对你列出的主机增加代理路径,由 dispatcher 在每次请求时按 URL 的 origin 选路;粒度与 DSH 路由一致,即每个渠道(每个 baseURL 对应的主机)。Web UI 提供设置卡片,也可改 profile 里的 cordis.patch.yml。
这是什么¶
dsh-proxy-whitelist 是 DSH 插件:只让勾选的模型渠道经 HTTP 代理出网,其余请求保持直连,并在设置界面提供「代理白名单」卡片。
- 仓库:github.com/lilith1257/dsh-proxy-whitelist
- 社区目录:skillhub.cn/plugins/lilith1257/dsh-proxy-whitelist
- 当前包版本(package.json):0.6.3
- 许可证:MIT
- 运行环境:Node.js >= 20.18.1
插件不按请求体里的模型 id 分流——dispatcher 只看 URL。若需要按模型名或渠道级 proxy 字段精细分流,应使用带请求体的网关(例如 new-api);本插件提供 proxy_status 工具说明某个 URL 的实际判定。
与 DSH 自带代理的区别¶
若启动时已通过环境变量让 dsh-http-proxy 全进程走代理,安装本插件后,不在白名单里的主机会回到直连,相当于把「全走代理」收窄为「只走列出的几个」。日志会说明这一语义。若你的需求是「几乎全部走代理、只有少数例外」,应继续用 NO_PROXY,不必装本插件。
若本机已用 Clash Verge、mihomo 等按域名分流,也可以让 DSH 统一指向该客户端,由外部规则决定直连或转发。本插件适合:不依赖外部规则客户端、规则只作用于 DSH 进程、在设置里随时改勾选的场景。
核心功能¶
按渠道勾选,不必手打域名¶
设置卡片会读取 设置 → 模型 里已配置的供应商,列出渠道与 baseURL 主机。勾选即走代理,取消即直连;新增供应商后点「拉取渠道」刷新。列表为空时会提示先去配置供应商。
一个渠道的 baseURL 通常对应一个主机,但同一供应商可能还有同域其它主机。勾选会写入精确主机规则;若已有更宽的手写规则(如 .sta1n.cn),勾选状态按「被宽规则覆盖」显示。取消勾选时,若覆盖来自宽规则,插件会展开为其它渠道各自的精确规则后再删除当前项,避免误断兄弟渠道。
代理地址、保存与探测¶
在卡片中填写代理客户端的 HTTP 端口,例如 http://127.0.0.1:7890。保存后自动重新探测,立即生效,无需重启 DSH。
- 默认不代理:
include为空时不代理任何主机,可先安装再配置。 - 代理未启动则降级直连:使用前探测,之后每 30 秒复查;代理客户端关闭时整体直连,避免每次模型调用失败。
- 不写
process.env:只替换 undici 的全局 dispatcher,卸载时还原。 socks5://会被拒绝并说明原因;undici 仅接受http://与https://代理。
运行状态与调试¶
卡片提供:
- 运行状态:分流是否生效、当前代理、生效规则、已分流请求数(代理 / 直连分别计数)。
- 测试一条 URL:用与 dispatcher 相同的匹配器判断走代理还是直连、命中哪条规则。
- 高级:手动写规则(默认折叠):勾选覆盖不到的主机(webhook、镜像、兄弟 API)可手写;平时可折叠。
配置文件等价写法¶
也可在 profile 的 cordis.patch.yml 中配置,例如:
- id: proxy-whitelist
name: dsh-proxy-whitelist
config:
enabled: true
proxy: http://127.0.0.1:7890
include:
- .d1api.xin
- api.commandcode.ai
- "*.sta1n.cn"
- 10.0.0.0/8
exclude:
- internal.example.com
规则语法摘要:api.example.com 精确主机;.example.com 含 apex 与子域;*.example.com 仅子域;支持 IPv4 网段与 host:port。匹配不区分大小写;loopback(localhost、127.0.0.0/8 等)永远直连。错误规则在加载时按原文报错,不会静默忽略。
模型工具 proxy_status¶
proxy_status({ url: "https://api.commandcode.ai/provider/v1/chat/completions" })
用于查看当前代理、规则、是否已安装,以及指定 URL 会走哪条路径。
安装与启用¶
官方安装命令:
dsh plugin add github:lilith1257/dsh-proxy-whitelist
或在 DSH 中打开 设置 → 插件 → 添加插件,填写 github:lilith1257/dsh-proxy-whitelist。安装完成后重启 DSH。
装好后在 设置 → 插件 → 代理白名单 配置(侧边栏「插件」页可打开同一份配置):勾选渠道、填写代理地址、保存。
典型用法¶
README 中的三渠道对照说明「连通性与延迟」差异(401 在未带鉴权时属正常,重点在能否连上及耗时):
| 渠道 endpoint | 直连 | 走本地代理 |
|---|---|---|
api.example-a.com |
失败(超时) | 200 / 0.7s |
cdn.example-b.cn |
401 / 2.3s | 401 / 0.6s |
api.example-c.cn |
401 / 8.0s | 401 / 0.6s |
对应 include 可写 .example-a.com、.example-b.cn、.example-c.cn。建议先用卡片「测试一条 URL」用同一匹配器看判定,再观察实测结果与 stats 中的 proxied / direct 计数。
适用场景与注意¶
适合谁
- 多个供应商混用,只有部分
baseURL需要代理才能通或才够快。 - 希望规则留在 DSH 进程内,用 Web UI 勾选渠道,而不是改全局
HTTPS_PROXY或依赖系统级分流工具。
安装与权限
插件以当前 DSH 进程权限运行,会参与出网请求路径选择。安装前建议在 GitHub 查看源码与 MIT 许可证,确认符合你的安全策略。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。
已知限制(摘自 README)
- 代理地址只能写到 origin(端口),带路径的 URL 会在保存前被卡片拒收;路由层另有兜底,坏配置降级为直连而非拖垮下次启动。
- 远程代理地址技术上可用,但走代理的渠道请求会携带该渠道凭证;卡片对非本机地址有提示,不拦截——若不接受该风险,应使用
127.0.0.1。 - 仅覆盖使用 undici 全局 dispatcher 的
globalThis.fetch调用方;worker 线程需单独处理,本插件不涉及。 - 非透明代理,不处理 WebSocket 以外协议的改写;与自带 proxy 的其它插件(如
dsh-commandcode-goat)各自使用自己的 dispatcher,互不接管对方已接管的请求。
结尾¶
dsh-proxy-whitelist 把 DSH 出网从「全进程跟环境变量走代理」或「全靠外部 Clash 规则」收窄为:在 Harness 内按已配置渠道勾选,只让这些 baseURL 走 HTTP 代理,其余直连,并附带状态、URL 测试与 proxy_status 工具。
- 目录页:https://www.skillhub.cn/plugins/lilith1257/dsh-proxy-whitelist
- GitHub:https://github.com/lilith1257/dsh-proxy-whitelist