ankhishtar2-lang/dsh-sakurafrp ↗★ 0
dsh-sakurafrp
手机 ↔ 电脑互通(SakuraFrp 隧道 + dsh-mobile 移动网关)的图形化管理插件
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ankhishtar2-lang/dsh-sakurafrp说明文档
阅读完整 README ↗3.3 前置:配置 dsh-mobile 的移动网关
在 $DSH_HOME/profiles/web/cordis.patch.yml 里加一段(值都要换成你自己的):
- id: mobile-access
config:
initiallyEnabled: true
maxDevices: 1 # 只信任一台设备就写 1
pairingTtlMs: 300000 # 配对窗口 5 分钟
listenHost: 127.0.0.1
listenPort: 33782 # 必须等于 SakuraFrp 隧道的远程端口
publicAuthorities:
- node.example.com:33782 # 手机访问时用的 Host,必须与隧道入口一致
- yd.node.example.com:33782 # SakuraFrp 运营商前缀节点(可选)
allowedCidrs: ['127.0.0.0/8', '::1/128'] # 隧道过来的源地址恒为回环
upstreamOrigin: http://127.0.0.1:3080
tls:
mode: provided
certFile: !!js dshHomePath('mobile-access/tls/server.crt')
keyFile: !!js dshHomePath('mobile-access/tls/server.key')
pairingCaFile: !!js dshHomePath('mobile-access/tls/ca.crt')
instanceId: '' # 必须与 CA 指纹完全一致
⚠️ 两个会让你起不来 dsh 的坑(作者踩过)
pairingCaFile配了却漏了instanceId:插件会拿sha256(stateFile 路径)当 instanceId, 永远对不上 CA 指纹 →start()抛错 → loader fail-fast → 整个 dsh web 起不来。maxDevices在「配对准入」时只数活跃设备,但在启动加载时数全部记录(含已撤销)。 撤销过设备后忘记清理、又把maxDevices改小,重启即崩。本仓库的scripts/dsh-mobile-security-audit.sh会自动清理已撤销记录。
4. 配置(环境变量)
不想改 profile 的话,全部行为都可以用环境变量覆盖(在 systemd unit 或启动脚本里设):
| 变量 | 默认值 | 说明 |
|---|---|---|
DSH_SAKURA_ORIGIN | https://node.example.com:33782(占位符) | 必填:你自己的公网入口。占位符不改的话探测与配对都会失败 |
DSH_SAKURA_AUTHORITIES | 空 | 额外探测的公网权威(逗号分隔),主入口自动取自 origin;SakuraFrp 的 yd./dx./lt. 前缀节点写在这里 |
DSH_SAKURA_SELFHEAL_MS | 15000 | 网关自愈轮询间隔 |
DSH_SAKURA_PROBE_MS | 60000 | 公网节点探测间隔 |
DSH_SAKURA_LOG | $HOME/dsh/memory/dsh-sakurafrp.log | 事件日志(自动以 0600 创建) |
DSH_SAKURA_WATCHDOG_UNIT | dsh-mobile-lan-watchdog.service | 外部守护服务单元名 |
DSH_SAKURA_ALLOW_REMOTE_ADMIN | 未设 | 设为 1 时取消「仅电脑端」闸门(见第 6 节,不建议) |
📌 与本机实际运行版本的差异:作者本机那份把
DSH_SAKURA_ORIGIN默认值写成了自己的隧道入口 (省去配置环境变量)。为了不公开个人隧道地址,本仓库把默认值改成了占位符https://node.example.com:33782,并且默认不再探测 yd./dx./lt. 前缀节点。 因此从本仓库安装后,必须显式设置DSH_SAKURA_ORIGIN(必要时再设DSH_SAKURA_AUTHORITIES)。