O driver de bonding é um método em Linux de agregar várias interfaces físicas de rede numa única interface lógica. O melhor que este método tem é que as interfaces de rede não têm que ser do mesmo fabricante, pois alguns fabricantes fornecem drivers para Linux para realizar esta tarefa.
O comportamento da interface lógica depende do método configurado. É aconselhado configurar este driver como módulo, pois neste momento é a única forma de passar argumentos ao módulo e configurar diversas interfaces.
Para configurar o bonding é necessário que esteja instalado o utilitário ifenslave, pois é através deste que são agregadas as placas de rede. Este utilitário é fornecido juntamento com as sources do kernel, e encontra-se em Documentation/networking/ifenslave.c.
Em OpenSuSE 10.2, este utilitário já se encontra instalado e não é necessário executar os passos descritos em baixo. É necessário também que o kernel tenha sido compilado com suporte de bonding.
Para instalar:
# gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
# cp ifenslave /sbin/ifenslave
Se as sources do kernel não estiverem instaladas em /usr/src/linux então, substituir o caminho.
Agora que temos o programa instalado, vamos configurar o OpenSuSE 10.2
Ambiente testado:
- OpenSuSE 10.2
- Kernel 2.6.18.8-0.5-bigsmp
Em primeiro lugar, vamos ter a certeza que o modulo é carregado sempre que reiniciar-mos o nosso sistema operativo. Para isso, editamos o ficheiro /etc/modprob.conf.local que é o local mais indicado para colocar-mos os nossos modulos.
Um pouco de explicação do bonding
O bonding, acima de tudo, vais-nos permitir configurar o computador com uma politica chamada 802.3ad. Também conhecido como Link Aggregation, permite agrupar diversas portas ethernet em paralelo, permitindo assim aumentar a velocidade para além dos limites dados por apenas uma porta ethernet, aumentando também a disponibilidade criada pela redundância.
Existem diversos modos de operação, sendo eles:
- 0 – Balanceamento (round robin): Politica por defeito – envia os pacotes sequencialmente, desde o primeiro "escravo" até ao ultimo.
- 1 – Backup activo: Apenas um "escravo" está activo. Um escravo diferente entra em actividade apenas se o "escravo" activo falhar. Fornece tolerância a falhas.
- 2 – Politica XOR: Transmite baseado na politica de hash selecionada. Este modo fornece tolerância a falhas e balanceamento.
- 3 – Broadcast: Transmite tudo em todos os "escravos". Este modo fornece tolerância a falhas.
- 4 – 802.3ad – IEEE 802.3ad Dynamic Link Aggregation: Cria grupos agregados que partilham a mesma velocidade e modo. Utiliza todos os "escravos" segundo a especificação 802.3ad
Editar o ficheiro /etc/modprob.conf.local e adicionar as seguintes linhas:
- alias bond0 bonding
- options bond0 mode=4 miimon=100
Neste caso, optou-se pelo modo 4 (802.3ad), mas que, para que funcione, é necessário ter as interfaces ligadas a um switch que suporte este protocolo, porque senão não irá funcionar.
Após editar o ficheiro, vamos criar um ficheiro de configuração para a interface bond0. Entrar na directoria /etc/sysconfig/network. Copiar um ficheiro de uma interface já configurada e editar o ficheiro para realizar as alterações:
- cp ifcfg-eth-XXXX ifcfg-bond0
Editamos o ficheiro recentemente criado e alteramos as opções:
vi ifcfg-bond0
opções de rede (alterar consoante as necessidades):
BOOTPROTO=’static’
BROADCAST=’192.168.100.255′
IPADDR=’192.168.100.2′
NETMASK=’255.255.255.0′
NETWORK=’192.168.100.0′
STARTMODE=’onboot’
opções do bonding
BONDING_MASTER=’yes’
BONDING_MODULE_OPTS=’mode=4 miimon=100′
listagem das interfaces "escravas"
BONDING_SLAVE0=’eth0′
BONDING_SLAVE1=’eth1′
Guardamos as alterações. Para o seguinte passo temos duas opções. Ou removemos os ficheiros de configuração das interfaces ou renomeamos para outro nome para que não sejam interpretados no proximo reboot.
- rm -f ifcfg-eth-bus-XXXX:XX:XX.X (remover para todas as interfaces)
Agora, basta testar a nossa configuração:
- ifdown ethX (fazer para todas as interfaces existentes e configuradas)
- ifup bond0
A partir deste momento, temos a nossa interface bond0 configurada e em funcionamento. Resta neste momento adicionar a rota para a nossa gateway. Para testes, podemos executar na consola, mas é aconselhado através do YAST adicionar a rota permanentemente.
- route add default gw 192.168.100.254 netmask 255.255.255.0
Verificar o nosso ficheiro /etc/resolv.conf e verificar se os servidores de nomes e o nome da rede estão bem configurados. Após garantirmos, testamos com um ping.
/sbin/ifconfig
bond0 Link encap:Ethernet HWaddr 00:30:05:1B:05:3A
inet addr:192.168.100.2 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::230:5ff:fe1b:53a/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:3538 errors:0 dropped:0 overruns:0 frame:0
TX packets:2544 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2115556 (2.0 Mb) TX bytes:290026 (283.2 Kb)
eth0 Link encap:Ethernet HWaddr 00:30:05:1B:05:3A
inet6 addr: fe80::230:5ff:fe1b:53a/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1237 errors:0 dropped:0 overruns:0 frame:0
TX packets:2059 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:130279 (127.2 Kb) TX bytes:236566 (231.0 Kb)
eth1 Link encap:Ethernet HWaddr 00:30:05:1B:05:3A
inet6 addr: fe80::230:5ff:fe1b:53a/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:2301 errors:0 dropped:0 overruns:0 frame:0
TX packets:485 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1985277 (1.8 Mb) TX bytes:53460 (52.2 Kb)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:111 errors:0 dropped:0 overruns:0 frame:0
TX packets:111 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9896 (9.6 Kb) TX bytes:9896 (9.6 Kb)
O output em cima mostra as interfaces configuradas. reparem que apenas a interface bond0 contém um IP definido (reparem nos MAC Address).
Possíveis problemas
Após um reboot à máquina, é possivel que surjam alguns problemas. Aqui ficam algumas soluções que podem tentar caso isso se verifique.
Ocasionalmente foi experimentado que algumas placas de rede não arrancam depois de um reboot. Para prevenir, os modulos dessas placas devem ser colocados em memoria mais cedo. Para tal, editar o ficheiro /etc/sysconfig/kernel, procurar a linha MODULES_LOADED_ON_BOOT="" e adicionar os modulos das nossas placas de rede. Realizar novo reboot.
Caso não resolva a alteração descrita em cima, retirar as alterações e editar a seguinte linha (no mesmo ficheiro): INITRD_MODULES="(lista de modulos)" e acrescentar os modulos das placas. Executar o comando mkinitrd e realizar novo reboot.
Outro processo que também pode ajudar é alterar o seguinte ficheiro: /etc/sysconfig/network/config, procurar a linha WAIT_FOR_INTERFACES="XX" onde XX será o tempo em segundos.
Após isto tudo, se mesmo assim não resolver, vejam o ficheiro /var/log/messages, identificar algum erro que possa surgir e google for it.