ℹ️ 通知

FMO 固件 4.0 版本已正式推送,如果你正在使用旧版本,建议立即升级到最新版本,如果您仍然坚持使用 2/3.x.x 版本的FMO固件建设服务器,请参考 旧版指南2.0旧版指南3.0

需要留意:出于安全性考量,2.x/3.x 版本的 FMO 设备无法发现 4.x 版本发布的服务器;而 4.0 设备当前仍兼容旧版服务器,我们将在合适的时候结束对 2.0/3.0 版本的支持。

FMO 4.0版本,彻底摒弃了共享密码/密钥模式,转而改用数字证书 + 数字签名的方式持续验证爱好者身份。 这带来了无可伪造的用户身份,同时任何人都可以通过公开的根证书,验证一个设备证书所代表的呼号是否真实有效。 我们在FMO内完整的实现了 根证书->中间证书->用户证书的 PKI 证书链验证模型。 这是一个工程学上的巨大改进,意味着服务器管理员即使不出示用户名密码,也能安全的让真正的爱好者登录自己的服务器。

在这一模型中,认证责任是两个独立且清晰的维度:

认证(技术层面):证书链从根CA延伸到用户证书,确保每个设备持有者的身份(呼号)可被任何第三方公开验证,无法伪造。

责任(治理层面):签发证书、授权接入、在服务器上发言——所有行为都归属于具体的个人、管理员或组织。系统本身不自动追责,但提供不可抵赖的技术证据。

这种分离设计,既保证了认证机制的纯粹透明,也为社群自治保留了灵活的管理空间。

这是自 FMO 诞生以来最重要的一次更新,它标志着 FMO 从原始的“密钥分发模式”彻底转向了“数字证书模式”。也标志着FMO最终从襁褓中开始走向成熟。

用户视角的FMO 2.0.0授权机制:您的FMO收集大家在aprs上分发的用户名密码,然后您的fmo使用用户名密码登录的大家的服务器。

用户视角的FMO 3.0.0授权机制:您的FMO收集大家分发在aprs上的Secret,然后您的fmo打包您的个人信息,使用Secret利用签名算法将您的个人信息签名,组装成临时登陆令牌,并用该令牌登陆大家的服务器。

用户视角的FMO 4.0.0授权机制: 您的FMO收集大家在任意途径分发的数字证书和数字签名,然后通过根证书->中间证书->用户证书持续验证一个用户是否为业余无线电爱好者。在访问爱好者自建服务器时,对方也通过根证书->中间证书->用户证书持续验证您自己是否也为真的业余无线电爱好者。双方交叉比对后,允许您在对方服务器上进行通联或数据交换。在4.0机制下,没有公开的用户名密码/秘密、设备内的证书代表了您的唯一身份。

FMO如何通过APRS广播式发现

FMO采用“代理广播”的方式广播爱好者所搭建的MQTT Broker。具体原理可访问

APRS官网收录文章:aprs.org: 《Build a High-Speed Data Exchange HamNet Based on APRS-IS》 By BG5ESN

了解FMO的广播工作原理。

详细操作说明

图标 说明
🖥️ 服务器端操作,通常代表需要在您的MQTT Broker或终端进行的操作。
📻 涉及FMO设备本体操作,如通过浏览器访问后台,直接操作FMO界面。
ℹ️ 提示信息

STEP1: 安装MQTT Broker

  1. 🖥️ 访问 EMQX官网,按照官方文档进行安装和配置,确保版本大于5.8版本。确保您的MQTT Broker能够正常运行,并可通过外网访问。
  2. 🖥️ 预先配置您的服务器的外网访问URL端口
  • ℹ️应用提示: FMO使用MQTT Broker进行数据交换,我们建议您安装EMQX的MQTT Broker(或Mosquito附带http认证插件版本),您可以根据自己的需求选择合适的MQTT Broker进行搭建。
  • ℹ️安全性提示: EMQX的docker版本在您重启容器后,会恢复默认18083登陆端口的登陆信息,该部分可能有安全隐患,请仔细确认后使用。

STEP2: 设置FMO

  1. 📻使用电脑访问[FMO网页后台] -> [参数配置],仔细阅读解释说明,并配置如下内容:

    📻配置项 📻说明
    APRS网络设置 -> APRS PASSCODE 您登录APRS的密码,可以在APRS官网申请
    自定义服务器 -> 自定义服务器地址 可以是IP或域名,需要直接指向您的服务器公网地址
    自定义服务器 -> 自定义服务器端口 常规非加密端口为1883,需要直接指向您的服务器地址
    自定义服务器 -> 服务器名称 这是您服务器的名称,支持中英文,设置后,会显示在您的FMO上
    自定义服务器 -> 服务范围 您可以规定您的服务器所覆盖的范围
  2. 📻 上述确认配置完毕后,请点击 [APRS网络设置] -> [重启APRS服务] -> [重启服务],让您的配置生效。

  3. 📻 请回到设备上进行操作 回到FMO设备主界面 -> 顺时针旋转旋钮 -> 应当可以看到您的服务器已经呈现在列表中。

  4. 📻 基础配置已经完成,请继续按照STEP3进行配置。

