Настройка MQTT-брокера Mosquitto на OpenWrt
Установка оказалась довольно простой, а вот после неё я словил небольшую проблему с правами доступа к файлу паролей. Поэтому оставлю здесь заметку, вдруг кому-то тоже пригодится.
Обновляем список пакетов и ставим брокер
Открываем файл конфигурации:
Добавляем ниже нужные параметры:
Создаём файл с паролем и пользователем, в моём случае имя пользователя esp:
Система попросит ввести и подтвердить пароль. После этого в файле появится строка вида esp:$6$... - это хеш пароля.
Важно: -c создаёт файл заново. Если добавляете нового пользователя в существующий файл - используйте mosquitto_passwd без -c.
Запускаем брокер:
Пробуем подключиться - и..... ничего не происходит. Надо бы понять почему. Пойдем посмотрим логи:
И видим:
Смотрим права на файлы:
Файлы принадлежат root:root с правами 600
А теперь смотрим, под кем реально работает брокер:
Пользователь - mosquitt (усечённое mosquitto до 8 символов), а не root.
Вот в чём причина. Демон работает не от root, а под отдельным пользователем, и физически не может прочитать файлы, принадлежащие root с правами 600. Отсюда и ошибка.
Проверяем, что группа существует:
Группа на месте. Значит, просто меняем владельца файлов и права
Перезапускаем:
Проверяем логи:
Теперь видим долгожданное:
Брокер запустился и слушает порт 1978.
Да, я знаю, что выставлять MQTT-порт напрямую наружу не самый безопасный вариант, но у меня там некритичная инфраструктура, поэтому мне такой вариант подходит.
Порт 1978 нужно открыть. Через LuCI: Network → Firewall → Traffic Rules, либо вручную в /etc/config/firewall:
Затем нужно перезапустить firewall
Теперь при наличии DDNS или белого IP адреса на роутере - можно подключиться к mqtt брокеру из любой точки планеты =)
Статья основана на реальном разборе конфигурации Mosquitto 2.0.18 на OpenWrt. Все команды проверены =)