dsh-device-link:把本機 DSH 一鍵開給手機與異地設備

前言

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)。

典型用法

  1. 安裝插件並重啓 DSH(若圖標未出現)。
  2. 點擊左下角 WiFi 圖標,打開「設備互聯」卡片。
  3. 僅同 WiFi 訪問:打開 局域網互聯(或總閘 互聯),在手機瀏覽器輸入卡片顯示的 http://<局域網 IP>:<端口>/。
  4. 異地設備:先按卡片指引安裝/配置 EasyTier 並 註冊服務,再打開 組網互聯,在對端設備加入同一 EasyTier 網絡後,訪問 http://<虛擬 IP>:8899/(端口以卡片爲準)。
  5. 用畢關閉對應開關,網關與(組網時)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 爲準;使用前請閱讀其中的安全警告與防火牆排查說明。

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

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

小夜