dsh-lan-proxy:局域網訪問 DSH Web UI,並修復同源 Referer

前言

DeepSeek Harness(DSH)的 Web 管理界面默認只監聽本機迴環地址。想在手機或局域網另一臺機器上打開同一套 UI,需要把 HTTP/HTTPS 與 WebSocket 轉到 127.0.0.1:3080,同時把請求頭改寫成瀏覽器與 /api 信任圍欄能接受的形態。社區裏上游包 @wingsky-1/dsh-lan-proxy 已做 Host、Origin 重寫,但在 0.2.10 仍漏掉同源 Referer,部分插件設置頁會長期 403。下面介紹維護者 yuweitk 的非官方 fork:yuweitk/dsh-lan-proxy,在相同代理能力上補一層 Referer 修復,並放寬 peer 版本範圍以適配較新的 DSH 運行時。

這是什麼

dsh-lan-proxy 是 DSH 的聯網類插件(社區目錄歸類爲聯網工具)。它在 0.0.0.0:<port> 監聽,將 HTTP/HTTPS 與 WebSocket 轉發到迴環 Web 服務器(默認 127.0.0.1:3080),重寫 Host、Origin,並在本 fork 中額外重寫與入站 Host 同源的 Referer,以便經局域網 IP 訪問時仍能通過同源校驗。

本倉庫爲上游 wingsky-1/dsh-plugin-hub 中 packages/dsh-lan-proxy v0.2.10(commit 27da6bd,MIT)的 fork,包名仍爲 @wingsky-1/dsh-lan-proxy,安裝後會原地替換同名插件。README 標明:非官方 fork,問題請提到本倉庫,勿打擾上游作者;上游合併等價修復後應換回上游。

爲什麼需要這個 fork

上游 0.2.10 只改寫 Host 和 Origin。瀏覽器在同源 GET 時可能不帶 Origin,只帶 Referer: http://<局域網IP>:<port>/…。代理若把 Host 改成 127.0.0.1:3080 而 Referer 仍指向局域網地址,上游會看到「迴環 Host + 局域網 Referer」。按 Referer 的 authority 與 Host 比對做同源校驗的插件(例如 dsh-bili-scroll 的 sameOriginOk)會返回 403 只接受本機同源請求:Web UI 殼子正常,個別插件設置頁反覆讀不到配置。

本 fork 在 rewriteHeaders() 中增加規則:僅當 Referer 的 authority 等於入站 Host 時,將 Referer 改寫到目標迴環地址(保留 path/query);跨站 Referer 不改動;沒有 Referer 則不憑空補上。

進來的請求:Host: 192.168.10.4:3081   Referer: http://192.168.10.4:3081/settings
轉發到上游:Host: 127.0.0.1:3080     Referer: http://127.0.0.1:3080/settings

進來的請求:Host: 192.168.10.4:3081   Referer: https://evil.example/x
轉發到上游:Host: 127.0.0.1:3080     Referer: https://evil.example/x   ← 跨站不“洗白”

Origin 行爲與上游一致:存在則改寫爲 http://<targetAuthority>。

核心能力(與上游一致部分)

  • 在局域網側暴露 DSH Web UI:HTTP/HTTPS 與 WebSocket/wss 轉發到迴環服務;HTTPS 默認並存(如 3443),證書可配置或自動生成自簽名(細節見上游 README 快照 README.upstream.md)。
  • 安全模型摘要:targetHost 僅允許迴環地址,配置與運行時雙重校驗(防 SSRF);只接受 Host 爲 IP 字面量或 localhost 的請求(DNS 重綁定防護)。
  • 經本代理訪問時,遠程設備在瀏覽器信任圍欄內可讀寫服務器 settings(含憑據類數據);Referer 補丁只處理同源 Referer,不放寬跨站請求。請確保局域網環境可信。

DSH 版本兼容

上游 0.2.10 將多個 @deepseek-ai/dsh-* peer 釘在精確版本 0.2.1-rc.2,在 DSH 0.2.2-rc.1 等版本上可能被判定不兼容,需 dsh plugin allow-version 或無法激活。

本 fork 將 @deepseek-ai/dsh-*(7 個)改爲 ^0.2.1-rc.2,@deepseek-ai/cordis 改爲 ^4.0.5。資料記載:DSH 0.2.1-rc.2 與 0.2.2-rc.1 實測可滿足範圍,一般無需 allow-version。插件主要使用 webServer、connection 等接口;若未來 0.3.x 接口變化,維護者表示會再調整。

安裝與啓用

倉庫地址:https://github.com/yuweitk/dsh-lan-proxy。社區目錄頁:https://www.skillhub.cn/plugins/yuweitk/dsh-lan-proxy。

安裝命令(須使用 web profile):

dsh plugin --profile web add github:yuweitk/dsh-lan-proxy

# 安裝/更新後必須重啓一次 dsh web(bundle 層只在啓動時組合)

包名仍爲 @wingsky-1/dsh-lan-proxy,會替換已安裝的同名插件,cordis.patch.yml 裏的 entry 無需修改。卸載:

dsh plugin --profile web remove @wingsky-1/dsh-lan-proxy

lib/ 爲已編譯產物,直接安裝即可運行,無需在本倉庫內構建。

典型用法與注意

  1. 在運行 DSH Web 的機器上安裝插件並重啓 dsh web。
  2. 用局域網 IP 與插件配置的端口訪問 UI(具體端口與 HTTPS、證書項見上游 README 中的配置章節,本 fork 行爲與上游一致,Referer 相關說明以本倉庫 README 爲準)。
  3. 若仍見版本不兼容提示,先覈對當前 DSH 與 peer 範圍;若使用其他 fork 或舊版上游,需對照是否缺少 Referer 重寫。

適用場景:需要在平板、同事電腦或機房內網設備上操作 DSH Web UI,且依賴 /api 與各插件設置頁同源校驗的場景。

安裝前檢查:插件以當前 dsh 進程權限運行,會擴大 Web UI 在局域網的可達面;安裝前應閱讀源碼與 MIT 許可證(版權歸屬上游 wingsky-1)。本 fork 版本標識爲 0.2.10-fork.2(package.json),表示基於上游 0.2.10 基線的本地補丁。

結尾

yuweitk/dsh-lan-proxy 在保留上游局域網代理能力的同時,補上同源 Referer 重寫並放寬 DSH peer 約束,適合經 LAN 訪問時插件設置頁因同源 403 無法加載的情況。上游合併等價修復後建議換回官方發佈;詳情與架構說明見 GitHub 倉庫 與 SkillHub 目錄頁。

羽毛球分组比赛记分
小程序二维码

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

小夜