Web UI и IPV6

Добрый день.

Исследую возможность подключения к WB7 Web UI через ipv6. Адрес ipv6 получаю через интерфейс teredo.
Добился работы nginx через ipv6

Интерфейс грузится, но есть ошибка “Не удалось подключиться к … :18883…” и содержимое далее не выводится.
Выяснил, что порт 18883 использует websockets протокол службы mosquitto.
Настраиваю mosquitto.conf, чтобы слушал на интерфейсах ipv6, файл listeners.conf

listener 1883

listener 18883
protocol websockets

(по руководству mosquitto.conf, если не указать 0.0.0.0 после номера порта, то слушает на интерфйсах ipv4 и ipv6)

Действительно, порт 1883 начинает прослушиваться на интерфейсе ipv6, но порт 18883, на который ругается Web UI - нет.

netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1193/nginx: master
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1155/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1061/sshd
tcp 0 0 0.0.0.0:502 0.0.0.0:* LISTEN 1356/wb-mqtt-mbgate
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 11862/mosquitto
tcp 0 0 0.0.0.0:18883 0.0.0.0:* LISTEN 11862/mosquitto
tcp 0 0 0.0.0.0:4840 0.0.0.0:* LISTEN 1080/wb-mqtt-opcua
tcp6 0 0 :::80 :::* LISTEN 1193/nginx: master
tcp6 0 0 :::53 :::* LISTEN 1155/dnsmasq
tcp6 0 0 :::22 :::* LISTEN 1061/sshd
tcp6 0 0 :::1883 :::* LISTEN 11862/mosquitto
tcp6 0 0 :::6720 :::* LISTEN 1/init
tcp6 0 0 :::4840 :::* LISTEN 1080/wb-mqtt-opcua

Отладка strace подтверждает, что для порта 1883 делается bind() с флагом AF_INET6, а для порта 18883 - только с AF_INET.

Для вебсокетов служба mosquitto использует libwebsockets

ldd /usr/sbin/mosquitto | grep web
libwebsockets.so.8 => /usr/lib/arm-linux-gnueabihf/libwebsockets.so.8 (0xb6c6e000)

Похоже, всё упирается в эту библиотеку. Можно ли выяснить, не отключена ли поддержка IPV6 в этой библиотеке для WB7? Или может mosquitto собран с отключённой опцией IPV6 в части websockets?

Здравствуйте!
Вот похожая тема, посмотрите: MQTT to Modbus TCP

Эту тему видел, там, похоже, недорешали вопрос. Я практически уверен, что дело в поддерже IPV6 либо в libwebsockets либо в mosquitto. Вы (разработчики) пакеты для WB собираете у себя или apt-get их забирает откуда-то из внешних репозиториев из сети (не обратил на это внимание при апдейтах)? В первом случае решить вопрос, конечно, проще.

Я не знаю что ты уже настроил, но у меня работает так.
Меняем настройки в файле /etc/nginx/sites-enabled.default , это настройка nginx.

server {
	#listen   80; ## listen for ipv4; this line is default and implied
	listen   [::]:80 default_server ipv6only=off; ## listen for ipv6

Особое внимание, решетку убираем только у IPV6, в ином случае не заработает.
Также для того чтоб оставить поддержку IPV4 - меняем параметр ipv6only на off.
Далее используй порт 80. У nginx уже по умолчанию настроена переадресация на 18883 порт. Сам MQTT, по крайней мере установленная версия, IPV6 не поддерживает!

1 лайк

nginx у меня работает по ipv6, я выше скрин показал. Настроено было так

server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6

Так работает по 4 и 6.
сделал по-вашему, осталось также и ошибка коннекта та же. Вы скажите, у вас по ipv6 Web UI открывается с полным функционалом?

server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
Ошибка, в этой настройке ты попытался поднять порт 80 2 раза. Зайди в лог, и посмотри, увидишь все ошибки. Сначала поднимается порт 80 IPv4 listen 80, а затем сервер пытается поднять порт 80 на IPv6 listen [::]:80 default_server ipv6only=on.
Перед строкой listen 80; ## listen for ipv4; this line is default and implied должна стоять #, или вообще эту строку удалить. А ipv6only=on переключить в off, тогда у тебя будет работать и IPv4 и IPv6.
Чтобы все заработало, нужно знать IPv6 адрес контроллера. Если ты подключаешься по WI-FI, то в командной строке контроллера нужно набрать ip a, и там найти свой IPv6 по вайфаю. Если подключаешься через кабель, то тогда IPv6 нужно настраивать. По умолчанию для обоих изернет портов он не активен.
Если ты точно знаешь IPv6, то остается только его прописать, и главное установить в Web UI порт 80! У тебя на скрине порт 18883, это значит что ты обращаешься через IPv6 прямо на MQTT брокер, а как я писал в прошлом посте, установленная версия его не поддерживает.
И да, у меня работает через IPv6 Web UI, и все функции доступны.

1 лайк