我想使用 NetEm 模拟低带宽环境,同时测试与 Internet 连接的设备。我的计划是在 Windows 7 主机上的 Linux VM(Linux Mint 13)中设置网桥。不幸的是,我无法设置网桥。然后我可以在 Linux VM 中使用 NetEm 来限制外部设备的带宽。我使用了以下脚本:
ifconfig eth0 0.0.0.0 promisc up
ifconfig eth1 0.0.0.0 promisc up
Then create the bridge and bring it up:
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth0
brctl addif br0 eth1
dhclient br0
ifconfig br0 up
当我运行该脚本时,看到以下警告:
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service smbd reload
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the reload(8) utility, e.g. reload smbd
连接到网桥的设备能够获取 IP 地址,但只能 ping 通网桥的 IP 地址(均为 10.2.32.xx)。几分钟后,我们网络的其他部分就瘫痪了。我不知道为什么,但一旦我关闭网桥,网络就恢复正常了。
是否可以在 Linux VM 中设置网桥?我需要对dhclient br0
脚本的这一部分进行其他操作吗?
顺便说一下,我使用的是 VirtualBox。有线连接是 eth0,无线连接是 eth1。有线连接连接到设备,无线连接连接到网络。两个适配器都设置为桥接适配器,混杂模式设置为“允许所有”。
答案1
我不能肯定地说在 Windows 7 主机上的 VM 中运行 Linux 是设置桥接器的问题,但我发现桥接器无法与无线网卡配合使用的证据。Linux基金会回答这个问题:
这是一个已知问题,并非由桥接代码导致。许多无线网卡不允许欺骗源地址。
我找到了有关设置桥接器的信息,用无线网卡的 MAC 地址替换所连接设备的 MAC 地址,但这比我想要的更复杂。相反,我设置了一台带有两个有线网卡的旧 PC。现在我只需使用以下脚本来设置桥接器:
#!/bin/bash
# Set the interfaces to promiscuous mode
ifconfig eth0 0.0.0.0 promisc up
ifconfig eth1 0.0.0.0 promisc up
# Create the bridge
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth0
brctl addif br0 eth1
# Bring it up
ifconfig br0 up
dhclient br0