硬核HAM必看!FMO语音服务器Rocky Linux、Debian、Docker全平台搭建教程

  |   0 评论   |   0 浏览

告别中心化服务器,打造属于你自己的去中心化业余无线电通联网络

各位业余无线电爱好者,大家好!你是否厌倦了商业语音平台的各种限制?是否想拥有一个完全自主可控的通联服务器?今天,我们就来聊聊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. 服务器配置建议

配置项最低要求推荐配置
CPU1核2核
内存1GB2GB
带宽2Mbps3Mbps以上
系统LinuxRocky 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设备已完成以下操作:

  1. 连接WiFi (仅支持2.4G网络)
  2. 完成呼号认证 :通过CRAC官方数据库认证,等待审核通过(约1个工作日)
  3. 设置网格坐标 :在菜单中设置你的位置信息
  4. 获取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获取凭证

图片

  1. 打开FMO设备,进入菜单
  2. 找到“凭证 ”选项,长按旋钮
  3. 系统会生成一组用户名和密码(格式类似 <span leaf="">FMO-XXXX-XXXX</span>
  4. 记下这组凭证 ,稍后需要在MQTT Broker中配置

2. EMQX面板配置认证

图片

  1. 登录EMQX管理面板(<span leaf="">http://你的IP:18083</span>
  2. 点击左侧菜单“访问控制 ” → “客户端认证
  3. 点击右上角“创建
  4. 配置参数:
    • 认证方式:<span leaf="">Password-Based</span>
    • 数据源:<span leaf="">内置数据库</span>
    • 账号类型:<span leaf="">username</span>
  5. 点击“创建 ”完成
  6. 进入“用户管理 ”,点击“添加
    图片
  7. 输入FMO生成的用户名和密码,点击“保存

3. 配置FMO后台

  1. 在电脑上访问 <span leaf="">http://fmo.local</span>(需与FMO在同一局域网)
  2. 进入“参数配置 ”页面
    图片
  3. 填写以下信息:
    图片
    • 自定义服务器地址 :你的服务器公网IP或域名
    • 自定义服务器端口<span leaf="">1883</span>
    • 服务器名称 :自定义名称(支持中文)
  4. 在“APRS网络设置 ”中填写APRS PASSCODE
    图片
  • 访问 APRSdroid 官网的生成页面<span leaf="">https://aprsdroid.org/passcode/</span>
  • 在输入框中输入你的纯呼号 (例如 <span leaf="">BH6SYX</span>,不要加 <span leaf="">-7</span> 这样的后缀)。
  • 点击 “Generate” 或类似按钮,系统就会立即显示出你的 5 位数字 PASSCODE。
  • 记下这个数字。
  1. 点击“重启服务
  2. 返回FMO控制面板主页,点击“远程控制”,选择自己的中继
    图片

4. 测试连接

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

图片

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

六、服务器安全配置(重要!)

为防止未授权访问和滥用,必须配置客户端授权规则。

1. 创建授权数据源

  1. 登录EMQX面板
  2. 点击“访问控制 ” → “客户端授权
  3. 点击“创建 ”,选择“内置数据库”
  4. 点击“创建

2. 配置管理员权限

  1. 在授权数据源中点击“权限管理
  2. 切换到“客户端ID ”栏目,点击“添加
  3. 客户端ID填写你的FMO设备ID(格式如 <span leaf="">FMO-BH6SYX-XXX-XXX</span>
  4. 按下表添加权限规则:
操作权限主题
发布和订阅时允许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. 配置普通用户权限

图片

  1. 切换到“所有用户 ”栏目,点击“添加
  2. 按下表配置拒绝规则:
操作权限主题
发布时拒绝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无法连接到服务器

检查清单

  1. 服务器防火墙是否开放1883端口
  2. EMQX面板中用户名密码是否正确配置
  3. 使用MQTTX测试连接性
  4. 云服务器安全组是否放行端口

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”时,那种成就感,值得所有折腾!


参考资料


如果你在搭建过程中遇到任何问题或者其他问题,欢迎在评论区留言交流,共同进步!
这里是BH6SYX,73,我们频率上见!

其他教程:

拿到业余无线电操作证只是第一步:手把手教你申请业余无线电台呼号,电台呼号指配审批(新申请/变更)全流程指南(湖北政务网版)

从“小白”到“火腿”:手把手教你如何考取业余无线电操作证

春风十里,不如电波中的你!景德镇业余无线电ABC三证齐考暨BY5NC纪念通联活动圆满落幕


标题:硬核HAM必看!FMO语音服务器Rocky Linux、Debian、Docker全平台搭建教程
作者:shuaiqijun
地址:https://shuaiqijun.com/articles/2026/04/01/1775031418904.html