最近给家里换了新WiFi,结果用来没两天,发现一些国外的网站打不开了。
原以为是DNS出问题了,于是nslookup一下,发现有查询结果啊。然后ping一下,就提示“未找到主机”了。
而且更加玄乎的是:所有Windows系统的电脑都无法访问,但是所有Linux系统的电脑却能访问,手机也能ping通且访问。
在网上找了许多教程,结果大部分都说是Windows的问题,要重置winsocks,刷新DNS,重置TCP/IP之类的方法。这些方法我都一一尝试了,可是问题根本没有得到解决。
后来换回旧的WiFi,居然又能上了!
再抓包一排查,发现使用新WiFi的时候,系统会同时查询A记录和AAAA记录,而使用旧WiFi的时候,就不会,只会查询A记录。
然后ipconfig一下,发现使用新WiFi的时候,系统分配了个fc00:xxxx这样的IPv6 ULA地址,而使用旧WiFi的时候,就不会。当然啦,因为就WiFi不支持IPv6嘛。可是这个新WiFi只是当个AP使用,而网关没有开启IPv6,所以我记得我关掉了IPv6开关以防止无法上网的呀?
打开后台,确实关了啊?
那么现在可以说破案了。我关闭了新WiFi的IPv6功能,因为网关没有开启IPv6;但是这个新WiFi还是通过SLAAC给局域网内其他主机分配了ULA地址。导致部分机器以为自已能访问IPv6资源,于是进行AAAA记录的请求。可是估计DNS也没配置好,导致没能返回AAAA地址(实际上发现查询AAAA记录,但是返回的是A记录?),于是就直接NXDOMAIN了,即使返回了A记录。
之后,鉴于这个扶不上墙的新WiFi的IPv6设置无法更改,所以最后还是在电脑上把IPv6禁用了,才能访问的。
虽然还不是很清楚具体的原理,可能还是能说明几个问题:
(1)目前来说局域网DNS服务器配置有点问题,有时A记录会混在AAAA记录中返回?
(2)Windows比Linux“蠢”一些;
(3)这个某联的新款WiFi更加“蠢”,IPv6功能无法彻底关闭!