LACP и VLAN 802.1Q в FreeBSD
avatar

Еще полгода назад я подарил себе не совсем обычную сетевую карту.

Intel i350-T4

Конечно, для домашнего применения толку от нее не будет никакого, а вот для среднестатистического сервера она может стать приятным дополнением. Гигабитного порта не всегда достаточно для реализации всех замыслов. И тут на помощь может прийти многопортовая сетевая карта. Я же решил усложнить задачу. Мне нужна не просто агрегация нескольких гигабитных портов в один логический линк, но и возможность создать несколько интерфейсов в разных VLAN поверх такого линка.

На сервере волею судеб оказалась FreeBSD 9.1.

C:\>uname -a
FreeBSD k-42.ru 9.1-RELEASE-p9 FreeBSD 9.1-RELEASE-p9 #0: Fri Dec 13 13:34:05 NOVT 2013     root@k-42.ru:/sys/amd64/compile/Onyx  amd64

После подключения сетевой карты она определилась как четыре порта:

C:\>ifconfig | grep flags
igb0: flags=8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500
igb1: flags=8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500
igb2: flags=8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500
igb3: flags=8c02<BROADCAST,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500

Замечательно. Теперь нужно из первых двух портов создать агрегированный линк под управлением протокола LACP до ближайшего коммутатора и создать интерфейс в VLAN 222. Первым делом необходимо настроить коммутатор. В данном случае им оказался ZyXEL 4728. Заходим через веб-интерфейс в Advanced Application — VLAN — Static VLAN и создаем VLAN под номером 222. Подаем его с тэгом в порты 11 и 12 (к которым у нас будет подключен сервер) и в порт 10G (который соединяет коммутатор с ядром сети).

ZyXEL 4728 LACP
В настройках порта (Advanced Application — VLAN — VLAN Port Settings) запрещаем нетэгированные пакеты с портов 11 и 12.

ZyXEL 4728 LACPТеперь переходим к настройкам агрегированного линка. Заходим в Advanced Application — Link Aggregation и создаем линк T1, в который включаем порты 11 и 12. Ставим балансировку по IP-адресам источника и получателя.

ZyXEL 4728 LACPДалее направляемся в меню LACP. Активируем протокол, оставляем приоритет 65535, чтобы параметры LACP определял сервер. Если вы хотите, чтобы управление агрегированным линком происходило со стороны коммутатора — имеет смысл поставить приоритет 1.

ZyXEL 4728 LACPКоммутатор настроен. Теперь можно переходить к настройке сервера. В арсенале FreeBSD есть драйвер lagg, с помощью которого реализуется функционал агрегированных линков и LACP. В стандартном ядре этого драйвера нет, поэтому необходимо либо пересобрать ядро с параметром device lagg, либо добавить строчку if_lagg_load=»YES» в файл /boot/loader.conf.

После прочтения man lagg и изучения примеров в rc.conf  появились следующие строчки:

ifconfig_igb0=»up»
ifconfig_igb1=»up»
cloned_interfaces=»lagg0 lagg0.222″
ifconfig_lagg0=»laggproto lacp laggport igb0 laggport igb1″
ifconfig_lagg0_222=» inet 31.13.177.77 netmask 255.255.255.252″
defaultrouter=»31.13.177.78″

Как это ни странно, но с таким конфигом агрегированный канал поднялся в режиме failover вместо lacp, при этом сеть не работала. Выяснилось, что на интерфейс lagg обязательно надо вешать IP-адрес. Поскольку я запретил нетэгированные пакеты на агрегированном линке со стороны коммутатора — можно удовлетворить причуду lagg-драйвера FreeBSD и повесить любой IP-адрес:

ifconfig_lagg0=»laggproto lacp laggport igb0 laggport igb1 192.168.0.88 netmask 255.255.255.0″

С обновленным конфигом поднялся LACP и заработала сеть. Но мне захотелось большего. А именно MTU 9000. Если уж сетевая карта и коммутатор поддерживают Jumbo Frames — грех этим не воспользоваться. Казалось бы, что нет ничего проще. Добавляем в конфиг правильный MTU:

ifconfig_igb0=»up mtu 9000″
ifconfig_igb1=»up mtu 9000″
cloned_interfaces=»lagg0 lagg0.222″
ifconfig_lagg0=»laggproto lacp laggport igb0 laggport igb1 192.168.0.88 netmask 255.255.255.0″
ifconfig_lagg0_222=» inet 31.13.177.77 netmask 255.255.255.252″
defaultrouter=»31.13.177.78″

И видим развалившийся lagg0 :). На консоли я заметил странные сообщения:

igb1: Could not setup receive structures

Выяснилось, что это махровая проблема, известная еще со времен чипсетов Intel 825xx. Для лечения нужно уменьшить размер очереди igb и увеличить максимальное количество mbuf-кластеров.

/boot/loader.conf:

hw.igb.num_queues=3

/etc/sysctl.conf:

kern.ipc.nmbclusters=262144
kern.ipc.nmbjumbop=262144

После перезагрузки системы с указанными выше параметрами агрегированный линк заработал в полную силу.

This entry was posted in Железо / сети. Bookmark the permalink.

2 Responses to LACP и VLAN 802.1Q в FreeBSD

  1. Pingback: 10 гигабит по витой паре (часть 1, теория) | Inadequate Perception

  2. Pingback: 10 гигабит по витой паре (часть 1, теория) | Inadequate Perception

Добавить комментарий