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