dsh-mobile-gate:为 DSH 增加局域网手机访问网关

前言

对于需要从同一局域网手机访问本机 DeepSeek Harness(DSH)Web UI 的场景,通常需要处理设备审批、令牌绑定、限流和移动端排版等问题。dsh-mobile-gate 提供一个独立 Node 网关,反向代理 DSH Web UI,并在访问链路中加入首次访问审批、按设备令牌、每 IP 限流和移动端布局注入。

这是什么

dsh-mobile-gateBernardxu123 维护,许可证为 MIT。它的定位是 DSH 的局域网手机网关:网关监听 0.0.0.0,反向代理 DSH Web UI;首次访问需要本机批准;批准后设备通过 Cookie 领取令牌;同时向代理返回的 HTML 注入移动端适配内容。

核心能力

下面介绍已核实的几项能力:

  • 代理 HTML 时注入 data-lan-device 标记、紧凑排版 CSS 和 crypto.randomUUID polyfill。
  • 首次访问审批:手机第一次访问显示等待本机批准,需要在电脑上手动允许。
  • 批准后生成一次性令牌,一次批准只绑定一个浏览器,令牌无法被其他设备复用。
  • 每 IP 限流,默认每分钟 120 次请求,超限返回 429。
  • 回环地址与本机 LAN IP 直接放行。
  • 网关是独立子进程,不修改 DSH 主服务配置,也不动信任栅栏。
  • 支持 dsh plugin addcordis.patch.yml 静态挂载或动态插件方式安装,移除即终止。

安装与启用

如果已经在本机取得插件目录,可以在该目录中执行安装命令:

dsh plugin --profile web add ./dsh-mobile-gate

项目还支持 cordis.patch.yml 静态挂载或动态插件方式安装。无论使用哪种方式,移除插件后网关终止。

典型用法

启用后,先在电脑浏览器打开管理页:

http://127.0.0.1:3088/lan-gate/admin

然后让手机连接同一 Wi-Fi,访问管理页中列出的地址,例如:

http://192.168.31.108:3088

手机首次访问会显示等待批准。回到电脑管理页的「待批准设备」中,为这台设备选择访问方式:

  • 手机
  • 电脑
  • 自动

点允许后,在手机端刷新页面,即可领取令牌并进入 DSH Web UI。

如果希望在本机直接查询网关状态,可以执行:

curl http://127.0.0.1:3088/lan-gate/status

批准示例如下,其中 kindphone

curl -X POST http://127.0.0.1:3088/lan-gate/action -H 'Content-Type: application/json' -d '{"action":"approve","ip":"192.168.31.125","kind":"phone"}'

配置与状态

默认环境变量如下:

LAN_GATE_PORT=3088
LAN_GATE_HOST=0.0.0.0
LAN_GATE_TARGET_PORT=3080
LAN_GATE_RATE_LIMIT=120

LAN_GATE_PORT 表示网关监听端口,LAN_GATE_HOST 表示监听地址,LAN_GATE_TARGET_PORT 表示 DSH Web UI 目标端口,LAN_GATE_RATE_LIMIT 表示每 IP 每分钟请求上限。

端口被占用时,网关会自动递增尝试,最多增加 20 个端口。设备审批记录持久化在:

~/.dsh/lan-gate-state.json

待批准列表是内存态,重启后需要设备重新访问触发。

适用场景与注意

适合在可信局域网内把 DSH Web UI 接入手机,尤其希望保留本机审批、设备令牌和限流时。使用注意:

  • 网关没有独立认证层,仅限可信局域网使用。
  • DSH Web UI 走明文 HTTP,令牌经 Cookie 传递,请勿跨不可信网络使用。
  • 建议定期在管理页执行全部撤销,并重新审批设备。
  • 插件以当前 dsh 进程权限运行。安装前应检查源码,并确认 MIT 许可证符合你的使用要求。

项目地址

GitHub:

https://github.com/Bernardxu123/dsh-mobile-gate.git
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