小米智能设备的同学进来领工单了,你们的网关服务器 DNS 记录跟净水机固件不兼容导致电信用户连接问题

2020-02-13 19:39:56 +08:00
 dndx

现象是这样:

家里的网是电信的,小米设备按照步骤配置可以连得上家里的 Wifi,但是米家应用死活显示不出来设备。后来通过手机开跟家里 Wifi 同名热点可以完成注册步骤,在完成注册后就算关掉手机热点净水器也可以正常通过家里的 Wifi 连接到米家 App。

但是过了一两天以后设备在米家 App 里又会消失,需要重新开手机热点帮助连接,然后关掉手机热点家里的 Wifi 又可以正常使用一两天然后嗝屁。如此反复。另外如果在任何时候拔掉设备电源重新插上也是立马嗝屁。

净水器固件版本是最新的 1.3.9.0002

因为这个实在是太影响使用,所以花了一些时间调试并且找到了问题的根源。

先是确认 Wifi 信号没有问题。用手机在净水器位置测试,2.4Ghz 信号显示满格。然后在路由器上查找 DHCP 分配给设备的 IP,ping 可以 ping 通没有丢包现象,说明问题不是无线网络导致的。另外设备在米家 App 显示离线的时候,净水器的 Wifi 状态灯是蓝色长亮,说明的确成功连上 Wifi。

接下来在路由器上对净水器的 IP 抓包:

发现净水器在查询 ot.io.mi.com 的 A 记录地址。尽管路由器正确的回复了查询结果,净水器似乎并不买单不停的重试。也就是说因为某种原因净水器认为 DNS 查询失败,所以无法正常连接到小米云服务。

那小米的 DNS 记录到底有什么问题导致净水器无法处理呢?看一下:

在我家里用电信的 DNS 查询 ot.io.mi.com,返回了 13 条 A,2 条 NS,21 条 NS 的 A 记录,一共 36 条 RR。虽然这个看起来不算多,但考虑小米净水器的 CPU 比较弱(或者固件有 bug ),可能没法处理这么多记录。

这个记录用 dig 看起来是这个样子:

;; QUESTION SECTION:
;ot.io.mi.com.			IN	A

;; ANSWER SECTION:
ot.io.mi.com.		900	IN	A	110.43.87.254
ot.io.mi.com.		900	IN	A	117.48.116.221
ot.io.mi.com.		900	IN	A	117.48.116.228
ot.io.mi.com.		900	IN	A	110.43.87.241
ot.io.mi.com.		900	IN	A	124.251.58.178
ot.io.mi.com.		900	IN	A	118.26.252.222
ot.io.mi.com.		900	IN	A	118.26.252.218
ot.io.mi.com.		900	IN	A	118.26.252.221
ot.io.mi.com.		900	IN	A	117.48.116.217
ot.io.mi.com.		900	IN	A	118.26.252.214
ot.io.mi.com.		900	IN	A	110.43.87.240
ot.io.mi.com.		900	IN	A	117.48.116.211
ot.io.mi.com.		900	IN	A	110.43.87.239

;; AUTHORITY SECTION:
mi.com.			70076	IN	NS	ns4.dnsv5.com.
mi.com.			70076	IN	NS	ns3.dnsv5.com.

;; ADDITIONAL SECTION:
ns3.dnsv5.com.		170806	IN	A	61.151.180.51
ns3.dnsv5.com.		170806	IN	A	129.211.176.212
ns3.dnsv5.com.		170806	IN	A	162.14.18.188
ns3.dnsv5.com.		170806	IN	A	183.192.201.94
ns3.dnsv5.com.		170806	IN	A	223.166.151.16
ns3.dnsv5.com.		170806	IN	A	14.215.150.16
ns3.dnsv5.com.		170806	IN	A	18.194.2.137
ns3.dnsv5.com.		170806	IN	A	52.77.238.92
ns3.dnsv5.com.		170806	IN	A	58.251.86.12
ns3.dnsv5.com.		170806	IN	A	59.36.120.148

为了测试猜测,在路由器的 DNS 服务设定静态 DNS 记录,把 ot.io.mi.com 劫持并且只解析到其中一个 IP 地址,这样返回的 RR 从 36 条变成了 24 条:

;; QUESTION SECTION:
;ot.io.mi.com.			IN	A

;; ANSWER SECTION:
ot.io.mi.com.		600	IN	A	110.43.87.239

;; AUTHORITY SECTION:
mi.com.			72804	IN	NS	ns3.dnsv5.com.
mi.com.			72804	IN	NS	ns4.dnsv5.com.

;; ADDITIONAL SECTION:
ns3.dnsv5.com.		169827	IN	A	18.194.2.137
ns3.dnsv5.com.		169827	IN	A	52.77.238.92
ns3.dnsv5.com.		169827	IN	A	58.251.86.12
ns3.dnsv5.com.		169827	IN	A	59.36.120.148
ns3.dnsv5.com.		169827	IN	A	61.151.180.51
ns3.dnsv5.com.		169827	IN	A	129.211.176.212
ns3.dnsv5.com.		169827	IN	A	162.14.18.188
ns3.dnsv5.com.		169827	IN	A	183.192.201.94
ns3.dnsv5.com.		169827	IN	A	223.166.151.16
ns3.dnsv5.com.		169827	IN	A	14.215.150.16
ns4.dnsv5.com.		172619	IN	A	183.192.164.119
ns4.dnsv5.com.		172619	IN	A	223.166.151.126
ns4.dnsv5.com.		172619	IN	A	14.215.150.13
ns4.dnsv5.com.		172619	IN	A	18.235.54.99
ns4.dnsv5.com.		172619	IN	A	52.198.159.146
ns4.dnsv5.com.		172619	IN	A	59.36.120.147
ns4.dnsv5.com.		172619	IN	A	61.151.180.52
ns4.dnsv5.com.		172619	IN	A	101.226.220.12
ns4.dnsv5.com.		172619	IN	A	129.211.176.151
ns4.dnsv5.com.		172619	IN	A	162.14.18.121
ns4.dnsv5.com.		172619	IN	A	182.254.20.44

设置完了后小米净水器很快在米家里显示为在线,把电源拔了重启也完全正常。

为什么用手机开热点能用呢?猜测是因为手机是联通的网络,小米这个域名明显用了 GeoDNS (电信网络下返回的记录都是电信的 IP ),可能联通的服务器 IP 比较少,所以净水器能正常的解析。解析完了后设备把解析结果缓存一段时间,也就解释了为什么把热点关了还能用一两天而拔电重启马上就跪了。

解决方案:如果有类似问题的同学可以像我这样通过在路由器上劫持解析结果来暂时解决。彻底解决需要小米的人修改你们的权威记录,不要一下返回这么多 RR。或者升级固件让净水器支持处理这么多 RR 的 DNS 响应。

如果小米的同学需要更多信息,请跟我联系。我也可以提供完整的 tcpdump 抓包文件以帮助分析。

2899 次点击
所在节点    全球工单系统
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX