我已经创建了一个 Windows XP 映像,并使用 qemu 启动它。我用它qemu-bridge-helper
来设置网络。按照 qemu 教程,我已配置 /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 地址。原因是 Windows 配置为使用 DHCP,但“br0”未提供 DHCP 地址,因为它只是一个桥接接口。
我的问题是 - 如何配置“br0”以通过 DHCP 为 winxp 提供地址?
(当通过 使用“用户模式网络”时-net user
,Windows 会获得一个分配的 IP,以便正确安装 Windows 驱动程序。)
答案1
br0 只是一个第 2 层网络抽象 - 本质上是一个虚拟交换机。如果您的虚拟机管理程序上运行着 DHCP 服务器,为 DHCP 服务器指向的 br0 接口分配了一个 IP 地址(在虚拟机管理程序本身上),并让 DHCP 服务器定义一个与您的第 3 层地址的网络相匹配且范围合适的子网,那么这将在无需任何其他设备的情况下工作。
但是,在大多数情况下,使用桥接接口时,您连接的广播域上已经有一个 DHCP 服务器。br0 充当交换机,以便将流量传递给您的客户机。根据您对问题的描述,我可以为您提供一个示例配置,它将解决您的大多数问题。
请记住,堆叠接口时必须遵守 OSI 模型。这意味着,在创建第 2 层抽象(例如网桥)时,您不能在其下方进行任何第 3 层寻址。这根本行不通。由于网桥充当交换机,因此您将为网桥本身提供 IP 地址,并仅在链路层容量中连接其他接口。这包括虚拟机的虚拟接口和用于将外部网络桥接到所述虚拟机和虚拟机管理程序的物理接口。
在此配置中,eth0 连接到 br0,br0 获取您的地址。虚拟机连接到 br0,DHCP 服务(无论它们是在您的虚拟机管理程序上还是在同一个第 2 层域上的外部)将为您的虚拟机提供地址。
# cat /etc/network/interfaces
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
假设您使用 DHCP 获取 br0 的地址。如果不是,则需要对 br0 接口应用静态寻址。
完成此操作后,您需要重新启动网络 ( # systemctl stop networking && systemctl start networking
)。这将中断您的链接,因此如果您的配置失败,您将需要使用 OOB 方法进入您的计算机。如果它正确,您应该能够在服务启动后通过 SSH 重新连接。对于此类任务,能够通过 OOB 访问计算机非常重要,因为很容易被锁定。
另外,建议
这实际上是 libvirt 需要处理的工作。使用 libvirt,您可以轻松地为不需要从外部访问但需要访问互联网的虚拟机使用内置的 NAT 网络。定义虚拟机、创建一致的配置以及总体管理资源也变得更加容易。
virsh
您可以使用、virt-install
和的组合qemu-img
通过 cli 进行管理。您还可以使用许多其他图形前端来管理 libvirt,例如 oVirt 或虚拟机管理器 ( virt-manager
)