В этой статье я расскажу про настройку 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. Заключение

На этом я закончу свой рассказ. Если у вас есть вопросы или дополнения – пишите. Обязательно отвечу.
 

Оставить комментарий