我们有一个包含约 40 个工作站(主要是 Windows)和几台服务器的局域网。它们都使用内部 DNS(196.168.0.4
运行BIND 9.5.0-P2
)和网关(192.168.0.1
运行 OpenBSD 数据包过滤器),网关是充当路由器的本地 PC。
在过去的几个月里,在工作日的某些时间点,网络速度减慢到无法进行与互联网相关的任何事情的程度。在那些不好的时候,ping8.8.8.8
会给出:
12:16:12.078: Timeout waiting for seq=11a1
12:16:13.484: From 8.8.8.8: bytes=60 SEQ=11a9 TTL=48 ID=0000 time=399.334ms
12:16:15.078: Timeout waiting for seq=11a4
12:16:15.437: From 8.8.8.8: bytes=60 SEQ=11ab TTL=48 ID=0000 time=355.409ms
12:16:18.078: Timeout waiting for seq=11a8
12:16:19.453: From 8.8.8.8: bytes=60 SEQ=11af TTL=48 ID=0000 time=376.317ms
12:16:21.078: Timeout waiting for seq=11aa
12:16:21.078: Timeout waiting for seq=11ac
12:16:21.390: From 8.8.8.8: bytes=60 SEQ=11b1 TTL=48 ID=0000 time=306.727ms
12:16:22.437: From 8.8.8.8: bytes=60 seq=11b2 TTL=48 ID=0000 time=364.351ms
12:16:23.453: From 8.8.8.8: bytes=60 seq=11b3 TTL=48 ID=0000 time=371.944ms
12:16:24.078: Timeout waiting for seq=11ad
12:16:24.078: Timeout waiting for seq=11ae
12:16:26.390: From 8.8.8.8: bytes=60 SEQ=11b6 TTL=48 ID=0000 time=307.729ms
12:16:27.078: Timeout waiting for seq=11b0
12:16:29.437: From 8.8.8.8: bytes=60 SEQ=11b9 TTL=48 ID=0000 time=361.575ms
12:16:30.078: Timeout waiting for seq=11b4
12:16:30.453: From 8.8.8.8: bytes=60 seq=11ba TTL=48 ID=0000 time=367.647ms
12:16:33.078: Timeout waiting for seq=11b5
12:16:33.078: Timeout waiting for seq=11b7
在那个确切的例子中,如果我关闭 DNS (at .0.4
),那么几秒钟后网络的健康状况又会变得非常好:
12:47:43.046: From 8.8.8.8: bytes=60 seq=190b TTL=48 ID=0000 time=70.555ms
12:47:44.046: From 8.8.8.8: bytes=60 seq=190c TTL=48 ID=0000 time=82.684ms
12:47:45.046: From 8.8.8.8: bytes=60 seq=190d TTL=48 ID=0000 time=72.368ms
12:47:46.062: From 8.8.8.8: bytes=60 seq=190e TTL=48 ID=0000 time=84.310ms
12:47:47.046: From 8.8.8.8: bytes=60 seq=190f TTL=48 ID=0000 time=75.137ms
12:47:48.046: From 8.8.8.8: bytes=60 seq=1910 TTL=48 ID=0000 time=75.791ms
12:47:49.062: From 8.8.8.8: bytes=60 seq=1911 TTL=48 ID=0000 time=94.252ms
12:47:50.046: From 8.8.8.8: bytes=60 seq=1912 TTL=48 ID=0000 time=76.547ms
12:47:51.046: From 8.8.8.8: bytes=60 seq=1913 TTL=48 ID=0000 time=70.251ms
12:47:52.046: From 8.8.8.8: bytes=60 seq=1914 TTL=48 ID=0000 time=83.033ms
12:47:53.046: From 8.8.8.8: bytes=60 seq=1915 TTL=48 ID=0000 time=76.589ms
12:47:54.046: From 8.8.8.8: bytes=60 seq=1916 TTL=48 ID=0000 time=82.060ms
这是非常一致和可重现的。我 ping 8.8.8.8
(谷歌的公共 DNS)是完全随机的,这只是我必须测试互联网连接的一种方式。我可能正在 ping 206.190.36.45
(雅虎公共网站的 IP)。
DNS 不对外开放。因此,我认为可能有一个(或多个)工作站对 DNS 的使用非常糟糕(可能间接通过病毒),并用请求或其他东西淹没它。问题是我无法追溯。在0.4
机器top
上没有给我任何 CPU 可疑活动,并且在0.1
(网关)上使用dst host 192.168.0.4
in过滤pftop
没有给我任何使用 DNS 的内部 IP。
我试过一个一个地拔掉工作站的以太网电缆,以找到一个可能有问题的工作站,但这个过程不是非常快速和准确,当网络稳定时,我不确定它是否是由于最后一个工作站造成的我拔掉了电源,还是网络又恢复正常了。
关于接下来要看的地方有什么想法吗?
根据所提供的信息,我个人倾向于使用 L2 交换环路和/或 DNS 服务器上配置错误的链路聚合。它也可能是 L3 路由环路,但这种可能性似乎较小。但是,如果没有更多信息,我完全不能确定。
第 22 条军规是我没有资格对问题发表评论以澄清问题并在发布之前确定该答案是否有价值。希望这会为您指明正确的方向,您很快就会找到答案。
我不确定证据是否指向 DNS。根据长时间的 ping 时间和数据包丢失,在我看来您的 Internet 连接不堪重负。我建议禁用 DNS 服务器可以防止一个或多个客户端(如您所建议的那样,可能由于病毒而行为异常)使用 Internet 连接,因为它无法再查找主机名。这减少了流量,互联网连接开始正常运行。
我建议使用可以报告最活跃者的东西来监控 Internet 连接,以帮助您找到有问题的机器。
如果您的 DNS 服务器可公开访问,则您可能成为 DNS 放大攻击的棋子,由此产生的传出流量会压倒您的可用带宽。