前言¶
DeepSeek Harness 桌面版把 Web 服务绑在 127.0.0.1 上,并带有浏览器会话校验。同一台机器以外的手机、平板或另一台电脑,即使用浏览器也打不开这套界面。常见做法是手动改绑定、搭反向代理或自己写转发,步骤多,也容易和 DSH 的会话机制打架。
社区插件 dsh-device-link(目录名 wwj-wwj1/dsh-device-link)在 DSH 侧边栏提供「设备互联」:在本机起一个带鉴权注入的转发网关,同一 WiFi 内的设备经局域网入口访问;需要跨网时,可配合 EasyTier 组网入口。关掉开关即停网关、收回端口,不改动 DSH 本体,也不改 EasyTier 已有配置,只做启停。维护者为 wwj-wwj1,分类为 admin-security,源码与说明见 GitHub 仓库,社区目录页为 SkillHub 插件页。DeepSeek Harness 生态主张「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。
当前版本 1.0.0,README 写明仅支持 Windows 10 / 11,许可为 MIT。
这是什么¶
一句话:在 DSH 左下角增加 WiFi 图标,点开「设备互联」卡片,用三个开关控制局域网与 EasyTier 组网两类入口;外部设备通过 HTTP/WebSocket 连到本机网关,网关再转给本机 DSH 实际端口。
插件不修改 DSH 本身。局域网侧默认暴露形如 http://<本机局域网 IP>:8900/ 的地址;组网侧为 http://<EasyTier 虚拟 IP>:8899/。未安装 EasyTier 时仍可使用局域网互联,组网相关 UI 会置灰。
核心功能¶
三个开关¶
| 开关 | 作用 | 打开后 |
|---|---|---|
| 互联 | 总闸 | 局域网互联与组网互联一并打开 |
| 局域网互联 | 同 WiFi / 同网段设备 | http://<本机局域网 IP>:8900/ |
| 组网互联 | 经 EasyTier 组网的设备,并启停 EasyTier 服务 | http://<EasyTier 虚拟 IP>:8899/ |
关掉开关会停网关进程;组网互联关闭时还会停 EasyTier 服务。组网打开时若 EasyTier 在跑但虚拟网卡未拿到 IP,插件会尝试重启服务。「关掉再打开」等价于重启组网。默认局域网端口 8900、组网端口 8899;若端口被占用,局域网入口最多顺延 5 个(可在配置里改 portRetry),卡片会显示实际端口。
转发网关与安全边界¶
网关脚本为随包分发的零依赖 Node 脚本 lib/gate.cjs。对外部请求,它会从 ~/.dsh/.credentials.yaml 读取本机会话密钥,签出有效的 DSH 浏览器会话 Cookie,并改写 Host / Origin、去掉代理类请求头,使 DSH 视为本机直连;静态资源加 no-store,减少手机端缓存旧前端。DSH 桌面版端口每次重启可能变化,插件通过 webServer.getOrigin() 把当前真实端口传给网关。
README 中的安全警告需要认真对待:能连上入口端口的人,在效果上拥有与你本机 DSH 相同的权限(会话、工具等)。密钥仅在本地内存与请求头中使用,不会外发,但网络侧仍应视为高信任边界。建议只在可信网络短时开启,不用即关;必要时在 Windows 防火墙把入口端口限制到指定网段或设备。组网生成的 easytier.toml 与 ~/.dsh/device-link.state.json 中网络密码为明文(EasyTier 启动需要),勿提交到公开仓库。
EasyTier 与卡片上的准备工作¶
组网互联依赖 EasyTier。卡片会在「组网互联」下自动检测状态:未检测到时可 用 winget 安装(有 winget 时)或 打开下载页;已装未配置时可 生成配置(写入 %LOCALAPPDATA%\dsh-device-link\easytier.toml,网络名、密码、网段当场随机);已配置则显示网络名、虚拟 IP、复制邀请、注册服务 等。注册服务会触发 UAC,将配置注册为 Windows 服务并添加防火墙规则;若本机已有同名 EasyTier 服务,重装会替换其启动配置,需重启服务后生效。
生成配置时默认写入 7 个公共 meetPeers 汇合点,可改为自建 tcp:// / udp:// / ws:// 节点。两台设备要组网时,需交换「复制邀请」内容或统一网络名与密码。
宿主 API 与状态恢复¶
插件在宿主侧提供:
GET /api/device-link/status.json(兼容/device-link/status.json)POST /api/device-link/toggle.json,body 形如{"switch":"master|lan|mesh","on":true}
上述路由会校验 Host,只接受本机或已知入口地址,降低被跨站滥用的面。配置项 restoreState 默认为 true:DSH 重启约 2 秒后尝试恢复上次打开的通道。
安装与启用¶
要求:Windows 10 / 11、Node.js ≥ 20。EasyTier 为可选。插件以当前 DSH 进程权限运行;安装前宜自行审阅源码与 MIT 许可证。
在 DSH 内用官方插件管理器安装(路径换成你本机包目录的绝对路径):
# 指向解压或 clone 后的插件目录
plugin_manager install_bundle target="C:\path\to\dsh-device-link"
# 或先 npm pack 再装 tgz
npm pack
plugin_manager install_bundle target="C:\path\to\dsh-device-link-1.0.0.tgz"
装好后侧边栏底部应出现 WiFi 图标;若没有,重启一次 DSH。默认配置写在 cordis.patch.yml 的 config: 下,安装后也可在 profile 中修改同一段;键包括 lanHost、lanPort、meshPort、meetPeers、restoreState 等,均可留空使用默认值(完整表格见仓库 README)。
典型用法¶
- 安装插件并重启 DSH(若图标未出现)。
- 点击左下角 WiFi 图标,打开「设备互联」卡片。
- 仅同 WiFi 访问:打开 局域网互联(或总闸 互联),在手机浏览器输入卡片显示的
http://<局域网 IP>:<端口>/。 - 异地设备:先按卡片指引安装/配置 EasyTier 并 注册服务,再打开 组网互联,在对端设备加入同一 EasyTier 网络后,访问
http://<虚拟 IP>:8899/(端口以卡片为准)。 - 用毕关闭对应开关,网关与(组网时)EasyTier 服务按 README 描述停止。
手机连不上时,README 建议顺序:确认同网段、开关已开且地址在本机浏览器可开、检查 Windows 防火墙(公用/专用配置文件与 node.exe 或 DSH 可执行文件的入站规则)。组网问题则查 EasyTier 服务状态、et_* 网卡虚拟 IP 与数据端口 11010 上的对端连接。若 EasyTier 服务配置了失败自动重启,普通 sc stop 可能几秒后又起来,卡片会提示;需管理员清空自愈策略时,仓库 scripts/ 提供一键 .cmd(详见 README)。
适用场景与注意¶
适合:已在 Windows 上跑 DSH 桌面版,需要在同一局域网用手机/平板临时操作同一套 DSH;或已与信任方通过 EasyTier 组网,需要从异地浏览器访问本机 DSH。
不适合或需谨慎:非 Windows 环境(插件硬依赖 sc.exe / netstat / tasklist);公司网、公共 WiFi、共享宿舍等不可信网络长期开入口;把入口暴露给未信任的人。没有独立登录页,安全模型是「可信网络 + 知道端口 + 网关代签会话」。
已知限制(来自 README):仅 Windows 验证;EasyTier 须为 Windows 服务形态,GUI 版不会被识别;状态恢复为尽力而为。网关日志默认 %TEMP%\device-link-gate.log。
结尾¶
dsh-device-link 把「本机 DSH 只能 127.0.0.1 访问」收敛成侧边栏三个开关:局域网一键分享、可选 EasyTier 异地入口,关即收回。功能与安全边界以仓库 README 为准;使用前请阅读其中的安全警告与防火墙排查说明。