Назад | Перейти на главную страницу

Mosquitto MQTT - Невозможно подключиться с внешнего клиента

Ладно, последние несколько дней это сбивало меня с толку.

Информация

У меня есть Mosquitto MQTT 1.4.10 с включенной настройкой WebSockets и работающий на Ubuntu Server 14.4. Любой клиент в моей локальной сети может подключиться к брокеру через порт 1883 (mqtt) и 9001 (веб-сокеты), и все работает нормально. Теперь у меня также есть общедоступный IP-адрес и настройка переадресации порта на моем маршрутизаторе DD-WRT для маршрутизации 1883 и 9001 на адрес сервера. Я отключил брандмауэр (sudo ufw отключить) и подтвердил, что он отключен.

Проблема

  1. Я подключаю свой телефон с OwnTracks к моему локальному Wi-Fi. Я ввожу IP-адрес сервера MQTT с портом 1883, и он работает. Я ввожу общедоступный IP-адрес с портом 1883, и он работает. Затем я отключаюсь от своего локального Wi-Fi, поэтому я просто использую свою сотовую сеть. Я пытаюсь подключиться снова, используя свой общедоступный IP-адрес и порт 1883, но это не работает.

Проверяя журнал, вижу:

New connection from <<external_ip>> on port 1883
Socket error on client <unknown>, disconnecting

Проверьте мой файл конфигурации, и все выглядит хорошо, чтобы:

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log
log_type all

include_dir /etc/mosquitto/conf.d

listener 1883
protocol mqtt

listener 9001 127.0.0.1
protocol websockets

Проверено, чтобы убедиться, что Ubuntu прослушивает указанные порты:

tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:2216            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:9001            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN     
tcp6       0      0 :::1883                 :::*                    LISTEN     
tcp6       0      0 :::2216                 :::*                    LISTEN    

Последнее, что меня сбивает с толку, это то, что я могу подключиться к 9001 с помощью веб-сокетов с любого клиента, подключенного к моей LAN или WAN. Я бы подумал, что привязка к локальному адресу обратной связи позволит ему принимать только соединения от самого себя.

Есть идеи, как заставить 1883 принимать клиентов из-за пределов моей локальной сети?