У меня дома вся сетевая инфраструктура поделена на VLAN(ы). Так вот чтобы завести на хост QEMU+KVM vlan созданный на Mikrotik я разобрал следующую последовательность действий.

Шаги на Mikrotik

  • есть общий Bridge в который объединены все порты,
  • создаю VLAN 20 и вешаю его на общий Bridge.
  • Присваиваю адрес созданному VLAN,
  • Адрес на Mikrotik делаю статическим
  • настраиваю DHCP сервис для VLAN
  • В правилах брандмауэера разрешаю/запрещаю куда из этого VLAN можно получить доступ/запретить

Устанавливаю на хост QEMU + KVM (on Ubuntu 18.04 Server amd) пакет для работы с VLAN:

ekzorchik@srv-bionic:~$ sudo apt-get install vlan -y

Создаю бридж для работы VLAN 20, но после вспомнил что делается это по-другому:

ekzorchik@srv-bionic:~$ sudo vconfig add br0 20

WARNING: Could not open /proc/net/vlan/config. Maybe you need to load the 8021q module, or maybe you are not using PROCFS??

ERROR: trying to add VLAN #20 to IF -:br0:- error: No such device

ekzorchik@srv-bionic:~$ sudo modprobe 8021q

ekzorchik@srv-bionic:~$ sudo vconfig add enp3s0 20

Added VLAN with VID == 20 to IF -:enp3s0:-

ekzorchik@srv-bionic:~$ ifconfig -a | grep enp3s0.20

enp3s0.20: flags=4098<BROADCAST,MULTICAST> mtu 1500

ekzorchik@srv-bionic:~$ sudo brctl addbr br0.20

ekzorchik@srv-bionic:~$ sudo brctl addif br0.20 enp3s0.20

ekzorchik@srv-bionic:~$ sudo dhclient br0.20

ekzorchik@srv-bionic:~$ ip r | grep br0.20

default via 172.40.40.1 dev br0.20

172.40.40.0/24 dev br0.20 proto kernel scope link src 172.40.40.254

Для того, чтобы интерфейс поднимался каждый раз после перезагрузки системы, его надо добавить в файл «/etc/network/interfaces«, но использование данного файла было до системы Ubuntu 18.04, сейчас настройка ведется через утилиту netplan:

ekzorchik@srv-bionic:~$ sudo nano /etc/network/interfaces

# ifupdown has been replaced by netplan(5) on this system. See

# /etc/netplan for current configuration.

# To re-enable ifupdown on this system, you can run:

# sudo apt install ifupdown → это если вернуться к старому созданию

А значит с использованием Netplan настраиваю поднятие интерфейса после перезагрузки системы:

За примером как правильно прописать смотрю файл с примером:

ekzorchik@srv-bionic:~$ cat /usr/share/doc/netplan.io/examples/vlan.yaml

ekzorchik@srv-bionic:~$ sudo netplan generate

ekzorchik@srv-bionic:~$ sudo nano /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: yes

  vlans:
   br0.20:
    id: 20
    link: enp3s0
    addresses: [ "172.40.40.254/24" ]
    nameservers:
      addresses: [ "127.0.0.1" ]

Настройки br0 через netplan для QEMU + KVM

ekzorchik@srv-bionic:~$ sudo netplan apply

ekzorchik@srv-bionic:~$ sudo netplan try

ekzorchik@srv-bionic:~$ sudo reboot

после перезагрузки интерфейс с VLAN20 успешно поднялся.

В свойствах виртуальной машины применительно к сети прописываю:

В свойствах виртуальной машины применительно к сети прописываю:

Включаю VM, у меня это W7X64 — и после загрузки проверяю, какой сетевой адрес она получила:

C:\Users\ekzorchik>ipconfig

Настройка протокола IP для Windows

Ethernet adapter Подключение по локальной сети 3:

DNS-суффикс подключения . . . . . :

IPv4-адрес. . . . . . . . . . . . : 172.40.40.253

Маска подсети . . . . . . . . . . : 255.255.255.0

Основной шлюз. . . . . . . . . : 172.40.40.1

все верно адресация из VLAN 20. Работает.

