dsh-tunnel:在 DSH 側欄開關自有域名的 Cloudflare 命名隧道

前言

在 DSH Web 模式下,界面默認只監聽本機 http://127.0.0.1:3080。若要在公網用自有域名訪問同一套 Web UI,常見做法是自行維護 cloudflared,在終端裏啓停進程,並處理 DSH 對公網 Host、一次性 launch token 等約束。下面介紹的 ywildan/dsh-tunnel(倉庫內 npm 包名 dsh-helux-tunnel)把這些操作收進左側欄 Helux Tunnel 面板:對已創建好的 命名隧道 做顯式開關,不替你建隧道、不用 Quick Tunnel,流量也不經過作者域名。

這是什麼

由維護者 ywildan 發佈的 DSH 插件,面向 Cordis 插件模型:Host 側爲 Node 服務,Client 側注入 Web 頁面模塊。當前倉庫 package.json 版本爲 2.3.0,MIT 許可證;README 寫明適配 DSH 0.2.1-rc.5 與 0.2.2-rc.1。

插件只做一件事:在你本機已有 cloudflared、已有隧道憑據與 config.yml 的前提下,從側欄把命名隧道拉起或關掉。開啓後,公網 hostname 指向本地 DSH Web UI;關閉後,訪問方式回到本機 http://127.0.0.1:3080。

核心功能

側欄開關與默認關閉

  • 加載插件及每次 DSH 啓動、重啓時,隧道狀態均爲 OFF;不會在 DSH 啓動、插件激活、瀏覽器刷新或 HMR 時自動拉起。
  • 僅能通過側欄開關,或在聊天中明確要求時代理調用的 tunnel_start 工具啓動。
  • 關閉時會終止 cloudflared 子進程(Linux/macOS:SIGTERM 後 SIGKILL;Windows:taskkill /T 等);卸載插件或退出 DSH 也會結束子進程。
  • 狀態寫入 ~/.dsh/data/helux-tunnel/state.json,但每次加載仍強制 enabled: false,不會恢復上一次的 ON。
  • 運行日誌在 ~/.dsh/logs/helux-tunnel.log(ISO 時間戳)。

公網訪問輔助(2.x)

README 記載的版本能力包括:

  1. Copy launch URL:從 DSH 僅保存在內存中的一次性 launch token 拼出 https://<your-host>/?token=... 並複製,便於首次公網訪問。
  2. Pair device (QR)(2.1):將同一 launch URL 顯示爲二維碼,供 Helux Android 應用配對。
  3. 可配置 hostname 與 Windows 支持(2.2):hostname 可在插件配置中指定;Host 爲純 Node,在 Windows 10/11、Linux、macOS 上均可使用。

插件明確不做的事

不會創建隧道、不使用 trycloudflare.com 類 Quick Tunnel、不生成隨機 URL、不修改 config.yml、憑據、DNS 或 Cloudflare Access 策略。每條部署使用你自己的 cloudflared 與隧道憑據,README 強調流量不經過他人服務器。

配置項(Cordis patch)

可在 ~/.dsh/profiles/<name>/cordis.patch.yml 中爲 helux-tunnel 指定:

選項 默認 含義
hostname 自動 公網主機名;空則採用 config.yml 中 ingress
localUrl http://127.0.0.1:3080 本地 DSH Web UI,須爲 loopback
cloudflaredPath PATH 查找 cloudflared 絕對路徑
cloudflaredHome ~/.cloudflared 含 config.yml 與憑據的目錄
accessCheck true 是否探測公網 hostname 上的 Cloudflare Access

更完整說明見倉庫 docs/CONFIGURATION.md;Windows 見 docs/WINDOWS.md。

安裝與啓用

官方支持的安裝方式(README 原文,無需本地構建,因 lib/ 與 client.js 已提交):

dsh plugin --profile web add github:ywildan/dsh-tunnel

本地 checkout 時:

dsh plugin --profile web add /absolute/path/to/dsh-helux-tunnel

然後重啓 dsh web。側欄會出現 Helux Tunnel。README 註明:裸包名 dsh plugin add dsh-helux-tunnel 目前不可用(未發佈到 npm),請使用 github: 形式。

前提(啓動前插件會逐項檢查並在面板展示缺失項):

  1. DSH Web profile,監聽 127.0.0.1:3080。
  2. cloudflared 在 PATH 上,或配置 cloudflaredPath。
  3. 已存在命名隧道,且 config.yml 與 <tunnel-id>.json 位於 ~/.cloudflared(或 cloudflaredHome)。
  4. 隧道 ingress 將你的 hostname 指到本地 DSH Web UI。
  5. DSH host trust:本實例需在公網 hostname 上接受 /api(見配置文檔)。

插件以當前 dsh 進程權限 運行;安裝前宜自行查看 GitHub 源碼 與 MIT 許可證。

典型用法

1. 一次性隧道與 DNS(插件不代勞)

若需重建隧道,README 給出標準命令示例(插件本身不執行):

cloudflared tunnel login
cloudflared tunnel create helux
cloudflared tunnel route dns helux <host>

~/.cloudflared/config.yml 示例:

tunnel: <TUNNEL_ID>
credentials-file: /home/<you>/.cloudflared/<TUNNEL_ID>.json

ingress:
  - hostname: <host>
    service: http://127.0.0.1:3080
  - service: http_status:404

插件實際執行的進程形態爲:

cloudflared tunnel --config <config.yml> --no-autoupdate run <tunnel-id>

2. 讓 DSH 接受公網 Host

cloudflared 默認轉發公網 Host 頭,DSH 默認只信任 loopback。應按 README 啓動:

dsh --profile web --trusted-host <host> --public-url https://<host>

修改 --trusted-host 或 --public-url 後需重啓 DSH。

3. 首次公網訪問與 launch token

DSH 將會話 cookie 綁定到 URL authority。首次應使用 dsh web 打印的一次性地址:

https://<host>/?token=<launch-token>

重定向到無 query 的 https://<host>/ 後,可爲該 authority 建立會話。Launch token 不持久化,僅存在於 DSH 進程內存;側欄 Copy launch URL / Pair device (QR) 用於避免在終端裏翻找 token。

4. 日常啓停

在側欄打開 Helux Tunnel,滿足前提後撥動開關即可。默認始終從 OFF 開始,避免 DSH 重啓後隧道自動暴露公網。

適用場景與注意

適合: 已在使用 Cloudflare 命名隧道、希望用固定自有域名訪問 DSH Web,且需要「默認關閉、手動開啓」安全模型的開發者。

不適合: 希望插件一鍵創建隧道、Quick Tunnel 臨時 URL,或不想自行維護 config.yml 與 DNS 的場景。

社區目錄 skillhub.cn 上的 ywildan/dsh-tunnel 與 GitHub 倉庫爲獨立信息源,與 DeepSeek / 幻方無官方從屬關係;DSH 生態上「一切皆插件」,本文能力描述以倉庫 README 與 package.json 爲準。

參考鏈接

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

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

小夜