Wb-mqtt-gpio не может авторизоваться в mosquitto

Здравствуйте.
Настраиваю новый контроллер. В этот раз точно поймал проблему.

mosquitto[1653]: 1729080135: New connection from 127.0.0.1:44924 on port 1883.
mosquitto[1653]: 1729080135: Client <unknown> disconnected, not authorised.
wb-mqtt-gpio[1630]: INFO: [mqtt] connection estabilished with code "5" <unknown>
wb-mqtt-gpio[1630]: WARNING: [mqtt] connection lost

Писал уже о ней здесь: Странный сбой после долгого аптайма.
В общем, суть в том, что после добавления пользователя и установки пароля на брокер у wb-mqtt-gpio возникают проблемы с MQTT авторизацией после каждой перезагрузки контроллера. Причем команда systemctl restart wb-mqtt-gpio решает эту проблему до следующей перезагрузки.

Добрый день.
Сервисы самого контроллера - не должны никак авторизовываться. Верните настройки брокера к умолчальным и проверьте пожалуйста.

Вернул, ошибки пропали. Опять вернул пароль на брокер, опять те же ошибки.
Опять убрал авторизацию - все прошло, опять включил - опять ошибки.
Вот лог с момента загрузки контроллера с паролем на брокере:
mqtt_debug.log (1,4 МБ)
в 10:27:18 перезапустил wb-mqtt-gpio и все заработало.

приложен диагностический архив, доступен только сотрудникам поддержки
(280,8 КБ)

Контроллер новый. Я прям вел конспект когда настраивал:

  1. Обновил все пакеты
  2. Выставил часовой пояс и синхронизировал внутренние часы
  3. Установил пароль на web-интерфейс
  4. Установил пароль на MQTT
  5. Установил htop
  6. Установил NodeRed

Все. В этот момент перезагрузил контроллер и заметил ошибки

Настройки mosquitto каким-то образом затрагивают возможность подклбчаться к контроллеру с localhost?

Ошибка, кстати возникает сразу после добавления пользователя в mosquitto и systemctl restart mosquitto

Что такое “добавление пользователя”?
Пожалуйста - опишите что и где меняете, какого поведения ожидаете после изменений, после каждого из них. Я пока не понимаю и предполагаю что вы просто запрещаете доступ без авторизации вообще всем.

Добавляю двух пользователей:

mosquitto_passwd -c /etc/mosquitto/passwd/default.conf mqtadm
....
mosquitto_passwd /etc/mosquitto/passwd/default.conf mqtusr
...

Файл /etc/mosquitto/conf.d/10listeners.conf привожу к виду:

listener 1883
allow_anonymous false
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf

listener 18883 lo
protocol websockets
allow_anonymous true
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf

Файл /etc/mosquitto/acl/default.conf:

user mqtadm
topic readwrite #
topic readwrite $SYS/#

user mqtusr
topic readwrite /devices/#
topic readwrite homeassistant/#
topic readwrite climate/#
topic readwrite iridi/#
topic readwrite fibaro/#

Теперь systemctl restart mosquitto, и wb-mqtt-gpio перестает подключаться, но если перезапустить wb-mqtt-gpio, то подключается успешно.
Все.

Теперь, если вернуть файл /etc/mosquitto/acl/default.conf к виду:

topic readwrite #
topic readwrite $SYS/#

Файл /etc/mosquitto/conf.d/10listeners.conf к виду:

listener 1883
allow_anonymous true
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf

listener 18883 lo
protocol websockets
allow_anonymous true
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf

Удалить пользователей:

mosquitto_passwd -D /etc/mosquitto/passwd/default.conf mqtadm
mosquitto_passwd -D /etc/mosquitto/passwd/default.conf mqtusr

После systemctl restart mosquitto wb-mqtt-gpio всегда подключается успешно.

А где доступ, локальный и анонимный с 127.0.0.1 на 1883?

Расскажите тогда, пожалуйста, как правильно сделать, что бы все было корректно, и доступ к брокеру был запаролен?
Вот ваша документация: Установка пароля на MQTT брокер. Вроде все по ней сделано…

Суть в том, что при моих конфигах все работает, в том числе и wb-mqtt-gpio. Смущает только то, что сервис нужно перезапускать после загрузки контроллера.

В этой документации описан механизм установки авторизации. Он не учитывает работу сервисов, совсем. Оценить влияние и выбрать конфиг - это уже задача проектировщика.
Если требуется какая-то специальная конфигурация - то ее нужно разрабатывать отдельно.
В инструкции по защите приведен пример конфигурации.

Не совсем понятен ваш ответ, например, у меня сценарий воспроизводится, включена авторизация mosquitto и при этом wb-mqtt-gpio спамит в журнал ошибки. После рестарта сервиса в логах тишина. Поведение сервиса некорректное.

Если я создам явно неправильную конфигурацию, требующую авторизацию при доступе с localhost - да, будут ошибки. Это ожидаемо.

И как это влияет на то что после рестарта службы ошибки перестают сыпаться?

Я, конечно, могу проверить. Но какова цель подобной проверки? То есть любой эксперимент должен либо подтвержать либо отпровргать гипотезу. Тут гипотеза звучит так: “Определить будет ли свыдавать ошибки сервис если неправильно сконфигурировать брокер”.

Проверить что? Непонятна ваша логика, некорректный конфиг приводит к ошибкам wb-mqtt-gpio - спору нет, это логично. Но почему после рестарта сервиса ошибок нет — не понятно. Возможно это интересно только мне =)

Поддерживаю Леонида полностью. После рестарта, сервис wb-mqtt-gpio штатно запускается и работает без ошибок. Да и вообще при полном запрете анонимных подключений через 1883 порт, ни каких проблем не возникает кроме как с этим сервисом, и то проблема решается его перезагрузкой.

1 лайк

Сервисы работают с брокером. Для работы сервисов - им нужен доступ к нему. Если сервис начинает работать через сокет, например - то это совершенно нештатно и я не вижу смысла обсуждать “а что будет если еще вот это запретить”. То есть экспериментировать - можно, но в чем смысл? Запретить доступ сейчас чтобы столкнуться с проблемой работы (каого-то) сервиса потом?
То есть - это нештатно, не предусмотрено документацией и заниматься подобным можно - но воспроизводить не планирую.

Тогда расходимся, уговаривать производителя обратить внимание на проблему уже надоело :)) давайте закроем топик :)))

Производитель не видит проблемы в том, что вам нужно просто закрыть безпарольный доступ, вы делаете это по инструкции к ВБ, один из сервисов вб при этом перестает раотать корректно, потому что этот сервис настроен на безпарольную работу. Хотите работать по паролю - вот вам инструкция. Чтото отвалилось при работе с паролем? Так простите это вы дофига хотите :slight_smile: Узнаю фирменный стиль техподдержки ВБ :slight_smile:

Я решил проблему добавлением еще одного слушателя в mosquitto на другой порт, а 1883 оставил только с локальным доступом.