В небольшом операторе связи для контроля доступа в интернет используется Cisco SCE 2020, которая установлена между Cisco 6500 и debian сервером, выполняющим функции НАТа. Между сервером и коммутатором настроен аггрегированный линк на 2Гбита. По мере роста оператора, загрузка каналов стала приближаться к 1,8Гбит, что является пределом пропускной способности SCE 2020, при котором она способна адекватно применять политики обработки трафика. В связи с этим, было принято решение установить вторую SCE, расширив линк до 4Гбит.
Стандартная схема включения нескольких SCE 2020, согласно документации Cisco выглядит так (1):
Но, как обычно, в связи с нехваткой портов на 6500, было решено включать SCE между сервером и каталистом.
Для корректной работы функционала DPI (определение протоколов, http перенаправления), необходимо обеспечить симметричное прохождение трафика через SCE, т.е., пакеты конкретного пользователя всегда должны проходить в обе стороны через один и тот же порт и, соответственно, одну и туже SCE. Со стороны Cisco 6500 проблема решается коммандой «port-channel load-balance src-ip» (2), после чего пакеты от одного и того же источника всегда попадают в один и тот же порт.
Соответственно, со стороны сервера требовалось включить балансировку трафика по IP адресу получателя. Казалось бы, такой простейший тип балансировки должен быть реализован в bonding модуле ядра linux, однако, после изучения документации, мы обнаружили что это не так. В результате чего родился маленький патч к ядру 2.6.32 (3), который добавляет режимы балансировки по адресу источника или назначения.
После применения патча, для использования этих типов балансировки необходимо включать bonding с параметром bond_mode=2 (Mode of operation: balance-xor), а в параметре xmit_hash_policy выбрать необходимый тип балансировки: 3 для балансировки по IP адресу получателя или 4 для балансировки по IP адресу отправителя.
1) «10 Gigabit and Multi-Gigabit Solution» www.cisco.com/en/US/prod/collateral/ps7045/ps6129/ps6133/ps6151/product_data_sheet0900aecd801d8574.html
2) Configuring EtherChannel Load Balancing www.cisco.com/en/US/docs/switches/lan/catalyst6500/ios/12.2SX/configuration/guide/channel.html#wp1020804
3) Патч для ядра 2.6.32 pastebin.com/5YPNZBiy
Автор: igorsd