前言¶
DeepSeek Harness(DSH)里,智能体通过 web_fetch 拉取网页内容。内核自带的 @deepseek-ai/dsh-web-fetch-http 会在发起请求前检查解析结果:只要主机名对应到非公网单播地址,就直接拒绝,错误码为 WEB_BLOCKED_URL。
本机若使用 Clash、sing-box、Surge 等工具的 fake-ip DNS,域名往往被映射到保留段(常见默认 198.18.0.0/15)。此时连 github.com 也会被判为非公网 IP,例如:
URL hostname "github.com" resolves to a non-public IP address (WEB_BLOCKED_URL)
代理本身能上网,但 DSH 侧的 web_fetch 会全部失败。下面介绍社区插件 dsh-web-fetch-fakeip(维护者 vaspike,分类:联网工具),它注册替代的 fetch provider,在可配置的 CIDR 白名单内接受 fake-ip 地址,其余规则仍与内置 provider 一致。
这是什么¶
dsh-web-fetch-fakeip 是一个 DSH bundle 插件:在 profile 中插入 web-fetch-fakeip 配置,并把 @deepseek-ai/dsh-web 的 fetchProvider 固定为 http-fakeip。检索契约与内置 HTTP fetch 相同,仅改变「哪些解析地址算合法」——allowCidrs 内的地址可接受,其它地址仍须为公网单播;环回、RFC 1918、链路本地、CGNAT 等保留段继续拦截。
- 目录页:https://www.skillhub.cn/plugins/vaspike/dsh-web-fetch-fakeip
- 源码与说明:https://github.com/vaspike/dsh-web-fetch-fakeip
- 许可证:MIT(见仓库
package.json)
社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行审阅源码与许可证。插件随当前 DSH 进程权限运行。
核心功能¶
-
http-fakeip provider
与@deepseek-ai/dsh-web-fetch-http相同的抓取约束下,允许解析结果落在allowCidrs(如198.18.0.0/15)内的请求通过地址校验。 -
bundle 自动打补丁
package.json声明dsh.bundle.patch,选中 bundle 后对 profile 应用cordis.patch.yml:插入web-fetch-fakeip行,并设置fetchProvider: http-fakeip。因补偿性 override 会替换完整的web配置,补丁会重复写入内置的searchProvider;若你在别处自定义了searchProvider或fetchProvider,需在应生效的层(例如用户层cordis.patch.yml,其晚于 bundle 应用)保留两个键。 -
可配置限额
支持maxResponseBytes、maxBodyChars、timeoutMs、maxRedirects等,与 README 示例一致。 -
无依赖的分类器
仓库提供test/classify.test.js,覆盖 CIDR 解析、匹配及公网/保留地址判定(含::ffff:映射地址)。
安装与启用¶
在目标 profile 下从 GitHub URL 安装(命令来自官方 README):
dsh plugin --profile <your-profile> add https://github.com/vaspike/dsh-web-fetch-fakeip
若已有本地目录,也可让 plugin_manager 指向该路径:
plugin_manager action=install_bundle target=/path/to/dsh-web-fetch-fakeip
安装后 bundle 会应用补丁并 pin @deepseek-ai/dsh-web 使用 http-fakeip。
配置¶
在插件条目 web-fetch-fakeip 下配置 provider(示例来自 README):
- id: web-fetch-fakeip
name: 'dsh-web-fetch-fakeip'
config:
allowCidrs:
- 198.18.0.0/15 # Clash / sing-box / Surge fake-ip default
maxResponseBytes: 5000000
maxBodyChars: 100000
timeoutMs: 30000
maxRedirects: 5
allowCidrs 默认为 [],此时行为与内置 provider 相同。CIDR 在激活时解析,拼写错误会直接报错。
验证¶
在插件源码目录运行单元测试:
node --test test/classify.test.js
适用场景与限制¶
适合: 本机 DNS 走 fake-ip(198.18.0.0/15 或你自定义的映射段),且需要在 DSH 里正常使用 web_fetch 的开发者。
需注意:
- 先校验再抓取,无 DNS 固定。 校验通过后实际请求仍走全局
fetch并可能再次解析;不存在 DNS pinning,理论上存在 rebinding 通过校验后连到别处的风险。内置 provider 会 pin 连接;本插件为在 profile 安装的 bundle 内保持无额外 import,放弃了 pinning。 - 与内置相同的响应契约: 仅同源重定向;仅
text/*与 JSON/XML;字符集取自Content-Type。 - 错误类型: 运行时
WebError类无法从 profile bundle 导入,错误仍带name = 'WebError'与WEB_*码,但instanceof WebError不成立;Harness 对外以错误码为准。 - 长期维护: 若未来内核在
dsh-web-fetch-http中提供ssrfAllowCidrs,可移除本 bundle 改用内核能力。
结尾¶
dsh-web-fetch-fakeip 针对 fake-ip 代理与 DSH 默认 SSRF 校验之间的冲突,用可配置的 allowCidrs 恢复 web_fetch,同时保留对非公网保留段的拦截。需要时可从社区目录或 GitHub 安装并核对配置。
- 目录:https://www.skillhub.cn/plugins/vaspike/dsh-web-fetch-fakeip
- GitHub:https://github.com/vaspike/dsh-web-fetch-fakeip