我在 Centos 5 上运行 KVM。我有一个客户操作系统,ubuntu 10.04,上面安装了 Snort 2.9。客户操作系统有 (2) 个网卡,eth0 和 eth1。一个网卡,eth0,配置了 IP,可以从主机操作系统所在的网络访问。第二个网卡没有 IP,用于接收来自 Cisco 交换机的镜像流量。在主机操作系统端,br1(运行 Snort 的客户操作系统使用的桥接接口)上的 tcpdump 确实可以看到来自交换机的镜像流量。但在客户操作系统的 eth1(即 Snort 监控的接口)上运行的 tcpdump 只能看到来自交换机的广播或 cdp 数据包。在客户操作系统的 eth0 上运行的 tcpdump 确实显示了来自交换机的镜像流量。
有任何想法吗?
答案1
我不知道这是否有帮助,但我在对两个分别运行 Ubuntu 10.04 的 Linux KVM 客户机上的 keepalived 进行故障排除时遇到了类似的问题。我发现,运行 tcpdump -i eth1 时会看到多播地址(与分配给 NIC 的 IP 不同的子网),但如果运行 tcpdump -i any 则不会看到。我在监控 dmesg 时对 tcpdump 做了进一步测试,发现当我在 tcpdump 上使用 eth1 设备时,它会将 NIC 置于混杂状态,但当使用“any”设备时,eth0 和 eth1 都不会进入混杂状态。这与物理主机上的处理方式相反,在物理主机上,“any”会将所有 NIC 置于混杂状态,至少在我测试过的主机上是如此。
我运行了该命令ip link set eth1 promisc on
,然后当我使用“任何”设备时,它现在能够看到流量。这同样适用于 eth0,但我知道我想要的流量没有到达那里,所以我这样做只是为了测试。您可以通过编辑 /etc/network/interfaces 并添加以“post-up”开头的行,然后添加您刚刚使用的命令,为主机保存此信息,这可确保设备在最佳启动时进入混杂状态。
我认为 NIC 通常不需要设置为混杂模式才能看到多播流量,但在本例中,对于 KVM 客户机,情况似乎就是如此,并且如果设备未设置为混杂模式,则它只能看到与 NIC 具有相同 IP 的子网上的 IP 数据包(如果不是混杂模式)。Snort 使用 libpcap,与 tcpdump IIRC 相同的库,如果它试图通过任何接口设置混杂模式,那么它似乎没有成功。我认为在正常情况下 keepalive 不需要混杂模式,但在本例中,它似乎是查看多播流量的唯一方法。
希望这可以帮助。
答案2
经过更长时间的搜索,我发现了这个非常简单/容易的解决方案 - 如果你知道的话:
http://adamdoupe.com/blog/2010/10/22/configuring-linux-bridge-to-act-as-a-hub/
brctl setageing <bridgename> 0