信息

信息

好吧,过去几天这件事一直困扰着我。

信息

我已在 Ubuntu Server 14.4 上安装并运行启用了 WebSockets 的 Mosquitto MQTT 1.4.10。我的 LAN 上的任何客户端都可以使用端口 1883 (mqtt) 和 9001 (websockets) 连接到代理,一切正常。现在,我还有一个公共 IP 地址,并在我的 DD-WRT 路由器上设置了端口转发,以将 1883 和 9001 路由到服务器的地址。我已禁用防火墙 (sudo ufw 禁用) 并确认它已被禁用。

问题

  1. 我将运行 OwnTracks 的手机连接到本地 WiFi。我输入 MQTT 服务器 IP 和端口 1883,它就可以正常工作。我输入公共 IP 和端口 1883,它就可以正常工作。然后我断开与本地 WiFi 的连接,这样我就只能使用我的蜂窝网络了。我尝试使用我的公共 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    

最后让我困惑的是,我可以使用任何连接到我的 LAN 或 WAN 的客户端的 Web 套接字连接到 9001。我认为绑定到本地环回地址将允许它仅接受来自其自身的连接。

关于如何让 1883 接受来自我的 LAN 之外的客户端,有什么想法吗?

相关内容