Thank you for reading this post, don't forget to subscribe!
VLAN настроим на CentOS, на интерфейсе enp2s0. На моем хосте он предназначен для виртуальных машин. На нем создадим 15-й vlan (пропускает tagged-трафик "внутрь", исходящий трафик тегирует). Трафик виртуалок будет тегироваться 15-м vlan.
Сначала проверим, что на хосте загружен модуль ядра 8021q:
# lsmod | grep 8021q
Если ничего нет, то подгружаем модуль:
# modprobe 8021q
В CentOS настройки сетевых интерфейсов находятся в файлах /etc/sysconfig/network-scripts/ifcfg-*
Изначально настройки сетевого интерфейса enp2s0 могли выглядеть так (файл /etc/sysconfig/network-scripts/ifcfg-enp2s0):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
TYPE=Ethernet BOOTPROTO=none ONBOOT=yes IPADDR=192.168.88.150 NETMASK=255.255.255.0 GATEWAY=192.168.88.1 DNS1=192.168.88.1 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=no IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=enp2s0 UUID=0c47fee5-889c-4974-8704-fe597e7937df DEVICE=enp2s0 |
Если сетевой интерфейс предназначен для работы нескольких виртуальных машин, то удобно создавать сетевой бридж (bridge) по схеме:
enp2s0 -> VLAN 15 -> br15
Т.е. на базе сетевого интерфейса enp2s0 создается VLAN 15 (по сути, это отдельная сеть) и к этому VLAN-у доступ осуществляется через bridge br15 (название br15 взято просто для удобства). Виртуальные машины будут подключаться к бриджу br15, а не к конкретному физическому интерфейсу. Это может быть удобным в дальнейшем при изменении ролей интерфейсов, к примеру.
1. Оставим в описании файла интерфейса enp2s0 минимум сведений (по сути, только описание физического интерфейса):
1 2 3 4 5 6 7 8 |
nano /etc/sysconfig/network-scripts/ifcfg-enp2s0 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes NAME=enp2s0 UUID=0c47fee5-889c-4974-8704-fe597e7937df DEVICE=enp2s0 |
2. Создаем VLAN 15 (запись стандартная для Linux: имя_интерфейса.номер_vlan)
1 2 3 4 5 6 7 8 9 10 |
nano /etc/sysconfig/network-scripts/ifcfg-enp2s0.15 VLAN="yes" VLAN_NAME_TYPE="VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD" DEVICE="enp2s0.15" PHYSDEV=enp2s0 BOOTPROTO="none" ONBOOT="yes" TYPE="Vlan" BRIDGE=br15 |
3. Создаем новый bridge15, рассчитанный для нашей задачи (цель - подключение виртуальной машины к VLAN 15). Задаем бриджу IP-адрес и прочие настройки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
nano /etc/sysconfig/network-scripts/ifcfg-br15 DEVICE=br15 TYPE=Bridge BOOTPROTO=static ONBOOT=yes DELAY=0 DEFROUTE=no IPV4_FAILURE_FATAL=no IPV6INIT=no IPADDR="192.168.15.2" NETMASK="255.255.255.0" GATEWAY="192.168.15.1" |
где VLAN_NAME_TYPE задает формат названия сетевого интерфейса для VLAN: имя_интерфейса.номер_vlan
4. Хост надо перезагрузить, просто рестарта сетевых настроек (systemctl restart NetworkManager.service
) недостаточно.
5. После перезагрузки хоста правим виртуальную машину - теперь она будет подключаться к сети VLAN 15:
# virsh shutdown vm1
(надо выключить виртуальную машину, иначе не применятся настройки сети)
# virsh edit vm1
Находим там секцию, похожую на:
1 2 3 4 5 6 |
<interface type='bridge'> <mac address='52:54:00:b9:a6:4e'/> <source bridge='br1'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> |
Строку с mac-адресом удаляем, br1 меняем на br15. Сохраняем, запускаем виртуальную машину. По идее, если с транком все в порядке, виртуалка vm1 подключена через br15 к VLAN 15.
Аналогично можно понасоздавать vlan-ов сколько душе угодно. И на том же сетевом интерфейсе можно оставить и нетегированный трафик. Это как удобно.