Разграничение чтобы из этой сети VLAN 20 нельзя было попасть в другие сети обозначенные на Mikrotik регулируются правилами winbox — IP — Firewall.

Было замечено, что после перезагрузки хоста, при попытке запустить виртуальную машину получаю:

Ошибка запуска : Unable to add bridge br0.20 port vnet0: Operation not supported

root@srv-kvm1:~# brctl show br0.20

bridge name bridge id STP enabled interfaces

br0.20 can't get info Operation not supported

но вот интерфейс поднят — netplan успешно отработал:

root@srv-kvm1:~# ip r | grep br0.20

172.40.40.0/24 dev br0.20 proto kernel scope link src 172.40.40.254

root@srv-kvm1:~# cat /proc/net/vlan/config

VLAN Dev name | VLAN ID

Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD

br0.20 | 20 | enp3s0

root@srv-kvm1:~# brctl show

bridge name bridge id STP enabled interfaces

virbr0 8000.525400792518 yes virbr0-nic

virbr1 8000.525400904d81 yes virbr1-nic

root@srv-kvm1:~# vconfig rem br0.20

root@srv-kvm1:~# ls /proc/net/vlan/

config

В итоге решил завести VLAN чуть по-другому:

virt-manager srv-kvm1 — Правка - «Свойства подключения» - «Сетевые интерфейсы» -

Шаг №1:

  • Тип интерфейса: VLAN

и нажимаю кнопку «Вперед»

Шаг №2:

  • Режим запуска: onboot
  • Активировать: отмечаю галочкой
  • Параметры IP: IPv4: DHCP
  • Тег VLAN: 20
  • Выберите родительский интерфейс: enp3s0

и нажимаю кнопку «Готово», в ответ я получаю ошибку:

Ошибка создания интерфейса: Не удалось создать интерфейс: internal error: failed to create (start) interface enp3s0.20: failed to execute external program - Running '/sbin/ifup enp3s0.20' program not found

root@srv-kvm1:~# apt-get install -y ifupdown

Создается интерфейс enp3s0.20

В настройках VM для оборудования NIC прописываю:

  • Создать на базе: Устройство хоста enp3s0.20: macvtap
  • Режим: Мост
  • Модель устройства: virtio

После выбираю интерфейс созданный выше в свойствах VM на которой подается VLAN

 

Ожидаю.

Интерфейс создался enp3s0.20

Важно убедиться что в системе Windows 7 Pro x64 SP1 оборудование в «Диспетчере устройств» - Хост — Сетевые адаптеры - «Red Hat VirtIO Ethernet Adapter», удаляем все опознанные и на хосте через правый клик вызываем «Обновить конфигурацию оборудования», а после может понадобиться установить драйвера: пакет virtio-win-0.1.141.iso

И после заработало. Проверяю отправкой в перезагрузку хоста с последующим

запуском VM: W7X64

root@srv-kvm1:~# reboot

VM не запускается пишет: «Ошибка запуска : Unable to get index for interface enp3s0.20: No such device», проверяю что с настроенным сетевым адаптером, а он в статусе «Не активно», почему он не запускается автоматически? Переделал netplan и после сетевой адаптер в Virt-Manager успешно изменил статус на «Активно»

root@srv-kvm1:~# nano /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: yes

  vlans:
   enp3s0.20:
    id: 20
    link: enp3s0
    addresses: [ "172.40.40.254/24" ]
    nameservers:
      addresses: [ "127.0.0.1" ]
root@srv-kvm1:~# netplan apply

root@srv-kvm1:~# netplan try

Следом запускаю VM: W7X64 и сетевой адаптер назначенный ей для работы с VLAN 20 успешно запустился. Вот теперь работает.

Ниже обобщенный порядок действий:

а) sudo apt-get install -y ifupdown

б) через virt-manager для хоста создаю «Сетевой интерфейс», если выставлено получение сетевого адреса через DHCP, то после именно этот адрес задаем в netplan.

в) через netplan настраиваю поднятие с загрузкой системы интерфейса.

Итого поставленная задача выполнена которой я хотел добиться проработав настройку и шаги через которые для хоста QEMU+KVM завел VLAN выполнена. Нужно создавать сеть через менеджер управления, т. е. Virt-manager. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.