追踪网络异常波动

作者:Shawn Powers

在之前的一篇文章中,我解释了设置 Cacti 的过程,这是一个非常棒的程序,几乎可以绘制任何数据的图表。我绘制图表的主要内容之一是我的互联网使用情况。拥有这些信息非常棒,直到出现您无法解释的互联网活动。在我的例子中,大约每 20 分钟就会出现一次“异常波动”,占用大约 4mbps 的带宽(图 1)。从大局来看,这没什么大不了的,因为我的连接是 60mbps 下载速度。尽管如此,它还是让我很抓狂。我不喜欢我的网络上有什么东西在未经我允许的情况下在互联网上活动。因此,追踪开始了。

图 1. 这个异常波动让我抓狂了好几周。

大多数人立即告诉我使用 Wireshark 来分析数据。这是一个很好的建议,但这个问题让我想要一个实时的监控系统,而不是一次性的数据包搜索。此外,即使使用 Wireshark,您也需要解决捕获所有流入和流出互联网的数据的问题。现代交换硬件有目的地将流量仅定向到交换机上预期流量到达的端口。这意味着如果不做一些努力,您就无法“嗅探”整个网络。因此,无论我打算如何分析流量,我都必须能够看到流量。幸运的是,有几种方法可以实现这一点。

嗅探所有数据

20 年前,网络集线器非常普遍。集线器的理念是,传入的网络数据被复制到集线器上的每个端口,并且数据包的目标计算机接受它。其他所有计算机都忽略数据。当数据量低且数据速度慢时,这工作得很好,但是随着更多设备添加到网络中,它很快变得拥塞。大约在那个时候,“交换”技术进入了视野。交换机将接受每个端口上的数据,但仅将数据包重复发送到目标设备正在监听的单个端口。起初,交换机非常昂贵,因此看到一个四端口的机架式交换机,每个端口都连接了集线器,这并不罕见。这是一种将拥塞隔离成可管理块的方法。最终,交换技术成为主流。现在,即使您可以在网上购买的 10 美元的八端口设备也是交换机而不是集线器,而集线器的概念已经过时。

尽管以太网网络很少再使用集线器技术,但 Wi-Fi 却没有同样的奢侈。事实上,Wi-Fi 接入点在变得无法使用之前只能支持一定数量的设备的原因是,Wi-Fi 在概念上像一个集线器一样工作。Wi-Fi 网络上的所有设备都接收所有数据包,并且仅“接受”目标为它们的数据包。这就是在使用公共 Wi-Fi 网络时务必注意安全的原因。连接到网络的任何其他人都可以看到您的所有流量,因此请确保任何敏感数据都通过 SSL 加密,或者更好的是,通过 VPN 加密您的所有流量。

为什么这一切都很重要?好吧,如果您试图监控整个网络,交换机会对您不利。在集线器的时代,每台计算机都看到网络上的所有流量,这使得监控正在发生的事情变得容易。(这也使得嗅探其他人的数据包变得容易,但这完全是另一个故事。)值得庆幸的是,有几种选择可以捕获所有数据,以便您可以分析网络上的流量。

首先要确定的是您要监控的位置。您只能监控流经特定位置的流量,因此您需要确定该位置在哪里。在我的例子中,我想监控互联网流量,因此从端口的角度来看,我想看到所有流入和流出我的路由器插入到我的 LAN 的地方的流量(图 2)。有几种方法可以捕获该数据——让我介绍一下这些选项。

图 2. 这是所有互联网流量流经的瓶颈。

选项 1:使用集线器

如果您查看图 3,您可以看到此选项的工作原理。所有互联网流量都通过集线器流入路由器。由于集线器将所有数据重复发送到集线器上的每个端口,因此您只需将监控计算机插入到同一个集线器,它就会“听到”所有进出互联网的网络流量。此方法存在一些问题。首先,现在很难找到集线器,尤其是能够达到 100mbps 的集线器。即使您可以找到集线器,它也可能是一个廉价的桌面型集线器,可能不够可靠,无法处理您的所有数据。老实说,即使选项 1 在技术上仍然可行,但这是一个非常糟糕的主意,我不建议这样做。

图 3. 集线器在技术上是一个选项,但不是一个好的选项。

选项 2:镜像交换机上的端口

