让 NAT 后的本地 Web UI 通过域名远程访问
24.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/13 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lileikeji/dsh-public-relay该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量
查看扫描证据(共 5 处,展示前 5 条)
- 读取密钥环境变量relay-broker/dsh-relay-broker.mjs:36
const joinToken = process.env.DSH_RELAY_JOIN_TOKEN ?? '' - 读取本地文件relay-broker/dsh-relay-broker.mjs:58
const parsed = JSON.parse(await readFile(registryPath, 'utf8')) - 写入本地文件relay-broker/dsh-relay-broker.mjs:70
await mkdir(dirname(registryPath), { recursive: true }) - 写入本地文件relay-broker/dsh-relay-broker.mjs:72
await writeFile(temp, `${JSON.stringify(registry, null, 2)}\n`, { mode: 0o600 }) - 写入本地文件relay-broker/dsh-relay-broker.mjs:73
await rename(temp, registryPath)
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 反向SSH隧道中继
- 暴露本地WebUI到公网
- 无需公网IP与端口转发
自托管中继,用反向 SSH 隧道把 NAT 后的 DeepSeek Harness(DSH)网页界面暴露到公网——不用公网 IP、不用端口转发、不靠第三方隧道。
README
由 DeepSeek 最新模型翻译生成DSH 公共中继
让一个跑在 NAT 之后的 DeepSeek Harness (DSH) 本地 Web UI,能被任意地点的手机/远程浏览器通过一个公共域名访问——不需要公网 IP、不需要端口映射、不依赖第三方隧道服务(ngrok/cloudflared 等)。
一个极简的自托管中继:用一台公共 VPS 加一条反向 SSH 隧道,把 NAT 之后的 DSH web UI 暴露到公网——不需要公网 IP、不需要端口映射、不依赖第三方隧道。
手机(任意位置)
│ https://relay.example.com/r/<hostId>/...
▼
[ 公共中继服务器 VPS ] │ nginx → broker(:39100) ┌── 这台就是你的桌面 ▼ │ dsh web (127.0.0.1:3081) ssh -R 反向隧道 127.0.0.1:<relayPort> ────────────► 127.0.0.1:<webport>
组件
| 目录 | 内容 | 跑在哪 |
| relay-broker/ | dsh-relay-broker.mjs(Node HTTP broker)、systemd 单元、env 模板 | 公共 VPS |
展开完整文档(README 剩余 1 节)
DSH 公共中继 让一个跑在 NAT 之后的 DeepSeek Harness (DSH) 本地 Web UI,能被任意地点的手机/远程浏览器通过一个公共域名访问——不需要公网 IP、不需要端口映射、不依赖第三方隧道服务(ngrok/cloudflared 等)。 一个极简的自托管中继:用一台公共 VPS 加一条反向 SSH 隧道,把 NAT 之后的 DSH web UI 暴露到公网——不需要公网 IP、不需要端口映射、不依赖第三方隧道。 手机(任意位置) │ https://relay.example.com/r/<hostId>/... ▼ [ 公共中继服务器 VPS ] │ nginx → broker(:39100) ┌── 这台就是你的桌面 ▼ │ dsh web (127.0.0.1:3081) ssh -R 反向隧道 127.0.0.1:<relayPort> ────────────► 127.0.0.1:<webport> 组件 | 目录 | 内容 | 跑在哪 | | relay-broker/ | dsh-relay-broker.mjs(Node HTTP broker)、systemd 单元、env 模板 | 公共 VPS | | nginx/ | 公网域名 vhost(server_name、/r/<hostId>/ 转发、/plugins/ 直连、占位页) | 公共 VPS | | launcher/ | 桌面侧 PowerShell:launch-dsh.ps1 + dsh-common.ps1 + dsh-supervisor.ps1 + setup-dsh-public-relay.ps1 + diag-relay.ps1 | 桌面 (Windows) | 工作原理 1. 注册:桌面启动时带共享的 join token 调用 POST /_relay/register(附 hostId + deviceSecret)。broker 校验 token 后为其分配一个仅本机监听的中继端口 41000–41999,并持久化注册表。 2. 隧道:桌面用 ssh -R 127.0.0.1:<relayPort>:127.0.0.1:<webPort> root@<server> 建反向隧道,把服务器上的该端口反向映射回桌面的 dsh web。 3. 访问:用户打开 https://<domain>/r/<hostId>/...,nginx 转发给 broker;broker 根据 hostId 找到对应中继端口、剥掉 /r/<hostId>/ 前缀后转发;双端通过 dsh_relay_host cookie 把该浏览器的根相对资源(/plugins/、/api/、/m/、WebSocket)都钉在同一台桌面。 安全模型 - joinToken(≥32 字符,Bearer)门槛注册;hostId 为不透明 32 位十六进制;deviceSecret(48–128 hex)证明主机在重复注册时的所有权。 - broker 只连 127.0.0.1:<分配端口>,绝不连任意外部目标。 - 仓库内无任何真实密钥/IP/域名——全部来自环境变量(见下)。 部署 A. 公共 VPS(博主侧) 1. 放 broker 与 service: mkdir -p /opt/dsh-relay-broker /var/lib/dsh-relay-broker cp relay-broker/dsh-relay-broker.mjs /opt/dsh-relay-broker/ cp relay-broker/dsh-relay-broker.service /etc/systemd/system/ cp relay-broker/dsh-relay-broker.env.example /etc/dsh-relay-broker.env 编辑 /etc/dsh-relay-broker.env,填 DSH_RELAY_PUBLIC_HOST + DSH_RELAY_JOIN_TOKEN systemctl daemon-reload && systemctl enable --now dsh-relay-broker 2. 配 nginx(参考 nginx/relay.example.com.conf,把 relay.example.com 换成你的域名,配好 TLS/ACME)。 3. ⚠️ 若域名挂了 CDN/WAF:在 CDN 控制台给 /plugins/(建议连 /api/、/m/)加「不缓存 / 放行」规则,否则边缘会拦掉 DSH 插件 bundle(详见 docs/TROUBLESHOOTING.md)。 B. 桌面(Windows) 1. 设环境变量(也可写进 dsh-common.ps1 顶部的默认值): $env:DSH_RELAY_PUBLIC_HOST = "relay.example.com" # 公网域名 $env:DSH_RELAY_HOST = "123.45.67.89" # VPS 的 SSH host $env:DSH_RELAY_USER = "root" $env:DSH_RELAY_KEY_PATH = "$env:USERPROFILE\.ssh\id_rsa" # 能免密 SSH 的私钥 $env:DSH_WEB_PORT = "3081" 2. 一次性注册(把 <你的joinToken> 换成 VPS 上 DSH_RELAY_JOIN_TOKEN 的值): .\launcher\setup-dsh-public-relay.ps1 -JoinToken <你的joinToken> 3. 启动(会注册→起 web→建隧道→拉起 supervisor): .\launcher\launch-dsh.ps1 4. 手机/远程浏览器打开启动日志里打印的公网地址即可;桌面 DSH 的「手机远程」(remote-web-ui)面板也会自动同步 publicBaseUrl。 环境变量一览(桌面侧,dsh-common.ps1) | 变量 | 默认 | 说明 | | DSH_RELAY_PUBLIC_HOST | relay.example.com | 公网域名(nginx server_name)| | DSH_RELAY_HOST | relay.example.com | VPS SSH 目标 | | DSH_RELAY_USER | root | VPS SSH 用户 | | DSH_RELAY_KEY_PATH | ~/.ssh/id_rsa | 免密 SSH 私钥 | | DSH_RELAY_API | https://<PUBLIC_HOST>/_relay/register | 注册端点(一般不用改)| | DSH_RELAY_JOIN_TOKEN | — | 首启动注册 token | | DSH_WEB_PORT | 3081 | 本地 dsh web 端口 | 许可证 MIT。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lileikeji/dsh-public-relay
让 NAT 后的本地 Web UI 通过域名远程访问
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目