记录一次家庭网络异常排查与解决
一次突然的网络异常
在气温骤降到9度的晚上,我正就着百威吃烧鸡,不亦乐乎地看新出的三体电视剧(不得不说剧版高度忠于原著,比动画版不知道高到哪里去了,后者真正让我明白什么叫改编就是胡编,简直是无语透了)。而视频却突然卡在汪淼与丁仪对话的画面一动不动,仿佛是想让我多回忆一下小说里面的丁仪是不是这副艺术家模样。此时我只好脱下塑料手套点击鼠标重新加载网站。然后就看到了这个画面: 我网断了? 抱着疑问打开b站测试网络可达性,然后看到这个画面: 嗯?b站证书无效? 打开证书看看: 嗯??怎么b站证书变成了miwifi的证书?
抓包分析
想了几分钟没啥思路,遇事不决抓个包,重点看tls握手,发现可能的问题: 有不少握手请求向小米路由器网关192.168.31.1发送,而不是向外部网站发送。这大概就能解释为什么证书对不上了。访问b站的时候,浏览器先进行tls握手,然而这个握手请求没有发给b站的公网ip,而是发给了路由器,路由器返回自己的证书,名字与b站域名对不上,所以就出错了。 这个时候问题就转变为,为什么访问b站会向网关ip发请求?是不是访问b站的dns被解析成了网关ip?我当前电脑的dns是自动设置的,指向路由器网关。
于是再抓包,重点看dns请求。。。 好家伙,一堆域名被解析成了它自己的ip: 看来就是dns问题了。
运营商dns服务器返回了个啥
看了下小米路由器管理页面,它的dns服务也是自动配的,指向192.168.1.1,也就是光猫的地址,估计是里面dns出问题了。
用dig命令向192.168.1.1发dns请求: 好家伙,这返回的answer记录是个啥? 我看不懂,但我大受震撼。上网搜了一圈,找不到是啥意思。至少问题是被定位了,就是dns的锅。
临时修复
不用运营商的dns,把电脑的dns改为手动,指向114.114.114.114。网络立马恢复正常。
总结
其实整个过程还是挺流畅的,一步步推理的排查过程竟有点好玩。这次亲身体验了dns导致的网络错误。考虑到还有如dns污染与其他总所周知的东西,可以想想是不是需要自建一个稳定的dns服务了,好像之前看到几个开源的项目,有空折腾一下,继续为自主可控的家用网络添砖加瓦。