Centos KVM主机操作系统不通过所有networking通信客户操作系统

我在Centos 5上运行KVM。我有一个客户端操作系统,Ubuntu 10.04,上面安装了Snort 2.9。 客户操作系统有(2)nic,eth0和eth1。 一个nic(eth0)configuration了一个IP,可以从主机操作系统所在的networking访问。 第二个NIC没有IP,用于接收来自Cisco交换机的镜像stream量。 在主机操作系统端,br1上的tcpdump(用作运行Snort的客户机操作系统的网接口)会看到来自交换机的镜像stream量。 但是,guest虚拟机操作系统的eth1上运行的tcpdump只能看到来自交换机的广播数据包或cdp数据包。 客户操作系统的eth0上运行的tcpdump会显示来自交换机的镜像stream量。

有任何想法吗?

我不知道这是否会有所帮助,但是我在运行Ubuntu 10.04的两台Linux KVM guest虚拟机上排除故障时遇到了类似的问题。 我发现在运行tcpdump -i eth1时会看到多播地址(这是一个不同的子网,然后是分配给NIC的IP),但是如果我运行了tcpdump -i,那么它就不会。 我在监视dmesg的同时进行了一些tcpdump的进一步testing,发现当我在tcpdump上使用eth1设备时,它将把网卡变成混杂networking,但是当使用“any”设备时,eth0或eth1都不能进入混杂networking。 这与它在物理主机上的处理方式是相反的,在这个主机上“any”把所有的NIC放到混杂的地方,或者至less在我testing过的主机上。

我运行命令ip link set eth1 promisc on ,然后当我使用“任何”设备时,现在能够看到stream量。 这同样适用于eth0,但是我知道我想要的stream量不是来到那里,所以我只做了这个testing。 您可以通过编辑/ etc / network / interfaces来保存主机,并添加一行以“post-up”开头的行,然后是刚刚使用的命令,这样可以确保设备在引导最佳状态时进入混杂状态。

我不相信一个网卡通常需要混杂的看到组播stream量,但在这种情况下,与KVM客户似乎是这样的情况,如果设备没有被设置为混杂,那么它只看到IP数据包子网与IP地址相同,如果不是混杂的话。 Snort使用libpcap,与tcpdump IIRC相同的库,如果它试图通过任何接口设置混杂,那么它看起来不应该成功。 我不认为在正常情况下,保持连接需要混杂,但在这种情况下,似乎是查看多播stream量的唯一方法。

希望这可以帮助。

经过长时间的search,我发现这个非常简单/容易的解决scheme – 如果你知道的话:

http://adamdoupe.com/blog/2010/10/22/configuring-linux-bridge-to-act-as-a-hub/

 brctl setageing <bridgename> 0