前言¶
DSH 的 Web GUI 面向本機迴環地址使用時,開發者很難直接從其他設備打開。直接讓 DSH 監聽 0.0.0.0 又容易把 Web API 暴露到不可信網絡。
rice-awa/dsh-lan-gateway 用反向代理網關處理這個矛盾:讓 DSH 本身繼續只綁 127.0.0.1,由插件另起 0.0.0.0 網關轉發到 loopback 端口,並對 LAN 與非 LAN 來源採取不同策略。
下面介紹它的安裝、啓用和配置方式。
這是什麼¶
rice-awa/dsh-lan-gateway 是一個 DSH 插件,owner 爲 rice-awa,許可爲 MIT。
它把 DeepSeek Harness 的 Web GUI 安全地開放到局域網 / 公網。插件提供反向代理、登錄頁、會話校驗、可選 TLS、設置頁卡片,以及對話中的 lan_gateway 管理入口。
DSH 生態強調「一切皆插件」;社區目錄是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係。
核心功能¶
反向代理與來源分級¶
插件先讓 dsh 繼續只綁 127.0.0.1,再由插件另起 0.0.0.0 反向代理網關,轉發到 dsh 的 loopback 端口。
它會改寫 Host/Origin,以通過 /api 信任圍欄。
來源分級只依據 socket.remoteAddress,絕不信任 X-Forwarded-For。
- LAN 與 loopback 來源免密代理。
- 非 LAN 來源必須先完成登錄頁,並出示 HMAC cookie。
登錄與會話¶
網關提供 /__login 登錄頁,密碼以 scrypt 校驗。
登錄嘗試按來源限流 5 次 / 分鐘。
會話 cookie 使用 HMAC-SHA256,並帶:
HttpOnly; SameSite=Lax
會話可以用 lan_gateway rotate-secret 作廢。
如果 authRequired: true 且未設置密碼,enable 會拒絕監聽,避免把遠程代碼執行的門戶開放給非 LAN 來源。
TLS¶
插件提供兩種 TLS 模式:
self-signed:自動生成並持久化自簽名證書。custom:掛載自己的 PEM 證書與私鑰。
自簽名證書首次訪問會看到瀏覽器警告,屬預期行爲。
啓用 TLS 後:
- 登錄 cookie 自動帶
Secure。 - 網關自身響應帶 HSTS。
- 轉發到 dsh 的 loopback 連接仍爲明文 HTTP。
設置與對話管理¶
官方設置頁卡片可配置端口、網段、認證、TLS,保存即熱生效。
插件還提供 lan_gateway 工具,可在 dsh 對話中管理網關。
同時提供 lan-gateway 配套 skill。
密碼哈希、cookie secret 存:
~/.dsh/lan-gateway/state.json
密鑰不進配置。
請求兼容與 CSRF 圍欄¶
插件會爲網關純 HTTP 頁面補 crypto.randomUUID。
對 /api* 請求,網關會自檢 sec-fetch-site 與 Origin 是否匹配;跨站請求直接 403。
WebSocket /api 升級請求同樣先過登錄校驗,再轉發給 dsh。
安裝¶
npm 包爲預構建產物,安裝時不需要批准構建腳本。若仍提示,可按 INSTALL.md 寫入 allowBuilds。
dsh plugin --profile web add @riceawa/dsh-lan-gateway
安裝後,插件默認不監聽網絡端口;enabled 默認爲 false。
啓用¶
先開啓網關:
lan_gateway enable
查看狀態:
lan_gateway status
設置非 LAN 訪問密碼:
lan_gateway set-password
重新生成自簽名 TLS 證書:
lan_gateway tls-regenerate
關閉網關:
lan_gateway disable
也可以在 dsh 對話中直接說:
- 設置網關密碼爲……
- 查看網關狀態
- 開啓 / 關閉網關
經過上面的步驟,網關會按當前配置監聽網絡端口,並對非 LAN 來源要求登錄。
配置示例¶
在 DSH Settings → Plugins → 可配置插件 中展開「LAN 網關」卡片修改配置,保存即生效。
下面示例開啓自簽名 TLS:
- id: dsh-lan-gateway
config:
enabled: true
gatewayPort: 8443
tlsEnabled: true
tlsMode: self-signed
tlsSelfSignedHosts: localhost, 192.168.1.5
使用自己的 PEM 證書與私鑰時,可以改成 custom 模式:
- id: dsh-lan-gateway
config:
tlsEnabled: true
tlsMode: custom
tlsCertPath: /path/to/cert.pem
tlsKeyPath: /path/to/key.pem
其中 tlsCertPath 填 PEM 證書路徑,tlsKeyPath 填 PEM 私鑰路徑。
適用場景與注意¶
適合:
- 需要在本機以外的設備訪問 DSH Web GUI 的開發者。
- 希望 LAN 免密、非 LAN 登錄的局域網或公網使用。
- 需要可選 TLS,並希望通過設置頁管理網關配置的使用者。
注意:
- 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
- 默認關閉,只有運行
lan_gateway enable後才監聽網絡端口。 - 非 LAN 來源依賴登錄頁與會話 cookie;未設置密碼時開啓會被拒絕。
- 來源分級只依據
socket.remoteAddress,絕不信任X-Forwarded-For。 - 自簽名證書首次訪問會觸發瀏覽器警告,屬預期行爲。
- 轉發到 dsh 的 loopback 連接仍爲明文 HTTP,依賴本機迴環隔離。
- 移動端訪問推薦同時安裝 dsh-web-mobile 配合使用。
資源¶
- GitHub:https://github.com/rice-awa/dsh-lan-gateway
- 社區目錄:https://www.skillhub.cn/plugins/rice-awa/dsh-lan-gateway