« Назад

О вреде RTFM: как правильно настраивать link aggregation в FreeBSD

Век живи, век RTFM и все равно LMD
Народная мудрость

В официальной документации на сайте FreeBSD для настройки link aggregation в rc.conf рекомендуется указать следующее:

ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.15/24"

Но правильно ли это? Если Вы не планируете использовать 802.1q на агрегированном интерфейсе, то Вам должно быть всё равно и дальше можно не читать.

А если всё же надо?

Тогда, следуя авторской логике, в rc.conf надо будет написать что-то типа:

ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0 lagg0.2 lagg0.4"
ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 up"
ifconfig_lagg0_2="inet 10.0.2.15/24"
ifconfig_lagg0_4="inet 10.0.4.16/24"

Если так и поступить, то операционная система сделает вид, что так и надо, и, не выдав ни одного предупреждения, загрузится.

Но, если внимательно посмотреть, то можно заметить одну маленькую проблему: на тэгированных интерфейсах MTU окажется равным 1496:

lagg0.2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1496

Почему это произошло?

В процессе загрузки ОС сначала создаёт все интерфейсы, перечисленные в cloned_interfaces. Таким образом, на момент создания тэгированных интерфейсов lagg0.2 и lagg0.4 их родительский интерфейс lagg0 еще не имеет ни одного физического порта. Так как теоретически в lagg0 могут быть добавлены интерфейсы, которые не поддерживают длину фрейма 1522 байта, то ОС перестраховывается и уменьшает MTU для тэгированных интерфейсов на 4.

Для того, чтобы этого избежать, на момент создания тэгированных интерфейсов родительский интерфейс уже должен знать свои порты, а для этого добавление портов необходимо перенести на момент создания интерфейса. Правильный rc.conf должен выглядеть так:

ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0 lagg0.2 lagg0.4"
create_args_lagg0="laggproto lacp laggport fxp0 laggport fxp1"
ifconfig_lagg0="up"
ifconfig_lagg0_2="inet 10.0.2.15/24"
ifconfig_lagg0_4="inet 10.0.4.16/24"

После загрузки с таким конфигурационным файлом Вы получите корректное значение MTU для тэгированных интерфейсов:

lagg0.2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

P.S. Если тэгированный интерфейс при загрузке получил MTU 1496, то изменить его на 1500 уже не получится. При этом создаваемые уже после загрузки интерфейсы будут получать MTU 1500.



Artem Karas
ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=c01bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,V­LAN_HWTSO,LINKSTATE>
ether 00:1a:4b:50:c4:94
inet6 fe80::21a:4bff:fe50:c494%lagg0 prefixlen 64 scopeid 0x4
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: active
laggproto lacp lagghash l2,l3,l4
laggport: bce1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: bce0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>


cat /etc/rc.conf | grep lagg
cloned_interfaces="lagg0 vlan10 vlan11"
ifconfig_lagg0="laggproto lacp laggport bce0 laggport bce1"
#ifconfig_lagg0_alias0="inet 10.1.1.226 netmask 255.255.0.0"
#ifconfig_vlan100="inet 91.XXX.1.4 netmask 255.255.255.0 vlan 100 vlandev lagg0"
ifconfig_vlan10="inet 10.1.1.226 netmask 255.255.0.0 vlan 10 vlandev lagg0"
ifconfig_vlan11="inet 10.100.1.251 netmask 255.255.255.128 vlan 11 vlandev lagg0"
ifconfig_vlan2001="inet 172.17.0.226 netmask 255.255.0.0 vlan 2001 vlandev lagg0"
И все работает freebsd 8 -> 9 -> 10
PS терминирую на extreme network x460
Отправлено в 04.09.14 11:00.
У Вас используется интерфейсы vlan*, а для них эта проблема не проявляется.
Отправлено в 13.10.14 9:53 в ответ на Artem Karas.

Коротко о себе:

Работаю в компании Tune-IT и ассистентом кафедры Вычислительной техники в СПбГУИТМО.

Очень люблю команду cat и ставить core solaris.