硬核HAM必看!FMO语音服务器Rocky Linux、Debian、Docker全平台搭建教程
告别中心化服务器,打造属于你自己的去中心化业余无线电通联网络
各位业余无线电爱好者,大家好!你是否厌倦了商业语音平台的各种限制?是否想拥有一个完全自主可控的通联服务器?今天,我们就来聊聊FMO——这个让无数HAM兴奋的技术方案,并手把手教你在各种平台上搭建属于自己的FMO语音服务器。
一、什么是FMO?
FMO,全称NFM Over Internet(互联网模拟通联) ,是一种通过互联网进行NFM模拟对讲通联的技术方案
简单来说,FMO是一个物联网模拟对讲通联器 ,它将你在本地发出的模拟NFM语音数字化后,通过MQTT协议传输到互联网上的服务器(Broker),再分发给其他连接到该服务器的FMO设备
FMO的核心特点
| 特点 | 说明 |
|---|---|
| 去中心化架构 | 没有官方中心语音服务器,每位爱好者都可以自主建立、删除语音服务 |
| APRS-IS服务发现 | 利用APRS网络来广播和发现语音服务器,不需要专有的中心目录服务器 |
| MQTT语音传输 | 语音流被封装在MQTT协议中,轻量级、延迟极低 |
| 仅服务持证爱好者 | 需通过CRAC官方数据库进行业余无线电身份认证,确保参与者均为合法资质同好 |
FMO秉持“人人为我,我为人人 ”的业余无线电协作精神,每位爱好者都是这个自治网络中平等且关键的一环
今天我要讲的FMO是由BG5ESN开发的模拟转网络盒子,其不使用中心服务器,而是各爱好者自行搭建服务器,通过APRS网关广播。阅读FMO (NFM Over Internet) 语音服务器搭建指南 :: 大船地下室了解到,其使用MQTT Broker作为服务器载体。此处给出基于EMQX相对详细但仍简易的教程。
二、搭建前的准备工作
1. 硬件需求
- FMO设备 :你需要一台FMO硬件设备(由BG5ESN开发)

- 服务器 :一台具有公网IP的云服务器或自建主机
- 对讲机 :用于本地射频通联的手台或车台
2. 服务器配置建议
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 1核 | 2核 |
| 内存 | 1GB | 2GB |
| 带宽 | 2Mbps | 3Mbps以上 |
| 系统 | Linux | Rocky Linux 10 / Debian 11+ / Ubuntu 22.04+ |
注意 :FMO的音质有低码率模式(适合纯语音)和高码率模式(适合SSTV等),低码率模式下2M带宽就能满足数十人在线。
3. 网络需求
- 公网IP或域名 :FMO需要通过公网访问MQTT Broker
- 端口开放 :默认需要开放1883端口(MQTT非加密通信)
- 防火墙配置 :云服务器安全组和系统防火墙均需放行相应端口
4. 软件准备
- SSH工具 :Xshell、Putty或终端命令行
- Docker (如选择容器化部署)
- FMO设备已激活 :完成呼号认证和网格坐标设置
5. FMO设备准备
在搭建服务器之前,请确保你的FMO设备已完成以下操作:
- 连接WiFi (仅支持2.4G网络)
- 完成呼号认证 :通过CRAC官方数据库认证,等待审核通过(约1个工作日)
- 设置网格坐标 :在菜单中设置你的位置信息
- 获取APRS PASSCODE :访问 https://aprs.org/aprspasscode.html 根据呼号计算
三、核心组件:MQTT Broker
FMO的语音服务器本质上是一个MQTT Broker ,推荐使用以下两种开源方案:
- EMQX :功能强大,支持Web管理面板,推荐新手使用(注意一定要用开源版本!)
- Mosquitto :轻量级,适合资源有限的服务器
重要提示 :FMO目前不支持SSL/TLS加密访问 ,必须使用非加密连接。请确保MQTT Broker配置为允许非加密连接。
四、全平台搭建教程
平台一:Rocky Linux 10 部署 EMQX(我使用的)
步骤1:安装依赖
# 更新系统
sudo dnf update -y
# 安装必要工具
sudo dnf install -y curl wget vim
步骤2:下载并安装EMQX
sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/9/emqx-ce.repo
sudo rpm -ivh emqx-5.8.0-el9-amd64.rpm
步骤3:启动并设置开机自启
# 启动EMQX服务
sudo systemctl start emqx
# 设置开机自启
sudo systemctl enable emqx
# 检查运行状态
sudo systemctl status emqx
步骤4:防火墙配置
# 开放1883端口(MQTT通信端口)sudo firewall-cmd --permanent --add-port=1883/tcp
# 开放18083端口(EMQX管理面板)sudo firewall-cmd --permanent --add-port=18083/tcp
# 重载防火墙sudo firewall-cmd --reload
步骤5:验证安装

