← 返回列表
需源码安装
一个 DSHDeepSeek Harness插件,移除 resolves to a non-public IP…
暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/4 · 已提供中文文档
让 DeepSeek Harness 在 Clash TUN(fake-ip)模式下正常使用 web_fetch
综合分
34.9
GitHub 分
34.9
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ffdnm/ClashTUNWithDSH仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包ClashTUNWithDSH(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
仓库缺少 package.json,无法用 dsh 插件安装命令安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/19 20:59:27
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
ClashTUNWithDSH
一个 DSH(DeepSeek Harness)插件,移除 resolves to a non-public IP address 限制,使 DSH 在 Clash TUN 下正常工作。
许可证
本项目基于 GNU AGPL-3.0-or-later 发布:你可以自由使用、修改和再分发;任何再分发(包括作为网络服务提供)都必须以相同许可证开源代码。请参阅仓库根目录下的 LICENSE 文件。
这是什么
DSH 内置的 web_fetch 工具带有一道 SSRF 防护:在抓取之前,它会将主机名解析为 IP 地址,如果任何解析出的地址是非公网 IP(回环、私有、保留地址段等),就会直接拒绝该请求:
URL hostname "example.com" resolves to a non-public IP address (WEB_BLOCKED_URL)
然而在 Clash TUN(fake-ip 模式) 下,系统 DNS 被 Clash 接管:每个域名都会解析为一个 fake-ip 保留地址段地址,例如 198.18.0.0/15(或 fdfe:dcba:9876::/48),真实连接由 TUN 虚拟网卡拦截,并按 Clash 的规则交给 Clash 代理。这对普通应用完全透明,却恰好踩中了 DSH 的“非公网 IP”雷区——启用 Clash TUN 后,几乎每个 web_fetch 请求都会被拒绝。
本插件移除了该限制:允许任何解析出的 IP。连接仍直接发起,由 TUN 网卡原样接管,因此 DSH 在 Clash TUN 下可正常工作。
工作原理
DSH 的抓取流水线为:web_fetch 工具 → ctx.web(WebRuntime 服务)→ 本地 HTTP 抓取提供者(web-fetch-http,id 为 http)。IP 检查只发生在提供者实例的 resolveAddresses 方法内部(DNS 解析之后,它会校验每个应答都是公网单播地址)。
本插件(一个 Cordis 动态插件,宿主侧)在运行时就地替换该方法:
1. 对公网目标零改动:先运行原始解析器;当所有解析出的地址均为公网时,行为与原生完全一致(包括 NAT64 检查、地址固定、重定向、大小/超时上限)。
2. 仅解除“非公网”拦截:当且仅当原始逻辑抛出 WEB_BLOCKED_URL 且消息包含 non-public 时,插件通过 DSH 的 subprocess 服务启动一个一次性 Node 子进程,经由系统解析器调用 dns.lookup(..., { all: true, order: 'verbatim' }) 重新解析(在 Clash TUN 下会返回 fake-ip),允许所有返回的地址,并将地址集交给原生的地址固定传输层——TUN 网卡拦截连接,Clash 照常代理。
3. IP 字面量(例如 127.0.0.1、[::1])同样被允许;解析结果按进程缓存 60 秒,避免反复启动子进程。
4. 插件停止或更新时恢复原始方法——无残留副作用。
不修改 DSH 源码、不更改部署配置、不注册第二个 provider(因此 provider 选择不受影响);该补丁严格遵循插件生命周期。
一键安装
仓库提供 install.ps1(Windows PowerShell)和 install.sh(macOS/Linux/Git Bash)。一条命令即可完成全部安装:
Windows (PowerShell 5.1+)
.\install.ps1 # install
.\install.ps1 -Uninstall # uninstall
macOS / Linux / Git Bash
./install.sh # install
./install.sh uninstall # uninstall
安装内容(安装到 $DSH_HOME,即 $env:DSH_HOME 或 ~/.dsh):
| 文件 | 用途 |
| --- | --- |
| clash-tun-web-fetch-unlock.cjs | 宿主平面插件模块(payload/ 中文件的副本) |
| cordis.patch.yml | DSH 官方的家目录用户补丁层;脚本以幂等方式追加一个带标记的块(# >>> classtunwithdsh),其中包含一行 insert,用于将插件挂载到宿主组合中 |
亮点:
- 适用于每个 profile 的每个会话(挂载在宿主平面上)——无需预设或修改 DSH 源码;
- 如果当前 profile 启用了实时补丁重载,则保存后立即生效,无需重启 DSH;否则将在下次启动 DSH 时生效;
- 幂等:可安全重复运行;卸载时只移除带标记的块,不会影响其他内容;
- 脚本包含卸载路径,可随时恢复 DSH 的原始行为。
用法(会话内动态插件,可选)
除了一键安装之外,你也可以在会话中定义一个动态插件:将 clash-tun-web-fetch-unlock.host.js 的函数体用作 cordis_define 的 code.host(idPrefix: "clash"),然后通过 cordis_run 激活它——效果相同,但它只存在于当前 DSH 进程中,重启后必须重新加载。两种方式均可;同时启用也是安全的(该补丁带有引用计数和恢复保护)。
验证
在安装前后各运行一次以下每个请求(DSH Web GUI 默认监听 127.0.0.1:3080):
| 请求 | 安装前 | 安装后 |
| --- | --- | --- |
| web_fetch http://127.0.0.1:3080/ | URL hostname "127.0.0.1" resolves to a non-public IP address | HTTP 401(GUI 认证响应——连接确实已建立) |
| web_fetch http://localhost:3080/ | 以相同方式被阻止 | HTTP 401 |
| web_fetch https://example.com/ | HTTP 200 | HTTP 200(公网路径,无回归) |
注意事项
- 此检查是一项 SSRF 防护。 一旦解除,web_fetch 便可访问本地和内网地址。请仅在个人设备以及 Clash TUN 等可信网络中使用,切勿让不受信任的模型指令将抓取引向敏感的内部服务。
- 仅解除了 IP 解析检查:URL scheme 白名单、凭据拒绝、重定向限制、字节/字符/超时上限、地址固定,以及所有其他传输卫生策略仍然有效。
- 一键安装会随 DSH 进程(宿主平面)持久化,并在重启后仍然存在;卸载后(或移除补丁行后),重启 DSH(或触发热重载)以恢复原始行为。
- 每个被允许的非公网目的地都会记录为 [clash-tun-web] allowed non-public destination: -> ,以便可观测。
仓库内容
| 文件 | 用途 |
| --- | --- |
| README.md | 本文档(英文) |
| README_CN.md | 中文文档 |
| LICENSE | GNU AGPL-3.0 许可证文本 |
| install.ps1 / install.sh | 一键安装 / 卸载(Windows PowerShell / POSIX shell) |
| payload/clash-tun-web-fetch-unlock.cjs | 安装载荷:宿主平面插件模块(CJS,module.exports = { apply }) |
| clash-tun-web-fetch-unlock.host.js | 会话内动态插件源码(cordis_define 的 code.host 主体;与载荷逻辑相同) |扫码进群