Если коммутатор один, то все взаимодействие организуется достаточно просто – порты (например) fa0/3 и fa0/5 на уровне коммутатора объединяются в одну логическую группу, а порты fa0/2 и fa0/6 в другую. И все работает. Но в случае если коммутаторы разные и им нужно передавать по одному физическому каналу сразу несколько логических сетей, то весь трафик проходящий между коммутаторами нужно маркировать (или теггировать).
Теггирированный (маркированный, tagged) и не теггирированный (не маркированный, untagged) трафик, порт коммутатора через который проходят теггрированные фреймы называтеся транк (VLAN транк, 802.1Q транк).
Самый распространенный стандарт маркировки трафика IEEE 802.1Q, в кадр Ethernet или IEEE 802.3 инкапсулируется дополнительное двух байтовое поле содержащие TPID (идентификатор протокола 802.1Q) равный 0×8100, приоритет и номер VLAN к которому относится данный кадр.
Тег 802.1Q расположен сразу после MAC-адреса отравителя и TPID по сути заменяет поле типа или размера, поэтому L2-коммутаторы не поддерживающие 802.1Q могут доставить маркированные кадры до места назначения.
Если в VLAN транк попадает не маркированный трафик то он автоматически относится к специальному VLAN, который называется native VLAN и обычно это VLAN 1.
Для поднятия теггированного интерфейса на CentOS нужно в первую очередь проверить поддержку ядром 8021q:
# modprobe 8021q
Если сообщений об ошибке нет, значит все в порядке, модуль загрузился. Если же модуль не найден, необходимо пересобрать модули ядра, включив поддержку необходимого модуля. Проверим на всякий случай, загрузился ли модуль:
# lsmod | grep 8021q 8021q 29022 0 garp 14384 1 8021q mrp 18542 1 8021q
Все в порядке, модуль 8021q загружен, добавим его в автозагрузку:
# echo 8021q >> /etc/modules-load.d/8021q.conf
Теперь создаем файл конфигурации для vlan в /etc/sysconfig/network-scripts:
# mcedit ifcfg-eth0.2000 VLAN=yes DEVICE=eth0.2000 BOOTPROTO=static ONBOOT=yes TYPE=Vlan IPADDR=192.168.100.2 NETMASK=255.255.255.0
Обращаю внимание на выделенное жирным. Во всех инструкциях в интернете, что мне попались, этот параметр был указан как TYPE=Ethernet, но с такой настройкой интерфейс с vlan не поднимался, появлялась ошибка:
Error: no device found for connection 'System eth0.2000'.
Только после того, как я исправил, все заработало как надо. Так что сохраняем и активируем интерфейс:
# ifup eth0.2000 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
Проверяем наш vlan:
# ip l ls 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:15:5d:01:0f:06 brd ff:ff:ff:ff:ff:ff 3: eth0.2000@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT link/ether 00:15:5d:01:0f:06 brd ff:ff:ff:ff:ff:ff
Все в порядке, тегированный интерфейс поднят. По аналогии можно создать еще несколько подобных интерфейсов, не забывая изменять им имена и адреса.
UPD. На Centos 7 Catatlist заработало с такими настройками:
# cat ifcfg-enp5s9.10 VLAN=yes DEVICE=enp5s9.10 PHYSDEV=enp5s9 ONBOOT=yes BOOTPROTO="static" IPADDR=10.10.15.1 PREFIX=24
# cat ifcfg-enp5s9 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no IPV6INIT=no IPV6_AUTOCONF=no IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp5s9 UUID=38afe9ad-7f17-4bdc-a1d3-a909debda059 DEVICE=enp5s9 ONBOOT=yes BOOTPROTO=none IPADDR=10.10.5.1 PREFIX=24 GATEWAY=10.10.5.1 DNS1=192.168.113.1 DEFROUTE=yes IPV4_FAILURE_FATAL=no
# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: enp64s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:14:c2:03:4b:d2 brd ff:ff:ff:ff:ff:ff inet 192.168.113.53/24 brd 192.168.113.255 scope global noprefixroute enp64s0 valid_lft forever preferred_lft forever 3: enp5s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:30:84:b3:9a:b0 brd ff:ff:ff:ff:ff:ff inet 10.10.5.1/24 brd 10.10.5.255 scope global noprefixroute enp5s9 valid_lft forever preferred_lft forever 4: enp5s9.10@enp5s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:30:84:b3:9a:b0 brd ff:ff:ff:ff:ff:ff inet 10.10.15.1/24 brd 10.10.15.255 scope global noprefixroute enp5s9.10 valid_lft forever preferred_lft forever
# nmcli con sh NAME UUID TYPE DEVICE enp5s9 38afe9ad-7f17-4bdc-a1d3-a909debda059 ethernet enp5s9 enp64s0 f1963841-564a-4e83-8417-89279a1ce0cd ethernet enp64s0 Vlan enp5s9.10 a09a881e-c35d-491b-1244-59856eeac801 vlan enp5s9.10
# nmcli dev status DEVICE TYPE STATE CONNECTION enp64s0 ethernet подключено enp64s0 enp5s9 ethernet подключено enp5s9 enp5s9.10 vlan подключено Vlan enp5s9.10 lo loopback без управления --
# ip r default via 192.168.113.1 dev enp64s0 proto static metric 100 default via 10.10.5.1 dev enp5s9 proto static metric 101 10.10.5.0/24 dev enp5s9 proto kernel scope link src 10.10.5.1 metric 101 10.10.15.0/24 dev enp5s9.10 proto kernel scope link src 10.10.15.1 metric 400 192.168.113.0/24 dev enp64s0 proto kernel scope link src 192.168.113.53 metric 100
Switch#sh vlan VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 1 default active Fa0/1, Fa0/2, Fa0/3, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12, Fa0/13, Fa0/14, Fa0/16 Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21, Fa0/22, Fa0/23 5 net5 active 10 VLAN0010 active Fa0/15 50 net50 active 150 net150 active 1002 fddi-default active 1003 token-ring-default active 1004 fddinet-default active 1005 trnet-default active
Текущие привязки интерфейсов и VLAN можно посмотреть
# cat /proc/net/vlan/config VLAN Dev name | VLAN ID Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD enp5s9.10 | 10 | enp5s9
При отладке очень полезной может оказаться статистическая информация о интерфейсах, которая хранится в /proc/net/vlan/<имя интрефейса>
# cat /proc/net/vlan/enp5s9.10
enp5s9.10 VID: 10 REORDER_HDR: 1 dev->priv_flags: 1
total frames received 1384
total bytes received 205461
Broadcast/Multicast Rcvd 0
total frames transmitted 2817
total bytes transmitted 3418310
Device: enp5s9
INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
EGRESS priority mappings:
Если количество принятых кадров (frames received) равно 0, то скорее всего интерфейс enp5s9 не получает маркированный трафик для VLAN 10.