如何为qemu启用“br0”设备的DHCP?

我创build了一个Windows XP映像,并使用qemu引导它。 我正在使用qemu-bridge-helper来设置networking。 在qemu totorials之后,我configuration了/etc/qemu/bridge.conf来允许br0接设备。

这是我用qemu启动Windows XP的方法:

 qemu-system-x86_64 --enable-kvm -m 2048 \ -drive file=winxp.img,if=virtio \ -net nic,model=virtio \ -net bridge,br=br0 

图像很好地启动,但我没有得到一个IP地址。 原因是Windowsconfiguration为使用DHCP,但“br0”不提供DHCP地址,因为它只是一个网桥接口。

我的问题是 – 如何configuration“br0”给DHCP地址的winxp?

(当通过-net user使用“用户模式联网”时,Windows会分配一个IP,以便Windows驱动程序正确安装。)

br0只是一个二层networking抽象 – 实质上是一个虚拟交换机。 如果您的虚拟机监控程序上运行了DHCP服务器,请为DHCP服务器指向的br0接口(在虚拟机监控程序本身上)分配一个IP地址,并让DHCP服务器定义与您的第3层networking相匹配的子网地址与适当的范围,那么这将工作,没有任何其他设备。

但是,在大多数情况下,当使用桥接接口时,您所连接的广播域上已经有一个DHCP服务器。 br0作为交换机,使stream量传递给您的客人。 从您对问题的描述中,我可以为您提供一个可以解决大部分问题的示例configuration。

请记住,堆叠接口时必须遵守OSI模型。 这是什么意思,当创build一个二层抽象如桥,你不能有任何第三层寻址下面。 它根本不会工作。 由于breidge作为一个交换机,你将会给桥本身一个IP地址,并且只将其他接口连接到一个链路层的容量上。 这包括用于虚拟机的虚拟接口和用于将外部networking桥接到所述虚拟机和pipe理程序的物理接口。

在这个configuration中,eth0连接到br0,br0得到你的寻址。 虚拟机连接到br0,DHCP服务(无论它们在虚拟机pipe理程序中,还是在同一个第2层域中的外部虚拟机上)都会为您的虚拟机提供地址。

 # cat /etc/network/interfaces auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 

这假设你使用DHCP来获取你的地址为br0。 如果不是,则需要对br0接口应用静态寻址。

完成后,您需要重新启动networking( # systemctl stop networking && systemctl start networking )。 这将打破你的链接,所以如果你的configuration失败,你将需要有一个OOB方法进入你的机器。 如果这是正确的,那么服务启动后,您应该可以通过SSH重新连接。 能够通过OOB访问机器是非常重要的,因为这很容易被locking。

另外,也build议

这真是libvirt处理的一个工作。 使用libvirt,您可以轻松地使用内置的NATnetworking来连接不需要从外部访问但需要访问互联网的虚拟机。 定义虚拟机,创build一致的configuration以及通常pipe理资源也更容易。

你可以使用virshvirt-installqemu-img来通过cli来pipe理这个。 纯粹的是许多其他的graphics前端,你可以用它来pipe理libvirt,比如oVirt或Virtual Machine Manager( virt-manager