V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
dndx
V2EX  ›  全球工单系统

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

  •  
  •   dndx · 2020-02-13 19:39:56 +08:00 · 2897 次点击
    这是一个创建于 1747 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现象是这样:

    家里的网是电信的,小米设备按照步骤配置可以连得上家里的 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 抓包文件以帮助分析。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.