【问题标题】:Can I use any other port than the default for MQTT with TLS-authentication?除了带有 TLS 身份验证的 MQTT 的默认端口,我可以使用任何其他端口吗?
【发布时间】:2022-09-27 11:48:24
【问题描述】:
我在我的本地网络上运行的树莓派上设置了一个蚊子经纪人。我已经使用 python 中的 paho-mqtt 包在本地测试了这个,但是我想远程访问这个代理(在我的本地网络之外)。
据我了解,最安全的方法是使用 TLS 身份验证并将 mosquitto 配置为侦听端口 8883,而不是打开可以嗅探登录凭据的未加密的 1883 端口。这就是我的问题开始的地方,因为我怀疑我的 ISP 不允许将端口 8883 转发到我的 RPi 的(静态)IP 地址。 (无论我尝试什么,端口都不会打开,并且我尝试过用谷歌搜索这个特定问题。)
所以我的问题是:
是否可以使用默认 1883 或 8883(我的 ISP 希望允许打开)以外的其他端口来访问我本地托管的 mosquitto-broker?例如,我理解的高价值端口之一不是为任何东西保留的。
我正在想象通过使用我的外部 IP 地址与此端口 (xxx.xxx.xxx.xxx:yyyyy) 连接到代理,并将此数据隧道传输到本地网络上的 8883 端口,或配置 mosquitto 进行侦听在选定的端口上。关于如何解决此问题的任何提示?
-
请注意,您的连接可能位于 NAT 之后(info 和 options)。拥有动态 IP (see this) 也很常见(特别是与消费者连接),这会使事情复杂化(并且您与 ISP 的合同可能会禁止托管服务)。可能值得考虑每月花几美元让云虚拟机运行代理。
标签:
networking
port
mqtt
portforwarding
mosquitto
【解决方案1】:
您可以使用任何您想要的端口(或者您的操作系统允许的端口)。 MQTT 按照惯例使用某些端口,但不限于使用这些端口。如果您愿意,甚至欢迎您在端口 1883 上进行加密。
你需要做四件事:
- 正确编写
listener 配置指令以使用您要使用的端口,并确保您正在侦听 0.0.0.0 以便侦听所有网络接口,或特定网络接口的 IP 地址听着。
- 在
listener 指令之后正确配置加密
- 确保您选择的端口可以通过您的服务器可能正在运行的任何防火墙访问
- 正确配置任何客户端以使用您配置的端口并使用您配置的加密
如果您想通过 Internet 访问它,您还需要在路由器上打开一个端口。
如果您确实可以通过 Internet 访问它,请要求进行身份验证。加密不会阻止陌生人连接到您的经纪人,它只会停止窃听他们。关闭allow_anonymous 并设置一些 Mosquitto 帐户。