前言¶
DeepSeek Harness(DSH)裏用 web_fetch 抓公網頁面時,官方 HTTP 抓取器會做 SSRF 防護:域名解析結果若不是公網單播地址,就直接拒絕。這在普通網絡下合理;若本機開着 Clash 等 VPN 的 TUN + fake-ip,公網域名常被解析成 198.18.0.0/15 這類保留段地址,再由 TUN 透明轉發到真實目標——邏輯上仍是外網訪問,卻會被判定爲「內網」而報錯。下面介紹社區插件 zhuweiyou/dsh-web-fetch-fix 如何在不改工具名與參數的前提下繞過這一誤判。
這是什麼¶
dsh-web-fetch-fix 是維護者 zhuweiyou 發佈的 DSH 聯網類插件(SkillHub 分類:聯網工具)。它用與官方 @deepseek-ai/dsh-web-fetch-http 幾乎相同的實現替換內置抓取 provider,僅去掉「解析 IP 必須公網」的兩處校驗,使 web_fetch 在 fake-ip 環境下能繼續工作。倉庫:https://github.com/zhuweiyou/dsh-web-fetch-fix;目錄頁:https://www.skillhub.cn/plugins/zhuweiyou/dsh-web-fetch-fix。
未裝插件時,典型報錯爲:
Error: URL hostname "xxx" resolves to a non-public IP address
裝上並啓用 bundle 後,智能體側仍調用 web_fetch,參數與其它行爲與官方一致;變化的是底層 provider 與 SSRF 判定策略。
核心功能與實現要點¶
插件基於官方包 tag dsh-v0.2.1-rc.3 將 packages/web/web-fetch-http 原樣複製到倉庫內 web-fetch-http/,相對官方只改兩處(README 已說明):
web-fetch-http/src/network.ts:刪除兩處isPublicIpAddress判定(普通解析與 NAT64 變體),不再因 fake-ip 段拒絕請求。web-fetch-http/src/provider.ts:provider id 由'http'改爲'web-fetch-fix',避免與內置 provider 衝突,並通過 patch 讓web.fetchProvider指向本插件。
URL 校驗、重定向、解壓、charset、大小與超時限制等其餘邏輯與官方一致。bundle 通過 cordis.patch.yml 註冊 patched 包並改寫 web 配置,例如:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: deepseek-official
fetchProvider: web-fetch-fix
- insert:
- id: web-fetch-fix
name: dsh-web-fetch-fix/web-fetch-http
package.json 中聲明的 DSH 引擎範圍爲 >=0.2.1-rc.1 <0.3.0,許可證爲 MIT,當前包版本爲 0.2.1。
安裝與啓用¶
DSH 生態按「一切皆插件」組織;SkillHub 是社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。安裝命令須以目錄頁原文爲準,不要自行拼接未在資料中出現的 CLI。
在 SkillHub 插件頁 使用「發送給 DeepSeek Harness 安裝」中的說明,讓 Harness 安裝標識爲 zhuweiyou/dsh-web-fetch-fix 的 bundle。插件以當前 DSH 進程權限運行,安裝前建議閱讀倉庫源碼與 MIT 許可證,確認可接受去掉公網 IP 門禁帶來的 SSRF 防護差異。
若你自行從源碼構建(例如 fork 後本地打包),倉庫說明爲:
npm install && npm run build
esbuild 會爲各 web-*/src/index.ts 生成 web-*/lib/index.js,供 DSH 加載;發佈產物已包含構建後的 lib 與 cordis.patch.yml。
典型用法¶
README 未單獨列出新的工具 API:啓用 patch 後,在 Agent 或 Harness 對話中照常讓模型使用 web_fetch 抓取 HTTPS 頁面即可。此前因 fake-ip 解析失敗的任務(文檔檢索、讀 README、打開公開 API 說明等)應能恢復;searchProvider 仍由 patch 設爲 deepseek-official,與官方 web 包選型並列寫在同一 - id: web 塊中,避免重複 patch 覆蓋配置。
適用場景與注意¶
適合: 本機長期開 Clash 等 TUN + fake-ip,且必須在 DSH 裏穩定使用 web_fetch 的開發者或智能體場景。
不適合或需慎重: 去掉公網 IP 判定會降低一層 SSRF 防護。若環境不可信、或不允許放寬抓取策略,應繼續使用官方 provider,或改用不經過 fake-ip 的網絡路徑(例如關閉 TUN、改用系統代理模式等),而不是默認安裝本插件。
倉庫說明還可擴展爲「一個 bundle 多個 web 包」:複製官方 packages/web/<name>、做最小改動,並在 cordis.patch.yml 的 insert 中增加一行 name: dsh-web-fetch-fix/<name>;需要改 web.* 選型時合併進同一個 - id: web 的 config。
結尾¶
dsh-web-fetch-fix 針對 TUN fake-ip 與官方 SSRF 判定衝突做了最小替換:工具面不變,只換 fetch provider 並移除誤殺公網請求的 IP 門禁。需要安裝說明時見 SkillHub 目錄頁;需要改動細節與構建方式時見 GitHub README:https://github.com/zhuweiyou/dsh-web-fetch-fix。