dsh-lan-proxy:局域网访问 DSH Web UI,并修复同源 Referer

前言

DeepSeek Harness(DSH)的 Web 管理界面默认只监听本机回环地址。想在手机或局域网另一台机器上打开同一套 UI,需要把 HTTP/HTTPS 与 WebSocket 转到 127.0.0.1:3080,同时把请求头改写成浏览器与 /api 信任围栏能接受的形态。社区里上游包 @wingsky-1/dsh-lan-proxy 已做 Host、Origin 重写,但在 0.2.10 仍漏掉同源 Referer,部分插件设置页会长期 403。下面介绍维护者 yuweitk 的非官方 fork:yuweitk/dsh-lan-proxy,在相同代理能力上补一层 Referer 修复,并放宽 peer 版本范围以适配较新的 DSH 运行时。

这是什么

dsh-lan-proxy 是 DSH 的联网类插件(社区目录归类为联网工具)。它在 0.0.0.0:<port> 监听,将 HTTP/HTTPS 与 WebSocket 转发到回环 Web 服务器(默认 127.0.0.1:3080),重写 Host、Origin,并在本 fork 中额外重写与入站 Host 同源的 Referer,以便经局域网 IP 访问时仍能通过同源校验。

本仓库为上游 wingsky-1/dsh-plugin-hub 中 packages/dsh-lan-proxy v0.2.10(commit 27da6bd,MIT)的 fork,包名仍为 @wingsky-1/dsh-lan-proxy,安装后会原地替换同名插件。README 标明:非官方 fork,问题请提到本仓库,勿打扰上游作者;上游合并等价修复后应换回上游。

为什么需要这个 fork

上游 0.2.10 只改写 Host 和 Origin。浏览器在同源 GET 时可能不带 Origin,只带 Referer: http://<局域网IP>:<port>/…。代理若把 Host 改成 127.0.0.1:3080 而 Referer 仍指向局域网地址,上游会看到「回环 Host + 局域网 Referer」。按 Referer 的 authority 与 Host 比对做同源校验的插件(例如 dsh-bili-scroll 的 sameOriginOk)会返回 403 只接受本机同源请求:Web UI 壳子正常,个别插件设置页反复读不到配置。

本 fork 在 rewriteHeaders() 中增加规则:仅当 Referer 的 authority 等于入站 Host 时,将 Referer 改写到目标回环地址(保留 path/query);跨站 Referer 不改动;没有 Referer 则不凭空补上。

进来的请求:Host: 192.168.10.4:3081   Referer: http://192.168.10.4:3081/settings
转发到上游:Host: 127.0.0.1:3080     Referer: http://127.0.0.1:3080/settings

进来的请求:Host: 192.168.10.4:3081   Referer: https://evil.example/x
转发到上游:Host: 127.0.0.1:3080     Referer: https://evil.example/x   ← 跨站不“洗白”

Origin 行为与上游一致:存在则改写为 http://<targetAuthority>。

核心能力(与上游一致部分)

  • 在局域网侧暴露 DSH Web UI:HTTP/HTTPS 与 WebSocket/wss 转发到回环服务;HTTPS 默认并存(如 3443),证书可配置或自动生成自签名(细节见上游 README 快照 README.upstream.md)。
  • 安全模型摘要:targetHost 仅允许回环地址,配置与运行时双重校验(防 SSRF);只接受 Host 为 IP 字面量或 localhost 的请求(DNS 重绑定防护)。
  • 经本代理访问时,远程设备在浏览器信任围栏内可读写服务器 settings(含凭据类数据);Referer 补丁只处理同源 Referer,不放宽跨站请求。请确保局域网环境可信。

DSH 版本兼容

上游 0.2.10 将多个 @deepseek-ai/dsh-* peer 钉在精确版本 0.2.1-rc.2,在 DSH 0.2.2-rc.1 等版本上可能被判定不兼容,需 dsh plugin allow-version 或无法激活。

本 fork 将 @deepseek-ai/dsh-*(7 个)改为 ^0.2.1-rc.2,@deepseek-ai/cordis 改为 ^4.0.5。资料记载:DSH 0.2.1-rc.2 与 0.2.2-rc.1 实测可满足范围,一般无需 allow-version。插件主要使用 webServer、connection 等接口;若未来 0.3.x 接口变化,维护者表示会再调整。

安装与启用

仓库地址:https://github.com/yuweitk/dsh-lan-proxy。社区目录页:https://www.skillhub.cn/plugins/yuweitk/dsh-lan-proxy。

安装命令(须使用 web profile):

dsh plugin --profile web add github:yuweitk/dsh-lan-proxy

# 安装/更新后必须重启一次 dsh web(bundle 层只在启动时组合)

包名仍为 @wingsky-1/dsh-lan-proxy,会替换已安装的同名插件,cordis.patch.yml 里的 entry 无需修改。卸载:

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

lib/ 为已编译产物,直接安装即可运行,无需在本仓库内构建。

典型用法与注意

  1. 在运行 DSH Web 的机器上安装插件并重启 dsh web。
  2. 用局域网 IP 与插件配置的端口访问 UI(具体端口与 HTTPS、证书项见上游 README 中的配置章节,本 fork 行为与上游一致,Referer 相关说明以本仓库 README 为准)。
  3. 若仍见版本不兼容提示,先核对当前 DSH 与 peer 范围;若使用其他 fork 或旧版上游,需对照是否缺少 Referer 重写。

适用场景:需要在平板、同事电脑或机房内网设备上操作 DSH Web UI,且依赖 /api 与各插件设置页同源校验的场景。

安装前检查:插件以当前 dsh 进程权限运行,会扩大 Web UI 在局域网的可达面;安装前应阅读源码与 MIT 许可证(版权归属上游 wingsky-1)。本 fork 版本标识为 0.2.10-fork.2(package.json),表示基于上游 0.2.10 基线的本地补丁。

结尾

yuweitk/dsh-lan-proxy 在保留上游局域网代理能力的同时,补上同源 Referer 重写并放宽 DSH peer 约束,适合经 LAN 访问时插件设置页因同源 403 无法加载的情况。上游合并等价修复后建议换回官方发布;详情与架构说明见 GitHub 仓库 与 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye