前言¶
DeepSeek Harness(DSH)桌面端的 web fetch 只接受公网单播地址。本机若开着 Clash 或 sing-box 的 fake-ip 模式,系统或代理 DNS 常把域名解析成 198.18.0.0/15 等保留段;ipaddr.js 2.5.0 不会把这些地址当作公网单播,请求往往在连上目标之前就被 WEB_BLOCKED_URL 拦掉。即便放宽校验,端口 53 被劫持时解析结果仍可能是 fake-ip,连接会钉在错误地址上。
下面介绍社区插件 dsh-real-ip(维护者 NingYuanLee,MIT 许可证)。它不修改 app.asar,在 Cordis 层包装 HTTP fetch 的地址解析,并在必要时用公网 DNS 换回真实公网 IP;同时补丁 Node 的 dns.lookup,让走系统解析的其他请求也能受益。插件归属 DeepSeek Harness 社区生态,目录站点与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-real-ip 的定位是:当 web fetch 或 Node DNS 解析拿到 Clash / sing-box 的 fake-ip 时,尽量钉住真实公网地址,而不是直接拒绝或连向 fake-ip。包名 dsh-real-ip,显示名 Real IP,当前版本 0.1.0;在 SkillHub 等社区目录中分类为「记忆」。旧包名 @liningyuan/dsh-web-fetch-fake-ip 已弃用。
问题背景¶
fake-ip 模式用 198.18.0.0/15(RFC 2544)等段应答主机名;sing-box 默认 IPv6 池含 fc00::/18,另有 2001:2::/48 等 benchmarking 段。DSH 的公网校验与这类答案冲突。混合解析结果里若保留 fake-ip,钉住的地址集合仍会出错。 literal IP 主机名(例如直接访问 http://198.18.x.x/)不会走例外逻辑,仍会被拦截。
核心功能¶
经过上面的背景,插件行为可概括为以下几点(均来自上游 README):
-
包装 HTTP fetch 的
resolveAddresses
原解析器已接受的答案原样返回。若因 fake-ip 被拒且集合里存在公网单播地址,只返回公网地址,同集合中的 fake-ip 丢弃。 -
全部为已知 fake-ip 时的恢复
依次向223.5.5.5、119.29.29.29、8.8.8.8、1.1.1.1发 UDP/53 查询;若无公网答案,再按 IP 字面量做 DNS over HTTPS(AliDNS、DNSPod、Cloudflare,避免解析 DoH 域名本身又回到 fake-ip)。 -
仍无法恢复公网地址
保留已知 fake-ip 以便 TUN 映射仍可承载连接。私网、回环、链路本地、CGNAT 等非 fake 保留地址整组拒绝,不会发往公网 DNS。 -
全局 DNS 补丁
对 Nodedns.lookup与dns.promises.lookup安装相同恢复逻辑,覆盖 globalfetch、undici 等路径;已在加载时单独import的lookup引用不在补丁范围内,但 web fetch 包装仍覆盖该路径上的请求。配置了 HTTP 代理时,requestVia原有跳过逻辑不变。 -
无配置项
已知 fake-ip 池包括 IPv4198.18.0.0/15、sing-box 默认 IPv6fc00::/18、RFC 51802001:2::/48及 IPv4-mapped 形式;fd00::/8不视为 fake-ip。
恢复过程可能增加约 1 秒 UDP 等待;UDP 不可用时会再对每个 DoH 端点增加约 2.5 秒。公网解析器仅看到主机名,看不到 URL 路径、头或凭证。
安装与启用¶
先做安装,再重启 DSH;运行中的进程不会热加载该插件。
推荐从 registry 安装到 web profile:
dsh plugin --profile web add dsh-real-ip
包声明了 dsh.bundle.patch,dsh plugin add 会把 bundle 写入 profile。也可从 GitHub 或本地目录安装:
dsh plugin --profile web add github:NingYuanLee/dsh-real-ip
dsh plugin --profile web add ./dsh-real-ip
兼容性(上游表格):dsh >=0.2.1-rc.2 <0.3.0-0,Node >=22.19.0;在 dsh 0.2.1-rc.3、Windows x64 桌面宿主上验证。依赖 ipaddr.js 2.5.0,peer 为 @deepseek-ai/cordis ~4.0.4 与 @deepseek-ai/dsh-tools >=0.2.1-0 <0.3.0。
卸载并恢复默认公网校验:
dsh plugin --profile web remove dsh-real-ip
卸载后同样需要重启 DSH;插件不写入缓存或凭证文件。
典型用法¶
插件没有 YAML 或环境变量配置项,安装并重启后即可生效。典型场景是:本机 TUN / fake-ip 代理下,让 DSH 的 web fetch、模型请求等需要公网地址的出站解析不再因 198.18.x.x 一类答案失败。若你使用自定义 fake-ip 段且被 ipaddr.js 判为公网单播,插件无法与真地址区分,不会改写;落在私网范围内的自定义池仍会被整体拒绝,也不会触发公网查询。
适用场景与注意¶
适合在 Clash / sing-box fake-ip 与 DSH 同机共存、且希望保留 DSH 公网安全策略(私网与 literal 仍 blocked)的开发者。插件以当前 DSH 进程权限运行,会向列出的公网解析器查询你访问的主机名;安装前应阅读 SECURITY.md 与源码,确认符合你的合规要求。
限制摘要:仅包装 http fetch provider;自定义 fake-ip 若像公网或落在私网,行为见上文;NAT64 解析失败原样抛出。
链接¶
- 社区目录:https://www.skillhub.cn/plugins/NingYuanLee/dsh-real-ip
- 源码与说明:https://github.com/NingYuanLee/dsh-real-ip
在 fake-ip 与 DSH 公网校验冲突的场景里,dsh-real-ip 用解析层包装和公网 DNS 回退,把「能连上真实站点」和「继续拒绝私网与 literal」放在同一条路径上处理;需要时按 profile 安装、重启即可,无需额外配置。