You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HAOS无法连接自建MQTT代理问题排查求助

HAOS虚拟机无法持续连接自建MQTT代理

问题概述

  • 运行在Unraid虚拟机上的HAOS无法稳定连接自建MQTT代理,连接建立后立即发送断开请求
  • MQTT Explorer、Docker版HA开发实例可正常使用相同凭据连接该代理
  • HAOS与MQTT代理网络连通性正常(ping测试通过)

环境细节

  • 网络: 所有设备处于同一子网,曾尝试通过Nginx反向代理使用主机名连接,无效后放弃该方案
  • HAOS: 最新版本,Unraid管理的虚拟机,其他传感器/设备网络连接正常
    • 网络源: br0
    • 网络模型: virtio-net
  • MQTT代理: Unraid Docker容器运行的Mosquitto,通过mosquitto_passwd命令创建用户,加密密码存储在passwds.txt文件中

MQTT代理配置

# mosquitto configuration
per_listener_settings true
listener 8883
protocol mqtt

listener 1883
protocol mqtt

# to run mosquitto securely (with authentication) - RECOMMENDED - uncomment the following code block:
# run `touch '/config/passwd'` then `mosquitto_passwd /config/passwd <user>` within the container to generate the password file and add a user
# https://github.com/cmccambridge/mosquitto-unraid/blob/master/README.md#Authentication
password_file /config/config/passwds.txt

# to run mosquitto unsecurely (without authentication) uncomment the following code block:
# allow_anonymous true

相关日志

HAOS日志

DEBUG (Thread-83 (_thread_main)) [paho.mqtt.client] Sending CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'3yaReFCIs2ANhx7YJHmRU5'
DEBUG (SyncWorker_13) [paho.mqtt.client] Sending DISCONNECT

MQTT代理日志

Sending CONNACK to 3yaReFCIs2ANhx7YJHmRU5 (0, 0)
Received DISCONNECT from 3yaReFCIs2ANhx7YJHmRU5
Client 3yaReFCIs2ANhx7YJHmRU5 disconnected.

排查进展

  • 已确认网络连通性正常(ping MQTT主机返回<mqtt host> is alive!)
  • 开启MQTT客户端debug级日志,未获取到更多有效故障信息

排查与解决建议

  1. 验证密码文件路径与权限
    检查Docker容器内/config/config/passwds.txt路径是否存在,且Mosquitto进程有读取权限。可进入容器执行ls -l /config/config/passwds.txt验证,若路径错误,修改为实际存储路径(比如/config/passwds.txt),并将文件权限调整为644。

  2. 临时禁用认证测试
    临时注释password_file配置,开启allow_anonymous true,重启Mosquitto后测试HAOS是否能保持连接。若连接正常,说明问题出在认证环节,重新用mosquitto_passwd生成密码文件,确保用户名密码与HAOS配置完全一致(注意大小写、特殊字符)。

  3. 检查HAOS MQTT集成配置

    • 确认HAOS中MQTT集成的「高级选项」里,SSL/TLS处于关闭状态(当前代理1883端口未配置SSL,强制启用会导致连接后断开)
    • 尝试手动指定唯一客户端ID,避免自动生成的ID可能引发的异常
  4. 调整虚拟机网络模型
    临时将HAOS虚拟机的网络模型改为e1000(Intel网卡),部分环境下virtio-net可能存在TCP会话异常,更换后测试连接稳定性。

  5. 抓取数据包分析
    在Unraid主机上执行tcpdump抓取MQTT流量,命令如下:

    tcpdump -i br0 port 1883 and host <HAOS_IP> and host <MQTT_IP> -w mqtt_capture.pcap
    

    用Wireshark打开捕获文件,查看CONNECT/CONNACK后的数据包细节,定位未被日志记录的异常。

内容的提问来源于stack exchange,提问作者Mattygabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:26:12