前言¶
DeepSeek Harness(DSH)里的 web_fetch 会先解析主机名,再要求解析结果必须是公网可达的单播地址。本地若使用 Clash、sing-box 等带 FakeIP 的 DNS,解析器常返回 198.18.0.0/15 或 fc00::/18 一类的占位地址,Harness 内置的 @deepseek-ai/dsh-web-fetch-http 会直接拒绝请求,错误类似:
Error: URL hostname "raw.githubusercontent.com" resolves to a non-public IP address
代理侧仍会正确转发,但智能体在发字节之前就被拦下。社区插件 dsh-fakeip-compat(维护者 bemarkt,分类:联网工具)在原有公网校验之前插入一条 FakeIP 兼容规则,并可选通过 DNS-over-HTTPS 复核真实目标;其余连接固定、同源重定向、字节与字符上限、字符集解码与官方实现一致。下文介绍其定位、能力与安装配置方式。事实以 GitHub 仓库 README 为准;版本 1.0.0,在 Desktop 与 CLI profile 上均对照 DeepSeek Harness 0.2.1-rc.5 验证过。
这是什么¶
dsh-fakeip-compat 是面向 DSH web_fetch 的 FakeIP 兼容层:重新注册 id 仍为 http 的 fetch provider,在 profile 已选择 fetchProvider: http 时可直接替换行为,而不改动其它 composition。插件自带 General 设置页一行(需 profile 挂载 webServer 与 configEditor);纯 TUI profile 仍可使用 fetch provider,但需手写配置。
核心功能¶
与内置校验的差异¶
内置逻辑用 ipaddr.js 判断:每个 DNS 答案都必须是 range() === 'unicast' 的公网单播。FakeIP 答案落在 reserved 或 uniqueLocal 等范围,一律被拒。
本插件在官方判断之前增加一条规则(概念上):
destination inside fakeipRanges -> allow
allowNonPublic === true -> allow(整段公网校验跳过)
anything else -> 沿用原有 public-unicast 检查
默认仍阻止私网、回环以及 169.254.169.254 等元数据地址。
实现要点(README 明确说明)¶
- 零 npm 依赖:IPv4/IPv6、CIDR 与非公网块表在
lib/ip.js,便于 bundle 安装。 - 尽量复用官方传输:能解析到 Harness 自带的
HttpFetchProvider时,把解析器作为第二构造参数传入,pinning、重定向、上限与解码仍是官方代码。 - Node 原生回退:官方模块不可用时改用
node:http/node:https;pinning 与上限仍生效,Harness 代理路由不经过该路径。runtime.implementation可查看当前实现。 - 禁用而非替换官方 row:bundle patch 仅关闭自带的
web-fetch-http,避免两个 provider 共用 idhttp。
可选:真实地址 DoH 复核¶
FakeIP 答案不反映真实目的地;若域名真实解析到私网,外观与其它占位符相同。开启 verifyRealAddress 后,会在连接前向独立 JSON DoH 端点查询真实答案:
verifyRealAddress |
行为 |
|---|---|
off(默认) |
不查询,无额外延迟 |
warn |
查询;真实答案非公网则记录日志,仍允许 fetch |
enforce |
查询;真实答案非公网则拒绝 fetch |
dohFailurePolicy 在开启复核时决定「无法验证」的含义:allow(默认)或 deny。仅当查询未得到可用答案时算不可验证;若 DoH 返回公网地址则通过。
默认关闭的原因 README 写得很清楚:公网 DoH 与本地/分流 DNS 可能不一致(enforce 在策略复杂环境易误杀);DNS 故障不应默认等同禁止访问;每次复核会向 DoH 运营方暴露主机名;IP 字面量不走 DNS 复核。需要封堵「域名真实指向私网」这一缺口时再打开。
环境要求¶
| 项 | 要求 |
|---|---|
| DeepSeek Harness | 0.2.1-rc.5(已验证),Desktop / CLI profile |
| Node.js | 20 及以上 |
| Composition | 须挂载 web;设置页 additionally 需要 webServer、configEditor |
许可证:MIT(见仓库 package.json)。
安装与启用¶
安装方式以 README 为准,通过 DSH 的 plugin_manager 安装本地 bundle(需本机已有仓库目录的绝对路径):
plugin_manager { action: "install_bundle", target: "<absolute path to this repository>" }
已安装同名 bundle 时会拒绝覆盖(already-installed),需先移除再装:
plugin_manager { action: "remove_bundle", target: "dsh-fakeip-compat" }
plugin_manager { action: "install_bundle", target: "<absolute path to this repository>" }
package.json 的 dsh.install 也记录了 tarball / zip / git 源(优先 tarball),例如:
https://codeload.github.com/bemarkt/dsh-fakeip-compat/tar.gz/refs/heads/main
bundle patch 会禁用 web-fetch-http 并插入 id 为 fakeip-compat 的 provider,默认配置片段包括:
fakeipRanges: ['198.18.0.0/15']
allowNonPublic: false
verifyRealAddress: 'off'
是否需要重启:
- Host 侧(fetch provider 与配置路由):安装报告
application: applied后即生效;保存配置后 Loader 会协调 row,一般无需重启进程。 - Client 侧(设置页):浏览器模块在启动时 compose;首次安装或修改
client.js后需重启 DSH,设置行才会出现。
配置¶
路径:Settings → General → 滚动到底部 → FakeIP fetch compatibility。
- FakeIP ranges:CIDR 芯片列表,输入网段回车添加,空列表表示非公网目的地仍全部拦截。
- Allow every non-public destination:对应
allowNonPublic。 - Real-address verification:
off/warn/enforce,以及 DoH 端点与dohFailurePolicy。 - Save:写入 profile 的
cordis.patch.yml,Loader 协调后 provider 按新配置重载。
无 webServer / configEditor 时,按 README 手写 patch 中 fakeip-compat 的 config 字段即可。
配置 HTTP 路径(供排查):
browser → GET|POST /ext/fakeip-compat/config
→ configEditor.edit(entry, …)
→ ~/.dsh/profiles/<profile>/cordis.patch.yml
典型用法与验证思路¶
- 在已启用 FakeIP 的代理/DNS 环境下,profile 使用
fetchProvider: http并安装本插件。 - 保持默认
fakeipRanges: ['198.18.0.0/15'](若你的 FakeIP 网段不同,在设置页补全 CIDR)。 - 让智能体执行原先会报「non-public IP address」的
web_fetch(例如 README 中的raw.githubusercontent.com场景),确认请求不再在解析阶段被拦。 - 若担心域名真实指向内网,将
verifyRealAddress设为warn或enforce,并配置可信 DoH;家庭网络仅代理分流时可考虑enforce,多策略 DNS 环境宜先用warn观察。
仓库提供自测脚本:npm test 或 node scripts/selftest.mjs(在插件源码目录执行,用于开发侧自检,非 DSH 内置步骤)。
适用场景与注意¶
适合: 在 DSH Desktop 或 CLI 中开发/运行智能体,本机 DNS 走 FakeIP(Clash Meta、sing-box 等),需要 web_fetch 正常拉取公网站点,且希望尽量保持 Harness 原有 HTTP 安全语义(非公网块、元数据 IP 仍默认禁止)。
注意:
- 插件以当前 DSH 进程的权限运行;安装前请阅读 源码与 LICENSE,确认符合你的安全策略。
allowNonPublic: true会跳过公网单播检查,范围远大于 FakeIP 兼容,仅在明确接受风险时使用。- DoH 复核涉及延迟、可用性与隐私权衡,默认关闭是刻意设计。
- DeepSeek Harness 插件社区目录(如 SkillHub 条目)为独立生态站点,与 DeepSeek / 幻方无官方从属关系;本文不引用未在 README 中出现的用户案例或数据。
结尾¶
dsh-fakeip-compat 用最小改动(provider id 与 composition 与官方 http 对齐)解决 FakeIP 环境下 web_fetch 被误拒的问题,并可选 DoH 复核真实地址。需要详情、故障排查与 Desktop 说明时,请查阅仓库 README(含中文版 README.zh.md)。
- 目录页:https://www.skillhub.cn/plugins/bemarkt/dsh-fakeip-compat
- GitHub:https://github.com/bemarkt/dsh-fakeip-compat