В этой статье я расскажу про настройку VLAN в CentOS. VLAN – это Virtual Logical Area Network или виртуальная компьютерная сеть, используется когда есть необходимость разделить сеть на канальном уровне на несколько логических частей, которые не должны между собой взаимодействовать.
В статье используется сервер CentOS 6.4 x64 с сетевым интерфейсом eth0, который через 802.1q транк подключен двум различным сетям 192.168.18.0/24 в VLAN 8 и 192.168.24.0/24 в VLAN14.
1. Немного теории
Для начала давайте рассмотрим небольшой пример, у нас есть два соединенных между собой коммутатора и четыре подключенных к ним компьютера. Компьютеры PC1 и PC2 находящиеся в VLAN 8 свободно между собой взаимодействуют и компьютеры PC3 и PC4 находящиеся в VLAN 14 тоже взаимодействуют между собой, но ни первые ни вторые могут подключиться к компьютерам в соседнем VLAN-е.
Если представить что коммутатор у нас один, то все взаимодействие организуется достаточно просто – порты ge4 и ge5 на уровне коммутатора объединяются в одну логическую группу, а порты ge2 и ge6 в другую. И в общем то все работает. Но в нашем случае коммутаторы разные и им нужно передавать по одному физическому каналу сразу несколько логических сетей, поэтому весь трафик проходящий между коммутаторами маркируется (или теггирируется).
Здесь появляются понятия теггирированный (маркированный, 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.
Теперь подойдем ближе к практической ситуации, перед нами те же самые коммутаторы, те же самые компьютеры в двух разных VLAN-ах, только к коммутатору SW-1 через порт ge10 подключен сервер SRV1. При этом сервер должен быть доступен из обоих виртуальных сетей.
В данном случае еще один транк 802.1Q организуется между сервером SRV1 и коммутатором SW-1, для каждого VLAN-а на сервере создается виртуальный интерфейс с соответствующим IP-адресом.
2. Практика
Просматриваем конфигурационный файл интерфейса eth0:
[root@srv1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" IPADDR=192.168.0.10 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 HWADDR="52:54:00:05:14:69" ONBOOT="yes"
Создаем конфигурационный файл для интерфейса в VLAN 8. На практике используется несколько вариантов именования интерфейсов привязанных к VLAN-ам, я для себя остановился на базовом варианте когда через точку после имени интерфейса пишется номер VLAN. Открываем для редактирования файл /etc/sysconfig/network-scripts/ifcfg-eth0.8 и приводим его к следующему виду:
VLAN=yes DEVICE=eth0.8 PHYSDEV=eth0 BOOTPROTO="static" IPADDR=192.168.18.10 NETMASK=255.255.255.0 ONBOOT=yes
Аналогично создаем файл /etc/sysconfig/network-scripts/ifcfg-eth0.14 для интерфейса смотрящего в VLAN 14:
VLAN=yes DEVICE=eth0.14 PHYSDEV=eth0 BOOTPROTO="static" IPADDR=192.168.24.10 NETMASK=255.255.255.0 ONBOOT=yes
Перезапускаем сеть:
[root@srv1 ~]# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface eth0.14: [ OK ] Bringing up interface eth0.8: [ OK ]
Проверяем что интерфейсы поднялись и имеют соответствующие адреса
[root@srv1 ~]# ifconfig | egrep '(eth|inet addr)' eth0 Link encap:Ethernet HWaddr 52:54:00:05:14:69 inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0 eth0.8 Link encap:Ethernet HWaddr 52:54:00:05:14:69 inet addr:192.168.18.10 Bcast:192.168.18.255 Mask:255.255.255.0 eth0.14 Link encap:Ethernet HWaddr 52:54:00:05:14:69 inet addr:192.168.24.10 Bcast:192.168.24.255 Mask:255.255.255.0
Текущие привязки интерфейсов и VLAN можно посмотреть в /proc/net/vlan/config
[root@srv1 ~]# cat /proc/net/vlan/config VLAN Dev name | VLAN ID Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD eth0.14 | 14 | eth0 eth0.8 | 8 | eth0
При отладке очень полезной может оказаться статистическая информация о интерфейсах, которая хранится в /proc/net/vlan/<имя интрефейса>.
[root@squidsk ~]# cat /proc/net/vlan/eth0.8 eth0.8 VID: 8 REORDER_HDR: 1 dev->priv_flags: 1 total frames received 11 total bytes received 256 Broadcast/Multicast Rcvd 1 total frames transmitted 12 total bytes transmitted 768 total headroom inc 0 total encap on xmit 12 Device: eth0 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, то скорее всего интерфейс eth0 не получает маркированный трафик для VLAN 8.
3. Заключение
На этом я закончу свой рассказ. Если у вас есть вопросы или дополнения – пишите. Обязательно отвечу.