You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KVM默认网络为多台虚拟机分配相同IP的问题排查

问题

使用KVM+libvirt管理虚拟机,已安装以下依赖包:

bridge-utils libvirt-daemon-system virt-manager virt-viewer qemu-kvm qemu-efi

通过以下命令创建三台虚拟机:

virt-install --import --name guest1 \
        --memory 2048 --vcpus 1 --noautoconsole \
        --os-variant ubuntu22.04 --hvm \
        --network network=default \
        --disk=/vm-images/jammy01.img --import

virt-install --import --name guest2 \
        --memory 2048 --vcpus 1 --noautoconsole \
        --os-variant ubuntu22.04 --hvm \
        --network network=default \
        --disk=/vm-images/jammy02.img --import

virt-install --import --name guest3 \
        --memory 2048 --vcpus 1 --noautoconsole \
        --os-variant ubuntu22.04 --hvm \
        --network network=default \
        --disk=/vm-images/jammy03.img --import

libvirt默认网络配置:

<network>
  <name>default</name>
  <uuid>9ea90610-3814-4508-b943-3e53aa5d3404</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:6a:55:17'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

每台虚拟机的netplan配置:

network:
  ethernets:
    enp1s0:
      dhcp4: true
  version: 2
  renderer: networkd

所有虚拟机MAC地址不同,但均获取到同一个IP。执行virsh net-dhcp-leases default仅看到一条租约,三台虚拟机的DUID完全一致:

Expiry Time           MAC address         Protocol   IP address           Hostname   Client ID or DUID
------------------------------------------------------------------------------------------------------------------------------------------------
 2023-02-22 12:07:14   00:50:52:a7:d7:92   ipv4       192.168.122.241/24   ubuntu     ff:5d:e2:6c:15:00:02:00:00:ab:11:33:33:f1:46:a3:8b:cb:28

期望每台虚拟机获取独立IP,各对应一条DHCP租约。

解决方案

问题根源是三台虚拟机从同一镜像创建,系统中存储的DHCP客户端DUID完全相同,libvirt的DHCP服务器将它们识别为同一客户端,因此分配同一个IP。解决步骤如下:

  1. 登录每台虚拟机,删除DUID及相关配置文件
    执行命令:

    sudo rm /var/lib/systemd/netif/leases/*
    sudo rm /etc/machine-id
    
  2. 重新生成唯一的machine-id
    执行命令:

    sudo systemd-machine-id-setup
    
  3. 重启网络服务或虚拟机
    重启网络服务生效:

    sudo systemctl restart systemd-networkd
    

    或直接重启虚拟机:

    sudo reboot
    
  4. 验证DHCP租约
    在宿主机执行命令,确认每台虚拟机已获取独立IP:

    virsh net-dhcp-leases default
    

后续预防措施

后续创建新虚拟机前,建议对基础镜像执行sysprep操作,清除个性化配置(包括machine-id、DUID等),避免重复问题:

virt-sysprep -a /vm-images/jammy-base.img

内容的提问来源于stack exchange,提问作者dev.whoan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:39:24