如何在互联网上使用MQTT?

9

目前,我成功地运行了一个mosquitto代理程序,在本地网络中订阅主题并使用客户端发布消息。

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

我应该设置两个mosquitto代理程序,分别用于每个本地网络吗?


2
未来的读者:路由器端口转发时,请使用“Portforward Network Utilities”软件或canyouseme.org测试您的端口是否成功转发。在防火墙中添加入站和出站规则。尝试通过使用全局IP发布/订阅其他本地网络。 - Jorn.Beyers
4个回答

9

另一个本地网络的电脑需要从互联网访问,因此如果它在防火墙后面,则需要在路由器内设置端口转发规则。该规则需要将公共IP地址的流量转发到您经纪人的内部LAN私有IP地址。

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


谢谢。我通过配置路由器成功打开了两个端口。我使用“端口转发网络工具”软件检查了一下我的端口是否已经打开,结果是已经打开了。现在,如果我想将客户端连接到另一个本地网络中的代理服务器,我应该使用哪个IP地址?我猜应该使用全局IP地址,并加上某种扩展来确定我要连接到哪个本地IP地址? - Jorn.Beyers
哦不……你只需要连接到端口1883(或8883)上的全局IP。路由器会为您完成工作,将请求转发到端口1883(或8883)上的本地IP。 - ppatierno
谢谢您的帮助,我成功连接了两个本地网络。 - Jorn.Beyers

4
由于 mqtt 使用 tcp 连接,以下是一种安全的实现方式:
A 是一个位于防火墙后面的私有代理服务器, B 是另一个位于防火墙后面的私有代理服务器, C 是互联网上的云代理服务器。
在 A 上设置到 C 的桥接连接,并在 A 上配置。这将由 A 创建到互联网的安全 tcp 链接。
在 B 上设置到 C 的桥接连接,并在 B 上配置。这将由 B 创建到互联网的安全 tcp 链接。
这将创建一个更安全的桥接连接,即使您没有路由器或防火墙控制权也可以实现。

3
这完全取决于您的系统需要如何工作,但您可以使用多个代理(每个网络一个),然后在代理之间创建所谓的桥接。
这样做的好处是,如果某个网络发生故障,每个网络都可以继续独立工作。
桥接还允许您控制在站点之间共享哪些消息。有关如何创建桥接的详细信息,请参阅mosquitto.conf手册页:

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

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


0

以下是允许私人空间(家庭)中的MQTT服务器公共连接的步骤:

  1. 在您的路由器上允许端口转发

    公共端口1883应该被转发到私有端口1883 转发请求的IP地址应该是您家庭/私有网络中MQTT服务器/PC的IP地址

  2. 更新Mosquitto配置以允许公共侦听器

    在#listener port-number [ip address/host name]下添加行侦听器1883 0.0.0.0 这将允许来自任何源的1883端口请求由您的MQTT处理

  3. 重新启动MQTT

在尝试了许多不同的配置更改后,我成功地通过遵循以上步骤将我的MQTT服务器开放给公共/互联网流量。


1
这不是一个好主意,因为通过你的设置,你会将未加密的流量暴露给外部世界。 - woodz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接