VLAN в Linux

Материал из Xgu.ru

(Перенаправлено с vlan/linux)
Перейти к: навигация, поиск
Короткий URL: vlan/linux

< VLAN

На этой странице рассматривается процедура настройки VLAN в Linux.

Содержание

[править] Настройка VLAN в Linux

Ниже описывает процедура поднятия тегированного интерфейса на Linux-системе. Может применяться, например, в тех случаях, когда нужно маршрутизировать трафик между несколькими VLAN'ами или обеспечить присутствие сервера в нескольких VLAN'ах одновременно.

Необходима поддержка 802.1Q ядром Linux.

# modprobe 8021q

Если модуль не найден, необходимо переконфигурировать ядро, включив поддержку модуля, а потом пересобрать модули ядра.

Модуль включается в Network options / 802.1Q VLAN Support.

# make menuconfig
# make modules; make modules_install

Говорим, какие VID будем пропускать. Для этого используем программу vconfig (пакет vlan в Debian) В результате будут созданы виртуальные интерфейсы с именами, содержащими VLAN ID.

интерфейс.VLAN-ID
eth0.2 (пример).

Следует учесть, что трафик нижележащего интерфейса (eth0, в данном случае) будет отсылаться без тега (untagged в терминологии cisco). Добавление дополнительных вланов никак не скажется на его работе.

Имена интерфейсов могут отличаться (список возможным имён и от чего это зависит см. в man:vconfig).

# /sbin/vconfig add eth0 2
# /sbin/vconfig add eth0 3
# /sbin/vconfig add eth0 4
# /sbin/vconfig add eth0 5

Далее, назначаем каждому интерфейсу свой IP-адрес.

# /sbin/ifconfig eth0.2 10.х.х.х netmask 255.255.255.0 up
# /sbin/ifconfig eth0.3 192.168.0.х netmask 255.255.255.0 up
# /sbin/ifconfig eth0.4 192.168.1.х netmask 255.255.255.0 up
# /sbin/ifconfig eth0.5 х.х.х.х netmask 255.255.255.224 up

Если маршрут по умолчанию смотрит в один из VLAN'ов, нужно его задать:

# /sbin/route add default gw 192.168.1.1

Лучше сразу запретить пересылку трафика между интерфейсами (forwarding). Если пересылку разрешить, весь трафик между VLANами может пересылаться через эту систему. Если для этого она и настраивалась, пересылку разрешайте, но помните, что вы можете ограничить прохождение трафика и регулировать его другим способом.

Для управления прохождением трафика между VLAN'ами можно использовать стандартные механизмы ядра Linux, такие как маршрутизация, iptables и QoS.

Просматривать информацию о VLAN-подыинтерфейсах в Linux можно через /proc:

%# cat /proc/net/vlan/eth0.2
eth0.2  VID: 2      REORDER_HDR: 1  dev->priv_flags: 1
         total frames received:     53973265
          total bytes received:   1075877000
      Broadcast/Multicast Rcvd:       397878

      total frames transmitted:     41904604
       total bytes transmitted:   2333267429
            total headroom inc:            0
           total encap on xmit:     41904604
Device: eth0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
EGRESSS priority Mappings:

[править] Настройка VLAN с помощью средств IPRoute2

В последних версиях пакета iproute появились средства, позволяющие управлять влан-интерфейсами.

Добавление влан-интерфейса

 ip link add link DEVNAME name VLANNAME type vlan id VLAN-ID reorder_hdr on|off
             loose_binding on|off gvrp on|off
             ingress-qos-map FROM:TO egress-qos-map FROM:TO 

На формат имени влан-интерфейса не накладывается особых ограничений. Допускается использование символов национального алфавита. При включенной опции reorder-header кадры, проходящие через интерфейс-влан, не содержат тегов. По умолчанию включена. При отключенной опции, в кадрах сохраняется тег. Это нужно учесть, если вы, например, используете фильтры tc типа u32 с указанием смещений. Опция loose-binding отвечает за синхронизацию состояния влан-интерфейса с нижележащим интерфейсом. По-умолчанию, отключена, и при переключении нижележащего интерфейса в состояние down состояние влан-интерфейса так же меняется на down. При включении, состояние влан-интерфейса не зависит от состояния нижележащего интерфейса. Опция gvrp отвечает за то, распространять ли информацию о данном влане по протоколу gvrp. Для поддержки этой опции должна быть поддержка данной возможности со стороны ядра. Опции ingress-qos-map и egress-qos-map задают трансляцию между полем приоритета заголовка 802.1q и приоритетом структуры skb (данное поле используется в системе управления трафиком). Следует учитывать, что поле приоритета влан-заголовка имеет размер 3 бита и может принимать значения от 0 до 7. Размер же поля приоритета структуры skb составляет 32 бита.

