DSH 禁止使用 --host 0.0.0.0,這導致開發者很難在本地或局域網內直接訪問 dsh 的網頁界面。dsh-lan-proxy 插件運行在 dsh 進程內部,對外提供 HTTP/HTTPS 監聽,將請求轉發至 dsh 的迴環服務。它是一個純 ESM 插件,支持雙棧監聽,能處理 TLS 證書和 IP 白名單。
安裝¶
通過官方插件命令安裝,安裝後需重啓 dsh 進程。
# 從 GitHub 安裝
dsh plugin --profile web add github:mariGoIds/dsh-lan-proxy#v1.1.0
# 或從本地目錄安裝
dsh plugin --profile web add file:/path/to/dsh-lan-proxy
核心功能¶
插件運行在 dsh 進程內,默認僅監聽本機。開啓配置後,可對外提供 HTTP/HTTPS 轉發,主要特性包括:
- 雙棧監聽:同時監聽 IPv4 和 IPv6。
- 訪問控制:支持 IP 白名單(前綴/精確 IP)免密直連。
- TLS 支持:默認監聽端口 3443,支持證書,證書缺失或端口占用時只跳過對應監聽,不終止 dsh。
- 一次性登錄碼:生成僅限本機查看的登錄碼,用一次即作廢,適合手機等臨時設備。
- 設備管理:爲每臺設備分配獨立令牌,支持單獨撤銷和有效期控制。
- 日誌與適配:自動脫敏日誌中的敏感參數;修復 dsh 設置頁在反向代理下的持久化問題(patchClientBundle)。
配置方式¶
配置通過 cordis.patch.yml 覆蓋。默認安全策略爲空(無白名單、無登錄碼)。
- id: lan-proxy
config:
listenHost: '::'
httpListenHost: '127.0.0.1'
listenPort: 3080
tlsPort: 3443
backendHost: 127.0.0.1
backendPort: 3081
allowedPrefixes: ['192.0.2.'] # 免密可信網段
allowedIps: [198.51.100.25]
cookieName: dsh_auth
accessLog: true
accessLogFile: '' # '' = 僅進 dsh 日誌器;非空則落盤
certDir: '' # '' = $DSH_HOME/certs
forwardUntrusted: false # true = 非白名單放行給 dsh
patchClientBundle: true
autoLogin: 'trusted' # 'off' | 'trusted' | 'always'
codeLogin: false
codeLength: 6
codeLeaseMinutes: 5
codeMaxFails: 5
codeGlobalMaxFails: 20
codeLockMinutes: 10
codeSessionDays: 30
maxDevices: 20
deviceStateFile: '' # '' = $DSH_HOME/lan-proxy-devices.json
關鍵配置說明¶
listenHost: 綁定地址,::表示雙棧(IPv4 + IPv6)。autoLogin: 自動代取 dsh 網頁 token。'off'不干預,'trusted'(默認)僅對白名單自動登錄,'always'對所有來源自動登錄。開啓'always'時必須配合 IP 白名單或登錄碼,否則等同於無認證。codeLogin: 開啓一次性登錄碼功能。forwardUntrusted: 決定非白名單來源的處理方式。false返回 403,true放行給 dsh。
訪問判定邏輯¶
插件按以下順序判定訪問權限:
- IP 白名單:如果 IP 在
allowedPrefixes或allowedIps中,直接放行。 - 登錄碼校驗:如果未在白名單且開啓了
codeLogin,檢查設備會話 Cookie,無效則跳轉登錄頁。 - 信任轉發:如果未在白名單且未開啓
codeLogin,根據forwardUntrusted決定是否放行給 dsh。
一次性登錄碼¶
非白名單設備(如手機)可通過一次性登錄碼訪問。在 http://127.0.0.1:3080/__lan_code 或 DSH 設置頁生成。
碼是純數字且租期內有效,必須配合失敗限流。限流分爲兩層:codeMaxFails 按單 IP 計數,codeGlobalMaxFails 按全部來源合計計數。達到全局上限後全局鎖定,並隨時間指數退避(上限 24 小時)。
已授權設備¶
每臺通過登錄碼授權的設備各持一個獨立令牌,可在設置頁單獨撤銷。設備上限由 maxDevices 控制,超出時擠掉最久未使用的。設備表落盤只存令牌的 sha256,明文令牌只存在於瀏覽器 cookie 中。
已知限制與注意事項¶
- 版本鎖定:當前僅兼容 dsh 開發者預覽版,請鎖定版本
#v1.1.0。 - TLS 證書:若使用 IPv6 監聽,證書的 SAN (Subject Alternative Name) 必須包含該 IPv6 地址或域名,否則瀏覽器會報名稱不匹配。
- Bundle 補丁:依賴 dsh 內部實現細節,dsh 大版本升級後建議複查設置頁。
- 日誌清理:訪問日誌文件無自動輪轉,需自行定期清理。
- 安全警告:IP 白名單是免密通道,請勿配置不可信網段;全侷限流可能被用於 DoS 攻擊,攻擊者可故意輸錯把合法用戶擋在門外。
總結¶
對於需要在本地或局域網內管理 DeepSeek Harness 的開發者,該插件提供了輕量級的反向代理方案。所有配置均基於文件,卸載即自動清理。
- GitHub: https://github.com/mariGoIds/dsh-lan-proxy
- 目錄: https://www.skillhub.cn/plugins/mariGoIds/dsh-lan-proxy