Несколько сетевых карт в виртуальных машинах необходимо, например, для того, чтобы объединить несколько виртуальных машин внутренней локальной сетью.
Чтобы подключить несколько сетевых карт к виртуальной машине, необходимо при создании VM указать шаблон VM, в ресурсах которого указаны несколько сетей. При создании VM с таким шаблоном к ней будет подключено столько сетевых карт, сколько сетей в шаблоне VM. Каждый интерфейс будет связан с соответствующей сетью libvirt, причем сетевые интерфейсы связываются по порядку: виртуальный интерфейс eth0 будет привязан к первой сети, eth1 - ко второй и так далее.
libvirt при запуске VM включает соответствующие сетевые интерфейсы в мосты, указанные в настройках сетей.
Например, на узле кластера, на которм настроено три сети, создана VM с тремя сетевыми интерфейсами.
Конфигурация в libvirt будет выглядеть так:
# virsh dumpxml vmmultinic
<domain type='kvm' id='2'>
<name>vmmultinic</name>
<uuid>bf23ea1f-458f-8be3-1c3e-2e053b3489a3</uuid>
...
<devices>
...
<interface type='network'>
<mac address='52:54:00:61:ac:df'/>
<source network='Basic'/>
<target dev='vnet1'/>
<model type='virtio'/>
<filterref filter='vm-vmmultinic'>
<parameter name='IP' value='172.31.224.13'/>
<parameter name='IPV6' value='2a01:230::bef6:85ff:fed7:4062'/>
</filterref>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:6f:d0:1e'/>
<source network='B2'/>
<target dev='vnet2'/>
<model type='virtio'/>
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:9f:11:bb'/>
<source network='b3'/>
<target dev='vnet3'/>
<model type='virtio'/>
<alias name='net2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</interface>
...
</devices>
...
</domain>
Список сетевых мостов:
# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400fb1ab4 yes virbr0-nic
vmbr0 8000.525400ff6734 no eth0
vnet1
vmbr1 8000.fe54006fd01e no vnet2
vmbr2 8000.fe54009f11bb no vnet3
Видно, что первый интерфейс VM (eth0) подключен к мосту vmbr0 и к основному интерфейсу узла кластера. Второй интерфейс - eth1 виртуальной машины подключен к мосту vmbr1, а третий - к vmbr2
Все остальные VM с таким же шаблоном будут подключены аналогичным образом, а значит все вторые интерфейсы таких VM будут связаны в единую сеть.
Например, все узлы кластера связаны между собой внутренней сетью 10.1.1.0/24 через вторые интерфейсы eth1. Чтобы предоставить доступ VM к этой сети, необходимо cвязать интерфейс eth1 узла кластера и мост vmbr1. После этого виртуальные машины будут связаны с внутренней сетью кластера через вторые интерфейсы.