前言¶
DeepSeek Harness(DSH)裏的 web_fetch 會先解析主機名,再要求解析結果必須是公網可達的單播地址。本地若使用 Clash、sing-box 等帶 FakeIP 的 DNS,解析器常返回 198.18.0.0/15 或 fc00::/18 一類的佔位地址,Harness 內置的 @deepseek-ai/dsh-web-fetch-http 會直接拒絕請求,錯誤類似:
Error: URL hostname "raw.githubusercontent.com" resolves to a non-public IP address
代理側仍會正確轉發,但智能體在發字節之前就被攔下。社區插件 dsh-fakeip-compat(維護者 bemarkt,分類:聯網工具)在原有公網校驗之前插入一條 FakeIP 兼容規則,並可選通過 DNS-over-HTTPS 複覈真實目標;其餘連接固定、同源重定向、字節與字符上限、字符集解碼與官方實現一致。下文介紹其定位、能力與安裝配置方式。事實以 GitHub 倉庫 README 爲準;版本 1.0.0,在 Desktop 與 CLI profile 上均對照 DeepSeek Harness 0.2.1-rc.5 驗證過。
這是什麼¶
dsh-fakeip-compat 是面向 DSH web_fetch 的 FakeIP 兼容層:重新註冊 id 仍爲 http 的 fetch provider,在 profile 已選擇 fetchProvider: http 時可直接替換行爲,而不改動其它 composition。插件自帶 General 設置頁一行(需 profile 掛載 webServer 與 configEditor);純 TUI profile 仍可使用 fetch provider,但需手寫配置。
核心功能¶
與內置校驗的差異¶
內置邏輯用 ipaddr.js 判斷:每個 DNS 答案都必須是 range() === 'unicast' 的公網單播。FakeIP 答案落在 reserved 或 uniqueLocal 等範圍,一律被拒。
本插件在官方判斷之前增加一條規則(概念上):
destination inside fakeipRanges -> allow
allowNonPublic === true -> allow(整段公網校驗跳過)
anything else -> 沿用原有 public-unicast 檢查
默認仍阻止私網、迴環以及 169.254.169.254 等元數據地址。
實現要點(README 明確說明)¶
- 零 npm 依賴:IPv4/IPv6、CIDR 與非公網塊表在
lib/ip.js,便於 bundle 安裝。 - 儘量複用官方傳輸:能解析到 Harness 自帶的
HttpFetchProvider時,把解析器作爲第二構造參數傳入,pinning、重定向、上限與解碼仍是官方代碼。 - Node 原生回退:官方模塊不可用時改用
node:http/node:https;pinning 與上限仍生效,Harness 代理路由不經過該路徑。runtime.implementation可查看當前實現。 - 禁用而非替換官方 row:bundle patch 僅關閉自帶的
web-fetch-http,避免兩個 provider 共用 idhttp。
可選:真實地址 DoH 複覈¶
FakeIP 答案不反映真實目的地;若域名真實解析到私網,外觀與其它佔位符相同。開啓 verifyRealAddress 後,會在連接前向獨立 JSON DoH 端點查詢真實答案:
verifyRealAddress |
行爲 |
|---|---|
off(默認) |
不查詢,無額外延遲 |
warn |
查詢;真實答案非公網則記錄日誌,仍允許 fetch |
enforce |
查詢;真實答案非公網則拒絕 fetch |
dohFailurePolicy 在開啓複覈時決定「無法驗證」的含義:allow(默認)或 deny。僅當查詢未得到可用答案時算不可驗證;若 DoH 返回公網地址則通過。
默認關閉的原因 README 寫得很清楚:公網 DoH 與本地/分流 DNS 可能不一致(enforce 在策略複雜環境易誤殺);DNS 故障不應默認等同禁止訪問;每次複覈會向 DoH 運營方暴露主機名;IP 字面量不走 DNS 複覈。需要封堵「域名真實指向私網」這一缺口時再打開。
環境要求¶
| 項 | 要求 |
|---|---|
| DeepSeek Harness | 0.2.1-rc.5(已驗證),Desktop / CLI profile |
| Node.js | 20 及以上 |
| Composition | 須掛載 web;設置頁 additionally 需要 webServer、configEditor |
許可證:MIT(見倉庫 package.json)。
安裝與啓用¶
安裝方式以 README 爲準,通過 DSH 的 plugin_manager 安裝本地 bundle(需本機已有倉庫目錄的絕對路徑):
plugin_manager { action: "install_bundle", target: "<absolute path to this repository>" }
已安裝同名 bundle 時會拒絕覆蓋(already-installed),需先移除再裝:
plugin_manager { action: "remove_bundle", target: "dsh-fakeip-compat" }
plugin_manager { action: "install_bundle", target: "<absolute path to this repository>" }
package.json 的 dsh.install 也記錄了 tarball / zip / git 源(優先 tarball),例如:
https://codeload.github.com/bemarkt/dsh-fakeip-compat/tar.gz/refs/heads/main
bundle patch 會禁用 web-fetch-http 並插入 id 爲 fakeip-compat 的 provider,默認配置片段包括:
fakeipRanges: ['198.18.0.0/15']
allowNonPublic: false
verifyRealAddress: 'off'
是否需要重啓:
- Host 側(fetch provider 與配置路由):安裝報告
application: applied後即生效;保存配置後 Loader 會協調 row,一般無需重啓進程。 - Client 側(設置頁):瀏覽器模塊在啓動時 compose;首次安裝或修改
client.js後需重啓 DSH,設置行纔會出現。
配置¶
路徑:Settings → General → 滾動到底部 → FakeIP fetch compatibility。
- FakeIP ranges:CIDR 芯片列表,輸入網段回車添加,空列表表示非公網目的地仍全部攔截。
- Allow every non-public destination:對應
allowNonPublic。 - Real-address verification:
off/warn/enforce,以及 DoH 端點與dohFailurePolicy。 - Save:寫入 profile 的
cordis.patch.yml,Loader 協調後 provider 按新配置重載。
無 webServer / configEditor 時,按 README 手寫 patch 中 fakeip-compat 的 config 字段即可。
配置 HTTP 路徑(供排查):
browser → GET|POST /ext/fakeip-compat/config
→ configEditor.edit(entry, …)
→ ~/.dsh/profiles/<profile>/cordis.patch.yml
典型用法與驗證思路¶
- 在已啓用 FakeIP 的代理/DNS 環境下,profile 使用
fetchProvider: http並安裝本插件。 - 保持默認
fakeipRanges: ['198.18.0.0/15'](若你的 FakeIP 網段不同,在設置頁補全 CIDR)。 - 讓智能體執行原先會報「non-public IP address」的
web_fetch(例如 README 中的raw.githubusercontent.com場景),確認請求不再在解析階段被攔。 - 若擔心域名真實指向內網,將
verifyRealAddress設爲warn或enforce,並配置可信 DoH;家庭網絡僅代理分流時可考慮enforce,多策略 DNS 環境宜先用warn觀察。
倉庫提供自測腳本:npm test 或 node scripts/selftest.mjs(在插件源碼目錄執行,用於開發側自檢,非 DSH 內置步驟)。
適用場景與注意¶
適合: 在 DSH Desktop 或 CLI 中開發/運行智能體,本機 DNS 走 FakeIP(Clash Meta、sing-box 等),需要 web_fetch 正常拉取公網站點,且希望儘量保持 Harness 原有 HTTP 安全語義(非公網塊、元數據 IP 仍默認禁止)。
注意:
- 插件以當前 DSH 進程的權限運行;安裝前請閱讀 源碼與 LICENSE,確認符合你的安全策略。
allowNonPublic: true會跳過公網單播檢查,範圍遠大於 FakeIP 兼容,僅在明確接受風險時使用。- DoH 複覈涉及延遲、可用性與隱私權衡,默認關閉是刻意設計。
- DeepSeek Harness 插件社區目錄(如 SkillHub 條目)爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;本文不引用未在 README 中出現的用戶案例或數據。
結尾¶
dsh-fakeip-compat 用最小改動(provider id 與 composition 與官方 http 對齊)解決 FakeIP 環境下 web_fetch 被誤拒的問題,並可選 DoH 複覈真實地址。需要詳情、故障排查與 Desktop 說明時,請查閱倉庫 README(含中文版 README.zh.md)。
- 目錄頁:https://www.skillhub.cn/plugins/bemarkt/dsh-fakeip-compat
- GitHub:https://github.com/bemarkt/dsh-fakeip-compat