Hub 不会替你运行电台服务。你的 MRRC Modern 始终跑在你自己的机器上, Hub 只是给它一个从公网可达的入口。所以"局域网已经能用"是硬前提 —— 局域网不通,接上 Hub 也不会通。
-
前提自检
在继续之前,逐条确认下面五件事。任何一条不满足,先解决它再往下走。
局域网能打开 http://<你的内网IP>:8888/能出登录页。
默认端口8888,默认监听所有网卡。能登录 首次启动会自动生成随机口令,在登录页横幅和菜单栏的 Show Password… 里都能看到。 有音频、能发射 先在局域网里跑通一次完整收发。远程排障比本地排障贵十倍。 知道设备 串口(如 /dev/cu.usbserial-*)与音频设备名 (常见是USB Audio Device)—— 装完之后如果配置变了, 这两项是要改的地方。出站可达 隧道控制口 8989的出站不能被拦。公司网、访客 Wi-Fi 常拦非标端口。三个端口是不同的事隧道控制口是
tunnel.mrrc.vlsc.net:8989(你的电脑连出去); 入口是<呼号>.mrrc.vlsc.net:9988(浏览器连进来)。 它们都要出站可达,但只有前者是接入时必须打通的。 -
注册:拿到你的名字与端口
呼号是你在 Hub 上的身份。注册完成后你会得到三样东西,后面两步都要用。
今天可用 自助申请(公网入口已上线)打开
https://portal.mrrc.vlsc.net:8899/,填呼号与联系方式提交。Portal 当场走完前三步:-
规范化 —— 去空格、大小写不敏感。
BG1SB与bg1sb视为同一个呼号,不会变成两个租户。 - 查重 —— 同一个呼号在同一时刻只能有一个归属人。 已被绑定时走申诉/转移流程,绝不静默覆盖。
- 核验 —— 命中 Club Log 呼号库(27 万条,与站内留言版同源) 的当场自动核验;库外转人工核验 —— 库外 ≠ 冒用,新执照、低活跃都可能不在库里,只有人能拒绝。
核验通过后,运维走第四步分配:把呼号标签与隧道端口写进注册表, 然后把三样东西发给你:呼号标签(入口就是
<呼号>.mrrc.vlsc.net)、隧道端口(形如188xx)、隧道凭证(别贴进公开场合)。 拿到这三样,进第 3 步装隧道。自助注册对你的三个实际好处- 不会被静默覆盖 —— 被冒用时申请会被拒绝,而不是抢走你的呼号。
- 每一步有审计 —— 申请、核验、授予都进追加式审计日志。
-
可被撤销 ——
冒用被核实后移除绑定并停用入口(
/revoke)。
为什么核验必须发生在"给访问"之前呼号是公开信息,入口存在性天然可以被枚举出来 —— 这一点在设计上是被 有意接受的,不是漏洞。既然藏不住,防御重心就只能前移到"授予访问之前把身份核实清楚", 而不是事后追责。
-
规范化 —— 去空格、大小写不敏感。
-
装隧道
隧道把你自己机器上的电台服务,接到 Hub 上属于你呼号的那个回环端口。 你的电脑只连出去,不开放任何入站端口。
# 1) 取仓库(安装器在里面) git clone https://github.com/cheenle/mrrc_hub.git # 2) 装成常驻服务(macOS / Linux) # 不需要先装 frp —— 安装器会自己取回来并校验哈希 MRRC_HUB_TOKEN='<隧道凭证>' \ bash mrrc_hub/deploy/install_instance_tunnel.sh <呼号> <隧道端口>Windows 用对等的 PowerShell 版,而且它做的更多:
$env:MRRC_HUB_TOKEN = '<隧道凭证>' .\mrrc_hub\deploy\install_instance_tunnel.ps1 <呼号> <隧道端口>frpc 从哪来 安装器按三级优先选:① 安装包内嵌副本 → ② 系统 PATH里已有的 → ③ 从 frp 官方 release 下载并校验 SHA-256, 不符即拒绝使用。版本与 Hub 端钉死对齐 —— 客户端比服务端新可能握手失败。缓存落在~/.local/share/mrrc-fleet。它做了什么 写一份 0600的隧道配置,并装一个常驻服务: macOS 是带 KeepAlive 的 LaunchAgent、Linux 是 systemd 用户单元(带 linger,注销后仍活)、Windows 是计划任务。 崩溃、重启、换网都能自恢复。Windows 额外做 用内置的 openssl 给你的 <呼号>.mrrc.vlsc.net签一张自签证书,并把证书路径与心跳阈值写成用户级环境变量 —— 应用下次启动即生效。私钥不出本机,只有公钥交给 Hub 钉住。它不做什么 不管你的 MRRC 服务。电台服务归你自己起。 实例没起来时隧道照常在,访问会得到 502 —— 这是区分 "隧道断了"和"电台服务没起"的关键。 幂等 / 防冲突 已经有手工启动的隧道客户端在跑时,它会拒绝启动 —— 两个客户端抢同一个名字会让入口反复抖动。 凭据处理 凭据只落在 0600配置文件里;不进命令行参数、不进世界可读的文件。端口与凭证从哪来?隧道端口由 Hub 侧权威分配(注册表里那行),你不能自己挑。 核验通过、运维分配后,你会拿到标签、端口与凭证三样东西。 没拿到就别猜 —— 填错的端口隧道会连上,但入口仍然 404。
-
验证
两条命令,一条看隧道,一条看整条链路。
# 1) 隧道这一跳健康吗 tail -5 "$HOME/Library/Application Support/mrrc-fleet/frpc-<呼号>.log" # 期望看到:login to server success # [<呼号>] start proxy success # 2) 从公网看整条链路健康吗 curl -sI https://<呼号>.mrrc.vlsc.net:9988/login # 期望 200 curl -s https://<呼号>.mrrc.vlsc.net:9988/api/health # 期望 401401 是好事/api/health返回 401 说明三层同时通了: 隧道建立成功、Hub 按呼号找到了你的实例、实例的鉴权中间件在工作。 如果它返回 200,反而说明鉴权没生效 —— 值得停下来查一下。两条都通过之后,浏览器打开下面的地址,用你的主口令登录, 就应该看到和局域网里一模一样的控制台:
https://<呼号>.mrrc.vlsc.net:9988/ -
重启之后
这两件事的行为不一样,这是最容易踩的坑。
隧道 自动回来。常驻服务带自重启(macOS LaunchAgent / Linux systemd --user / Windows 计划任务), 重启、崩溃、换网络都会自己重连。 MRRC 服务 看你装的是哪个版本:
· 打包版(v1.22.0 起)—— 按正常应用安装,已带 Hub 前置能力(路径前缀 / 令牌不进 URL / 会话遥测 / PTT 活性闸门)。
· 源码运行 —— 非常驻,重启后要手动起(下面就这个情况)。cd mrrc_modern while IFS='=' read -r k v; do case "$k" in ''|\#*) continue;; esac; export "$k=$v"; done \ < "$HOME/Library/Application Support/MRRC-Modern/mrrc_modern.env" nohup venv/bin/python server.py > /tmp/mrrc-src/server.log 2>&1 &必须是这个while ... read循环,不能source环境文件里有
USB Audio Device这类带空格的值。source会把值里的词当命令去执行;上面这个循环才是正确的加载方式。 这不是风格问题,是会真的报错。
接下来 →
怎么用、怎么分享给朋友
· 连不上 →
排障 ·
想知道每一层为什么这么设计 →
设计与层层实现
本页事实基线:2026-10-01 现场取证。命令与期望输出均在现网实例上实测。