浏览器访问 <span leaf="">http://你的服务器IP:18083</span>,看到EMQX登录界面即表示成功。
- 默认用户名:
<span leaf="">admin</span> - 默认密码:
<span leaf="">public</span>
登录后请立即修改默认密码!
平台二:Debian 12 部署 EMQX
步骤1:更新系统
sudo apt update && sudo apt upgrade -y
步骤2:使用官方脚本安装
# 下载并执行安装脚本
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
# 安装EMQX
sudo apt-get install emqx
步骤3:启动服务
# 启动EMQX
sudo systemctl start emqx
# 设置开机自启
sudo systemctl enable emqx
# 查看状态
sudo systemctl status emqx
预期输出应包含 <span leaf="">Active: active (running)</span>。
步骤4:防火墙配置(如使用UFW)
# 开放端口
sudo ufw allow 1883/tcpsudo ufw allow 18083/tcp
# 重载防火墙
sudo ufw reload
平台三:Docker 部署(通用方案)
Docker方式适用于所有支持Docker的Linux发行版,包括Rocky Linux、Debian、Ubuntu等。
步骤1:安装Docker
Rocky Linux / CentOS:
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
Debian / Ubuntu:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt updatesudo apt install -y docker-ce
步骤2:运行EMQX容器
# 拉取EMQX镜像
docker pull emqx/emqx:5.8.0
# 运行容器
docker run -d \ --name emqx \ -p 1883:1883 \ -p 18083:18083 \ -v emqx-data:/opt/emqx/data \ -v emqx-log:/opt/emqx/log \ --restart always \ emqx/emqx:5.8.0
步骤3:验证容器运行
# 查看容器状态
docker ps | grep emqx
# 查看容器日志
docker logs emqx
五、配置MQTT Broker认证
1. 从FMO获取凭证
- 打开FMO设备,进入菜单
- 找到“凭证 ”选项,长按旋钮
- 系统会生成一组用户名和密码(格式类似
<span leaf="">FMO-XXXX-XXXX</span>) - 记下这组凭证 ,稍后需要在MQTT Broker中配置
2. EMQX面板配置认证

- 登录EMQX管理面板(
<span leaf="">http://你的IP:18083</span>) - 点击左侧菜单“访问控制 ” → “客户端认证 ”
- 点击右上角“创建 ”
- 配置参数:
- 认证方式:
<span leaf="">Password-Based</span> - 数据源:
<span leaf="">内置数据库</span> - 账号类型:
<span leaf="">username</span>
- 认证方式:
- 点击“创建 ”完成
- 进入“用户管理 ”,点击“添加 ”

- 输入FMO生成的用户名和密码,点击“保存 ”
3. 配置FMO后台
- 在电脑上访问
<span leaf="">http://fmo.local</span>(需与FMO在同一局域网) - 进入“参数配置 ”页面

- 填写以下信息:
- 自定义服务器地址 :你的服务器公网IP或域名
- 自定义服务器端口 :
<span leaf="">1883</span> - 服务器名称 :自定义名称(支持中文)
- 在“APRS网络设置 ”中填写APRS PASSCODE

- 访问 APRSdroid 官网的生成页面 :
<span leaf="">https://aprsdroid.org/passcode/</span>。 - 在输入框中输入你的纯呼号 (例如
<span leaf="">BH6SYX</span>,不要加<span leaf="">-7</span>这样的后缀)。 - 点击 “Generate” 或类似按钮,系统就会立即显示出你的 5 位数字 PASSCODE。
- 记下这个数字。
- 点击“重启服务 ”
- 返回FMO控制面板主页,点击“远程控制”,选择自己的中继

4. 测试连接
推荐使用 MQTTX 客户端测试连接性:

- 下载安装MQTTX
- 创建新连接,填入服务器IP、端口1883、用户名和密码
- 点击连接,如显示“已连接”则表示配置成功

六、服务器安全配置(重要!)
为防止未授权访问和滥用,必须配置客户端授权规则。
1. 创建授权数据源
- 登录EMQX面板
- 点击“访问控制 ” → “客户端授权 ”
- 点击“创建 ”,选择“内置数据库”
- 点击“创建 ”
2. 配置管理员权限
- 在授权数据源中点击“权限管理 ”
- 切换到“客户端ID ”栏目,点击“添加 ”
- 客户端ID填写你的FMO设备ID(格式如
<span leaf="">FMO-BH6SYX-XXX-XXX</span>) - 按下表添加权限规则:
| 操作 | 权限 | 主题 |
|---|---|---|
| 发布和订阅时 | 允许 | FMO/REGU/MUTELIST |
| 发布和订阅时 | 允许 | FMO/REGU/SERVER_REMOTE_CONTROL |
| 发布和订阅时 | 允许 | FMO/SERVER_INFO |
| 发布和订阅时 | 允许 | FMO/PROFILE |
| 发布和订阅时 | 允许 | FMO/REGU/MUTELIST/SRV/# |
| 发布和订阅时 | 允许 | FMO/REGU/SERVER_REMOTE_CONTROL/SRV/# |
| 发布和订阅时 | 允许 | FMO/SERVER_INFO/SRV/# |
| 发布和订阅时 | 允许 | FMO/PROFILE/SRV/# |
3. 配置普通用户权限

