Mosquitto: 配置 Mosquitto 连接到另一台服务器(桥接)

本文档属于桥接指南的一部分。您可以在此处查看完整指南:如何连接 Mosquitto 服务器(桥接)

👋 欢迎查阅 Stackhero 文档!

Stackhero 为您提供一个全托管的 Mosquitto MQTT cloud 环境,专为高可靠性和灵活性设计:

  • 无限制的消息吞吐量和数据传输,确保您的工作流不会受到人为限制。
  • 通过您自有的外部 API 实现无限制的设备认证,让设备接入和访问管理更加便捷。
  • 高级 ACLs,可对主题、用户和操作进行精细化权限控制。
  • 提供自定义域名,内置HTTPS,为您的终端提供安全且具备品牌形象的访问入口(例如:https://mqtt.your-company.com)。
  • 一键升级,轻松应用功能改进或安全补丁,无需繁琐操作。
  • 始终如一的高性能强安全性,每个实例均运行在专属私有基础设施上。

加速您的 IoT 项目,降低运维负担。只需几分钟,您即可拥有一个安全、可用于生产环境的 Mosquitto MQTT cloud hosting 实例。

在此示例中,远程服务器将使用专用用户通过 TLS 加密连接到 Stackhero 实例,以实现最大安全性。

首先,在 Stackhero MQTT 实例上创建一个新用户。我们称之为 bridge-1,密码为 secretPassword

接下来,在远程 Mosquitto 服务器上,您可以通过在 mosquitto.conf 配置文件(通常位于 /etc/mosquitto/mosquitto.conf)的末尾添加以下行来进行编辑:

# TODO: 将 "<XXXXXX>.stackhero-network.com" 和 "<PORT_TLS>" 替换为您的 Stackhero 实例信息
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>

# TODO: 将 "bridge-1" 和 "secretPassword" 替换为新创建用户的凭据
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword

start_type automatic
try_private true

# 要共享的主题、方向和 QOS。
# 注意,“both” 似乎由于未知原因不起作用。
topic # out 2
topic # in 2

# 启用 TLS 连接以加密远程 Mosquitto 服务器和 Stackhero 实例之间的数据。
bridge_insecure false
bridge_capath /etc/ssl/certs

在使用新配置重启 Mosquitto 之前,请确保远程服务器上存在 TLS 证书。

检查 /etc/ssl/certs 目录是否存在并包含文件,使用命令:

ls /etc/ssl/certs

如果存在并包含文件,您可以简单地重启您的 Mosquitto 服务器。

如果不存在,您可以考虑执行以下命令之一:

  • Ubuntu/Debian 上,您可以运行:

    sudo apt-get install ca-certificates
    
  • Alpine Linux 上,您可以运行:

    apk add ca-certificates
    

或者,您可以手动下载证书。为此,请使用以下命令将 CA 证书下载到 /etc/mosquitto/isrgrootx1.pem

wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/mosquitto/isrgrootx1.pem

然后,编辑 mosquitto.conf 文件,将 bridge_capath /etc/ssl/certs 替换为 bridge_cafile /etc/mosquitto/isrgrootx1.pem

最后,重启您的 Mosquitto 服务器。

有关桥接配置的更多信息,您可以参考 Mosquitto 官方文档