前言¶
DeepSeek Harness(DSH)的 Web 界面默认适合本机使用。如果想在局域网内的另一台电脑、手机上访问,或者在配置路由器端口映射后从互联网访问,通常会遇到两个问题:传输是否加密,以及访问前是否有登录保护。
dsh-gateway 是一个 DSH 插件,用来为 DSH Web 界面加一层「HTTPS 加密 + 账号登录」的远程访问网关。它作为 dsh 插件安装,不需要额外部署独立反代、证书服务或登录服务。安装后,DSH 设置页会出现 Remote Gateway 卡片,可以启用、重启、修改监听地址与端口,并管理登录账号。
这是什么¶
仓库路径为 clarknu/dsh-gateway,许可证为 MIT。
它做的事情可以概括为:
- 为 DSH Web 界面提供自包含的 HTTPS + 登录远程访问网关。
- 作为 dsh 插件安装,无需任何外部程序。
- 默认只在本机
127.0.0.1:3443监听,并且没有任何账号。 - 配置监听地址与账号后,可让局域网设备或配置端口映射后的互联网设备访问。
- 支持多站点白名单,一个网关可以同时服务多个域名或 IP。
核心能力¶
下面列出该插件已提供的主要能力。
-
HTTPS 加密传输
有域名时可以使用自己的证书;没有域名、通过 IP 直连时会自动生成证书。 -
登录保护
访问前必须先登录。账号、密码、会话有效期可配置,登录失败会自动限速。密码不以明文存储,推荐保存密码哈希。 -
会话管理
登录令牌在有效期内可用。需要让所有已登录设备退出时,可以在设置页执行“退出所有登录”,使所有会话失效。 -
多站点白名单
可以通过sites[].hosts指定实际使用的域名或 IP。网关只响应白名单内的域名或 IP。 -
远程体验与本地一致
实时消息等长连接功能可以正常工作。反向代理默认使用 loopback 伪装模式,自动改写Location头,并支持 WebSocket 升级。 -
配置热生效
修改配置后无需重启即可生效。设置页与settings.yaml的gateway:段可以互相配置,二者都经过校验并持久化。 -
可选 Windows 托盘启动器
tools/dsh-tray/附带一个 Windows 托盘小工具,用于隐藏命令行窗口,并通过菜单管理 DSH 实例。
安装与启用¶
先确认当前 DSH 插件安装方式可用。下面的命令用于安装 dsh-gateway 插件。
dsh plugin --profile web add dsh-gateway
执行后,重启 web 应用。重启后,网关默认只在本机 127.0.0.1:3443 监听,并且没有任何账号。这个默认状态是 fail-closed:未配置账号前,别人无法登录。
如果只需要本机访问,可以保持默认状态;如果希望局域网或互联网访问,需要按下面的步骤配置监听地址和账号。
典型用法¶
下面以“局域网内另一台机器访问”为例。
- 配置监听地址和登录账号。
可以直接编辑$DSH_HOME/settings.yaml,也可以在 DSH 设置页的 Remote Gateway 卡片中操作。
在 settings.yaml 中配置 gateway: 段:
gateway:
listenHost: '0.0.0.0'
users:
admin: 'scrypt$...'
上面的 admin 后面的值应该是密码哈希,不能直接使用明文密码。
- 生成密码哈希。
使用仓库中的脚本生成哈希值:
node scripts/hash-password.mjs '你的密码'
生成后,把输出值填入 users 对应账号的值中。
- 在另一台设备浏览器中访问网关地址。
假设 DSH 所在机器的局域网 IP 是192.168.1.10,端口使用默认的3443,则访问:
https://192.168.1.10:3443
首次访问会提示自签证书,信任后进入登录页面,然后输入账号密码。
- 如果需要从互联网访问,配置路由器端口映射。
将外部端口转发到本机的gateway.port,例如默认的3443。访问时使用公网 IP 或已解析到本机的域名。使用域名时,应配置自己的证书。
配置要点¶
所有配置都可以写在 $DSH_HOME/settings.yaml 的 gateway: 段中。下面的配置展示了主要字段:
gateway:
enabled: true
listenHost: '127.0.0.1'
port: 3443
upstream: ''
sessionDays: 30
loginFailLimit: 5
lockoutSeconds: 60
users:
admin: 'scrypt$...'
sites:
- hosts: ['你的域名', '你的IP']
cert: '证书路径'
key: '密钥路径'
各字段含义如下:
enabled: 设为false时完全停用网关。listenHost:127.0.0.1表示仅本机可达;0.0.0.0表示监听所有网卡,允许局域网访问。port: 对外端口,默认是3443。upstream: 留空表示自动跟随 DSH web 服务端口。sessionDays: 会话有效期,单位是天,默认是 30 天。loginFailLimit: 每个 IP 连续登录失败次数上限。lockoutSeconds: 超过失败次数上限后的锁定秒数。users: 登录账号,值建议使用密码哈希。sites: 站点白名单,只响应这里列出的域名或 IP。sites[].hosts: 支持*.example.com这类通配写法。cert/key: 证书与密钥路径,留空时自动生成证书。
注意:sites[].hosts 只应列出实际使用的域名或 IP。不要把不确定的地址加入白名单。
设置页卡片¶
安装后,DSH 设置页会出现 Remote Gateway 卡片。可以在卡片中完成以下操作:
- 查看运行状态,例如运行中、已停用、异常、重启中。
- 启用或停用网关。
- 一键重启。
- 修改绑定 IP 与端口。
- 新增、修改、删除登录账号。
- 执行“退出所有登录”,让所有已登录设备立即退出。
- 查看最近日志。
设置页保存的密码会自动哈希,不需要手动执行密码哈希生成命令。证书、多站点、登录限速等配置仍然在 settings.yaml 的 gateway: 段中维护。
安全基线¶
下面是使用前需要重点确认的几项。
-
不要保留示例凭据
配置中不要保留admin / change-me这类示例凭据。只要该凭据仍生效,网关在非本机监听地址下会拒绝启动。 -
密码不要明文存储
手写配置时使用密码哈希:
node scripts/hash-password.mjs '你的密码'
在设置页保存密码时,系统会自动哈希。
- 建议 DSH 本体只绑定本机回环地址
这样可以确保所有远程访问都经过 dsh-gateway 的登录保护。可以在 web profile 的cordis.patch.yml中把 webserver 锁定到127.0.0.1:
- id: webserver
config:
host: '127.0.0.1'
port: 3080
-
站点白名单只列真实使用的域名或 IP
sites[].hosts是网关响应的域名/IP 白名单,范围越小越好。 -
会话与改密码的关系要分清
登录令牌在到期前有效,默认有效期为 30 天。修改密码不会让已经登录的设备自动退出。若要让所有客户端重新登录,需要执行“退出所有登录”。若要撤销单个用户,删除对应账号即可。 -
互联网访问依赖路由器端口映射
路由器需要把外部端口转发到本机的gateway.port。如果使用域名,域名需解析到本机,并配置证书。
反向代理行为¶
网关默认以 loopback 伪装模式转发请求。上游服务看到的是 127.0.0.1:<upstreamPort> 的 Host/Origin,而不是客户端的真实域名。
这样带来几个实际效果:
- DSH 的 API 信任围栏无需额外启动参数即可放行,包括凭据、设置等特权 API。
- 不需要再给
dsh web传--trusted-host。 - 上游返回的绝对
Location头会被自动改写回客户端的公开地址,例如https://<clientHost>/...。 - WebSocket 升级走同一转发逻辑,不需要额外配置。
sec-fetch-site: cross-site的跨站请求仍会被上游拒绝,CSRF 防护不受影响。
开发与运行要求¶
package.json 中声明 Node 版本要求为 >=22.0.0,许可证为 MIT。
开发时可以在仓库目录中执行:
npm install
npm test
仓库中的主要目录如下:
lib/:核心逻辑,包括认证、代理、证书、HTTPS 服务器,与插件框架无关,可独立测试。dsh/index.js:插件封装,包括配置解析、生命周期、热重载、安全守卫。client.js:设置页卡片,运行在浏览器端。scripts/:配套脚本,例如hash-password.mjs用于生成密码哈希。tools/dsh-tray/:可选 Windows 托盘启动器。
适用场景与注意¶
dsh-gateway 适合以下场景:
- 想在局域网内的电脑、手机、平板上访问 DSH Web 界面。
- 想通过路由器端口映射从互联网访问 DSH Web 界面。
- 希望远程访问同时具备 HTTPS、登录保护、会话失效和多站点白名单。
- 不想再额外部署一套反代、证书管理和登录系统。
使用前需要确认:
- 本机与访问设备在同一网络时,
listenHost需要设为0.0.0.0,且端口未被防火墙拦截。 - 从互联网访问时,路由器必须完成端口映射。
- 使用域名时,域名需要解析到本机,并配置证书。
- 作为 DSH 插件加载后,它会随当前 dsh 进程运行;安装前应检查源码、许可和配置项。
结尾¶
dsh-gateway 的价值在于把“远程访问 DSH Web 界面”这件事收进一个插件:安装后提供 HTTPS、登录保护、会话管理、多站点白名单和设置页操作入口。默认只监听本机且不配置账号,属于 fail-closed 的安全起点;配置完成后,局域网和互联网访问都可以走同一套登录与证书策略。
相关链接:
- GitHub 仓库:
https://github.com/clarknu/dsh-gateway - 插件线索地址(未在本次抓取资料中直接核验):
https://www.skillhub.cn/plugins/clarknu/dsh-gateway