前言¶
DeepSeek Harness(DSH)默認把 Web GUI 綁在 127.0.0.1,只能在本機瀏覽器打開。想在同一 Wi‑Fi 下的手機或另一臺電腦上看對話進度、繼續會話,常見做法是 SSH 端口轉發或內網穿透——步驟多,還要額外維護隧道。
dsh-lan-access 是 Leon0555 維護的 DSH 聯網工具插件,通過 npm 一鍵安裝,把 Web 服務綁定到 0.0.0.0,並處理局域網 HTTP 下瀏覽器缺少 crypto.randomUUID 導致 RPC 失敗的問題。v0.1.2 起還自帶窄屏移動排版適配。下面介紹它的能力、安裝方式與安全邊界。
這是什麼¶
dsh-lan-access 面向「可信內網」場景:同一局域網下,手機、平板或其他電腦用瀏覽器訪問 http://<運行 DSH 設備的 IP>:3080,無需 SSH、無需內網穿透。
- 維護者:Leon0555
- 分類:聯網工具
- 許可證:MIT
- 當前版本:0.1.3(npm / GitHub)
- 目錄頁:https://www.skillhub.cn/plugins/Leon0555/dsh-lan-access
- 源碼:https://github.com/Leon0555/dsh-lan-access
核心功能¶
1. 局域網綁定¶
插件以 bundle patch 覆蓋 webserver 配置,將 host 改爲 0.0.0.0,端口保持 DSH 默認邏輯(ctx.webStartup.port ?? 3080)。綁定後,局域網內其他設備可通過 http://<運行 DSH 設備的 IP>:3080 訪問 Web GUI。
查本機 IP 示例(macOS):
ipconfig getifaddr en0
2. crypto.randomUUID polyfill¶
瀏覽器只在 HTTPS 或 localhost 等安全上下文暴露 crypto.randomUUID。局域網明文 HTTP 下該 API 不存在,會導致 DSH 的 RPC 全部失敗——項目/會話列表加載不出、無法添加工作區。
本插件通過 webServer 的 tapIndex 鉤子,向每次返回的 index.html 的 <head> 注入兜底實現(標準 UUID v4,由 crypto.getRandomValues 生成)。帶冪等守衛,僅在非安全上下文生效,本機 localhost 訪問不受影響。
3. 手機/窄屏自動適配(v0.1.2+)¶
屏幕寬度 ≤820px 時自動切換緊湊移動排版,無需配置。主要包括:
- 字號壓縮與排版收緊(消息流、代碼塊、標題層級)
- 輸入框
font-size: 16px,規避 iOS 聚焦自動放大 - 按鈕加大觸控目標、去除點擊延遲(
touch-action: manipulation) - 彈層/對話框全屏化(100dvh + 安全區適配),模型選擇等浮層固定定位防遮擋
- 深色/淺色主題下均生效(跟隨 DSH 本身)
窄屏適配 CSS 移植自 dsh-lan-gate(MIT License),僅保留排版層,不含網關/審批功能。
安裝與啓用¶
方式一:讓 DSH 自行安裝¶
把項目鏈接貼給 DSH,讓它自己安裝即可(目錄頁:https://www.skillhub.cn/plugins/Leon0555/dsh-lan-access)。
方式二:從 npm 安裝¶
需要 pnpm(npm i -g pnpm)。執行:
dsh plugin --profile web add dsh-lan-access
本地開發安裝可用:
dsh plugin --profile web add file:/path/to/dsh-lan-access
安裝後重啓服務生效。若使用 launchd 常駐:
launchctl kickstart -k gui/$(id -u)/com.dsh.web
卸載¶
dsh plugin --profile web remove dsh-lan-access
卸載後 webserver 恢復默認僅 127.0.0.1,polyfill 不再注入。
典型用法¶
- 在本機安裝並重啓 DSH Web 服務。
- 查運行 DSH 設備的局域網 IP(如 macOS 上
ipconfig getifaddr en0)。 - 在同一 Wi‑Fi 下的手機或另一臺電腦瀏覽器打開
http://<IP>:3080。 - 在本機
http://127.0.0.1:3080完成模型、Provider、憑據等配置;遠程設備主要用於對話、看進度、在會話內選模型。
若遠程也需要完整訪問配置平面,README 給出的合規方案是 SSH 本地端口轉發:
ssh -L 3080:127.0.0.1:3080 用戶@MacIP
然後在客戶端訪問 http://127.0.0.1:3080。從服務端視角仍是迴環訪問,不繞過 DSH 的安全柵欄,且自帶 SSH 認證。需開啓 Mac 的「遠程登錄」,並自行評估 SSH 帶來的命令行訪問風險。
適用場景與注意¶
適合誰¶
- 家庭或公司可信內網,想在手機/平板上繼續 DSH 對話、查看即時進度
- 不想爲日常局域網訪問單獨搭 SSH 轉發或內網穿透
- 需要在窄屏設備上獲得可讀、可點的 Web GUI 排版
安全提醒¶
綁定 0.0.0.0 後,同一網絡內任何設備都能連接 DSH,且無認證,等於整網都能觸達本機 DSH 進程的命令執行能力。僅限家庭/公司可信內網使用,公共 WiFi 請勿開啓。
建議:路由器/防火牆限制來源 IP;出外網訪問請疊加 Tailscale 等隧道。
插件以當前 DSH 進程權限運行。安裝前應閱讀源碼與 MIT 許可證,確認行爲符合你的安全預期。
遠程訪問限制(本插件有意不繞過)¶
DSH 把「配置平面」——設置頁、模型/Provider 管理、憑據、Agent Preset、目錄選擇、llm.discoverModels 等——硬性限制爲僅本機迴環(127.0.0.1)可訪問。即使本插件將 Web 服務綁定到 0.0.0.0,從局域網 IP 訪問這些接口仍會返回 HTTP 403。這是 DSH 官方安全邊界(dsh-client-connection 的 PRIVILEGED_METHODS);trustedHosts 白名單只是 DNS 反綁定柵欄,不是認證。
本插件不繞過該柵欄,也不提供代理去改寫請求頭。
| 遠程(局域網)可用 | HTTP 403(僅本機迴環) |
|---|---|
| 對話、即時進度 | 設置頁(模型、Provider 配置) |
會話內模型選擇(llm.providers / llm.models) |
憑據管理(credentials.*) |
| 會話歷史、工作區瀏覽 | Agent Preset 管理 |
| 其餘正常 API | 目錄選擇(host.pickDirectory)、llm.discoverModels |
技術說明¶
- 綁定:bundle patch 覆蓋
webserver行(host: 0.0.0.0,port 保持ctx.webStartup.port ?? 3080)。 - polyfill:
tapIndex向index.html<head>注入內聯腳本;非安全上下文才生效。 - 手機適配:同一
tapIndex注入<style>(@media (max-width: 820px)),選擇器針對 DSH 的data-slot、data-chat-flow、data-composer-card、role="dialog"等穩定結構屬性。
結尾¶
dsh-lan-access 用三個改動解決局域網訪問 DSH 的實際障礙:綁定 0.0.0.0、補全 crypto.randomUUID、窄屏排版適配。它明確不開放配置與憑據域,適合在可信內網做「遠程對話、本機管配置」的分工。
- 社區目錄:https://www.skillhub.cn/plugins/Leon0555/dsh-lan-access
- GitHub:https://github.com/Leon0555/dsh-lan-access
- npm:https://www.npmjs.com/package/dsh-lan-access