跳到正文
dsh-market 浏览插件 GitHub EN

wingsky-1/dsh-plugin-hub#packages/dsh-lan-proxy

局域网访问 dsh web UI:在 0.0.0.0 监听并把 HTTP/HTTPS 与 WebSocket/wss 转发到回环 web 服务器,带 DNS 重绑定防护与回环-only 上游白名单。

Star 数 ★ 1 分类 远程与移动端 收录于 2026-08-18 npm @wingsky-1/dsh-lan-proxy

安装

在 DeepSeek Harness 里通过 dsh-market 安装

dsh plugin --profile web add dshmarket

或使用命令行

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

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。

README

局域网访问 dsh web UI:在 0.0.0.0:<port> 监听,把 HTTP/HTTPS 与 WebSocket/wss 转发到回环 web 服务器(默认 127.0.0.1:3080)。

  • 重写 Host/Origin 以通过 /api 浏览器信任围栏
  • 仅接受 IP 字面量或 localhost 的 Host 头(DNS 重绑定防护
  • HTTPS 默认并存(3443),证书可配置或自动生成自签名

安装

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

安装后重启一次 dsh web。插件注入 webServer,仅在回环服务器绑定后启动, 并自动解析真实上游端口。

⚠️ 安装即开端口:本插件会在 0.0.0.0:3081(HTTP)与 0.0.0.0:3443 (HTTPS)监听,局域网内所有设备都可访问你的 dsh web。不需要时请 dsh plugin --profile web remove @wingsky-1/dsh-lan-proxy

🔧 内网设备的完整 settings 读写(信任开关):默认内网设备经 lan-proxy 访问时,部分设置接口被宿主 dsh-client-connection 的 loopback 围栏拦截(只读)。 若要内网设备获得完整读写权限,需对宿主打一次显式信任开关(幂等;dsh 升级 重装后需重跑)。先克隆本仓库,然后:

node scripts/patch-connection.ts                          # 自动探测宿主路径
node scripts/patch-connection.ts --bundle <绝对路径>      # 或显式指定 client.js

不执行则内网设备保持只读访问(更安全的缺省)。安全权衡见「安全模型」节。

配置

默认 说明
host 0.0.0.0 监听地址
port 3081 HTTP 监听端口
httpsPort 3443 HTTPS 监听端口
targetHost 127.0.0.1 回环上游主机(仅允许回环地址
targetPort 自动 上游端口(默认取 web 服务器实际绑定端口)
httpsEnabled true 是否并存 HTTPS
tlsCertFile / tlsKeyFile 自定义证书(mkcert 等)
wsCompressEnabled true 是否对命中 wsCompressPaths 的 WebSocket 做压缩桥接
wsCompressPaths /api/events.mux, /api/events.host 参与 WebSocket 压缩的路径白名单

GUI 设置入口:设置 → 插件 → 「局域网访问」卡片(保存即热更新)。

WebSocket 压缩(wss 事件流)

  • 对命中 wsCompressPaths(默认会话事件流 /api/events.mux/api/events.host) 的 WebSocket 升级,lan-proxy 做终结 + permessage-deflate:浏览器段压缩 (浏览器自动协商并解压)、DSH 段明文,再双向桥接转发。
  • 收益:events.mux/events.host 是 dsh 实时事件流(会话轨迹/进度),未压缩时 经远程/慢链路访问流量大;permessage-deflate 实测约省 75~79%
  • DSH 服务端即使未来自身开启 permessage-deflate,这里 DSH 段固定不协商压缩, 两段各自独立,不会双重压缩、不冲突
  • 其余 WebSocket 路径保持 TCP 字节透传(不受影响)。

HTTPS 支持

  • 证书来源(两级):① 配置 tlsCertFile/tlsKeyFile(正式证书或 mkcert 本地 CA,浏览器零警告);② 自动生成自签名证书(系统 openssl 生成并缓存到 <DSH_HOME>/lan-proxy/,私钥权限 0600)
  • 自签名证书首次访问需手动"继续访问";内网设备零警告推荐 mkcert

安全模型

  • 出站目标白名单(L1)targetHost 仅允许回环地址(localhost / 127.0.0.1 / ::1),配置层与运行时入口双重校验——防止开放转发/SSRF
  • DNS 重绑定防护:只接受 Host 为 IP 字面量或 localhost 的请求,域名一律 403/断开;IP 字面量在任何端口都安全
  • 凭据面:dsh settings RPC 仅回环可读写;通过本插件访问的远程设备在 浏览器信任围栏内可读写服务器 settings(含凭据类数据)——确保你的局域网 可信,或禁用该插件
  • 私钥权限:自动生成的自签名私钥落盘 0600
  • 开放端口提醒:0.0.0.0 监听对局域网所有设备可见

验证

# 健康检查(回环)
curl -s http://127.0.0.1:3081/api/lan-proxy/health

# 局域网访问(在另一台设备上)
curl http://<本机局域网IP>:3081/api/dsh-gzip/health

已知限制

  • HTTPS 需要系统 openssl(不可用且未配置证书文件时,HTTPS 通道自动降级关闭)
  • 换网段导致 IP 变化时,自签名证书需重新生成或更新 config.json
  • 命中 wsCompressPaths 的 WebSocket 走「终结 + 压缩桥接」(多一跳、额外压缩 CPU), 仅建议对 events 这类大流量路径开启;其余 WebSocket 保持透传

License

MIT

内容来自项目 README(GitHub)↗