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 为准。

参考链接

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

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

Xiaoye