1. Модуль ядра для работы с VLAN
Для работы в Linux с VLAN необходимо загрузить модуль ядра: 8021q
# modprobe 8021q
Для этого, ядро должно быть
сконфигурировано с поддержкой стандарта IEEE 802.1Q (включается при
конфигурировании ядра: в kernel/net/8021q включить 802.1Q VLAN Support
или в Network options / 802.1Q VLAN Support). Во многих современных
дистрибутивах Linux (Debian, CentOS, openSUSE и т.д) такая поддержка уже
включена в ядре и модуль можно загружать.
2. Использование утилиты vconfig для настройки VLAN
Что бы настроить на интерфейсе необходимые VLAN, можно воспользоваться утилитой vconfig она находится в пакете vlan либо в пакете vconfig, в зависимости от дистрибутива Linux.
vconfig имеет следующие опции:
add [interface-name] [vlan_id] — добавить VLAN с номером vlan_id (от 0 до 4095) на интерфейсе interface-name
rem [vlan-name] — удалить VLAN, именованый как vlan-name (имя vlan-name зависит от того, какой тип именования выбран см. ниже)
set_flag [interface-name] [flag-num] [0 | 1] — указывает следует ли делать перестановку (reorder) заголовка Ethernet кадра. Если значение 1 — перестановка
включена, и трафик в снифферах (tcpdump и т.д) будет выглядеть как
трафик обычного сетевого устройства без тегов VLAN. Если значение 0 - перестановка отключена, и трафик видится с тегами VLAN. Значение по умолчанию: 0.
set_egress_map [vlan-name] [skb_priority] [vlan_qos] - указывает, что для исходящих пакетов через vlan-name с определённым приоритетом буфера сокетов (sk_buff) skb_priority, должна выполняться маркировка приоритета VLAN в значение vlan_qos (3-х битное значение в VLAN заголовке). По умолчанию значение приоритета VLAN vlan_qos: 0.
set_ingress_map [vlan-name] [skb_priority] [vlan_qos] - указывает, что входящие пакеты через vlan-name с определённым приоритетом VLAN vlan_qos, должны помещаться в очередь буфера сокетов с приоритетом skb_priority. Значение по умолчанию приоритета очереди буфера сокетов skb_priority: 0.
set_name_type [name-type] - задаёт тип именования VLAN интерфейсов, при их добавлении. Возможные значения name-type:
VLAN_PLUS_VID — имя vlan-name будет вида vlan0020
VLAN_PLUS_VID_NO_PAD - имя vlan-name будет вида vlan20
DEV_PLUS_VID - имя vlan-name будет вида eth0.0020
DEV_PLUS_VID_NO_PAD - имя vlan-name будет вида eth0.20
VLAN_PLUS_VID — имя vlan-name будет вида vlan0020
VLAN_PLUS_VID_NO_PAD - имя vlan-name будет вида vlan20
DEV_PLUS_VID - имя vlan-name будет вида eth0.0020
DEV_PLUS_VID_NO_PAD - имя vlan-name будет вида eth0.20
Пример добавление VLAN 100 и VLAN 200 на интерфейсе eth0:
#
# modprobe 8021q
# vconfig add eth0 100
Added VLAN with VID == 100 to IF -:eth0:-
# vconfig add eth0 200
Added VLAN with VID == 200 to IF -:eth0:-
#
# modprobe 8021q
# vconfig add eth0 100
Added VLAN with VID == 100 to IF -:eth0:-
# vconfig add eth0 200
Added VLAN with VID == 200 to IF -:eth0:-
#
Посмотреть существующие VLAN можно в файле "/proc/net/vlan/config"
# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100 | 100 | eth0
eth0.200 | 200 | eth0
#
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100 | 100 | eth0
eth0.200 | 200 | eth0
#
Задать IP адрес на VLAN интерфейсах и включить их, можно командой ifconfig:
#
# ifconfig eth0.100 192.168.100.1 netmask 255.255.255.0 up
# ifconfig eth0.200 192.168.200.1 netmask 255.255.255.0 up
#
# ifconfig eth0.100 192.168.100.1 netmask 255.255.255.0 up
# ifconfig eth0.200 192.168.200.1 netmask 255.255.255.0 up
#
3. Сохранение конфигурации VLAN интерфейсов при перезагрузке системы
Создание VLAN через vconfig и их настройка через ifconfig позволяет
сохранить настройки до перезагрузки системы, что бы настройка
применялась при загрузке операционной системы, необходимо создать
специальные файлы конфигурации для VLAN интерфейсов.
Конфигурация VLAN интерфейсов зависит от
того, какие скрипты инициализации сети используется в дистрибутиве
Linux (initscripts, sysconfig или interfaces). Что бы узнать, какая
система инициализации сети у Вас, следует:
— Выполнить команду "rpm -qf
/sbin/ifup" на экране отобразится название пакета, название начинается
на "initscripts" либо на "sysconfig". Этот пакет и предоставляет скрипты
инициализации сети.
- Если в директории "/etc/network"
присутствует файл "interfaces", то в Вашей системе используется
interfaces для инициализации сети
Рассмотрим примеры настройки для всех трёх типов инициализации сети.
Настройка VLAN в Linux с использованием initscripts
Примером дистрибутивов Linux, использующих для настройки сети initscripts, являются RedHat, CentOS, Fedora и пр.
Файлы описания (конфигурации) для VLAN
интерфейсов следует создавать в "/etc/sysconfig/network-scripts/". Имя
файла должно быть вида: ifcfg-ethX.Y, либо вида ifcfg-vlanY (тогда в самом файле ifcfg-vlanY необходимо задать соответствующее значение параметра VLAN_NAME_TYPE ), где X — номер сетевого интерфейса, Y — идентификатор (номер) VLAN (VID)
Для примера, на интерфейсе eth0 добавим
два VLAN 100 и 200. Что бы рассмотреть пример обоих файлов, создадим в
"/etc/sysconfig/network-scripts/" один файл ifcfg-eth0.100 (описание для VLAN 100) и второй ifcfg-vlan200 (описание для VLAN 200).
Содержание файла "ifcfg-eth0.100":
VLAN=yes
DEVICE=eth0.100
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.100.1
NETMASK=255.255.255.0
DEVICE=eth0.100
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.100.1
NETMASK=255.255.255.0
Содержание файла "ifcfg-vlan200":
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan200
PHYSDEV=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.200.1
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan200
PHYSDEV=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.200.1
С такими файлами, после перезагрузки
системы, на интерфейсе eth0 будут присутствовать два VLAN 100 и 200.
Модуль ядра 8021q, при этом, загрузился автоматически.
Проверка:
#
# lsmod | grep 8021q
8021q 20355 0
garp 5703 1 8021q
#
# lsmod | grep 8021q
8021q 20355 0
garp 5703 1 8021q
#
# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100 | 100 | eth0
vlan200 | 200 | eth0
#
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100 | 100 | eth0
vlan200 | 200 | eth0
#
#
# ifconfig eth0.100
eth0.100 Link encap:Ethernet HWaddr 00:0C:29:64:7F:04
inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe64:7f04/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:768 (768.0 b)
# ifconfig vlan200
vlan200 Link encap:Ethernet HWaddr 00:0C:29:64:7F:04
inet addr:192.168.200.1 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe64:7f04/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:768 (768.0 b)
#
# ifconfig eth0.100
eth0.100 Link encap:Ethernet HWaddr 00:0C:29:64:7F:04
inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe64:7f04/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:768 (768.0 b)
# ifconfig vlan200
vlan200 Link encap:Ethernet HWaddr 00:0C:29:64:7F:04
inet addr:192.168.200.1 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe64:7f04/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:768 (768.0 b)
#
Видно, что модуль ядра 8021q загружен,
созданы VLAN 100 и 200, подняты соответствующие им интерфейсы с
заданными IP адресами. (Значение RX равно 0, так как на интерфейс ещё не
подан транк со стороны коммутатора).
Настройка VLAN в Linux с использованием sysconfig
Одним из примеров дистрибутива Linux, использующего для настройки сети sysconfig, является SuSE Linux.
Нужно создать в директории "/etc/sysconfig/network/" файлы для конфигурации необходимых VLAN. Имя файла имеет вид: ifcfg-vlanX, где X — номер VLAN (VID)
В содержание файла, помимо настроек сети (IP адрес, маска сети и т.д.), необходимо добавить параметры: ETHERDEVICE и VLAN
Пример создания двух VLAN 100 и 200 на интерфейсе eth0:
Создаем в "/etc/sysconfig/network/" два файла, первый с именем ifcfg-vlan100 и второй с именем ifcfg-vlan200
Содержание файла "ifcfg-vlan100":
ETHERDEVICE="eth0"
IPADDR="192.168.100.2"
NETMASK="255.255.255.0"
NETWORK="192.168.100.0"
BROADCAST="192.168.100.255"
STARTMODE="onboot"
VLAN="YES"
IPADDR="192.168.100.2"
NETMASK="255.255.255.0"
NETWORK="192.168.100.0"
BROADCAST="192.168.100.255"
STARTMODE="onboot"
VLAN="YES"
Содержание файла "ifcfg-vlan200":
ETHERDEVICE="eth0"
IPADDR="192.168.200.2"
NETMASK="255.255.255.0"
NETWORK="192.168.200.0"
BROADCAST="192.168.200.255"
STARTMODE="onboot"
VLAN="YES"
IPADDR="192.168.200.2"
NETMASK="255.255.255.0"
NETWORK="192.168.200.0"
BROADCAST="192.168.200.255"
STARTMODE="onboot"
VLAN="YES"
После перезагрузки системы или
выполнения команды "/etc/init.d/network restart", на интерфейсе eth0
появятся два VLAN 100 и 200, а VLAN интерфейсы vlan100 и vlan200 будут
подняты с заданной настройкой IP адреса и маской сети. Так же модуль
ядра 8021q будет загружен автоматически.
Проверить результат можно таким же способом, как описано в случае с initscripts ("lsmod | grep 8021q", "cat /proc/net/vlan/config","ifconfig")
Настройка VLAN в Linux с использованием interfaces (ifupdown)
Примером дистрибутивов Linux, использующих для настройки сети interfaces, являются Debian, Ubuntu и пр.
Настройка производится в файле:
"/etc/network/interfaces", в который необходимо добавить дополнительные
строки, описывающие VLAN интерфейсы и их настройку.
Пример создания двух vlan 100 и 200 на интерфейсе eth0:
Добавить в файл "/etc/network/interfaces" строки:
auto eth0.100
iface eth0.100 inet static
address 192.168.100.3
netmask 255.255.255.0
vlan_raw_device eth0
auto eth0.200
iface eth0.200 inet static
address 192.168.200.3
netmask 255.255.255.0
vlan_raw_device eth0
iface eth0.100 inet static
address 192.168.100.3
netmask 255.255.255.0
vlan_raw_device eth0
auto eth0.200
iface eth0.200 inet static
address 192.168.200.3
netmask 255.255.255.0
vlan_raw_device eth0
После перезагрузки, или после выполнения
команд "# ifup eth0.100″ и "# ifup eth0.200″, на интерфейсе eth0
появятся два VLAN 100 и 200, интерфейсы eth0.100 и eth0.200 будут
подняты с заданными сетевыми настройками. Так же модуль ядра 8021q будет
автоматически загружен.
Проверить результат можно таким же способом, как описано в случае с initscripts ("lsmod | grep 8021q", "cat /proc/net/vlan/config","ifconfig")
Комментариев нет:
Отправить комментарий