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 額度與元數據暴露,按需自建會合服務。

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

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

小夜