前言¶
DeepSeek Harness(DSH)的 Web 界面默認會綁定在明確的主機地址上,並拒絕通配監聽。這在安全上是合理的,但在實際部署裏會帶來一個常見矛盾:服務只開在 127.0.0.1 或某一網卡地址上時,同一臺機器上的 Tailscale 100.x、局域網網卡,或 macOS 上 Shadowrocket Tailscale 模塊使用的隧道地址(例如 198.18.0.1)上的入站流量,往往無法直接打到 DSH 監聽器。手動爲每個地址再起一套進程或改綁定方式,既容易和 DSH 的設計衝突,也不利於 DHCP 或隧道上下線後自動跟上。
dsh-tailnet-ingress 是維護者 dingcang 發佈的一個小型 DSH bundle(客戶端類插件)。它在不改變 DSH 迴環監聽的前提下,在本機選定的非公網 IPv4 地址上額外監聽,並把 TCP 原樣管道到 DSH 已有的迴環 Web 監聽器;HTTP、WebSocket 升級等流量不解析、不改寫、不注入。下面介紹它的行爲、安裝方式,以及和 DSH 信任柵欄配合使用時需要注意的點。
這是什麼¶
插件 npm 包名爲 @dingcang/dsh-tailnet-ingress(README 中 package.json 標註版本 1.2.2,許可證 MIT)。一句話定位:把綁定在迴環上的 DSH Web UI,同步服務到本機私有網段、CGNAT(含 Tailscale 100.x)以及文檔列出的隧道相關 IPv4 地址上,端口跟隨 DSH Web 監聽器實際綁定的端口。
社區目錄頁:https://www.skillhub.cn/plugins/dingcang/dsh-tailnet-ingress
源碼與說明:https://github.com/dingcang/dsh-tailnet-ingress
DSH 生態強調「一切皆插件」;SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
零配置自動探測(默認)¶
autoDetect 默認爲 true。每次插件激活時讀取 Node.js 的 os.networkInterfaces(),不調用外部命令、不發探測包、也不向隧道應用查詢。流程可以概括爲:
- 收集所有
internal: false的 IPv4 條目(IPv6 不服務)。 - 去重後,只保留落在下列網段內的地址;公網地址一律丟棄。
- 顯式配置的
hosts排在最前;剔除 DSH 自身綁定地址(從webServer.getOrigin()讀取),避免與--host部署衝突。 - 對其餘每個地址,用解析出的端口建立監聽,並把原始 TCP 接到迴環上的 upstream。
| 網段 | 用途 |
|---|---|
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 |
常見局域網 |
100.64.0.0/10 |
CGNAT,Tailscale 的 100.x 在此範圍 |
198.18.0.0/15 |
RFC 2544 基準網段;Shadowrocket TUN 常用 198.18.0.1 |
探測在每次 dsh web 啓動時執行,DHCP 續租或隧道在下次啓動時會反映在新地址列表裏。若某地址在探測與 listen 之間消失,僅記錄警告,其餘地址繼續服務。
透明 TCP 管道¶
在每個可服務地址上監聽後,把連接接到 DSH 持有的迴環監聽器(默認 upstream 爲 127.0.0.1,端口與 Web 監聽器一致)。管道不改寫 Host 頭。
生命週期與端口¶
監聽器由 ctx.effect 持有:隨 dsh web 啓動建立,關閉或重載時關閉。配置項 port: 0 表示跟隨 Web 監聽器實際端口,--port 變化時兩側保持一致。
安裝與啓用¶
安裝命令以 README 爲準;安裝後需重啓 dsh web,讓 profile 重新加載 bundle。
# 從 npm 安裝(推薦)
dsh plugin --profile web add @dingcang/dsh-tailnet-ingress
# 從 GitHub 安裝
dsh plugin --profile web add github:dingcang/dsh-tailnet-ingress
# 或從本地目錄安裝
dsh plugin --profile web add file:/path/to/dsh-tailnet-ingress
插件以當前 dsh 進程權限運行;安裝前建議在 GitHub 上查看源碼與 MIT 許可證,自行評估是否適合你的環境。
配置¶
默認值由 bundle 自帶的 patch 提供。覆蓋時只改你的 profile 裏的 cordis.patch.yml,按 row id 寫入,不要改插件包內文件:
- id: dsh-tailnet-ingress
config:
hosts: [192.168.1.5] # 顯式地址,替代或疊加在探測結果上
autoDetect: true
port: 0 # 0 = 跟隨 Web 監聽器
upstreamHost: 127.0.0.1
upstreamPort: 0 # 0 = 跟隨 `port`
| 鍵 | 默認值 | 含義 |
|---|---|---|
hosts |
[] |
額外服務的地址,與探測結果合併 |
autoDetect |
true |
是否服務本機私有 / CGNAT / 隧道 IPv4 |
port |
0 |
0 跟隨 Web 監聽器端口 |
upstreamHost |
127.0.0.1 |
DSH 迴環監聽器地址 |
upstreamPort |
0 |
0 跟隨 port |
若只想固定少數地址,將 autoDetect 設爲 false,並在 hosts 中顯式列出。
典型用法與信任柵欄¶
僅在地址上監聽,並不等於 DSH 會在該 authority 上開放 /api。DSH 的信任柵欄仍要求每個瀏覽器會使用的 host 出現在 --trusted-host 中;未聲明則 /api 返回 403。啓動 token 爲進程級,每個 authority 需各自完成 cookie 兌換。
README 給出的示例:在迴環上跑 Web,同時爲局域網 IP 與 Tailscale 地址聲明信任:
dsh web --host 127.0.0.1 --trusted-host 192.168.1.5 100.x.y.z
將 100.x.y.z 換成你節點真實的 tailnet IPv4。在 macOS 上使用 Shadowrocket 的 Tailscale 模塊時,入站可能被改寫到 198.18.0.1;自動探測包含 198.18.0.0/15,正是爲了在這種隧道場景下仍能接到管道,但 /api 仍要對實際訪問用的 host 配置 --trusted-host(若瀏覽器 authority 爲 198.18.0.1:端口,則需在 trusted-host 中體現,具體以你本地訪問 URL 爲準)。
適用場景與注意¶
適合需要在同一臺運行 DSH 的機器上,通過局域網、Tailscale CGNAT 地址,或 Shadowrocket 類 TUN 隧道地址訪問 Web UI,又希望保持 DSH 主進程仍只綁定迴環或單一 --host 的部署。
注意區分兩件事:ingress 插件負責在多地址上監聽並轉發 TCP;DSH 的 --trusted-host 負責 API 與 UI 的信任邊界。在酒店 Wi‑Fi 等環境監聽局域網地址,若未配置對應 trusted-host,界面/API 仍不會因監聽 alone 而對外放開。
經過上面的步驟,你可以在不大改 DSH 綁定策略的前提下,讓 Web UI 在本機多個非公網 IPv4 上可達。更多細節見 GitHub README 與 SkillHub 目錄頁。