Настройка сетевых интерфейсов в 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