STEP3: 安装并设置证书验证器 (SAS)

方式一:一键脚本安装

🖥️ 一行命令完成下载、配置、注册系统服务并启动:

Linux / macOS (需要 root 权限):

curl -fsSL https://bg5esn.com/share/fmo/sas-installer/install.sh | sudo bash

Windows (以管理员身份运行 PowerShell):

irm https://bg5esn.com/share/fmo/sas-installer/install.ps1 | iex

安装脚本会自动完成以下操作:

  • 检测您的系统平台,下载对应版本的 SAS
  • 引导您输入 SAS 启动参数(从📻[FMO后台] -> [SAS 搭建快捷方式] -> [生成命令] 复制粘贴即可)
  • 注册为系统服务(Linux: systemd / macOS: launchd / Windows: 计划任务)并启动

服务管理 - Linux:

项目 说明/指令
日志 journalctl -u fmo-sas -f
启动 systemctl start fmo-sas
停止 systemctl stop fmo-sas
重启 systemctl restart fmo-sas
升级 systemctl stop fmo-sas && /opt/fmo-sas/sas –update && systemctl start fmo-sas
卸载 curl -fsSL https://bg5esn.com/share/fmo/sas-installer/uninstall.sh
配置文件 /etc/fmo-sas/config.json
安装目录 /opt/fmo-sas/

服务管理 - macOS:

项目 说明/指令
日志 tail -f /var/log/fmo-sas.log
启动 sudo launchctl load /Library/LaunchDaemons/com.fmo.sas.plist
停止 sudo launchctl unload /Library/LaunchDaemons/com.fmo.sas.plist
升级 sudo launchctl unload /Library/LaunchDaemons/com.fmo.sas.plist && /usr/local/opt/fmo-sas/sas –update && sudo launchctl load /Library/LaunchDaemons/com.fmo.sas.plist
卸载 curl -fsSL https://bg5esn.com/share/fmo/sas-installer/uninstall.sh
配置文件 /usr/local/etc/fmo-sas/config.json
安装目录 /usr/local/opt/fmo-sas/

服务管理 - Windows(管理员 PowerShell):

项目 说明/指令
日志 Get-Content -Wait “$env:LOCALAPPDATA\fmo-sas\sas.log”
启动 Start-ScheduledTask -TaskName fmo-sas
停止 Stop-ScheduledTask -TaskName fmo-sas
重启 Stop-ScheduledTask fmo-sas; Start-ScheduledTask fmo-sas
升级 Stop-ScheduledTask fmo-sas; & “$env:LOCALAPPDATA\fmo-sas\Sas.exe” –update; Start-ScheduledTask fmo-sas
卸载 irm https://bg5esn.com/share/fmo/sas-installer/uninstall.ps1
配置文件 %LOCALAPPDATA%\fmo-sas\config.json
安装目录 %LOCALAPPDATA%\fmo-sas\

方式二:手动安装

如果您不希望使用一键脚本,也可以按照以下步骤手动安装:

  1. 🖥️访问 GitHub Release 页面 下载您对应服务器平台的二进制文件(如 linux-x64 则下载 linux-x64.tar.gz,Windows 则下载 win-x64.zip)。

  2. 🖥️解压上述程序至您服务器的相应目录,如:

# Linux/macOS
mkdir -p ~/fmo-sas && tar xzf linux-x64.tar.gz -C ~/fmo-sas

# Windows: 解压 win-x64.zip 至任意目录
  1. 📻电脑访问[FMO后台] -> [SAS 搭建快捷方式] -> [生成命令],复制生成的启动命令。

  2. 🖥️在解压目录下执行复制的命令:

cd ~/fmo-sas
./Sas --server-uid 2 --server-callsign 您的呼号 --mqtt-host 您的服务器地址 --mqtt-port 1883 --cert-fingerprint 您的证书指纹 --http-port 8080
  1. 🖥️ SAS 正常启动后请保持运行。如需后台运行可自行配置 systemd / screen / nohup 等。升级时执行 ./Sas --update 即可。
SAS 正常运行日志参考

无论使用哪种方式安装,SAS 正常启动后的日志看起来应当和下面相似,如遇到任何启动问题,可根据提示进行排查修复:

