如何在Linux中配置KVM使用路由器的DHCP服务
如何在Linux中配置KVM使用路由器的DHCP服务
嘿,刚接触KVM的话,这个问题确实容易搞混,我来一步步帮你搞定,让你的VM用上路由器的DHCP服务~
首先得明白:你现在用的是KVM默认的NAT网络模式,这种模式下KVM会自己创建一个虚拟网桥virbr0,并运行本地DHCP服务,所以VM只能拿到192.168.122.x段的IP。要用上路由器的DHCP,我们需要把KVM网络改成桥接模式——相当于把VM的网卡直接“接”到你的物理网络里,这样路由器就能直接给VM分配IP了。
第一步:在系统层面创建桥接设备
首先得在你的Linux主机上创建一个桥接接口,把物理网卡和这个桥接接口绑定:
- 先查看你的物理网卡名称,执行命令:
输出里类似ip link showenp0s3或者eth0的就是你的物理网卡(选那个连接着路由器的网卡)。 - 用NetworkManager命令创建桥接(适合大多数发行版):
- 创建桥接设备
br0:sudo nmcli con add type bridge ifname br0 - (可选)关闭桥接的STP协议(如果你的网络不需要的话):
sudo nmcli con modify br0 bridge.stp no - 把物理网卡加到桥接设备里:
sudo nmcli con add type bridge-slave ifname 你的物理网卡名 master br0 - 停用原来的物理网卡连接:
sudo nmcli con down 你的物理网卡名 - 启用桥接连接:
sudo nmcli con up br0
- 创建桥接设备
- 验证桥接是否正常:执行
ip addr show br0,你应该能看到桥接设备拿到了路由器分配的192.168.100.x段的IP。
第二步:修改KVM默认网络为桥接模式
接下来修改KVM的默认网络配置,让它使用我们刚创建的桥接设备:
- 先备份原来的配置文件,以防出错:
sudo cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/default.xml.bak - 停止当前的默认NAT网络:
sudo virsh net-destroy default - 编辑默认网络的XML文件:
把原来的内容替换成下面的配置(保留你的UUID,不用改):sudo nano /etc/libvirt/qemu/networks/default.xml
这里核心是把<network> <name>default</name> <uuid>21f9eef3-c1ac-49a1-b413-574011a2c4d5</uuid> <forward mode="bridge"/> <bridge name="br0"/> </network><forward mode='nat'/>改成<forward mode="bridge"/>,并指定桥接设备为br0,同时删掉原来的<ip>和<dhcp>段(因为现在用路由器的DHCP了)。 - 重新定义并启动默认网络:
sudo virsh net-define /etc/libvirt/qemu/networks/default.xml sudo virsh net-start default sudo virsh net-autostart default
第三步:修改现有虚拟机的网卡配置
如果你已经有像pluto、kali这样的虚拟机,需要把它们的网卡改成桥接模式:
- 先关闭目标虚拟机:
sudo virsh shutdown pluto - 编辑虚拟机的XML配置:
sudo virsh edit pluto - 找到原来的
<interface>段(大概是这样的):
把它替换成你看到的桥接配置(保留原来的MAC地址,避免冲突):<interface type='network'> <mac address='52:54:00:05:d8:ba'/> <source network='default'/> <model type='virtio'/> </interface><interface type='bridge'> <mac address='52:54:00:05:d8:ba'/> <source bridge='br0'/> <model type='e1000e'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> - 保存退出后,启动虚拟机:
sudo virsh start pluto - 进入虚拟机后,执行
ip addr就能看到它拿到了路由器分配的192.168.100.x段的IP啦~
备注:内容来源于stack exchange,提问作者Joao Henrique da Silva




