前言¶
在 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 记载的版本能力包括:
- Copy launch URL:从 DSH 仅保存在内存中的一次性 launch token 拼出
https://<your-host>/?token=...并复制,便于首次公网访问。 - Pair device (QR)(2.1):将同一 launch URL 显示为二维码,供 Helux Android 应用配对。
- 可配置 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: 形式。
前提(启动前插件会逐项检查并在面板展示缺失项):
- DSH Web profile,监听
127.0.0.1:3080。 cloudflared在 PATH 上,或配置cloudflaredPath。- 已存在命名隧道,且
config.yml与<tunnel-id>.json位于~/.cloudflared(或cloudflaredHome)。 - 隧道 ingress 将你的 hostname 指到本地 DSH Web UI。
- 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 为准。