Для просмотра информации о влан-интерфейсе в команде ip link show необходимо задать ключ -d[etails].

 $ip -details link show dev mgmt
 19: mgmt@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
   link/ether 00:aa:92:08:18:a6 brd ff:ff:ff:ff:ff:ff
   vlan id 1 <REORDER_HDR> 
     egress-qos-map { 0:7 1:7 2:7 3:7 4:7 5:7 6:7 7:7 }

Для изменения параметров влан-интерфейса используется команда ip link set, с обязательным указанием type vlan.

 ip link set dev VLANNAME type vlan OPTION VALUE

Удаление влан-интерфейса

 ip link del VLANNAME

[править] Аппаратная поддержка 802.1q

Многие сетевые контроллеры производства intel и broadcom имеют аппаратную поддержку 802.1q, которая снижает загрузку ЦПУ. При снятии дампа трафика с нижележащего интерфейса при аппаратной акселерации в дампе не будет упоминаний о тэгах 802.1q, информация о них хранится непосредственно в структурах, ассоциированных с пакетом.

Для управления аппаратной обработкой вланов сетевым адаптером используется утилита ethtool:

 ethtool -k|--show-offload DEVNAME
 ethtool -K|--offload DEVNAME [txvlan on|off] [rxvlan on|off]

[править] Настройка VLAN при загрузке в Debian GNU/Linux

Основная страница: VLAN в Debian
Для работы описанного ниже способа необходимо чтобы в системе был установлен пакет vlan

Для того чтобы информация о созданных VLAN'ах сохранилась после перезагрузки, необходимо добавить её в файл /etc/network/interfaces. Например:

auto vlan1400
iface vlan1400 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        vlan_raw_device eth0

[править] Настройка VLAN при загрузке в CentOS

Основная страница: VLAN в CentOS

Для того чтобы информация о созданных VLAN'ах сохранилась после перезагрузки, необходимо создать файлы с описанием подинтерфейсов VLAN. Например, для создания подинтерфейса eth0.10 необходимо создать файл /etc/sysconfig/network-scripts/ifcfg-eth0.10, содержимое которого будет похожим на традиционное содержимое файлов network-scripts/ifcfg-*:

   VLAN=yes
   DEVICE=eth0.10
   BOOTPROTO=static
   ONBOOT=yes
   TYPE=Ethernet
   IPADDR=10.10.10.2
   NETMASK=255.255.255.252

Вариант 2, необходимо создать файл /etc/sysconfig/network-scripts/ifcfg-vlan1, содержимое которого будет похожим на традиционное содержимое файлов network-scripts/ifcfg-*:

   VLAN=yes
   VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
   DEVICE=vlan1
   PHYSDEV=eth1
   BOOTPROTO=static
   ONBOOT=yes
   TYPE=Ethernet
   IPADDR=192.168.100.5
   NETMASK=255.255.255.0

[править] Настройка VLAN при загрузке в Gentoo

Ниже приведен пример части файла /etc/conf.d/net, отвечающей за настройку VLAN. В данном примере настраивается 2 vlan-интерфейса на интерфейсе eth0, создание и удаление данных интерфейсах происходит в скрипте /etc/init.d/net.eth0:

config_eth0="null"
vlans_eth0="1 2"

vlan1_name="vlan1"
config_vlan1="10.0.0.1/24"

vlan2_name="vlan2"
config_vlan2="192.168.1.1/24"

[править] QinQ-инкапсуляция в Linux

Q-in-Q инкапсуляция позволяет создавать дважды тегированный трафик. Для каждого уровня вложенности создаётся свой собственный интерфейс.

Подробнее о процедуре настройки: