前言¶
DeepSeek Harness(DSH)裏,智能體通過 web_fetch 拉取網頁內容。內核自帶的 @deepseek-ai/dsh-web-fetch-http 會在發起請求前檢查解析結果:只要主機名對應到非公網單播地址,就直接拒絕,錯誤碼爲 WEB_BLOCKED_URL。
本機若使用 Clash、sing-box、Surge 等工具的 fake-ip DNS,域名往往被映射到保留段(常見默認 198.18.0.0/15)。此時連 github.com 也會被判爲非公網 IP,例如:
URL hostname "github.com" resolves to a non-public IP address (WEB_BLOCKED_URL)
代理本身能上網,但 DSH 側的 web_fetch 會全部失敗。下面介紹社區插件 dsh-web-fetch-fakeip(維護者 vaspike,分類:聯網工具),它註冊替代的 fetch provider,在可配置的 CIDR 白名單內接受 fake-ip 地址,其餘規則仍與內置 provider 一致。
這是什麼¶
dsh-web-fetch-fakeip 是一個 DSH bundle 插件:在 profile 中插入 web-fetch-fakeip 配置,並把 @deepseek-ai/dsh-web 的 fetchProvider 固定爲 http-fakeip。檢索契約與內置 HTTP fetch 相同,僅改變「哪些解析地址算合法」——allowCidrs 內的地址可接受,其它地址仍須爲公網單播;環回、RFC 1918、鏈路本地、CGNAT 等保留段繼續攔截。
- 目錄頁:https://www.skillhub.cn/plugins/vaspike/dsh-web-fetch-fakeip
- 源碼與說明:https://github.com/vaspike/dsh-web-fetch-fakeip
- 許可證:MIT(見倉庫
package.json)
社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝前請自行審閱源碼與許可證。插件隨當前 DSH 進程權限運行。
核心功能¶
-
http-fakeip provider
與@deepseek-ai/dsh-web-fetch-http相同的抓取約束下,允許解析結果落在allowCidrs(如198.18.0.0/15)內的請求通過地址校驗。 -
bundle 自動打補丁
package.json聲明dsh.bundle.patch,選中 bundle 後對 profile 應用cordis.patch.yml:插入web-fetch-fakeip行,並設置fetchProvider: http-fakeip。因補償性 override 會替換完整的web配置,補丁會重複寫入內置的searchProvider;若你在別處自定義了searchProvider或fetchProvider,需在應生效的層(例如用戶層cordis.patch.yml,其晚於 bundle 應用)保留兩個鍵。 -
可配置限額
支持maxResponseBytes、maxBodyChars、timeoutMs、maxRedirects等,與 README 示例一致。 -
無依賴的分類器
倉庫提供test/classify.test.js,覆蓋 CIDR 解析、匹配及公網/保留地址判定(含::ffff:映射地址)。
安裝與啓用¶
在目標 profile 下從 GitHub URL 安裝(命令來自官方 README):
dsh plugin --profile <your-profile> add https://github.com/vaspike/dsh-web-fetch-fakeip
若已有本地目錄,也可讓 plugin_manager 指向該路徑:
plugin_manager action=install_bundle target=/path/to/dsh-web-fetch-fakeip
安裝後 bundle 會應用補丁並 pin @deepseek-ai/dsh-web 使用 http-fakeip。
配置¶
在插件條目 web-fetch-fakeip 下配置 provider(示例來自 README):
- id: web-fetch-fakeip
name: 'dsh-web-fetch-fakeip'
config:
allowCidrs:
- 198.18.0.0/15 # Clash / sing-box / Surge fake-ip default
maxResponseBytes: 5000000
maxBodyChars: 100000
timeoutMs: 30000
maxRedirects: 5
allowCidrs 默認爲 [],此時行爲與內置 provider 相同。CIDR 在激活時解析,拼寫錯誤會直接報錯。
驗證¶
在插件源碼目錄運行單元測試:
node --test test/classify.test.js
適用場景與限制¶
適合: 本機 DNS 走 fake-ip(198.18.0.0/15 或你自定義的映射段),且需要在 DSH 里正常使用 web_fetch 的開發者。
需注意:
- 先校驗再抓取,無 DNS 固定。 校驗通過後實際請求仍走全局
fetch並可能再次解析;不存在 DNS pinning,理論上存在 rebinding 通過校驗後連到別處的風險。內置 provider 會 pin 連接;本插件爲在 profile 安裝的 bundle 內保持無額外 import,放棄了 pinning。 - 與內置相同的響應契約: 僅同源重定向;僅
text/*與 JSON/XML;字符集取自Content-Type。 - 錯誤類型: 運行時
WebError類無法從 profile bundle 導入,錯誤仍帶name = 'WebError'與WEB_*碼,但instanceof WebError不成立;Harness 對外以錯誤碼爲準。 - 長期維護: 若未來內核在
dsh-web-fetch-http中提供ssrfAllowCidrs,可移除本 bundle 改用內核能力。
結尾¶
dsh-web-fetch-fakeip 針對 fake-ip 代理與 DSH 默認 SSRF 校驗之間的衝突,用可配置的 allowCidrs 恢復 web_fetch,同時保留對非公網保留段的攔截。需要時可從社區目錄或 GitHub 安裝並覈對配置。
- 目錄:https://www.skillhub.cn/plugins/vaspike/dsh-web-fetch-fakeip
- GitHub:https://github.com/vaspike/dsh-web-fetch-fakeip