跳到主要内容

从零到通

前提自检 → 选路径 → 申请注册 → 接入 → 验证。新版本的 MRRC Modern 在应用里就能走完,不需要动路由器,也不需要公网 IP。

先看清一件事

Hub 不会替你运行电台服务。你的 MRRC Modern 始终跑在你自己的机器上, Hub 只是给它一个从公网可达的入口。所以「局域网已经能用」是硬前提 —— 局域网不通,接上 Hub 也不会通。

  1. 前提自检

    在继续之前,逐条确认下面五件事。任何一条不满足,先解决它再往下走。

    局域网能打开 http://<你的内网IP>:8888/能出登录页。
    默认端口 8888,默认监听所有网卡。
    能登录 首次启动会自动生成随机口令,在登录页横幅和菜单栏的 Show Password…里都能看到。
    有音频、能发射 先在局域网里跑通一次完整收发。远程排障比本地排障贵十倍。
    知道设备 串口(如 /dev/cu.usbserial-*)与音频设备名(常见是 USB Audio Device)—— 装完之后如果配置变了,这两项是要改的地方。
    出站可达 隧道控制口 8989的出站不能被拦。公司网、访客 Wi-Fi 常拦非标端口。
    两个端口不是一回事

    隧道控制口是 tunnel.mrrc.vlsc.net:8989(你的机器连出去,接入时必须打通);入口是 <呼号>.mrrc.vlsc.net(浏览器连进来,443,不需要你开放任何入站端口)。

  2. 选路径:盒子还是电脑

    两条路的终点完全一样 —— 一个跑着 MRRC Modern、挂着隧道的实例;区别只在这台机器是什么、要不要常开。

    W103D 盒子

    百元级的常开小盒子,镜像里已经装好 MRRC Modern 与隧道客户端。适合想让电台一直在线、又不想占一台电脑的人。

    • 开箱 → 网线/配网 → 在盒子的页面上把电台配好
    • 在应用里「接入云端」走同一套申请流程
    • 完整步骤(含踩过的坑)在 MRRC Modern 的 W103D 指南里
    W103D 完整指南

    电脑(macOS / Windows / Linux)

    已经用打包版 MRRC Modern 在局域网里跑通的那台机器。装好隧道后,它在公网上就是同一个实例。

    • 新版本(v1.24.0 起)在应用里点几下就完成,见第 3–4 步
    • 旧版本用仓库里的安装器脚本,见第 4 步的备选路径
    • 机器关机=离线;入口会 502,隧道不自作主张
  3. 申请与注册:拿到你的名字

    呼号是你在 Hub 上的身份。入口名、证书名、隧道归属都由它派生,所以这一步先走完,再谈接入。

    推荐路径在应用里申请(v1.24.0 起)

    打开 MRRC Modern 的「设置 → 接入云端(Cloud Hub)」,填呼号与联系方式(可选)提交即可。运维批准一到,应用会自己完成剩下的全部动作:签一张签给 <呼号>.mrrc.vlsc.net的自签证书、向 Hub 登记公钥(私钥不出本机)、写好自己的隧道配置、启动隧道,并把会话心跳设为 5 秒。你不需要复制任何口令或粘贴任何命令。

    也可以直接走门户

    打开 https://portal.mrrc.vlsc.net/,填呼号与联系方式提交。Portal 当场走完前三步:

    • 规范化 —— 去空格、大小写不敏感。BG1SB与 bg1sb视为同一个呼号,不会变成两个租户。
    • 查重 —— 同一个呼号在同一时刻只能有一个归属人。已被绑定时走申诉/转移流程,绝不静默覆盖。
    • 核验 —— 命中 Club Log 呼号库(27 万条,与站内留言版同源)的当场自动核验;库外转人工核验 —— 库外 ≠ 冒用,新执照、低活跃都可能不在库里,只有人能拒绝。

    核验通过后由运维分配:把呼号标签与隧道端口写进注册表。拿到批准后,回到应用里连接即可(旧版产品会给你标签、端口与隧道凭证,走第 4 步的手动路径)。

    自助注册对你的三个实际好处
    • 不会被静默覆盖 —— 被冒用时申请会被拒绝,而不是抢走你的呼号。
    • 每一步有审计 —— 申请、核验、授予都进追加式审计日志。
    • 可被撤销 —— 冒用被核实后移除绑定并停用入口(/revoke)。
    为什么核验必须发生在「给访问」之前

    呼号是公开信息,入口存在性天然可以被枚举出来 —— 这一点在设计上是被 有意接受的,不是漏洞。既然藏不住,防御重心就只能前移到「授予访问之前把身份核实清楚」,而不是事后追责。

  4. 建立隧道

    隧道把你机器上的电台服务,接到 Hub 上属于你呼号的那个回环端口。你的机器只连出去,不开放任何入站端口。

    应用内接入(推荐)

    「设置 → 接入云端(Cloud Hub)」提交申请后,批准一到应用自动建隧道 —— macOS 与 Windows 的打包版、盒子的出厂镜像都走这条路,不需要终端。

    备选:手动脚本(旧版产品、无界面环境,或你想自己控制每个细节):

    # 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 —— 这是区分「隧道断了」和「电台服务没起」的关键。
    幂等 / 防冲突 macOS/Linux 版:已经有手工启动的隧道客户端在跑时会拒绝启动 —— 两个客户端抢同一个名字会让入口反复抖动。Windows 版没有这道闸门,先停掉手工 frpc。
    凭据处理 凭据只落在 0600配置文件里;不进命令行参数、不进世界可读的文件。
    端口与凭证从哪来?

    隧道端口由 Hub 侧权威分配(注册表里那行),你不能自己挑。核验通过、运维分配后,你会拿到标签、端口与凭证三样东西。没拿到就别猜 —— 填错的端口隧道会连上,但入口仍然 404。

  5. 验证

    两条命令,一条看隧道,一条看整条链路。

    # 1) 隧道这一跳健康吗
    tail -5 "$HOME/Library/Application Support/mrrc-fleet/frpc-<呼号>.log"
    # 期望看到:login to server success
    #           [<呼号>] start proxy success
    
    # 2) 从公网看整条链路健康吗
    curl -s -o /dev/null -w '%{http_code}\n' https://<呼号>.mrrc.vlsc.net/login   # 期望 200(HEAD 得 405)
    curl -s  https://<呼号>.mrrc.vlsc.net/api/health     # 期望 401
    401 是好事

    /api/health返回 401说明三层同时通了:隧道建立成功、Hub 按呼号找到了你的实例、实例的鉴权中间件在工作。如果它返回 200,反而说明鉴权没生效 —— 值得停下来查一下。

    两条都通过之后,浏览器打开下面的地址,用你的主口令登录,就应该看到和局域网里一模一样的控制台:

    https://<呼号>.mrrc.vlsc.net/
  6. 重启之后

    这两件事的行为不一样,这是最容易踩的坑。

    隧道 自动回来。常驻服务带自重启(macOS LaunchAgent / Linux systemd --user / Windows 计划任务),重启、崩溃、换网络都会自己重连。
    MRRC 服务 看你装的是哪个版本:
    · 打包版(当前 v1.27.0)—— 按正常应用安装,随应用启动;Hub 接入写下的心跳阈值与证书都在启动时生效。
    · 源码运行 —— 非常驻,重启后要手动起(下面就这个情况)。
    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会把值里的词当命令去执行;上面这个循环才是正确的加载方式。这不是风格问题,是会真的报错。

    重签证书之后,必须重启进程

    证书是在启动时读进内存的:换机器、重装、重签证书之后,如果只替换了文件而不重启 MRRC 服务,入口会一直是 502,而本机看起来一切正常。换机的完整清单见 维护 · 换机与证书。

接下来 → 怎么用、怎么分享给朋友 · 连不上 → 排障 · 换机器/退出/叫人来修 → 维护与生命周期 · 想知道每一层为什么这么设计 → 设计与层层实现
本页事实基线:2026-10-16 现场复核;命令与期望输出均在现网实例上实测过。