Настройка сетевых интерфейсов в kvm для виртуальных машин

Written by on . Posted in KVM

В этой статье пойдет речь о создании сетевых интерфейсов для виртуальных машин. В качестве сервера используется ubuntu-server 14.04 LTS, виртуализация KVM.
Иногда одного bridge не достаточно и есть желание виртуалкам раздавать tagged трафик и untagged. Для этого будем использовать Open vSwitch.

В интернете очень много информации о преимуществах данного программного коммутатора. Кто не знает можно познакомиться на https://ru.wikipedia.org/wiki/Open_vSwitch

Установка Open vSwitch на ubuntu-server 14.04

Установить необходимо пакет openvswitch-switch

admin@v5:~$ sudo aptitude install openvswitch-switch

Установка openvswitch на CentOS 7

Для установке сначала необходимо добавить RDO репозиторий.

yum install https://rdoproject.org/repos/rdo-release.rpm
yum install openvswitch

После установки необходимо добавить openvswitch в автозагрузку и запустить демон

systemctl enable openvswitch.service
systemctl start openvswitch.service

Настройка openvswitch

В качестве настройки приведу свой конфиг.

admin@v5:~$ sudo ovs-vsctl add-br ovs-br0
admin@v5:~$ sudo ovs-vsctl set port ovs-br0 tag=150
admin@v5:~$ sudo ovs-vsctl add-port ovs-br0 eth0

Пояснения:
Этими командами мы создали виртуальный коммутатор, добавили в него физический интерфейс eth0. В моем случае на сетевую карту сервера eth0 поступает только тегированный трафик и необходимо сконфигурировать интерфейс, как access порт для vlan150. Это минимальная настройка openvswitsh. Сохранять специально эти команды ни где не нужно и при перезагрузке сохранятся.
Посмотерь настройки ovs можно командой

admin@v5:~$ sudo ovs-vsctl show
ed38de83-5f6d-47fa-9110-65796bafc604
    Bridge "ovs-br0"
        Port "ovs-br0"
            tag: 150
            Interface "ovs-br0"
                type: internal
        Port "eth0"
            Interface "eth0"
    ovs_version: "2.0.2"

Следующим шагом настроим ip адрес для нашего сервера.

Для ubuntu/debian

Редактируем файл /etc/network/interfaces, настройки прописываем как для сетевой карты.

auto eth0
iface eth0 inet manual

auto ovs-br0
        iface ovs-br0 inet static
        address 172.16.0.61
        netmask 255.255.255.0
        gateway 172.16.0.1
        dns-nameservers 172.16.0.1

Для CentOS 7/RHEL 7

создать файл /etc/sysconfig/network-scripts/ifcfg-ovs-br0 со следующим содержимым:

DEVICE=ovs-br0
NAME=ovs-br0
ONBOOT=yes
IPADDR=172.16.0.61
PREFIX=24
GATEWAY=172.16.0.1
NM_CONTROLLED=no

Создаем сетевые интерфейсы виртуалок

Для создания и управления интерфейсами через virsh нам понадобятся следующие команды:

virsh net-create файл_XMLсоздание и запуск новой сети на основе существующего XML-файла
virsh net-define файл_XMLсоздание нового сетевого устройства на основе существующего XML-файла
virsh net-start имя_неактивной_сетизапуск неактивной сети
virsh net-autostart имя_сетиавтоматический запуск заданной сети
virsh net-destroy имя_сетиотключение заданной сети
virsh net-undefine имя_неактивной_сетиудаление определения неактивной сети

Ниже приведены несколько вариантов xml файлов для сетевых интерфейсов:

vlan100.xml — untagged трафик в vlan100

<network>
<name>vlan100</name>
<forward mode='bridge'/>
<bridge name='ovs-br0'/>
<vlan>
<tag id='100'/>
</vlan>
<virtualport type='openvswitch'/>
</network>

vlan100119.xml — untagged vlan119, tagged vlan100 и vlan120

<network>
<name>vlan100119</name>
<forward mode='bridge'/>
<bridge name='ovs-br0'/>
<vlan trunk='yes'>
<tag id='119' nativeMode='untagged'/>
<tag id='100'/>
<tag id='120'/>
</vlan>
<virtualport type='openvswitch'/>
</network>

Как добавить сетевой интерфейс в KVM

Добавлять необходимо через virsh

root@v5:/# virsh net-define /home/vtest/vlan100.xml 
Network vlan100 defined from /home/vtest/vlan100.xml
root@v5:/# virsh net-start vlan100
root@v5:/# virsh net-autostart vlan100

Теперь после добавления можно используя «менеджер виртуальных машин» добавить наш интерфейс к любой виртуалки. Или через virsh edit добавить примерно следующие стоки:

<interface type='network'>
<mac address='52:54:00:1c:a5:71'/>
<source network='vlan100'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

Не забудьте изменить mac address.

При установки новой виртуальной машины можно добавить следующие параметры в команду virt-install

virt-install -n virt1 -r 1024 --accelerate --os-type=linux --os-variant=ubuntunatty -v --vnc --network=network:vlan100 -c /KVM/ubuntu-16.04-server-amd64.iso --disk /KVM/disk2_dh.qcow2,format=qcow2

Как посмотреть информацию о сетевом интерфейсе

virsh net-list — покажет весть список виртуальных сетей.

root@v5:~# virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default             active     yes           yes
 vlan100             active     yes           yes
 vlan119             active     yes           yes

Посмотреть информацию для заданного виртуальной сети
virsh net-dumpxml имя_сети

root@v5:~# virsh net-dumpxml vlan100
<network>
  <name>vlan100</name>
  <forward mode='bridge'/>
  <bridge name='ovs-br0'/>
  <vlan>
    <tag id='100'/>
  </vlan>
  <virtualport type='openvswitch'/>
</network>

Ниже приведен немного другой способ организации сетевых интерфейсов используя portgroup.

<network>
  <name>ovs-network</name>
  <forward mode='bridge'/>
  <bridge name='ovs-br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='vlan100'>
  <vlan>
   <tag id='100'/>
  </vlan>
  </portgroup>
  <portgroup name='vlan119'>
  <vlan>
    <tag id='119'/>
  </vlan>
  </portgroup>
  <portgroup name='vlanall'>
  <vlan trunk='yes'>
   <tag id='119' nativeMode='untagged'/>
   <tag id='100'/>
  </vlan>
  </portgroup>
</network>

в данном случае придется редактировать виртуалку добавив в секцию interface следующий параметр portgroup=’vlan100′. В отличие от предыдущей конфигурации нельзя воспользоваться «менеджер виртуальных машин» virt-manager для добавления сетевого интерфейса в виртуальную машину.

Выглядеть это должно примерно так:

<interface type='network'>
  <mac address='52:54:00:5e:19:79'/>
  <source network='ovs-network' portgroup='vlan100'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
<interface />

Полезные статьи
open vswitch:
https://habrahabr.ru/post/242741/
редактирование xml для сети от libvirt
http://libvirt.org/formatnetwork.html

Leave a comment