VLAN в Linux
Материал из Xgu.ru
- Короткий 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 инкапсуляция позволяет создавать дважды тегированный трафик. Для каждого уровня вложенности создаётся свой собственный интерфейс.
Подробнее о процедуре настройки:
VLAN - Virtual Local Area Network | |
---|---|
Стандарты, протоколы и основные понятия | 802.1Q • VLAN ID • ISL • VTP • GVRP • Native VLAN |
В операционных системах | Linux (Debian, Ubuntu, CentOS) • FreeBSD • Windows |
В сетевом оборудовании | Cisco • HP ProCurve • D-LINK • Allied Telesis • Asotel • Juniper • ExtremeXOS |
Разное | man vconfig • Безопасность VLAN • 802.1X и RADIUS • Cisco Private VLAN |