Agregacja portów ethernet pomiędzy Linuksem a switchem

Najpopularniejszym obecnie protokołem agregacji portów jest LACP.

Do zagregowania kart w systemie operacyjnym najlepiem użyć takich samych kart. A sama konfiguracja w systemach z rodziny RedHat jest bardzo prosta i ogranicza się do edycji plików konfiguracyjnych w /etc/sysconfig/network-scripts, obecnie nie jest wymagane definiowanie grup portów w modprobe, gdyż istnieje opcja BONDING_OPTS, którą wpisuje się w konfiguracji interfejsu.
Przejdźmy zatem do konfiguracji agregacji, w linuksie zwanej wiązaniem – bondingiem, efektem takiej konfiguracji powinien być nowy interfejs o nazwie bond.

Rozpoczynamy pracę od konfiguracji dwóch fizycznych interfejsów sieciowych. Ja wykorzystam porty eth2 oraz eth3.

Konfiguracja interfejsu eth2

DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=no
SLAVE=yes
MASTER=bond0

Bliźniacza konfiguracja interfejsu eth3

DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
SLAVE=yes
MASTER=bond0

Najciekawszym elementem konfiguracji bondingu w linuksie jest utworzenie nowego interfejsu sieciowego. Aby go zainicjować należy utworzyć plik w /etc/sysconfig/network-scripts o nazwie ifcfg-bond0

touch /etc/sysconfig/network-scripts/ifcfg-bond0

teraz utworzymy jego konfigurację

DEVICE=bond0
TYPE=Ethernet
NM_CONTROLLED=no
ONBOOT=yes
BOOTPROTO=static
BONDING_OPTS="mode=802.3ad lacp_rate=1 xmit_hash_policy=layer3+4 miimon=100"

Po tej operacji, polecam ustawić właściwe kontekty dla selinux, jeżeli wykorzystujemy

restorecon -FFrv /etc/sysconfig

Czas na odnowienie konfiguracji sieciowej, polecam restart maszyny lub polecenie

service network restart

Interfejs powinien się utworzyć, jeżeli chcemy zweryfikować jego konfigurację można wyświetlić

cat /prot/net/bonding/bond0

Po stronie systemu to wszystko, jeszcze trzeba skonfigurować przełącznik sieciowy, aby obsługiwał oba porty w LACP.

Ja wykorzystuję w domowym laboratorium switcha Cisco 3550, który obsługuje LACP i dla niego zamieszczam konfigurację.
Interfejs eth2 jest wpięty do portu GigabitEthernet0/1, a eth3 do portu Gi0/2.

Najpierw utworzymy kanał, czyli port channel, ponieważ planuję puszczać w nim ruch oparty na tagowanych VLAN-ach, konfiguracja wygląda następująco

interface Port-channel1
 switchport trunk encapsulation dot1q
 switchport trunk allowed vlan 1
 switchport mode trunk

Mając tak skonfigurowany port channel, możemy przypisać go do interfejsów spiętych z naszym systemem

interface GigabitEthernet0/1
channel-group 1 mode active
end
interface GigabitEthernet0/2
channel-group 1 mode active
end

Obecnie oba interfejsy powinny być już członkami port-channel1, aby zweryfikować, czy wszystko działa, z powrotem przejdźmy do konfiguracji port-channel1 i skonfigurujmy więcej vlanów tagowanych.

interface Port-channel1
switchport trunk allowed vlan 1,100,101,200,201

Po dodaniu VLANów w port-channelu1 sprawdzam, jak wygląda konfiguracja VLANów, dla portów GigabitEthernet0/1 oraz 0/2

show running-config interface gigabitethernet0/1
show running-config interface gigabitethernet0/2

U mnie wszystko zadziałało i interfejsy posiadają w konfiguracji te same VLAN-y, które skonfigurowaliśmy dla PortChannel1