Azure Ubuntu虚拟机Mosquitto MQTT Broker对外开放配置方法
解决Azure Ubuntu虚拟机上Mosquitto MQTT Broker的外部访问问题
1. 检查Mosquitto的监听绑定配置
默认情况下,Mosquitto可能仅绑定本地回环地址(127.0.0.1),导致外部设备无法连接:
- 打开Mosquitto主配置文件:
sudo nano /etc/mosquitto/mosquitto.conf - 找到或添加
listener配置项,修改为监听所有网卡地址:
(listener 1883 0.0.0.00.0.0.0表示监听虚拟机的所有网卡,包含公网和内网IP) - 保存文件后重启Mosquitto服务:
sudo systemctl restart mosquitto - 验证监听状态,确保服务不是仅监听localhost:
sudo netstat -tulpn | grep mosquitto
输出需包含0.0.0.0:1883或虚拟机公网IP:1883,而非仅127.0.0.1:1883
2. 配置Azure网络安全组(NSG)
Azure虚拟机的网络访问受**网络安全组(NSG)**管控,这是外部访问的核心关卡,仅配置本地ufw不足以开放端口:
- 登录Azure门户,找到目标虚拟机,进入「网络」选项卡
- 查看虚拟机关联的NSG,点击进入NSG配置页面
- 添加入站安全规则:
- 源:选择「任何」(或指定允许访问的外部IP范围)
- 源端口范围:
* - 目标:选择「任何」
- 目标端口范围:
1883 - 协议:TCP
- 动作:允许
- 优先级:设置为比默认拒绝规则更高的数值(例如100,数值越小优先级越高)
- 确保该规则应用到虚拟机的网络接口或子网
3. 确认Ubuntu本地防火墙(ufw)规则
再次验证本地防火墙规则是否生效:
- 查看当前ufw状态:
sudo ufw status - 若未看到
1883/tcp ALLOW Anywhere的规则,添加规则:sudo ufw allow 1883/tcp - 重载ufw使规则生效:
sudo ufw reload
4. 验证外部访问
完成配置后,从外部设备测试:
- 用nmap扫描虚拟机公网IP的1883端口:
nmap -p 1883 <你的虚拟机公网IP> - 或用MQTT客户端直接测试连接,比如订阅测试主题:
mosquitto_sub -h <你的虚拟机公网IP> -t test/topic,同时在虚拟机内发布消息:mosquitto_pub -h localhost -t test/topic -m "test message",若外部能收到消息则配置成功
内容的提问来源于stack exchange,提问作者Harry Lime
相关产品推荐
相关产品推荐

