dsh-fakeip-compat:讓 DSH web_fetch 接受 FakeIP 段 DNS 答案

前言

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 共用 id http。

可選:真實地址 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

典型用法與驗證思路

  1. 在已啓用 FakeIP 的代理/DNS 環境下,profile 使用 fetchProvider: http 並安裝本插件。
  2. 保持默認 fakeipRanges: ['198.18.0.0/15'](若你的 FakeIP 網段不同,在設置頁補全 CIDR)。
  3. 讓智能體執行原先會報「non-public IP address」的 web_fetch(例如 README 中的 raw.githubusercontent.com 場景),確認請求不再在解析階段被攔。
  4. 若擔心域名真實指向內網,將 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