Mosquitto MQTT Websocket localhost可连但IP无法连接问题
Mosquitto 2.0.14 Websocket端口局域网无法连接故障修复
根因判断
从启动日志可以直接定位核心问题:
- 1883端口的MQTT监听器启动时明确打印了绑定IPv4、IPv6套接字的日志,默认监听所有网卡地址
- 9001端口的Websocket监听器启动日志仅提示打开端口,未指定绑定地址时,Windows平台下的Mosquitto 2.0.14默认只会绑定环回地址
127.0.0.1,不会对外网卡暴露端口,这就是localhost能连、局域网IP连不上、telnet 9001端口不通的直接原因。之前手动追加绑定IP不生效,基本是配置语法写错或者系统防火墙拦截导致。
修复步骤
- 修正配置文件写法
Mosquitto的listener配置语法为listener <端口号> [绑定地址],绑定地址必须和端口写在同一行,修改后的mosquitto.conf内容如下:
listener 1883 0.0.0.0 protocol mqtt listener 9001 0.0.0.0 protocol websockets allow_anonymous true
配置里的0.0.0.0代表监听本机所有IPv4网卡的对应端口,包含你的局域网IP 192.168.0.107
- 清理旧进程与放通防火墙
- 打开任务管理器,结束所有正在运行的
mosquitto.exe进程,避免旧进程加载旧配置占用端口 - 打开Windows Defender防火墙高级设置,新建入站规则,允许TCP 1883、9001端口的入站连接,作用域勾选「专用网络」(局域网使用场景)即可
- 以管理员身份打开命令提示符,进入Mosquitto安装目录,重新执行启动命令:
mosquitto -v -c mosquitto.conf
- 验证修复效果
- 查看新的启动日志,9001端口会出现和1883端口一致的
Opening ipv4 listen socket on port 9001.日志,代表监听器已正确绑定到所有网卡 - 本机执行
telnet 192.168.0.107 9001,如果窗口跳转无报错,代表端口已经对外放通 - 前端测试时建议开浏览器无痕模式,避免旧JS缓存导致host配置不生效,连接地址为
ws://192.168.0.107:9001/mqtt,即可正常连接。
内容的提问来源于stack exchange,提问作者IoTian
相关产品推荐
相关产品推荐

