• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Настройка MQTT брокера mosquitto

Алексей.

Active member
Там только теория. А как на практике?
Там определены структуры описывающие Fixed header, Variable header, Payload
определены байтовые и битовые поля
Не понятно что значит на практике?
Вы вам не хочется воспользоваться tcpdump-ом чтоб посмотреть бинарный трафик?
 

Игорь_163

New member
Пример заголовка протокола HTTP:

GET /wiki/HTTP HTTP/1.0
Host: ru.wikipedia.org

А как выглядит заголовок mqtt?
Буду вам очень признателен за ответ.
 

Алексей.

Active member
Игорь_163,
mqtt - бинарный протокол, http - текстовый протокол, бинарный протокол немножко не получается представить в виде текстового
GET /wiki/HTTP HTTP/1.0
Host: ru.wikipedia.org
теорию вам совсем не интересно смотреть, например заголовок Host: появился в спецификации HTTP/1.1 и в HTTP/1.0 может игнорироваться, вы же приводите его как пример.
снять дамп tcp трафика взаимодействия клиента с брокером вы тоже не хотите.
Вы уверены что вам это нужно?
 

laz

New member
Добрый день! Установил Entware 3x на Keeenetic UltraII, установил пакеты mc, mosquitto-nossl, mosquitto-client, прописал файл mosquitto.conf. Запускаю с ключом -с. выводит приглашение # и более ни чего! По команде ps. в процессах mosquitto нет! Куда рыть? Все мозги себе уже заплел...
 

kvint

New member
Тоже пытался настроить mosquitto-nossl на Кинетике, убил на это несколько дней, результата не добился, наверно интелекта не хватило (( В итоге поставил на RP3 и живу пока с ним. Если кто разобрался как правильно настраивать на кинетике, то напишите краткую инструкцию по настройке. Как ставить ВРТ и устанавливать mosquitto написано в интернете, а вот как правильно настроить, лично я найти не смог
 

laz

New member
Разобрался! Я поставил в итоге mosquitto-ssl. При этом появилась возможность добавить пользователя и шифровать для него пароль утилитой mosquitto_passwd. При первом запуске без настоек mosquitto выдаст Error invalid user 'mosquitto'.
Замените в файле mosquitto.conf сточку #user mosquitto на user root и запустите mosquitto -c /opt/ect/mosquitto/mosquitto.conf и Вот! Теперь дело за тонкими настройками конфига, прописыванием users.list и mosquitto.acl, короче, что кому нужно. Можно добавить простой скрипт в init.d для запуска mosquitto при перезагрузке маршрутизатора.
 

leikocid

New member
Доброго дня!, столкнулся со страной проблемой, установлен mosquitto на ubuntu 16.04 там же majorDomo , 9 параметров с датчиков, при запущенном брокере наглухо загружает файловую систему:

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
525 be/3 root 0.00 B/s 7.82 K/s 0.00 % 99.94 % [jbd2/sda1-8]
что нужно отключить или как настроить mosquitto, за ранее спасибо
 

Алексей.

Active member
leikocid, У вас журналирование грузит ФС, может маскита тут и ни при чем вовсе, а диск мучает mysql своими частыми транзакциями, который с мажордомом ставился.
 

leikocid

New member
да, я в курсе что jbd2/sda1-8 это журналирование ext4, проверенно, делаю :~$ sudo systemctl stop mosquitto вся нагрузка пропадает
 

Алексей.

Active member
Маскиту я устанавливал из репов, настраивал только пользователей, запрещал анонимный вход и только, делал последний раз на прошлой неделе, из клиентов только три датчика и пару приложений, посмотрел iotop, фс не нагружена.
 

leikocid

New member
@Алексей.
тоже самое делал, буду искать причину, может majordomo к нему часто обращается тем самым генерируя большой объем данных
 

Алексей.

Active member
Про установку маскиты в статье немножко мало написано, только про настройку. Автор считает что в образе прошивки уже включен и настроен пакет маскиты. Какой скрипт запуска, точнее присутствует в нем секция boot( ) не ясно.
Вы логи с роутера показали бы, может ошибки запуска увидим.
 

mpnnic

New member
приложил системный журнал

Wed Oct 10 16:32:02 2018 daemon.info hostapd: wlan0: STA 7c:8b:ca:0d:b7:e1 IEEE 802.11: authenticated
Wed Oct 10 16:32:02 2018 daemon.info hostapd: wlan0: STA 7c:8b:ca:0d:b7:e1 IEEE 802.11: associated (aid 1)
Wed Oct 10 16:32:02 2018 daemon.warn odhcpd[932]: DHCPV6 RELEASE IA_NA from 0001000118d240ed002421267ee3 on br-lan: no binding
Wed Oct 10 16:32:03 2018 daemon.warn odhcpd[932]: DHCPV6 SOLICIT IA_NA from 0001000118d240ed002421267ee3 on br-lan: ok fdc9:c6d9:21df::9ea/128
Wed Oct 10 16:32:04 2018 daemon.warn odhcpd[932]: DHCPV6 REQUEST IA_NA from 0001000118d240ed002421267ee3 on br-lan: ok fdc9:c6d9:21df::9ea/128
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq-dhcp[1293]: DHCPDISCOVER(br-lan) 7c:8b:ca:0d:b7:e1
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq-dhcp[1293]: DHCPOFFER(br-lan) 10.0.0.127 7c:8b:ca:0d:b7:e1
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq[1293]: read /etc/hosts - 1 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq[1293]: read /tmp/hosts/odhcpd - 1 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq[1293]: read /tmp/hosts/dhcp - 1 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq-dhcp[1293]: read /etc/ethers - 0 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq[1293]: read /etc/hosts - 1 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq[1293]: read /tmp/hosts/odhcpd - 1 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq[1293]: read /tmp/hosts/dhcp - 1 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq-dhcp[1293]: read /etc/ethers - 0 addresses
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq-dhcp[1293]: DHCPREQUEST(br-lan) 10.0.0.127 7c:8b:ca:0d:b7:e1
Wed Oct 10 16:32:05 2018 daemon.info dnsmasq-dhcp[1293]: DHCPACK(br-lan) 10.0.0.127 7c:8b:ca:0d:b7:e1 HOME
 

Алексей.

Active member
приложил системный журнал
А загрузка модулей то где?? Того же dnsmasq нет... если системный журнал смотреть, то интересно на загрузку модулей посмотреть, у вас система давно проснулась и вы показываете подключение клиентов и выдачу им в аренду ip адресов, ожидал увидеть что то типа
Код:
Wed Oct 10 17:53:18 2018 daemon.info dnsmasq[1140]: started, version 2.77 cachesize 150
Wed Oct 10 17:53:18 2018 daemon.info dnsmasq[1140]: DNS service limited to local subnets
Wed Oct 10 17:53:18 2018 daemon.info dnsmasq[1140]: compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP no-DHCPv6 no-Lua TFTP no-conntrack no-ipset no-auth no-DNSSEC no-ID loop-detect inotify
Может при выполнении скрипта запуска маскиты возникли ошибки, в системном журнале могли остаться следы. Вы так и не ответили есть ли в нем (в скрипте запуска маскиты) секция boot( ) или нет, если нет то и не будет запускаться.
Если маскита всё же стартовала и выгрузилась неожиданно, то логи маскиты смотрим в том же журнале (если настройка log_dest syslog работала).
В общем лог вы показали далеко от старта системы, всё самое интересное пропустили.:)
 

mpnnic

New member
[inline][/inline]
А загрузка модулей то где?? Того же dnsmasq нет... если системный журнал смотреть, то интересно на загрузку модулей посмотреть, у вас система давно проснулась и вы показываете подключение клиентов и выдачу им в аренду ip адресов, ожидал увидеть что то типа
Код:
Wed Oct 10 17:53:18 2018 daemon.info dnsmasq[1140]: started, version 2.77 cachesize 150
Wed Oct 10 17:53:18 2018 daemon.info dnsmasq[1140]: DNS service limited to local subnets
Wed Oct 10 17:53:18 2018 daemon.info dnsmasq[1140]: compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP no-DHCPv6 no-Lua TFTP no-conntrack no-ipset no-auth no-DNSSEC no-ID loop-detect inotify
Может при выполнении скрипта запуска маскиты возникли ошибки, в системном журнале могли остаться следы. Вы так и не ответили есть ли в нем (в скрипте запуска маскиты) секция boot( ) или нет, если нет то и не будет запускаться.
Если маскита всё же стартовала и выгрузилась неожиданно, то логи маскиты смотрим в том же журнале (если настройка log_dest syslog работала).
В общем лог вы показали далеко от старта системы, всё самое интересное пропустили.:)
добрый день
спасибо за помощь
скрипт загрузки маскиты /etc/init.d?
#!/bin/sh /etc/rc.common
# Basic init script for mosquitto
# April 2012, OpenWrt.org
# Provides support for the luci-app-mosquitto package, if installed

