前言

前几天家里所有的联网设备都掉线了,在米家 APP 上看到设备的离线时间是凌晨2:11,而那天我并不在家。

向来稳定的网络为什么突然就全部掉线了呢?我第一反应想到的是停电,但是来电之后按理说应该会自动连接才是。在小区群里确认并没停电,我脑洞打开,怀疑是不是有人关了我家电闸,然后撬门而入。

回家之前,通过移动的宽带自助排障,显示光猫出现了故障。回家后的第一件事便是重启了光猫,没有去管路由器。但是光猫重启完之后,家里的电脑还是不能上网,在路由器管理界面看到拨号仍是连接状态,重启路由器之后解决了问题。

但是新的问题就来了,在此后的几天,我发现家里的网络间歇性会打不开网页。

问题详述

移动自带的光猫,网络模式为桥接;刷了 openwrt 的路由器负责拨号上网。

无法打开网页的问题出现得没有规律,并且都只是短暂出现,十几秒钟后恢复正常。访问网页失败时,QQ和微信能正常收发消息,我怀疑是 DNS 出现了问题,况且 edge 浏览器在打不开网页的时候确实显示:dns_probe_finished_nxdomain

根据网上的信息,我检查了浏览器的 DNS 设置,其实并没有问题:

edge安全dns设置

加上使用手机上网时,偶尔出现 QQ 消息加载较长,浏览器(也是 edge)访问网页异常缓慢,APP 内的图文刷着刷着就是未加载的情况,MIUI 也提示过“当前 WLAN 无法访问互联网”,我想肯定是我的设备或者运营商那边出现了问题。

最近这段时间,我并未对涉及到上网方面的路由器和光猫的更改,按理说运营商长时间的网络问题也不是很正常,多少还是要对运营商和骨干网抱有信任。因为此前对移动的投诉,本地分公司还安排了专门的工作人员不定期打电话问我网络使用有没有问题,有问题跟她说(言外之意不要打10086了)。想起上次来我家装宽带的小哥也很稚嫩,我打算还是先把自己的设备排查一遍。

问题排查

这种间歇性的问题其实很麻烦,问题出现的时间不固定,持续时间又短,所以很难定位具体是哪里的配置出了问题。

3月2日,我开始尝试自己解决问题。

排查第一步,重置路由器。重置之后,按照以往的设置流程一走,问题依然存在,手机也会显示无法连接到 internet,但是可以打开网页,该提示过一会也就消失了。浏览一些 app 的帖子,会偶尔出现点击评论区加载不出来,图片或视频的预览图加载失败的情况。

排查接口

我查看了三接口的具体情况,如下:

openwrt三接口详情

在我印象中,WAN 口 和WAN6 应当是有 ipv6 地址的,但如图所示,WAN 口的地址是fe80开头,WAN6 口则没有任何地址,运行时间为 0,却有流量产生,这很奇怪。这也导致了如果 ddns 路由器的 ipv6 ,只能选择从 LAN 口获取 ipv6 地址。

于是我删掉 WAN6 口,重新添加,绑定物理接口时,选择自定义接口为@wan,而此前是直接选择的“以太网适交换机:eth1”。

wan6有地址了,但PD间歇性有

这样做看起来合理了许多,并且也通过了 ipv6-test,ddns 路由器的 ipv6 地址也可以直接选择 WAN 口了。其它关于 ipv6 的选项我也按照网上的方法多次尝试进行了设置。

但是,我的问题好像根本不在这,还没被解决啊!连续性测试了网页打开和 APP 内容加载没问题,但是在我写这篇文章的时候又出现了一次网页无法打开的情况。

比如,访问 www.weibo.com时又提示了一次 DNS 的问题,ping也提示找不到主机,访问 weibo.com秒进,再次访问前者又可以了,ping的结果也恢复了正常。

在某群里咨询无果后,有人私聊我,说20块钱解决问题。钱确实不多,但是我不确定是否真能解决,万一像上次折腾老家的路由器,到最后还是刷了新固件才解决,那不是白折腾了吗?

排查 DNS

在路由器换上了阿里的 ipv6 公共 DNS,在路由器“状态”的概况里,看到IPV6 WAN状态下,DNS 确实是手动设置的阿里公共 DNS。

本以为问题能够解决,但是解析某些网页的速度明显变慢了,更甚者连阿里自家的网站都有打不开的情况。测试如下:

部分网站间歇性访问失败,浏览器访问响应时间要很久

私聊我的大佬说,手动的 DNS 还是有问题,看来果真问题的症结不在于此。

PMTU 黑洞

关于这个说法,起初是我在 B 站的某视频下看到有评论提到跟我类似的情况,但是他解决的方法是换了网卡就好了,并且给我提示了一个关键词叫“PMTU黑洞”,V站上有一篇帖子说得很清楚。

大概了解了这是个什么玩意,但是我因为自己的能力问题无法更进一步判断。按理说,openwrt 的 WAN 口防火墙默认开启了MSS钳制,不会出现这样的问题呀。

我继续搜索这个关键词,在知乎上看到一篇《从原理到实践,彻底告别 IPv6 上网不稳定的问题》的专栏文章,按照文章里提供的思路对网络进行抓包,捕获到了对应的请求包(request),却没有找到返回的包。期间我对 taobao.com 进行各种 ping,没有发现异常。

至此,手头只有一份在网络出现上述问题时的抓包记录,但关于 ipv6 的捕获内容协议几乎都是 DNS:

wireshark抓包

后续

3月3日,我测试了光猫拨号,设备直连光猫。不经过路由器的情况下,安卓手机显示有公网 ipv6,但无法通过 ipv6 测试;iPad 和电脑却可以。安卓不支持有状态的 DHCPV6,但我光猫确实用的无状态的 SLAAC。

个把小时的测试中,手机上网缓慢的情况有所好转,电脑依然存在,但是没有解析时间特别长或者解析失败的情况了。可能问题真的在于我的路由器。

后来我发现,在路由器重启后,一开始 IPV6 WAN 状态有前缀和 DNS,但是过几秒自动刷新后就只有地址和网关了,手动重连 WAN6 才会出现 PD 前缀——可是它明明被设置为开机自动运行。并且即便手动重连,该接口也没有任何流量产生。

后来又按照网上一篇文章的说法,删掉了 WAN6 接口,会自动生成一个无法修改的DHCPV6-PD。再次重启,到目前为止没有出现掉前缀和 DNS 的情况,上网的具体情况有待持续观察。

删掉WAN6对设备获取v6没有任何影响

感受

写了太多东西了,又好像什么都没说清楚。IPV6 相较于 IPV4 要复杂太多,可能出现的问题也就更多。网上关于 OP 路由器和 IPV6 设置的说法各有不同,有时候也不知道究竟谁才是对的。所以每次排查问题都有种摸石头过河的感觉。