无需在防火墙中打开端口即可从外部访问 MQTT 代理?

物联网 MQTT
2021-06-19 00:49:20

我希望可以从我的家庭网络外部访问我的 MQTT 代理,但我不太愿意在防火墙中打开一个端口。我想避免使用我的家庭 IP。

在家里有一个未加密的开放代理非常方便,但是如果我要公开它,那将不起作用。我还有什么其他选择?

3个回答

如果您不想转发端口,您基本上有 3 个选项。

  1. 使用云中的代理,以便家中的客户端始终连接到它。使用 TLS 和身份验证,以便其他人无法窃听或注入不需要的消息
  2. 使用云代理并在内部代理和云代理之间架起一座桥梁(您仍然希望在云代理上加密和设置用户名/密码)。这样做的好处是,如果 Internet 连接中断,内部事务仍可继续工作。
  3. 所有外部设备上的 VPN 允许访问您的家庭网络(但是,老实说,您可能必须为 VPN 打开一个端口或拥有一个支持成为 VPN 服务器的路由器)

但是将端口转发到正确配置的(与云代理大致相同)并不是真正的风险。

由于代理是服务器,您必须至少打开一个端口供客户端连接。

因此,您的问题成为在 Internet 上公开服务的特例。

这是通过 DMZ 完成的,通过代理或其他方式强制执行比默认服务更严格的身份验证。如果您的代理位于云端,那只会将您的 DMZ 扩展到云端。

您最简单的方法可能是强化您的代理(禁用匿名客户端)并限制可以通过防火墙连接到它的人(仅允许某些客户端 IP 地址,如果您事先知道它们)。

@hardillb 给出了一个很好的答案,但让我尝试添加一些细节,增加一些“现实生活”的感觉:

  1. 选择一些对公众可用的 MQTT 代理。HiveMQ是一个很好的例子,您可以从描述如何连接到代理试用页面开始

连接到公共经纪人

主机:broker.hivemq.com

端口:1883

Websocket 端口:8000

  1. 选择最适合您的客户端,并将其用于与公共 MQTT 代理的内部代理互连。例如,您的 C 客户端可能是Paho MQTT客户端支持 SSL/TLS,因此您的安全性保持在高水平。

  2. Paho MQTT 嵌入式可以是您外部设备的选择。

  3. HiveMQ 具有即用即付许可政策,因此您可以谨慎考虑。无论如何,您可以查看此页面以获取可用云和测试可用 MQTT 代理的列表。