KVM虚机热添加网卡需两步:先用virsh attach-interface --live使网卡即时生效,再加--config或dumpxml+define持久化,否则重启丢失;必须指定--type bridge/network和--model virtio,并手动在虚拟机内启用网卡、配置IP。

能在线加,但必须分两步:先 attach-interface 让网卡立刻生效,再用 --config 或 dumpxml + define 写入配置,否则重启就丢。
virsh attach-interface 命令必须带 --live 才能热添加
不加 --live 参数时,命令会执行成功,但虚拟机里根本看不到新网卡(ip a 或 ifconfig -a 查不到)。只有加了这个参数,KVM 才会通知 QEMU 热插一张设备进去。
-
--live表示只作用于当前运行状态,内存中生效 - 常见组合是
--live --config,一步完成“即时+持久” - 如果虚拟机处于关机状态,
--live会被忽略,只写入配置 - 部分旧版 libvirt(如 1.2.x)不支持
--live单独使用,必须配合--config
type 和 source 怎么选:bridge vs network
选错类型会导致网卡无法通信,甚至 domiflist 都不显示新接口。
- 用桥接(物理网卡透出):选
--type bridge --source br0,其中br0是宿主机已存在的 Linux bridge(如用brctl show能看到) - 用虚拟网络(libvirt 自管 DHCP/NAT):选
--type network --source default,其中default是virsh net-list --all里列出的网络名 -
--model推荐显式指定virtio,比默认的rtl8139性能好、驱动兼容性强;Windows 虚拟机需提前装好 virtio 驱动
为什么 ifconfig 看得到 eth1 却 ping 不通?
Linux 虚拟机里网卡默认是 DOWN 状态,且没配 IP —— 这和物理机插网线后要手动 ip link set up 是一个道理。
- 检查状态:
ip link show eth1,看是不是state DOWN - 启用它:
ip link set eth1 up - 配地址(DHCP):
dhclient eth1;或静态 IP:ip addr add 192.168.10.100/24 dev eth1 - 注意 udev 规则干扰:老系统(如 CentOS 6)可能因
/etc/udev/rules.d/70-persistent-net.rules把新网卡识别成eth0冲突,建议删掉该文件并重启 udev 或直接改用predictable interface names(如ens3)
永久保存的两种可靠方式
只靠 --config 有时不保险,尤其当虚拟机 XML 结构复杂(含自定义设备、metadata)时,dumpxml + define 更稳妥。
- 推荐做法:
virsh attach-interface vmname --type bridge --source br0 --model virtio --live --config - 验证是否写入:
virsh dumpxml vmname | grep -A5 "mac address",确认新<interface>块存在且含type='bridge' - 极端情况(比如
--config失效):virsh dumpxml vmname > /tmp/vmname.xml && virsh define /tmp/vmname.xml - 删除时也要同步:
virsh detach-interface vmname --type bridge --mac 52:54:00:xx:xx:xx --live --config,漏掉--config就只是临时删
真正容易被忽略的是:网卡加进去了,宿主机桥接规则(如 ebtables、iptables FORWARD 链)、虚拟机内核模块(virtio_net 是否加载)、以及 SELinux(setsebool virt_use_nfs on 等)都可能拦住流量。别只盯着 virsh 命令本身。

















