前言¶
在开启了 TUN 模式代理(Clash Verge / Mihomo、sing-box、Surge 等)的 Windows 上,DSH 的 web_fetch 对所有域名都会失败。报错信息显示 DNS 解析成功,但解析出的地址被判定为“非公网地址”从而被主动拦截。这是因为 TUN 模式使用 fake-ip 机制,返回的是非公网 IP(如 28.0.0.x 或 fc00::/7),而 web_fetch 内置的 SSRF 防护会拒绝这些地址。
插件介绍¶
这是一个 DSH 插件,旨在让内置 web_fetch 经由本地代理出网,从而绕过 TUN 模式下 fake-ip 地址被 SSRF 防护拦截的问题。该插件由 1499501762 维护,分类为联网工具,许可证为 MIT。
核心功能¶
- 启动时在宿主进程内找到本地 HTTP 代理。
- 为整个进程安装
proxied策略。 - 校验路由确实变为
proxied: true。 - 跳过本地 DNS 校验(绕过 SSRF 拦截)。
- 通过环境变量或配置支持自动检测。
- 提供 UI 设置界面。
- 与
dsh-network-proxy不冲突。
安装与启用¶
安装插件:
dsh plugin --profile web add github:1499501762/dsh-web-fetch-proxy
该插件需要 Node.js >= 20.18.1。
安装后重启 DSH。启动日志中出现以下信息表示生效:
[web-fetch-proxy] web_fetch now tunnels through http://127.0.0.1:7897 (source: clash-config:...); the local DNS check is bypassed.
典型用法¶
安装完成后,可以通过以下方式配置:
1. 通过 UI 设置:进入 设置 -> 常规 -> Web Fetch 代理。在「Web Fetch 代理」一栏中,可以选择自动检测、手动输入代理地址或关闭。
2. 通过命令行设置命名空间:web-fetch-proxy settings proxy。
3. 通过环境变量:set DSH_WEB_FETCH_PROXY=http://127.0.0.1:7897。
4. 验证插件状态:npm run verify。
注意事项¶
- Fail-open 策略:插件运行时不抛出错误,仅在日志中报告失败。
- 不覆盖宿主路由:启动时若宿主已有
proxied路由,插件不会覆盖。 - 代理发现顺序:
proxy: auto时,按以下顺序探测:环境变量 -> HTTP_PROXY -> 本地 Clash 配置 -> WinINET -> 常见端口(7897、7890 等)。 - 兼容性:与
dsh-network-proxy共用 Dispatcher 但不影响web_fetch。两者不冲突。
结尾¶
该插件为在 TUN 模式下使用 web_fetch 提供了可行的解决方案。更多细节可参考:
- DSH 插件目录
- GitHub 仓库