Операционная система FreeBSD может трактовать две сетевых карты как нечто единое целое, позволяя иметь несколько подключений к единственному коммутатору. Это обычно называется группировкой сетевых адаптеров (network adapter teaming). Группировка реализована в системе FreeBSD через lagg(4) — интерфейс агрегированного канала (link aggregation interface).
lagg(4) — это модуль ядра, который создает виртуальный интерфейс lagg0. Вы можете связать физические интерфейсы с интерфейсом lagg0, сделав их частью агрегированного канала. Существует возможность использовать lagg(4) и с единственным физическим интерфейсом, но создавать агрегированный канал имеет смысл только при наличии двух или более физических интерфейсов. lagg(4) позволяет реализовать бесшовный роуминг между проводными и беспроводными сетями, обеспечить устойчивость к отказам оборудования и поддержку несколько различных агрегатных протоколов.
Агрегатные протоколы
Не все сетевые коммутаторы поддерживают агрегатные протоколы. Система FreeBSD имеет базовую реализацию некоторых достаточно сложных и высокопроизводительных протоколов, а также включает основные параметры обеспечения отказоустойчивости. Я рекомендую три из них: Fast EtherChannel, LACP и failover. (Есть и другие схемы включения, о которых можно узнать в странице руководства lagg(4).)
Fast EtherChannel (FEC) — это агрегатный протокол, разработанный компанией Cisco, но он работает только с коммутаторами Cisco высокой и средней производительности, работающими под управлением операционной системы компании Cisco. Если у вас используется неуправляемый коммутатор, то вы не сможете использовать протокол Fast EtherChannel. Он очень сложен в настройке (на стороне коммутатора), поэтому я могу его порекомендовать только тем, у кого этот протокол используется как корпоративный стандарт.
Протокол управления агрегированным каналом (Link Aggregation Control Protocol, LACP) — это индустриальный стандарт построения агрегированных каналов. Физические интерфейсы объединяются в единый виртуальный интерфейс с пропускной способностью, приблизительно равной сумме пропускных способностей объединяемых физических интерфейсов. Протокол LACP обеспечивает превосходную отказоустойчивость, и практически все коммутаторы поддерживают его. Я рекомендую LACP, только если у вас отсутствует необходимость использовать Fast EtherChannel и ваш коммутатор способен обеспечить необходимую пропускную способность при использовании LACP.
Если ваш коммутатор «задыхается» при использовании LACP, используйте failover. При использовании метода failover трафик отправляется через один физический интерфейс. Если этот интерфейс выходит из строя, происходит переключение на следующий интерфейс из пула. Несмотря на то, что этот метод не дает увеличения пропускной способности, тем не менее вы получаете возможность подключить сервер к нескольким коммутаторам для повышения отказоустойчивости.
Так как LACP обычно является лучшим выбором, в наших примерах мы будем использовать именно его.
Настройка lagg(4)
Интерфейс lagg является виртуальным в том смысле, что в компьютере отсутствует физическое устройство, на которое можно было бы указать пальцем и сказать: «Это интерфейс lagg0». Прежде чем приступать к настройке, интерфейс сначала необходимо создать. FreeBSD позволяет создавать интерфейсы с помощью команды ifconfig interfacename create, однако то же самое можно сделать с помощью оператора cloned_interfaces в файле /etc/rc.conf.
Настройка lagg(4) в файле rc.conf производится в три этапа: создание интерфейса, запуск в работу физических интерфейсов и их агрегирование. В следующем примере из двух гигабитных сетевых карт Intel em0 и em1 создается единственный интерфейс lagg0.
cloned_interfaces="lagg0" ifconfig_em0="up" ifconfig_em1="up" ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 192.168.1.1 netmask 255.255.255.0"
Сначала указывается имитируемый интерфейс lagg0; FreeBSD создаст его во время загрузки. Затем производится запуск интерфейсов em0 и em1, при этом их настройка не производится. Наконец интерфейсу lagg0 сообщается, какой агрегатный протокол будет использоваться, какие физические интерфейсы будут ему принадлежать, а также сетевые параметры интерфейса. Эти несколько строк в конфигурационном файле обеспечат вас отказоустойчивым Ethernet-соединением.
Это было длинное путешествие через исследование сетевых возможностей и вы, вероятно, узнали даже больше, чем предполагали. Давайте немного постоим на месте и рассмотрим основы обеспечения безопасности системы.