Как выполнить настройку сети libvirt?

В настоящий момент по умолчанию при создании виртуальной машины для контроллеров и баз данных используется xml для определения сети следующего вида:

<network>
  <name>ovs-network</name>
  <forward mode='bridge'/>
  <bridge name='br-ex'/>
  <virtualport type='openvswitch'/>
  <portgroup name='all-vlan' default='yes'>
  </portgroup>
</network>

Где br-ex - это мост, к которому будут подключаться интерфейсы виртуальных машин, ovs-network - название сети.

При такой настройке сети в виртуальную машину будут пробрасываться все тегированные и не тегированные сети как есть для br-ex.

Для того, чтобы сделать один vlan из br-ex не тегированным для виртуальной машины, необходимо перечислить нужные для проброса тегированные vlan и указать один не тегированный vlan:

<network>
  <name>ovs-network</name>
  <forward mode='bridge'/>
  <bridge name='br-ex'/>
  <virtualport type='openvswitch'/>
  <portgroup name='all-vlan' default='yes'>
    <vlan>
      <tag id='4001' nativeMode='untagged'/>
      <tag id='4020' />
    </vlan>
  </portgroup>
</network>

При такой настройке сети vlan 4001 будет проброшен в виртуальную машину как нетегированный vlan, а 4020 - как тегированный. Можно указать много тегированных vlan для проброса.

Также можно указать в одной сети несколько portgroup и указать нужное значение в настройках виртуальной машины.

Пример с несколькими portgroup:

<network>
  <name>ovs-network</name>
  <forward mode='bridge'/>
  <bridge name='br-ex'/>
  <virtualport type='openvswitch'/>
  <portgroup name='all-vlan' >
    <vlan>
      <tag id='4001' nativeMode='untagged'/>
      <tag id='4020' />
    </vlan>
  </portgroup>
  <portgroup name='other1' >
    <vlan>
      <tag id='4002' nativeMode='untagged'/>
      <tag id='4022' />
    </vlan>
  </portgroup>
</network>

Пример части xml для виртуальной машины, относящейся к сетевому интерфейсу:

<interface type='network'>
  <mac address='52:54:00:2f:00:02'/>
  <source network='ovs-network' portgroup='all-vlan'/>
  <virtualport type='openvswitch'>
  </virtualport>
  <model type='virtio'/>
  <mtu size='1500'/>
</interface>

Где portgroup='all-vlan' - это параметр, который указывали ранее в настройках сети.

Команда создания сети:

virsh net-define /tmp/ovs-network.xml

Где /tmp/ovs-network.xml - это файл, в котором описана сеть.

Команда активации сети:

virsh net-start ovs-network

Где ovs-network - название созданной сети.

Команда задания активации сети после рестарта системы:

virsh net-autostart ovs-network