Не устанавливается защищенное соединение MQTT на некоторых контроллерах

Добрый вечер. Столкнулись со странной проблемой.
Соединение mosquitto через порт 8883 (+SSL) не работает, через 1883 работает.
tcpdump.txt (4,5 КБ)
diag_AZXB7W4X_2025-02-18-14.15.30.zip (107,5 КБ)

Конфигурация на контроллерах одинаковая, но конкретно этот контроллер не может подключиться через 8883, хотя раньше работал.

mosquitto_pub c SSL:
Client IQ375000_TEST_CLIENT sending CONNECT
и так висит, ничего больше происходит.

Без SSL:

Client IQ375000_TEST_CLIENT_NO_SSL sending CONNECT
Client IQ375000_TEST_CLIENT_NO_SSL received CONNACK
Client IQ375000_TEST_CLIENT_NO_SSL sending PUBLISH (d0, q1, r0, m1, '/iq/IQ140000/test', ... (4 bytes))
Client IQ375000_TEST_CLIENT_NO_SSL received PUBACK (Mid: 1)
Client IQ375000_TEST_CLIENT_NO_SSL sending DISCONNECT

Одинаковое поведение на брокере mosquitto и mosquitto_sub/pub.

Не сталкивались ли с чем то подобным?

Добрый день.
Точно ли время на обоих узлах синхронизировано с достаточной для ssl точностью?

Я не вижу ни одного ответа от узла… То есть туда пакеты идут, обратно - нет. То есть они или не доходят до целевого или ответ не возвращается. То есть - по 8883 не отвечает.

Да, время должно быть довольно корректное. Лог снимал вчера, точно до секунды сказать не могу сейчас не могу =/, но судя по времени в дампе должно быть корректное. Интересно то, что после перезагрузки контроллер всё таки заработал, но отвалились другие. Проблема какая-то плавающая.

id клиентов в mosquitto у нас уникальные, генерируем автоматически из названия объекта+timestamp+рандом.
На сервере только видно, что клиент отключился по таймауту.

Насколько я понял TCP‑handshake начинался, сервер ответил ACK, но потом тишина.

Снял дамп с исправного в тот момент контроллера.

tcpdump_IQ376000.txt (33,0 КБ)

Не совсем понимаю куда дальше копать. Видимо нужно смотреть какой траффик на сервере ходит…

Вот тут как раз на каждый пакет есть ответ. То есть вижу две причины, или на сервер не доходят не все пакеты или ответы сервера не доходят клиенту. Если повторится - хороший метод диагностики снять дамп и на сервере и на клиенте.

1 лайк

Дамп с сервера пока не снимали, но получили другую информацию.

Порт 8883 перестает работать, не важно к какому серверу подключаешься. Если создать на том же сервере дополнительный порт (мы создали 5050), то к нему подключается.

А если использовать VPN, например? Исключаете то что провайдер его блокирует?

Не похоже, после перезагрузки обычно работает.

Я нашел вот такую картину:

ss -atp | grep 8883


LISTEN     0      128        *:18883                    *:*                     users:(("mosquitto",pid=367,fd=7))
FIN-WAIT-1 0      1      13.19.228.207:36970                45.130.9.235:8883                 
FIN-WAIT-1 0      1      13.19.228.207:36996                45.130.9.235:8883                 
FIN-WAIT-1 0      1      13.19.228.207:36980                45.130.9.235:8883

Кажется mosquitto ожидает закрытия сессий и зависает в таком состоянии? Может это влиять?

Нет, эти записи появляются во время моих тестов, когда с mosquitto_pub пытаюсь достучаться до сервера.

Вот да.

Если остановить сам брокер и, например, пощупать с помощью mosquitto_sub - как я понимаю тоже нет ответа? А если вместо перезагрузки разорвать сессию провайдера и снова подключиться? Или, как предлагал - отправить трафик в VPN?
То есть судя по тому что вижу не проходит трафик на порт.

1 лайк

Верно, ответа нет.

Тоже думаю об этом, щас найду какой-нибудь контроллер и организую.

Вчера проверили. Разрыв сессии оператора не помог, а переключение симки помогло 0_о. Провели тест несколько раз, тест воспроизвелся - на 8883 ответа нет, на 5050 работает.

Насколько это вероятно? Вы сталкивались?
Сегодня еще раз перепроверим уже с физическим доступом к контроллеру.

Ну, один оператор, получается, фильтрует трафик.

Не именно с mosquitto, но пару раз замечал что “внезапно” переставал идти трафик через vpn туннель на нестандартном порту.
Техподдержка оператора - ничем не помогла, стандартные “выключите-включите оборудование” и признавать проблему не хотели. Хотя у одного было “у вас сорее всего вирус”. Таким образом, как понял из статей в интеренета происходит борьба с потребителями “безлимитного” (сарказм) трафика. То есть канал продан многократно и физически в него все абоненты не поместятся.

Поменяли порты на 5050, пока полет лучше. Наблюдаем.

Ну, весьма похожи на козни оператора, да.