dsh-proxy-whitelist:按渠道勾选 HTTP 代理,其余直连

前言

在 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 代理出网,其余请求保持直连,并在设置界面提供「代理白名单」卡片。

插件不按请求体里的模型 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye