Skip to content

一次家庭网络故障排查:DNS 环路导致的连接数爆表

一次看似复杂的网络故障,最终发现竟是一个配置上的小疏忽。

问题初现

家里的网络最近变得异常不稳定,AP 路由器频繁亮起红灯,设备断连的情况时有发生。作为一名对网络略懂一二的技术爱好者,我决定亲自排查这个问题。

逐步排查

第一阶段:基础排查

首先,我怀疑是 AP 路由器本身出了问题。于是我用有线连接电脑,直接 ping 主路由的 IP 地址:

ping 192.168.1.1

结果令人意外——即使直连主路由,仍然出现丢包现象。这排除了 AP 路由器故障的可能性。

第二阶段:深入主路由

我将电脑直接连接到主路由器,跳过了所有中间设备,但问题依旧。这让我意识到问题可能出在主路由器本身。

登录主路由器管理界面,查看系统日志,发现了一条关键错误信息:

kernel: nf_conntrack: table full (16384), dropping packet

这条错误表明连接跟踪表已经满了(共 16384 个条目),导致新的网络连接被丢弃。

第三阶段:初步判断与应对

我最初怀疑是遭受了网络攻击,立即开启了主路由器的 SYN Flood 和 DDoS 防护功能。然而,问题并没有解决,错误日志仍在不断出现。

第四阶段:实时监控

我决定蹲守下一次连接数激增的时刻,查看到底是什么连接占用了这么多资源。当连接数再次飙升时,我惊讶地发现——大量的连接都是 DNS 查询。

主要是主路由配置的 DNS2、DNS3 的公共 DNS

这让我想到了家里的旁路游(旁路由)设备,它负责运行 SmartDNS,为全家提供 DNS 解析服务。

第五阶段:真相大白

登录旁路游查看,果然发现了大量的 DNS 连接。尝试重启旁路游后,网络暂时恢复了正常。

但当我停止 SmartDNS 服务时,主路由器的连接数立即飙升。这一现象让我恍然大悟——可能存在 DNS 环路!

经过仔细检查,终于发现了问题所在:

  • 旁路游的网络接口 DNS 设置指向了主路由器
  • 而主路由器的 DNS1 设置又指向了旁路游

问题分析

这就形成了一个 DNS 解析环路:

  1. 设备向主路游发起 DNS 查询
  2. 主路游将查询转发给 DNS1 旁路由,但是此时旁路由 SmartDNS 已经假死了,DNS 查询经过网络接口又转发到主路由
  3. 主路由器又将查询发回旁路游
  4. 如此循环,导致连接数不断累积
  5. 而主路由收不到 DNS1 的请求反馈,连接超时后将请求转发给 DNS2 或者 DNS3

最终,连接跟踪表被这些循环的 DNS 查询占满,无法处理正常网络连接,导致了全网的频繁断线。

解决方案

修复方法很简单:将旁路由器的 DNS 设置更改为公共 DNS 服务器(如 114.114.114.114 或 8.8.8.8),即使 SmartDNS 掉线后也能正常反馈 DNS 查询,打破这个循环。

经验总结

这次排查经历让我深刻体会到:

  1. 不要忽视基础配置:看似简单的配置错误可能引发严重问题
  2. 日志是最好的朋友:系统日志往往包含了解决问题的关键线索
  3. 排查要有方法论:从简单到复杂,一步步缩小问题范围
  4. 理解系统工作原理:了解 DNS、NAT 和连接跟踪的基本原理对排查网络问题至关重要

网络问题排查就像侦探破案,需要耐心、细心和对技术细节的关注。这次经历虽然花费了不少时间,但解决问题的成就感和对家庭网络更深入的理解,让一切努力都变得值得。

Released under the MIT License.