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