Ok, isso tem me dado um loop nos últimos dias.
Eu tenho o Mosquitto MQTT 1.4.10 com instalação habilitada para WebSockets e rodando no Ubuntu Server 14.4. Qualquer cliente na minha LAN pode se conectar ao broker usando a porta 1883 (mqtt) e 9001 (websockets) e tudo funciona bem. Agora também tenho um endereço IP público e o encaminhamento de porta de configuração em meu roteador DD-WRT para rotear 1883 e 9001 para o endereço do servidor. Desativei meu firewall ( sudo ufw disable ) e confirmei que ele está desativado.
Verificando o log que vejo:
New connection from <<external_ip>> on port 1883
Socket error on client <unknown>, disconnecting
Verifique meu arquivo de configuração e tudo parece ser bom para:
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
Verificado para garantir que o Ubuntu esteja escutando nas portas especificadas:
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
Uma última coisa que me surpreende é que eu posso conectar no 9001 usando sockets web de qualquer cliente conectado à minha LAN ou WAN. Eu pensaria que estar ligado ao endereço de loop-back local permitiria que ele aceitasse apenas conexões de si mesmo.
Alguma idéia de como conseguir que o 1883 aceite o cliente de fora da minha LAN?