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

Mosquitto发布故障求助:Ubuntu 16.04环境下设备连接与订阅异常

解决Mosquitto + OwnTracks连接异常及消息收发问题

咱们一步步拆解你遇到的问题,结合你描述的现象——原本正常的跨设备主题订阅失效,Phone 2服务器端显示未连接但本地显示在线,新增8083 Web监听器后Web端能正常订阅Phone 1主题——核心问题应该集中在Phone 2的连接链路、MQTT会话状态或服务器配置细节上。

一、先搞定Phone 2的「连接状态 mismatch」问题

手机显示已连接但服务器日志无记录,这是典型的MQTT会话缓存或连接链路故障:

  • 检查OwnTracks的「Clean Session」设置:打开Phone 2的OwnTracks配置,找到「Clean Session」选项(不同版本可能叫「清除会话」)。如果开启了这个选项,手机在网络波动后会本地保留“已连接”的状态,但实际上和服务器的TCP连接已经断开。建议先关闭该选项,重启Owntracks应用后再测试。
  • 用服务器端命令验证Phone 2的消息收发:登录Ubuntu服务器,执行mosquitto_sub -h localhost -t owntracks/phone2/<你的用户名> -v(把<你的用户名>换成实际的OwnTracks用户名),然后让Phone 2发送一条位置更新。如果终端收不到消息,说明手机确实没连上服务器;如果能收到,那大概率是Mosquitto的日志级别不够导致没记录连接信息。
  • 升级Mosquitto日志级别:编辑/etc/mosquitto/mosquitto.conf,找到log_type配置项,改成log_type all,保存后重启服务:sudo systemctl restart mosquitto。这样能看到连接建立/断开、消息收发的详细日志,方便精准定位Phone 2的连接状态。

二、结合Web端正常访问的现象缩小排查范围

Web端能通过8083端口连接并订阅Phone 1主题,说明:

  1. Mosquitto核心服务运行正常;
  2. 服务器的8083端口(Websocket)对外访问无阻碍;
  3. Phone 1的连接和消息发布流程没问题。

那问题肯定出在Phone 2到服务器的MQTT主端口(默认1883,加密则为8883)链路上,重点排查以下几点:

  • 验证Phone 2的网络可达性:用Phone 2的网络工具ping服务器公网IP,或者用telnet测试端口连通性:telnet <服务器IP> 1883。如果连接失败,说明是网络问题——可能是手机所在网络的防火墙、路由器端口转发未配置,或者服务器端的安全组/防火墙拦截了请求。
  • 检查Ubuntu服务器防火墙:Ubuntu 16.04默认用ufw,执行sudo ufw status查看规则,确认1883端口(或你配置的MQTT端口)已被允许。如果没开,添加规则:sudo ufw allow 1883/tcp,然后重载防火墙:sudo ufw reload。
  • 确认Mosquitto的绑定地址:默认情况下,Mosquitto可能只绑定了localhost,导致外部设备无法连接。编辑/etc/mosquitto/mosquitto.conf,注释掉bind_address项,或者设置为0.0.0.0(允许所有地址访问),保存后重启服务。

三、额外的快速排查技巧

  • 查看Phone 2的OwnTracks本地日志:在Owntracks应用里找到日志导出选项,查看是否有connection refused、timeout这类连接错误信息,这能直接定位问题根源。
  • 用第三方MQTT客户端测试:在Phone 2上安装一个轻量MQTT客户端(比如MQTT Explorer),用同样的服务器地址、端口、用户名密码连接,尝试订阅Phone 1的主题。如果能正常连接收发,说明是OwnTracks应用的配置问题;如果也连不上,那就是网络或服务器端的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:52