⚠️ 此文档已过时

4.0 已作为默认配置,3.x.x 版本的服务器设置已过时。请访问 FMO 语音服务器搭建指南,获取最新教程。 3.0版本更新特别感谢 BI1THT。

什么是JWT

JWT(JSON Web Token)是一种开放标准,如果您对jwt非常感兴趣,可访问 jwt.io 学习关于jwt的更多知识。在此我将以简易的说明,讲述2.0和3.0区别:

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

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

在3.0.0机制下:服务器登录日志里记录的,将不再是无法识别的设备来源,而是各个设备独一无二的呼号和您的唯一标识;此外,服务器的关键信息将仅在fmo设备内部被处理,从协议层面杜绝了用户查看服务器密码的可能,大大减少了暴露风险。另外过期机制将保证即使密钥泄漏,对方也无法长时间利用您的密钥进行破坏。

我们强烈建议用户尽快升级3.x.x 版本服务器,以带来更好的安全性。

FMO如何广播

FMO采用“代理广播”的方式广播爱好者所搭建的MQTT Broker。具体原理可访问aprs.org: 《Build a High-Speed Data Exchange HamNet Based on APRS-IS》 By BG5ESN 了解FMO的广播工作原理。

详细操作说明

STEP1: 安装

FMO使用MQTT Broker进行数据交换,我们建议您安装EMQX的MQTT Broker(或Mosquito附带JWT插件版本),您可以根据自己的需求选择合适的MQTT Broker进行搭建。在这里我们简述如何使用EMQX版本进行安装。 访问

EMQX官网

按照官方文档进行安装和配置。确保您的MQTT Broker能够正常运行,并能够接受来自FMO设备的连接。

提示 EMQX的docker版本在您重启容器后,会恢复默认18083登陆端口的登陆信息,该部分可能有安全隐患,请仔细确认后使用。

STEP2: 生成Secret

启动您的FMO,点击[菜单]->[凭证],如果此时Secret内为空,您可以[长按]旋钮,以生成一个完整的Secret。该Secret由大小写字母+数字组成。长度共32自字节(256bit)。由于生成的Secret非常长,为了方便大家获取,这里提供了一个快捷方法用以快速复制此处长串的Secret, 请访问fmo后台配置网页(fmo.local或ip地址直接访问),进入[参数设置],找到[服务器设置]章节。在此处,您可以找到Secret复制相关操作说明,请按照操作,并复制Secret。

STEP3: 设置EMQX服务器

  • 登陆您的MQTT 18083端口 进入后台设置。
  • 点击左侧竖栏->[客户端认证],进入客户端认证设置界面
  • 在客户端认证设置界面,点击右上角 [+创建],认证方式选JWT,并点击下一步
  • 数据源无需选择,点击下一步
  • 配置参数页面,按照下述参数进行配置
    选项
    JWT来自于 password
    加密方式 hmac-based
    Secret 在此处粘贴您在STEP2所获得的Secret
    Secret使用base64编码
    过期后断开连接

Payload是用来设置特殊的用户绑定,这里可以对授权进行二次验证。我们点击[添加]并增加以下2个参数

Claim Expected
cid ${clientid}
call ${username}

说明:这里使用了verify_claim技术,verify_claim可一让指定的jwt字符串和用户所登陆的参数进行一比一绑定。

ℹ️主题安全性说明:FMO在出厂时即通过ACL,在fmo的jwt中遇先规定了登陆权限,所以您无需再在服务器上设置相应登陆权限。如果您有更强的安全性要求,可以按照您的需求自行设置主题安全性。

STEP4: 设置并广播服务器信息

FMO内置了一个网页,您可以通过该网页配置需要广播的信息。请严格按照网页的指导说明进行配置即可。 通常来说需要配置如下内容

配置项 说明
自定义服务器地址 可以是IP或域名,需要直接指向您的服务器地址
自定义服务器端口 常规非加密端口为1883,需要直接指向您的服务器地址
APRS PASSCODE 这是您登录APRS的密码,可以在APRS官网申请
服务器名称 这是您服务器的名称,支持中英文,设置后,会显示在您的FMO上
APRS个性化消息 这是您可以自定义的APRS消息内容,便于在网络中识别您的设备
服务范围 您可以规定您的服务器所覆盖的范围

当您配置完毕后,您应当可以在自己的服务器列表中看到您自己的服务,首先请尝试登陆您的服务器。如果登陆失败,请仔细检查设置。 如仍然无法解决,可在群内进行沟通咨询(我们不提供服务器相关技术支持,需要您自行研究)。

请确保您的服务器属于活动状态(活动状态:您登陆于自己的服务器,并在24小时内,服务器上有活动语音)。然后在十分钟内,您的fmo将开始您服务器的第一次广播。

至此您的FMO服务器已设置完毕。

服务器部署合规和须知

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

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

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

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

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

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

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

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

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