Невозможно подключиться к моему локальному облачному брокеру MQTT.

Я следовал инструкциям по настройке Mosquitto на CentOS 7, предоставленным digital Ocean . Я считаю, что большая часть вещей настроена правильно, я смог следовать всем инструкциям, немного углубившись в поиск решений для некоторых устаревших инструкций. Но я могу подписаться и публиковать сообщения в теме, когда захожу на свой сервер.

Однако я хочу получить доступ к своему собственному брокеру MQTT с другого клиента, чем адрес сервера (ага). Я не могу подключиться, что бы я ни пытался - я чувствую, что попытка подключения не доходит до моего брокера (как с использованием онлайн-просмотра, такого как https://hobbyquaker.github.io/mqtt-admin/ , так и с помощью локально установленного средства просмотра) например MQTT explorer ).

Мой mosquitto.conf довольно прост, и я еще больше упростил его, чтобы разрешить анонимные соединения, но с TLS как для веб-сокетов через порт 8083, так и (по умолчанию?) mqqt через порт 8883.

Полный файл mosquitto.conf (обновлен после реакции Хафгаара):

      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 serverкconnect 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 был еще один (программный) брандмауэр, который мне также пришлось настроить. Когда я открыл порты в этом брандмауэре, я смог войти в систему.

0 ответов

Другие вопросы по тегам