[2026-06-15 09:30:11.006] [INFO ]         _____ __  __  ___
[2026-06-15 09:30:11.018] [INFO ]        |  ___|  \/  |/ _ \
[2026-06-15 09:30:11.018] [INFO ]        | |_  | |\/| | | | |
[2026-06-15 09:30:11.018] [INFO ]        |  _| | |  | | |_| |
[2026-06-15 09:30:11.018] [INFO ]        |_|   |_|  |_|\___/
[2026-06-15 09:30:11.018] [INFO ]
[2026-06-15 09:30:11.018] [INFO ]     Server Authorizer Service
[2026-06-15 09:30:11.018] [INFO ]
[2026-06-15 09:30:11.018] [INFO ] Config: /etc/fmo-sas/config.json
[2026-06-15 09:30:11.018] [INFO ] SAS HTTP auth mode
[2026-06-15 09:30:11.019] [INFO ]   MQTT: fmo2.bg5esn.com:1883
[2026-06-15 09:30:11.019] [INFO ]   Server: uid=2 callsign=BG5ESN certFingerprint=hBpv6w-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[2026-06-15 09:30:11.020] [INFO ]   Admins: 2 uid=2 fp=hBpv6w-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, uid=450 fp=R1RzqD_vlL-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[2026-06-15 09:30:11.020] [INFO ]   Version: 1.0.3+2593091efb6709a8284093e0f21462e09adc3a69
[2026-06-15 09:30:11.089] [INFO ] Loaded Root CA: sn=1 keyId=1
[2026-06-15 09:30:11.089] [INFO ] Root CA store initialized with 1 root(s)
[2026-06-15 09:30:11.102] [INFO ] Loaded role: admin (admin.json)
[2026-06-15 09:30:11.102] [INFO ] Loaded role: super (super.json)
[2026-06-15 09:30:11.102] [INFO ] Loaded role: user (user.json)
[2026-06-15 09:30:11.102] [INFO ] SAS HTTP auth listening on:
[2026-06-15 09:30:11.484] [INFO ]   http://198.18.0.1:8080/auth
[2026-06-15 09:30:11.484] [INFO ]   http://192.168.30.202:8080/auth
[2026-06-15 09:30:11.484] [INFO ]   http://192.168.1.202:8080/auth
[2026-06-15 09:30:11.505] [INFO ] CRL manager started: 1 root(s), refresh every 14400s
[2026-06-15 09:30:11.545] [INFO ] HTTP auth server ready
[2026-06-15 09:30:11.546] [INFO ] ─── Checking for updates ───
[2026-06-15 09:30:11.688] [INFO ]   Already up to date.
[2026-06-15 09:30:11.692] [INFO ] Root CRL not published yet: xxxx

ℹ️SAS说明 SAS (Server Authorizer Service) 为 FMO Server Authorizer Service 的简写,是 FMO 的开源认证服务,部署在您的 EMQX 旁边,用于验证用户证书链。该服务可离线运行,不依赖中心数据库,不存用户信息列表,它仅根据证书链来验证一个用户是否真的为业余无线电爱好者。可以理解为它是 EMQX 的安全登录防火墙。

STEP3: 设置EMQX登录参数

  1. 🖥️访问EMQX的设置后台 通常情况下为您的服务器的:18083端口 进入[客户端认证] 选项。
  2. 🖥️点击右上角->[创建]->[Password-Based]->[HTTP服务]
  3. 🖥️当前参数参考下面的列表
    参数 说明
    请求方式 POST 默认值
    URL http://你的SAS服务器地址:8080/auth 参见上述SAS的打印日志中的URL,请填写同一局域网内的SAS地址,我们当前填写:http://192.168.1.202:8080/auth
    content-type 默认值
    application/json 默认值
    请求体 {“username”: “${username}”,“password”: “${password}”} 默认值
  4. 🖥️点击创建
  5. 🖥️正常创建后,你应当可以看到 数据源状态显示为:已连接。

STEP4: 至此您可以尝试让您的FMO登录您自己的节点了,所有配置均已完成。

服务器部署合规和须知

⚠ 若使用中国大陆服务器(如 阿里云、腾讯云)且通过域名访问 → 需进行ICP备案。

⚠ 切勿在自己服务器上进行广告、商业活动,这会直接导致你的服务变为商业服务,进而引发法律风险,这是红线!

⚠ 建设Broker服务时,请将Broker仅供FMO使用,这是因为仅服务于FMO可以确保为业余无线电爱好者(请阅读 FMO的信任链模型),以符合业余无线电业务定义,避免被归类为公共通信服务,增加法律风险。

⚠ 您在使用FMO时,本质上是用互联网延伸业余电台的通联范围,属于技术研究和自我训练的范畴。请务必确保你的服务器仅用于合法的业余无线电活动,并且采取必要的安全措施来防止滥用,这不仅是对法律的遵守,也是对业余无线电社区的负责。

⚠ 必须遵守《中华人民共和国无线电管理条例》 和 《中华人民共和国网络安全法》 等相关法律法规,确保服务器的合法合规运营。

⚠ FMO网络不以规模为目标,建议以小范围、可控的爱好者网络为主,过度扩展可能引发不必要的法律和安全风险。

⚠ 所有爱好者感谢您的付出, 但请不要让它影响您的工作和生活。

⚠ 尽管FMO做到了合规持有证书业余无线电爱好者应有的自律和克制,并建立了完整的信任链模型让爱好者们实现透明自我管理,但在服务器的管理责任和运营风险方面,服务器运营者需要承担更大的风险,请仔细思考您是否能承受相关风险,并以您自己的思考作为行动指南。如有相关考量,请不要进行服务器搭建。

⚠ 以上分析仅代表技术理解,不构成法律意见。业余无线电互联网互联的合规边界仍在探讨中,使用者需独立评估并承担相应法律责任。