Несколько сетевых карт в виртуальных машинах необходимо, например, для того, чтобы объединить несколько виртуальных машин внутренней локальной сетью.

Чтобы подключить несколько сетевых карт к виртуальной машине, необходимо при создании VM указать шаблон VM, в ресурсах которого указаны несколько сетей. При создании VM с таким шаблоном к ней будет подключено столько сетевых карт, сколько сетей в шаблоне VM. Каждый интерфейс будет связан с соответствующей сетью libvirt, причем сетевые интерфейсы связываются по порядку: виртуальный интерфейс eth0 будет привязан к первой сети, eth1 - ко второй и так далее.

libvirt при запуске VM включает соответствующие сетевые интерфейсы в мосты, указанные в настройках сетей.

Например, на узле кластера, на которм настроено три сети, создана VM с тремя сетевыми интерфейсами.

Конфигурация в libvirt будет выглядеть так:

# virsh dumpxml  vmmultinic
BASH
 <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>
BASH

Список сетевых мостов:

# 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
BASH

Видно, что первый интерфейс VM (eth0) подключен к мосту vmbr0 и к основному интерфейсу узла кластера. Второй интерфейс - eth1 виртуальной машины подключен к мосту vmbr1, а третий - к vmbr2

Все остальные VM с таким же шаблоном будут подключены аналогичным образом, а значит все вторые интерфейсы таких VM будут связаны в единую сеть.

Например, все узлы кластера связаны между собой внутренней сетью 10.1.1.0/24 через вторые интерфейсы eth1. Чтобы предоставить доступ VM к этой сети, необходимо cвязать интерфейс eth1 узла кластера и мост vmbr1. После этого виртуальные машины будут связаны с внутренней сетью кластера через вторые интерфейсы.