NIC Bonding ou NIC Teaming consiste em combinar múltiplas interfaces rede numa única interface lógica de modo a conseguir um maior throughput ou garantir redundância. O conceito é análogo ao de Port Channel, uma configuração nos equipamentos Cisco que tem o mesmo objectivo.
Agora que já se tem uma ideia do que é, porque não configurar?
Para este tutorial foi usada uma máquina virtual com o sistema operativo Linux CentOS, possuindo este, um módulo no kernel para a agregação de várias interfaces de rede. Contudo estas configurações podem também ser aplicadas numa máquina física, com esta ou outra distribuição que possua este mesmo módulo.
Em primeiro, o utilizador deve criar as várias interfaces de rede nas configurações da máquina virtual, e estas devem todas pertencer à mesma VLAN.
Esquema:
Para configurar o NIC Bonding devem seguir os seguintes passos:
Passo 1) Arrancar o sistema operativo, e desligar o NetworkManager.
service NetworkManager stop
(desligar no startup da máquina o serviço)
chkconfig NetworkManager off
Passo 2) Ir para a directoria /etc/sysconfig/network-scripts
cd /etc/sysconfig/network-scripts
Aí devemos encontrar vários ficheiros semelhantes a: ifcfg-xxx, em que xxx corresponde ao nome das interfaces presentes na máquina.
Neste caso foram usadas duas interfaces, a eth0 e eth1. O modo de configuração é active-backup, o qual será explicado mais à frente.
Passo 3) Editar os ficheiros das interfaces necessárias ao bond.
Configuração eth0
nano ifcfg-eth0
Alterar a linha:
BOOTPROTO=dhcp
para
BOOTPROTO=none
Adicionar:
MASTER=bond0
SLAVE=yes
Configuração eth1
nano ifcfg-eth0
Alterar a linha:
BOOTPROTO=dhcp
para
BOOTPROTO=none
Adicionar:
MASTER=bond0
SLAVE=yes
Passo 4) Criar a interface lógica bond0, na mesma directoria das interfaces de rede
nano ifcfg-bond0
e adicionar as seguintes linhas:
DEVICE=bond0
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=no
O BOOTPROTO, na interface lógica bond0 foi definido como DHCP, pois estas interfaces de rede pertencem à VLAN de NAT, e assim é-lhe atribuído um endereço IP pela aplicação de virtualização (neste caso o VMWare). Contudo este pode ser estático, e definido pelo utilizador (BOOTPROTO=static).
Criar o ficheiro bonding.conf, na directoria /etc/modprob.d/ e adicionar as seguintes linhas:
alias bond0 bonding
options bond0 miimon=80 mode=1 fail_over_mac=1
Alguns detalhes destas options:
- miimon → corresponde ao tempo que a interface fica “down” após a falha da interface slave que está activa.
- mode → corresponde ao modo de funcionamento da interface virtual (bond0). Neste caso foi usado o modo active-backup, em que existem várias interfaces físicas ligadas, mas que só uma está em funcionamento. No caso de avaria da interface que está a activa, a outra interface que está desligada entra em activo, ou seja, estando presente como forma de backup.
- fail_over_mac → quando uma das interfaces falha, esta opção faz com que o endereço MAC da interface lógica (bond0) seja igual ao da interface que está activa no momento. Esta linha torna-se necessária porque, cada vez que uma interface falha-se e fosse mantido o mesmo endereço MAC o próprio VMWare detectava que já existia uma interface de rede com o mesmo endereço MAC, e a máquina virtual ficava sem conectividade. No entanto num ambiente com uma máquina física, este problema não ocorreria e esta opção não iria ser necessária, porque o switch físico simplesmente detectava que o host tinha mudado de interface de rede.
Logo esta opção obriga que o endereço MAC seja alterado para o da interface slave que está activa no momento.
Passo 5) Reiniciar as interfaces:
/etc/init.d/network restart
(Pode Verificar as interfaces através do comando ifconfig)
Passo 6) Para verificar o modo de funcionamento do bonding.
cat /proc/net/bonding/bond0
Mais concretamente, é possível observar neste ficheiro, o modo de funcionamento da interface bond, as opções, e também qual a interface slave que está activa e o número de vezes que as slave falharam.
Outros modos de configuração de bonding:
- balance-rr ou 0 — define uma política de balanceamento de carga e redundância baseada no algoritmo round-robin.
- active-backup ou 1 — define uma política em que uma interface está activa e caso esta falhe, se existir uma outra de backup, essa entra em funcionamento.
- balance-xor ou 2 — define uma política XOR para balanceamento de carga e redundância. Neste método, ao endereço MAC de origem é feito o XOR com o endereço MAC de destino, fazendo com que a mesma interface slave seja usada para o mesmo destino.
- broadcast ou 3 — Para todas as transmissões são utilizadas todas as interfaces slave.
- 802.3ad ou 4 — define uma política baseada no IEEE 802.ad dynamic link aggregation. Requer que o switch seja compatível com este standard.
- balance-tlb ou 5 — define uma política de transmissão com balanceamento de carga adaptativo. O tráfego é distribuído baseando-se na carga de cada uma das interfaces slave. O tráfego de entrada é processado pela respectiva interface. Se alguma destas falhar, uma outra interface slave assume o papel da interface slave que falhou.
- balance-alb ou 6 — neste modo o driver de bonding, intercepta ARP Replies, e substitui o endereço MAC de origem pelo endereço MAC de uma das interfaces slave, de forma que os clientes usem diferentes endereços MAC de destino, que correspondem às diferentes interfaces de rede presentes na máquina.