dsh-wan-peers:跨互联网 DSH 节点发现与加密点对点消息

前言

在 DeepSeek Harness(DSH)里接多台机器协作时,子网内的 UDP 广播只能覆盖同一局域网。公网没有固定 IP、也不想做端口映射时,需要一种不依赖 NAT 穿透的「会合」方式,同时又不能把明文挂在第三方信道上。

dsh-wan-peers 是社区维护者 Myco-Lee 提交的联网类插件:两台机器只要能访问同一个 ntfy 兼容会合服务(默认公共 https://ntfy.sh,也可自建),即可互相发现节点并收发加密文本。它与同作者的 dsh-lan-peers 是两个独立插件——后者靠 UDP 广播,只在同一子网有效。

本文按安装、配对、日常调用与安全边界说明用法;事实以 GitHub 仓库 README 为准。插件目录页见 SkillHub。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

一句话:dsh-wan-peers 通过 ntfy 兼容的 pub/sub 做跨网节点发现,正文用 AES-256-GCM 端到端加密,会合服务侧仅见密文。

  • 维护者:Myco-Lee
  • 分类:联网工具
  • 许可证:MIT(package 版本 0.2.0)
  • 运行要求:Node.js >= 18

节点身份在首次运行时生成 uuid,写入 ~/.dsh/wan-peers/identity.json。接收侧默认使用长连接订阅(stream 模式),一条连接处理全部消息,避免反复轮询。

核心能力

传输与加密

  • 会合通道:ntfy 兼容服务,默认 https://ntfy.sh,配置项 service 可改为自建实例。
  • 加密:AES-256-GCM;密钥由 room + secret 经 scrypt 派生。
  • 与局域网插件的区别:不依赖端口映射与公网 IP,只要求双方能访问同一会合服务。

Agent 工具

插件向 DSH 注册下列工具(供智能体或 CLI 调用):

工具 作用
wan_pair action=show/import/reset:生成配对码、导入并热切换房间、清除配对
wan_room 房间号、会合服务、本机 id/名字、对端数、同步与退避状态
wan_peers 列出房间内对端(在线/离线)
wan_send 向指定对端发送加密文本(peer 支持 id、名字、片段)
wan_inbox 拉取收件箱(limit、mark_read)
wan_ping 立即广播心跳并拉取一次消息

公共 ntfy.sh 额度(免费访客)

若长期使用默认公共会合服务,需留意 README 中记载的限制:单条消息 4096 字节、请求速率约 12 次/分钟、每日 250 条消息、单 IP 每日流量 200 MB。超限会返回 429 limit reached;插件指数退避(15s 起,翻倍,上限 300s),wan_room 中可见 backoffUntil。长期在线建议自建 ntfy 或选用付费计划。插件默认 announceMs: 0,不做定时心跳,以免耗尽公共每日额度;若需持续可见,可将 announceMs 设为 300000(5 分钟一次)。

安装与启用

README 给出的安装方式为本地链接或打包文件,装完后建议重启一次 DSH。

先用 dsh plugin --profile desktop add 指向本地插件目录:

dsh plugin --profile desktop add "link:D:\99-DP-D\01-代码项目\dsh-wan-peers"

或先打包再安装 tgz:

npm pack .
dsh plugin --profile desktop add "file:D:\99-DP-D\01-代码项目\dsh-wan-peers\dsh-wan-peers-0.2.0.tgz"

检查启动日志,期望出现 hub 与 tools 注册信息:

Get-Content ~\.dsh\wan-peers\boot.log -Tail 20
# 期望: hub started room=... mode=stream / stream connected / tools registered

无图形界面时可用 headless CLI 验证(需 DEEPSEEK_API_KEY):

dsh --profile headless headless "调用 wan_room 看看配置"

注意:插件在 DSH 进程权限下运行,安装前应阅读源码与 MIT 许可证,确认会合服务地址与 secret 是否符合你的安全策略。

典型用法:配对与收发

方式 A:配对码(推荐)

在已配置好的一台机器上导出配对码:

wan_pair action=show

将返回的 base64url 配对码发到另一台机器并导入:

wan_pair action=import code=<配对码>

会写入 ~/.dsh/wan-peers/pairing.json 并热切换房间,无需重启。用 wan_peers 查看对端;清除配对用 wan_pair action=reset。

方式 B:手写配置

两台机器在各自 profile 的 cordis.patch.yml 中写入相同的 room 与 secret,例如:

- id: dsh-wan-peers
  config:
    room: my-team-room-815c8824
    secret: 至少八个字符的口令

改配置会触发热重载;首次安装仍建议重启一次。任一端调用 wan_ping 广播心跳并刷新列表;对端出现在 wan_peers 后,用 wan_send 发送,wan_inbox 收取。

完整配置项参考

- id: dsh-wan-peers
  config:
    service: https://ntfy.sh
    room: dsh-wan-815c8824
    secret: ec40e0ee...
    name: LMM
    mode: stream
    announceMs: 0
    pollMs: 5000
    ttlMs: 60000
    maxTextChars: 2000
    maxTextBytes: 2600
    maxInbox: 500

room 须为 [A-Za-z0-9_-]{4,64};secret 至少 8 字符,是信任根。密文体积受 maxTextBytes 约束,以免超过 ntfy 单条 4096 字节限制。

适用场景与注意

适合:需要在不暴露公网 IP、不做端口映射的前提下,让多台 DSH 节点跨互联网发现彼此并交换短文本(例如远程协作触发、跨机房 Agent 互通)。与同网 dsh-lan-peers 互补:局域网用 UDP,跨网用本插件。

安全边界(来自 README):

  • 端到端加密只保护正文;会合服务仍可见房间名、时间、大小与频率等元数据。
  • 房间号应视为不可猜测的频道名;泄露 room + secret 等同于房间对任意人开放。
  • secret 宜随机且足够长;公共服务 ntfy.sh 不宜承载高度敏感内容,严隔离请自建 ntfy。

兼容性:README 记载已在 DSH 0.2.2-rc.1(cordis 4.1.0)与 0.2.1-rc.5(cordis 4.0.5)上验证。

结尾

dsh-wan-peers 把跨网发现收敛到「共享 ntfy 会合 + 本地 scrypt/AES 加密」一条路径,并通过 wan_pair 降低双机对齐 room/secret 的成本。部署前权衡公共 ntfy 额度与元数据暴露,按需自建会合服务。

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

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

小夜