dsh-sakurafrp: Hosting SakuraFrp Intranet Tunneling in DSH

前言

DeepSeek Harness 的 Web 界面默认只在本机或局域网可访问。若要在手机或外网继续对话、改配置,常见做法是单独开 SakuraFrp 官方启动器(SakuraLauncher),再手动对齐 frpc、隧道本地端口与 DSH 监听端口。端口不一致时,隧道显示已连接但访问返回 502,排查成本高。

dsh-sakurafrp 由社区维护者 MentholTea 发布,分类为联网工具,在 DSH 设置页与侧边栏集中完成 SakuraFrp 隧道管理、frpc 生命周期与公网访问前的密码门,定位是替代 SakuraLauncher、与 DSH 同进程协作。仓库 MentholTea/dsh-sakurafrp 当前 npm 版本为 2.3.0,MIT 许可证;README 注明代码与文档在与 DeepSeek Harness 会话中迭代生成,作者实测环境为 Windows + WSL2,使用前建议自行审阅源码。

这是什么

一句话:DeepSeek Harness 内建的内网穿透面板——托管 SakuraFrp 的 frpc,在界面里选隧道、对齐端口、看流量,并在公网入口加一层密码门后再反代到 DSH WebServer。

入口有两处:设置 → 内网穿透 (SakuraFrp);左侧边栏 内网穿透,带三色状态点(已连接 / 未连接 / 故障)与启停开关,折叠为图标栏时状态点仍在图标右上角。

核心功能

下列能力均来自项目 README 与 package.json 说明,可按仓库内 npm test(23 个套件、643 项离线断言)自行复核网关鉴权等逻辑。

frpc 与隧道

  • DSH 启动时拉起 frpc、退出时停止;崩溃后指数退避重连(1s 起,封顶 60s)。
  • 访问密钥经 NATFRP_TOKEN 环境变量传递,不写入 argv,降低进程列表泄漏风险。
  • 通过 SakuraFrp API v4 拉隧道列表(含节点名),下拉切换;选隧道后本机端口可自动跟随隧道配置。
  • 本地无隧道时可「新建」:固定 TCP,表单端口同时作为本机端口,远程端口由官方分配;节点列表展示负载(空闲 / 一般 / 拥挤 / 满载),满载节点不可选。
  • autoAlign / adoptTunnelPort:改本机端口前先检测绑定,成功则同步更新 SakuraFrp 面板上该隧道的 local_port,减少「隧道连上但端口不对」的 502。
  • 30 秒内断线不少于 6 次时提示疑似互踢(例如其它机器或 SakuraLauncher 占用同一条隧道)。

流量与界面

  • 展示本日已用流量、剩余流量及基于 data_plans 总量的剩余百分比(绿 / 橙 / 红三档)。
  • frpc 日志默认展开,约每 2 秒刷新。

公网安全与反代

  • 未设置公网密码时外网请求一律拒绝;README 建议 20 位以上随机密码。密码门使用 HMAC 签名 cookie、常量时间比较,按 IP 失败 5 次锁定 60 秒。
  • 网关做 Host 围栏反代,改写 Host / Origin / Referer 等,透传 WebSocket,并注入非安全上下文所需的 polyfill;首次 HTML 导航可自动补 DSH 的 launch token(ctx.connection.authenticatedUrl())。
  • 管理路由 /natfrp/* 需密码门 cookie;本机设置页走 DSH webServer 同名路由,不经过网关,本机操作无需公网密码。

架构概览

Web 设备 → xxx.nyat.app:端口 → SakuraFrp 节点 → frpc(本插件托管)
                                              → 127.0.0.1:<gatePort> 网关
                                                ├─ /natfrp/*  管理路由(需密码门 cookie)
                                                ├─ 密码门(HMAC cookie / ?gate=)
                                                └─ Host 围栏反代 + WS 透传
                                                  → 127.0.0.1:<dshPort> DSH WebServer

安装与启用

插件以当前 DSH 进程权限运行;安装前请阅读源码与 MIT「按原样」声明。frpc 二进制不包含在 npm 包内,装完插件后通常还需在设置页「一键安装」frpc。

方式 A:从 npm 安装(推荐)

dsh plugin --profile desktop add dsh-sakurafrp -w
# web / CLI 场景把 --profile 换成你的 profile 名,例如 --profile web

装完后确认 dsh.profile.bundles 中包含 dsh-sakurafrp,然后重启 DSH。

方式 A2:从 Release tarball 安装

dsh plugin --profile desktop add https://github.com/MentholTea/dsh-sakurafrp/releases/latest/download/dsh-sakurafrp.tgz -w

任一条失败可换另一条。重启后若提示未安装 frpc,在设置页点「一键安装」;默认路径为 ~/.dsh/dsh-sakurafrp/frpc-standalone(.exe),frpc -V 输出应含 sakura。

典型用法:四步逐步解锁

第一次使用可按界面顺序完成,上一步未完成则下一步不出现。

  1. 访问密钥:在 SakuraFrp 面板 → 用户信息 → 查看访问密钥,粘贴到设置页 ① 访问密钥 并保存。
  2. 隧道:出现 ② 隧道 后下拉选择已有隧道,或点「新建」选节点与端口。
  3. 本机端口:出现 ③ 本机端口 后填写(新装为空,需自行填写并检测可用性);选已有隧道时会自动填入。
  4. 访问密码:端口可用后出现 ④ 访问密码;保存后打开顶部开关,从外网访问隧道公网地址并输入密码进入完整 DSH 界面。

插件默认 关闭(enabled 默认为 false),本机端口默认未填,避免安装后无意把 DSH 暴露到公网。README 强调:尽量绑定子域名走 HTTPS;直接用默认 xxx.nyat.app 可能遇到证书警告,部分浏览器继续访问后白屏,绑定方法见仓库 README「证书警告与白屏问题」一节。

常用配置项(cordis.patch.yml → config)包括:

键 默认 说明
enabled false 是否启用插件
frpcPath ~/.dsh/dsh-sakurafrp/frpc-standalone(.exe) frpc 路径
gatePort — 网关端口,与隧道本地端口对齐;留空则网关不监听
gatePassword — 公网密码(也可经设置页写入独立文件,不写入 state.json)
autoAlign true 启动前自动把隧道本地端口改成 gatePort

适用场景与注意

适合谁

  • 已使用或打算使用 SakuraFrp,希望少开一个 SakuraLauncher,在 DSH 内完成 frpc、隧道与端口同步的用户。
  • 需要在外网访问 DSH Web 界面,并愿意在公网入口设置强密码与 HTTPS 子域名的场景。

注意

  • 插件与 DSH 同进程;网关若监听 0.0.0.0 会在局域网绕过密码门,默认应使用 127.0.0.1(见 gateHost 说明)。
  • frpc 版本更新在面板内手动「检查更新」,不会在后台自动拉取清单。
  • 社区插件目录 skillhub.cn 上的 dsh-sakurafrp 页 与 GitHub 仓库相互引用,与 DeepSeek / 幻方无官方从属关系;生态上 DSH 主张「一切皆插件」,目录站为独立社区站点。

结尾

dsh-sakurafrp 把 SakuraFrp 的 frpc 托管、隧道与端口对齐、流量展示和公网密码门收进 DSH 设置页与侧边栏,减少启动器与 DSH 端口不一致带来的运维摩擦。安装命令以 README 为准,细节与 API 列表见 GitHub:MentholTea/dsh-sakurafrp,插件索引见 SkillHub 目录页。

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

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

Xiaoye