无法连接到我的自托管云 MQTT 代理

无法连接到我的自托管云 MQTT 代理

我已按照说明在 CentOS 7 上配置 Mosquitto,由数字海洋提供。我相信我已经正确设置了大部分内容,我能够按照所有说明进行深入研究,找到一些已弃用的说明的解决方案。但是,当我登录到我的服务器时,我能够订阅并向主题发布消息。

但是,我想从与服务器地址不同的客户端访问我自己的 MQTT 代理(呃)。无论我怎么尝试,我都无法连接 - 我觉得连接尝试无法到达我的代理(无论是使用在线查看器还是https://hobbyquaker.github.io/mqtt-admin/以及本地安装的MQTT 探索器)。

我的 mosquitto.conf 非常简单,我进一步简化了它以允许匿名连接,但是对于端口 8083 上的 Web 套接字和端口 8883 上的(默认?)mqqt 都使用 TLS。

完整的 mosquitto.conf 文件(根据 Halfgaar 的反应更新):

allow_anonymous true
#password_file /etc/mosquitto/passwd (I have disabled this to simplify my connection attempt)
log_dest file /var/log/mosquitto.log
log_type all

listener 1883 localhost

listener 8883 0.0.0.0
protocol mqtt # newly added, but still doesn't seem to do anything
certfile /etc/letsencrypt/live/iot.mydomain.com/cert.pem
cafile /etc/letsencrypt/live/iot.mydomain.com/chain.pem
keyfile /etc/letsencrypt/live/iot.mydomain.com/privkey.pem

listener 8083 0.0.0.0
protocol websockets
certfile /etc/letsencrypt/live/iot.mydomain.com/cert.pem
cafile /etc/letsencrypt/live/iot.mydomain.com/chain.pem
keyfile /etc/letsencrypt/live/iot.mydomain.com/privkey.pem

后来我认为默认的 Mosquitto.conf 文件包含更多设置,并在我的配置文件中复制了一份默认设置的新副本,并在文件末尾添加了上述配置。所以现在我有一个带有上述覆盖的默认配置。重新启动 mosquitto 服务成功了。

然后我想这可能和防火墙有关。我检查了端口 1883、8883 和 8083 是否打开firewall-cmd --zone=public --permanent --list-ports,发现部分输出确实报告了8883/tcp 8083/tcp 1883/tcp

指定的日志文件不包含任何尝试连接的信息,所以我对此一无所知。有人能给我指明方向,找到更多线索来解决这个问题吗?

更新根据@Halfgaar 的反应:我更新了配置,绑定到公共地址(我只是重复他说的话,我一点头绪都没有),运行时netstat -n -l -t -p输出如下。尽管我无法从我的笔记本电脑(或任何其他地方)连接到代理。

# netstat -n -l -t -p | grep mosquitto
tcp        0      0 0.0.0.0:8883            0.0.0.0:*               LISTEN      2573/mosquitto      
tcp        0      0 127.0.0.1:1883          0.0.0.0:*               LISTEN      2573/mosquitto      
tcp6       0      0 :::8083                 :::*                    LISTEN      2573/mosquitto      
tcp6       0      0 ::1:1883                :::*                    LISTEN      2573/mosquitto 

更新我也偶然发现了防火墙规则这让我思考我是否能够使用 mqtt 协议连接,因此我也执行firewall-cmd --zone=public --permanent --add-service=mqtt并重新加载了防火墙。

进展不大我已经从出现错误前进Disconnected from serverconnect ETIMEDOUT 1.2.3.4:8883(其中 1.2.3.4 是我的服务器的 IP)。不确定这对进度意味着什么,但我现在和之前的位置不同...

更新的输出iptables -L INPUT -n如下:

# iptables -L INPUT -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

解决了 看来我的 VPS 上还有另一个(软件)防火墙,我也必须配置它。当我也打开该防火墙上的端口时,我就可以登录了。

答案1

您没有绑定到公共网络接口。如果绑定了,netstat -n -l -t -p您可以看到进程正在监听哪些地址。

做:

listener 1883 0.0.0.0

listener 8883 0.0.0.0
certfile /etc/letsencrypt/live/iot.mydomain.com/cert.pem
cafile /etc/letsencrypt/live/iot.mydomain.com/chain.pem
keyfile /etc/letsencrypt/live/iot.mydomain.com/privkey.pem

listener 8083 0.0.0.0
protocol websockets
certfile /etc/letsencrypt/live/iot.mydomain.com/cert.pem
cafile /etc/letsencrypt/live/iot.mydomain.com/chain.pem
keyfile /etc/letsencrypt/live/iot.mydomain.com/privkey.pem

答案2

我要感谢@Halfgaar 的帮助,并试图帮助我解决问题。同时,我还联系了我的 VPS 托管提供商的支持。问题与防火墙有关,但不是我们正在探索的防火墙。还有一个软件防火墙,我也必须打开那里的端口(当然)。我不知道我的 VPS 上还有另一个防火墙处于活动状态。我现在可以登录我的经纪人了!

相关内容