前言¶
DeepSeek Harness(DSH)里用 web_fetch 抓公网页面时,官方 HTTP 抓取器会做 SSRF 防护:域名解析结果若不是公网单播地址,就直接拒绝。这在普通网络下合理;若本机开着 Clash 等 VPN 的 TUN + fake-ip,公网域名常被解析成 198.18.0.0/15 这类保留段地址,再由 TUN 透明转发到真实目标——逻辑上仍是外网访问,却会被判定为「内网」而报错。下面介绍社区插件 zhuweiyou/dsh-web-fetch-fix 如何在不改工具名与参数的前提下绕过这一误判。
这是什么¶
dsh-web-fetch-fix 是维护者 zhuweiyou 发布的 DSH 联网类插件(SkillHub 分类:联网工具)。它用与官方 @deepseek-ai/dsh-web-fetch-http 几乎相同的实现替换内置抓取 provider,仅去掉「解析 IP 必须公网」的两处校验,使 web_fetch 在 fake-ip 环境下能继续工作。仓库:https://github.com/zhuweiyou/dsh-web-fetch-fix;目录页:https://www.skillhub.cn/plugins/zhuweiyou/dsh-web-fetch-fix。
未装插件时,典型报错为:
Error: URL hostname "xxx" resolves to a non-public IP address
装上并启用 bundle 后,智能体侧仍调用 web_fetch,参数与其它行为与官方一致;变化的是底层 provider 与 SSRF 判定策略。
核心功能与实现要点¶
插件基于官方包 tag dsh-v0.2.1-rc.3 将 packages/web/web-fetch-http 原样复制到仓库内 web-fetch-http/,相对官方只改两处(README 已说明):
web-fetch-http/src/network.ts:删除两处isPublicIpAddress判定(普通解析与 NAT64 变体),不再因 fake-ip 段拒绝请求。web-fetch-http/src/provider.ts:provider id 由'http'改为'web-fetch-fix',避免与内置 provider 冲突,并通过 patch 让web.fetchProvider指向本插件。
URL 校验、重定向、解压、charset、大小与超时限制等其余逻辑与官方一致。bundle 通过 cordis.patch.yml 注册 patched 包并改写 web 配置,例如:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: deepseek-official
fetchProvider: web-fetch-fix
- insert:
- id: web-fetch-fix
name: dsh-web-fetch-fix/web-fetch-http
package.json 中声明的 DSH 引擎范围为 >=0.2.1-rc.1 <0.3.0,许可证为 MIT,当前包版本为 0.2.1。
安装与启用¶
DSH 生态按「一切皆插件」组织;SkillHub 是社区目录站点,与 DeepSeek / 幻方无官方从属关系。安装命令须以目录页原文为准,不要自行拼接未在资料中出现的 CLI。
在 SkillHub 插件页 使用「发送给 DeepSeek Harness 安装」中的说明,让 Harness 安装标识为 zhuweiyou/dsh-web-fetch-fix 的 bundle。插件以当前 DSH 进程权限运行,安装前建议阅读仓库源码与 MIT 许可证,确认可接受去掉公网 IP 门禁带来的 SSRF 防护差异。
若你自行从源码构建(例如 fork 后本地打包),仓库说明为:
npm install && npm run build
esbuild 会为各 web-*/src/index.ts 生成 web-*/lib/index.js,供 DSH 加载;发布产物已包含构建后的 lib 与 cordis.patch.yml。
典型用法¶
README 未单独列出新的工具 API:启用 patch 后,在 Agent 或 Harness 对话中照常让模型使用 web_fetch 抓取 HTTPS 页面即可。此前因 fake-ip 解析失败的任务(文档检索、读 README、打开公开 API 说明等)应能恢复;searchProvider 仍由 patch 设为 deepseek-official,与官方 web 包选型并列写在同一 - id: web 块中,避免重复 patch 覆盖配置。
适用场景与注意¶
适合: 本机长期开 Clash 等 TUN + fake-ip,且必须在 DSH 里稳定使用 web_fetch 的开发者或智能体场景。
不适合或需慎重: 去掉公网 IP 判定会降低一层 SSRF 防护。若环境不可信、或不允许放宽抓取策略,应继续使用官方 provider,或改用不经过 fake-ip 的网络路径(例如关闭 TUN、改用系统代理模式等),而不是默认安装本插件。
仓库说明还可扩展为「一个 bundle 多个 web 包」:复制官方 packages/web/<name>、做最小改动,并在 cordis.patch.yml 的 insert 中增加一行 name: dsh-web-fetch-fix/<name>;需要改 web.* 选型时合并进同一个 - id: web 的 config。
结尾¶
dsh-web-fetch-fix 针对 TUN fake-ip 与官方 SSRF 判定冲突做了最小替换:工具面不变,只换 fetch provider 并移除误杀公网请求的 IP 门禁。需要安装说明时见 SkillHub 目录页;需要改动细节与构建方式时见 GitHub README:https://github.com/zhuweiyou/dsh-web-fetch-fix。