START=80
APP=`which mosquitto`
USE_UCI_CONFIG=$(uci -q get mosquitto.owrt.use_uci)
if [ $? -eq 1 ]; then
USE_UCI_CONFIG=0
fi

SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1

start() {
if [ "$USE_UCI_CONFIG" -eq 1 ]; then
CONF=/tmp/mosquitto.converted.$$.conf
mosquitto.uci.convert -f $CONF
else
CONF=/etc/mosquitto/mosquitto.conf
fi
service_start $APP -c $CONF
}

stop() {
service_stop $APP
}
 

Алексей.

Active member
Ничего криминального нет, если при загрузки маскита не запускается а при "ручном" запуске стартует, не плохо бы вывести параметры запуска в лог и сравнить то что было при загрузке и то что выполнялось при ручном запуске.
Логи всё же с начала смотреть а не конец который вы предоставили.

П.С. Для удобства комментирования (чтоб ссылаться на конкретную строку) лучше использовать тег CODE
 

Botan

New member
Прошу совета по организации аутентификации клиентов,
правилен ли алгоритм,
для каждого подключаемого клиента генерить mosquitto_passwd пароль,
и применить SSL шифрование?

Планируются разносортные клиенты, сервер со своим доменом.
 

Алексей.

Active member
Botan,
SSL будет скрывать трафик и только, поскольку взаимная аутентификация на ssl в данном случае не используется, то любой желающий сможет установить защищенное соединение с брокером.
Защищенное соединение позволит вам удостоверится в том что брокер именно тот, к которому вы хотели подключиться, а не "человек посередине" контролирующий ваш трафик.
При установлении защищенного соединения проверяйте fingerprint хоста (или подлинность сертификатов если есть такая возможность), если он не тот, значит соединились с хакером.

Аутентификация клиента по логину/паролю позволит брокеру обслуживать только зарегистрированных клиентов.

Можно обойтись и без аутентификация клиентов на брокере не выставляя его видимым с улицы, оставив его только на локал-хосте, а передним построив ssl туннель со взаимной аутентификацией.
 
Сверху Снизу