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