前言¶
在開啓了 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 倉庫