这可能是现代 LAN 环境中监控网络流量的最佳方式。图 4 显示了它的样子。此方法的唯一问题是它需要“智能”或“托管”交换机。这通常会大大增加成本,但它为您提供了其他管理功能,例如 VLAN。尽管如此,如果您已经拥有非托管交换机,这可能是一笔很大的开支。如果您想在已经部署了非托管交换机的环境中使用此方法,也许可以考虑购买一个小型的托管交换机,并将其放在图 3 所示的集线器的位置。

图 4. 这可能是监控流量的最佳方式,但这需要托管交换机,而我没有。

镜像端口的实际过程在不同品牌的交换机上有所不同。但是,无论具体方法如何,所有托管交换机都应允许您将流量从一个端口镜像到另一个端口。然后,您的监控计算机可以监听该镜像端口并分析流量。这有点像创建一个内部双端口集线器,该集线器仅单向发送流量。通常,如果您这样做,明智的做法是在监控计算机上使用第二张以太网卡进行“嗅探”。这样,您就不会将进出监控计算机的流量与互联网流量混淆。

选项 3:内联 Linux 网桥

图 5 显示了我在我的网络上实际做的事情。我没有使用此方法,因为它比选项 2 更好;相反,我使用它是因为我没有托管交换机。基本上,在这种设置中,您需要一台带有两张以太网卡的监控服务器。您创建一个“网桥”接口,并将计算机插入交换机和路由器之间。这确实捕获了所有流量,因为它实际上是通过计算机流动的。不幸的是,这意味着如果您的监控计算机出现问题,它可能会导致您的整个网络的互联网访问中断,以及 DHCP 和 DNS(如果您的路由器为您托管这些服务)。有一些带有多个端口的特殊以太网卡可以“故障开放”,这样即使机器出现故障,流量仍然可以流动。但是,如果您要花钱购买这个,我建议您直接购买托管交换机并进行端口镜像。

图 5. 虽然可能不是最好的方法,但这可能是最书呆子的方法。这也是我使用的方法,因为它不需要任何新的硬件。

选项 4:使用您的路由器

只有当您的路由器足够强大以运行带宽监控工具时,此选项才有效。有些路由器可以,尤其是当您使用完整的服务器作为路由器时。大多数路由器都可以做到这一点,但效果不佳。尽管如此,如果您只想进行简单的监控,并且您的路由器可以承受负载,那么这是一种简单的方法。

我的网桥安装

我选择了选项 3,这意味着我需要在我的 Linux 机器上安装网络桥接。在 Ubuntu 上,这个过程非常简单。在其他发行版(如 CentOS)上也不困难,但是如果您使用 Ubuntu 以外的其他发行版,您需要谷歌搜索具体步骤。对于 Ubuntu,执行


apt-get install bridge-utils

然后编辑您的 /etc/network/interfaces 文件


# The loopback network interface
auto lo
iface lo inet loopback

# The bridge interface
auto br0
iface br0 inet dhcp
    bridge_ports eth0 eth1
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

如果您的以太网设备没有显示为 eth0 和 eth1,您需要调整您的接口名称,但是从我的示例来看,配置应该是有意义的。您可以重新启动网络,或者更好的是,重新启动您的系统以确保它在启动时正常启动。启动并运行后,ifconfig 命令应该看起来像我的这样


spowers@pooky:~$ ifconfig
br0    Link encap:Ethernet  HWaddr 00:25:90:34:d4:3a
       inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
       inet6 addr: fe80::225:90ff:fe34:d43a/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:1820381471 errors:0 dropped:0 overruns:0 frame:0
       TX packets:124514207 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:1850742830285 (1.8 TB)  TX bytes:34896441989 (34.8 GB)

eth0  Link encap:Ethernet  HWaddr 00:25:90:34:d4:3a
       inet6 addr: fe80::225:90ff:fe34:d43a/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:1040590501 errors:0 dropped:56421 overruns:0 frame:0
       TX packets:782968757 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:1101548247906 (1.1 TB)  TX bytes:493789819966 (493.7 GB)
       Interrupt:16 Memory:fb5e0000-fb600000

eth1  Link encap:Ethernet  HWaddr 00:25:90:34:d4:3b
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:1001689311 errors:0 dropped:55961 overruns:0 frame:0
       TX packets:1165557388 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:797026007540 (797.0 GB)  TX bytes:1134936725326 (1.1 TB)
       Interrupt:17 Memory:fb6e0000-fb700000

