如何通过互联网使用 MQTT?

How to use MQTT over the internet?

目前,我已经成功地 运行 成为一名 mosquitto 经纪人,订阅主题并向本地网络中的客户发布消息。

如何与位于不同 IP 地址的另一个本地网络通信?

我应该设置 2 个 mosquitto 代理,每个本地网络一个吗?

其他本地网络中的 PC 需要可以从 Internet 访问,因此如果它在防火墙后面,您需要在路由器内部设置端口转发规则。该规则需要将流量从 public IP 地址转发到您代理的内部 LAN 专用 IP 地址。

请记住,MQTT 使用端口 1883 和 8883(用于 SSL)。

这完全取决于您的系统需要如何工作,但您可以使用多个代理(每个网络中一个),然后在代理之间创建所谓的桥梁。

这样做的好处是,如果出现网络中断,每个网络都可以独立于其他网络继续工作。

网桥还允许您控制在站点之间共享哪些消息。有关如何创建网桥的详细信息,请参见 mosquitto.conf 手册页:

http://mosquitto.org/man/mosquitto-conf-5.html

但正如 Paolo 所说,您需要在路由器上为端口 1883/8883 设置端口转发,以将代理暴露在互联网上。

因为 mqtt 使用 tcp 连接,所以还有一个安全的方法如下:

防火墙后面的私人经纪人 A。 B 在另一个防火墙后面的私人经纪人 B。 网上的C云经纪人C.

双向设置A到C的网桥。这必须在 A 上配置。互联网安全 tcp link 将由 A 创建。

双向设置B到C的网桥。这必须在 B 上配置。互联网安全 tcp link 将由 B 创建。

这将创建一个更安全的网桥,即使您无法控制路由器或防火墙也可以这样做。

以下是在私有 space(家庭)

内允许 public 连接到 MQTT 服务器的步骤
  1. 允许在您的路由器上进行端口转发

    public port 1883 should be forwarded to private port 1883 IP Address to forward requests on this port should be of the IP address of MQTT server/PC in your home/private network

  2. 更新 Mosquitto 配置以允许 public 个侦听器

    add line listener 1883 0.0.0.0 under #listener port-number [ip address/host name] This will allow requests from any source on 1883 port to be handled by your MQTT

  3. 重新启动 MQTT

经过多次试验和错误以及许多不同的配置更改后,我可以按照上述步骤成功打开我的 MQTT 服务器以访问 public/internet 流量。