前言¶
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