请注意,唯一具有 IP 地址的接口是 br0。其他两个接口桥接在一起,因此流量可以自由地通过它们。有趣的是,像 Untangled 这样的发行版就是这样工作的。它们创建一个桥接设备,然后在流量通过时对其进行过滤/阻止/重定向。

软件

到目前为止,我只到了监控计算机可以监听进出互联网的流量的地步。我还没有实际安装任何软件来执行监听。存在许多不同的软件包可用于捕获流量并对其进行分析。根据您要查找的网络趋势类型,您可能会选择与我不同的软件包。我实际上安装了一些,但主要依靠 BandwidthD 来分析流量。我将更多地谈论 BandwidthD,但请务必查看其他一些软件包

我喜欢 BandwidthD,因为它显示了我网络上每个设备的流量图。如果您还记得我的最初问题,我试图找出我网络上的哪个设备每 20 分钟下载一些东西。我猜想它是一个游戏系统或手机卡在失败的下载循环或其他东西中。

安装 BandwidthD(或大多数实用程序)只需简单的 apt-get install 命令即可。该软件很可能在您发行版的软件存储库中,即使版本有点过时,它也应该可以完美运行。我唯一需要做的是编辑 /etc/bandwidthd/bandwidthd.conf 并设置我要监控的网络和我想要监听的接口。否则,我将所有内容都保留为默认值。BandwidthD 安装了一个 Apache 配置文件,因此您应该可以在 http://server.ip.address/bandwidthd/ 访问其界面。

运行一段时间后,您应该会看到如图 6 所示的统计信息,其中显示了我的网络上带宽使用量排名前 20 的用户。看到这些信息很有趣,但是如果您正在寻找特定的流量模式,您需要向下滚动一点以查看网络上每个设备的网络图。图 7 显示了进出我的 Plex Media Server 的流量。请记住,这只是进出互联网的流量,但是,您仍然可以看到朋友和家人何时通过互联网从我的服务器观看视频。重要的是要注意,尽管 BandwidthD 的默认页面仅显示前 20 名用户,但您可以单击网络地址以查看每个访问互联网的用户。这是一个非常棒的工具,可以帮助您了解网络上正在发生的事情。

图 6. 我喜欢 BandwidthD;它充满了如此多的有用数据。

图 7. 为网络上的每个设备都设置一组图表非常方便。让它自动完成简直太棒了。

我的异常波动怎么样了?

事实证明,我在我的网络上找不到任何导致每 20 分钟出现网络使用高峰的原因。我查看了我网络上每个设备的图表,并将其与我的 Cacti 带宽图上的高峰进行了比较。我就是找不到匹配项。然后我意识到我的 BandwidthD 的总带宽图应该非常接近匹配我的 Cacti 的 WAN 带宽图。但它并没有。我的整个网络监控服务器设置似乎毫无用处,因为我无法追踪导致异常波动的原因。

我决定对我的 Cacti 安装进行故障排除,看看是否每 20 分钟发生一些事情导致错误。那时我注意到,虽然我的路由器上的 WAN 接口每 20 分钟出现一次异常波动,但我的路由器的 LAN 侧(我绘制了图表,但从未真正看过,因为它只是 WAN 图表的反向)没有出现异常波动。事实证明,我的 UniFi 路由器有一个功能,可以每 20 分钟运行一次速度测试,以绘制连接的健康状况图表。我不记得开启了该功能,但果然,它已启用。当我禁用定期速度测试时,我的网络异常波动就停止了。

所以最终,我的网络监控设置没有找到任何东西,但是我不后悔设置它。现在我可以轻松地监控流量,并查看各个设备需要什么样的带宽要求。事实上,我计划进行的唯一更改是将我的服务器设置为使用选项 2 而不是选项 3,因为我最近将我的服务器机架升级到了托管交换硬件。这样,如果我的监控计算机死机,我的互联网连接仍然保持畅通。

Shawn 是 Linux Journal 的副编辑,并且从一开始就接触 Linux。他对开源充满热情,并且热爱教学。他还喝了太多的咖啡,这经常在他的写作中体现出来。

加载 Disqus 评论