- 切换到“所有用户 ”栏目,点击“添加 ”
- 按下表配置拒绝规则:
| 操作 | 权限 | 主题 |
|---|---|---|
| 发布时 | 拒绝 | FMO/REGU/MUTELIST |
| 发布时 | 拒绝 | FMO/REGU/SERVER_REMOTE_CONTROL |
| 发布时 | 拒绝 | FMO/SERVER_INFO |
| 发布时 | 拒绝 | FMO/PROFILE |
| 发布时 | 拒绝 | FMO/PROFILE/SRV/# |
| 发布时 | 拒绝 | FMO/REGU/MUTELIST/SRV/# |
| 发布时 | 拒绝 | FMO/REGU/SERVER_REMOTE_CONTROL/SRV/# |
| 发布时 | 拒绝 | FMO/SERVER_INFO/SRV/# |
| 订阅时 | 允许 | FMO/REGU/MUTELIST/SRV/# |
| 订阅时 | 允许 | FMO/REGU/SERVER_REMOTE_CONTROL/SRV/# |
| 订阅时 | 允许 | FMO/SERVER_INFO/SRV/# |
| 订阅时 | 允许 | FMO/PROFILE/# |
4. 服务器安全最佳实践
配置完成后,建议:
- 仅保留MQTT服务端口(1883) ,关闭其他所有非必要端口
- 定期更换MQTT Broker的admin密码
- 监控EMQX面板中的客户端连接情况
七、管理员功能
配置管理员权限后,FMO设备菜单中会出现额外的管理选项:
| 功能 | 说明 |
|---|---|
| 服务器广播 | 设置是否在APRS上广播服务器,24小时无语音活动会自动暂停 |
| 服务器遥毙 | 一键停止服务器,用于特殊情况快速关闭 |
| 编解码器设置 | 高压缩比(纯语音,约1.5KB/s/人)或高保真(SSTV等,约8KB/s/人) |
| 禁言用户 | 可拉黑违规访客,保护服务器安全 |
八、常见问题排查
Q1:FMO无法连接到服务器
检查清单 :
- 服务器防火墙是否开放1883端口
- EMQX面板中用户名密码是否正确配置
- 使用MQTTX测试连接性
- 云服务器安全组是否放行端口
Q2:可以看到服务器但无法广播
可能原因:APRS网络通信问题。检查网络是否可以流畅访问APRS-IS,部分网络可能存在DNS污染。
Q3:服务器列表中找不到我的服务器
- 服务器的APRS广播周期约为10分钟
- 24小时无语音活动,广播会被自动暂停
- 检查FMO后台“参数配置”中的服务器范围设置
Q4:EMQX管理面板无法访问
- 检查18083端口是否开放
- 确认EMQX服务运行状态:
<span leaf="">systemctl status emqx</span>或<span leaf="">docker ps</span>
九、结语
搭建属于自己的FMO语音服务器,不仅是技术能力的体现,更是对业余无线电“探索、创新、自主 ”精神的践行。
FMO的去中心化架构,让每位HAM都能成为网络中的一环,不再依赖任何商业平台。无论你选择Rocky Linux、Debian还是Docker,都能轻松搭建起属于自己的通联服务器。
现在,动手试试吧!当你成功连上自己搭建的服务器,听到第一声来自远方的“信号59”时,那种成就感,值得所有折腾!
参考资料 :
- FMO官方文档:https://bg5esn.com/docs/
- EMQX官方文档:https://www.emqx.com/zh/docs
- APRS PASSCODE获取:https://aprs.org/aprspasscode.html
如果你在搭建过程中遇到任何问题或者其他问题,欢迎在评论区留言交流,共同进步!
这里是BH6SYX,73,我们频率上见!
其他教程:
拿到业余无线电操作证只是第一步:手把手教你申请业余无线电台呼号,电台呼号指配审批(新申请/变更)全流程指南(湖北政务网版)
春风十里,不如电波中的你!景德镇业余无线电ABC三证齐考暨BY5NC纪念通联活动圆满落幕
标题:硬核HAM必看!FMO语音服务器Rocky Linux、Debian、Docker全平台搭建教程
作者:shuaiqijun
地址:https://shuaiqijun.com/articles/2026/04/01/1775031418904.html

