Bonding de interfaces de rede no Debian

Bonding de interface ou trunking é uma técnica que permite usar duas ou mais interfaces de rede como se fosse uma só de forma a garantir redundância deste serviço. Um servidor que possua ao menos duas interfaces de rede configuradas com este recurso poderá perder a conexão em uma das interfaces que as conexões seguintes poderão ser efetuadas pela outra sem grandes problemas, ou ainda – dependendo do modo escolhido – poderá ter como velocidade de conexão a soma da velocidade de cada uma das interfaces envolvidas.

Configuração

A técnica é antiga e simples por tanto sem muito rodeios vamos direto ao ponto. Antes de configurar qualquer coisa vamos instalar o pacote ifenslave, que possui as ferramentas necessárias para permitir o uso desta técnica:

aptitude install ifenslave

Uma vez que este pacote esteja instalado nós podemos configurar as interfaces de rede do nosso servidor. Em sistemas Debian-like, a esta configuração é registrada no arquivo /etc/network/interfaces, então abra este arquivo no editor de sua preferência, comente as configurações de suas interfaces eth0 e eth1 e então acrescente as configurações de bonding como segue no exemplo abaixo:

#allow-hotplug eth0
#iface eth0 inet static
# address 192.168.1.44
# netmask 255.255.255.0
# broadcast 192.168.1.255
# gateway 192.168.1.1
#

#allow-hotplug eth1
#iface eth1 inet static
# address 192.168.1.45
# netmask 255.255.255.0
# broadcast 192.168.1.255
# gateway 192.168.1.1
#

auto bond0
iface bond0 inet static
address 192.168.1.44
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
#
#- indique aqui quais interfaces fazem parte deste grupo
slaves eth0 eth1
#
#- Escolha o modo mais adequado para o seu caso
# bond-mode balance-rr
# bond-mode active-backup
# bond-mode balance-xor
bond-mode balance-tlb
# bond-mode balance-alb
#
bond-miimon 100
bond-downdelay 200
bond-updelay 200
#

Feitas as modificações basta reiniciar o servidor. Poderiamos reiniciar apenas os serviços de rede mas eu particularmente prefiro um reboot completo para garantir que não teremos problemas de “sujeira na configuração.

Só mais três considerações:

  1. No meu exemplo eu coloquei no nosso “bond” o mesmo endereço IP da interface eth0, mas poderia ter usado o endereço da eth1 ou mesmo qualquer outro endereço de minha preferência;
  2. Se eu tiver outras interfaces a serem incluídas no grupo, ou ainda preferir usar outras que não eth0 e eth1, basta que elas sejam informadas na linha “slaves” separada por espaços e não se esqueça de comentar suas linhas de configuração individual;
  3. Observe que eu deixei comentadas várias linhas que se iniciam com “bond-mode”. Cada uma delas define a forma como o nosso trunk funcionará. A opção descomentada funciona a contendo na maioria dos casos sem exigir um switch especial, mas caso você queira testar os outros modos você deveria primeiro conhecê-los dando uma lida nas referências do final deste texto.

Testando

Este esquema foi testado em duas máquinas com Debian Lenny e Debian Squeeze com sucesso em ambos os casos.

Para testar de forma prática vá a partir de outra máquina qualquer, envie um ping para este servidor e enquanto ela estiver pingando você deve remover um dos cabos de rede e aguardar.

Alguns pacotes deverão ser perdidos mas logo a conexão deve se normalizar usando apenas a segunda interface de rede. Em seguida conecte o cabo novamente e repita com o outro cabo. Novamente a conexão deverá ficar instável por uns instantes e em seguida se  estabilizar com apenas a primeira interface.

Referências

XEN-BR. Rede de maquinas virtuais Xen com interface de rede bond e multiplas Vlan’s. Disponível em <http://wiki.xen-br.org/Bond-vlan-xen>
Kernel.org Bonding de interfaces Debian. Disponível em <http://www.kernel.org/doc/Documentation/networking/bonding.txt>
Debian. Bonding. Disponível em <http://wiki.debian.org/Bonding>

9 comentários em “Bonding de interfaces de rede no Debian”

  1. Bom dia Braga, realizei o procedimento acima com duas adsl (brt e gvt) em testes com cabo cross conectado a uma maquina tudo certo mas apos colocar em um switch da muita perda de pacote com as duas adsl, (brt 1mb , gvt 10mb). Pode me dar uma luz qual procedimento tomar.

  2. Bom dia meu caro @Vinicius ,

    Este texto descreve como usar duas interfaces de rede para operarem como uma só e não se aplica ao seu caso. Após esta configuração ser feita, ambas interfaces trabalharão como uma só. ou seja, só haverá um endereço IP, um gateway, uma rota.

    O que você pretende fazer é conhecido como balanceamento de links. Você tem dois links (cada um com um um IP um gateway e uma rota diferente) e quer usa-los simultaneamente ou alternando entre eles com base em alguma regra. Existem algumas maneiras de se fazer isso mas nenhuma delas envolve o que expliquei neste texto.

    As quatro formas que me vem a mente para implementar isso são usando o Iptables, o Squid, roteamento avançado do kernel, ou usando uma combinação de duas ou mais opções destas.

    Os links a seguir vão te ajudar nesta questão:
    [1] http://www.vivaolinux.com.br/artigo/Dois-links-de-ADSL-em-um-mesmo-servidor
    [2] http://eng.registro.br/pipermail/gter/2006-July/011043.html
    [3] http://www.diegolima.org/wordpress/?p=38
    [4] http://under-linux.org/blogs/info24hs/balanceamento-e-redundancia-2-links-209/
    [5] http://www.dicas-l.com.br/arquivo/roteamento_avancado_linux_utilizando_iproute_e_iptables_load_balance.php

    Abç.

  3. Amigo Vinicius,

    Preciso encontrar uma maneira de utilizar os 2 links assim como você.
    No meu caso há uma “facilidade” pois são links da mesma operadora, os modens tem os mesmos ips internos etc.
    O meu Bond0 poderia até apontar para o gateway 192.168.1.1 (mesmo ip dos dois modens), mas ele vai se perder pois apesar dos modens terem o mesmo IP, eles tem MACs diferentes. Aí vem o problema.
    Meu bond0 precisa saber qual é o MAC do gateway e como terei o mesmo IP apresentando 2 MACs, imagino que não irã funcionar.
    Estou tentando bolar uma saída para isto sem deixar de usar bonding, não queria fazer isso com iproute etc.

    Welington,
    No meu caso, tendo o mesmo IP, máscara etc. nos gateways com exceção dos MACs, você vê alguma saída usando Bonding?

  4. Boa tarde Braga.
    Estava tentando implementar esta solução no meu firewall, mas não estou obtendo sucesso.
    Por acaso muda algo quando tem-se links diferentes? Neste caso estou com um Speedy ADSL por pppoe e um link via radio com ip fixo.
    Se eu puser a configuração como a sua, o serviço falha por inteiro; dando faile em tudo que usa NFS, bind e outros, no momento que o servidor faz boot.
    Tem algo que tenho que fazer nesse caso ?
    Se puder ajudar, agradeço.
    Carlos.

  5. Carlos R. Agostini :
    Boa tarde Braga.
    Estava tentando implementar esta solução no meu firewall, mas não estou obtendo sucesso.
    Por acaso muda algo quando tem-se links diferentes? Neste caso estou com um Speedy ADSL por pppoe e um link via radio com ip fixo.
    Se eu puser a configuração como a sua, o serviço falha por inteiro; dando faile em tudo que usa NFS, bind e outros, no momento que o servidor faz boot.
    Tem algo que tenho que fazer nesse caso ?
    Se puder ajudar, agradeço.
    Carlos.

    Quando falo: ” o serviço falha por inteiro” quis dizer o servidor falha por inteiro.
    Grato.

  6. Saudações @Carlos R. Agostini ,

    A falha se dá porque este procedimento não se aplica a sua necessidade. O bonding de interfaces ou balanceamento de interfaces não tem este fim que você deseja. O que você deve procurar é balanceamento de links.

    Há algum tempo que eu já respondi sobre esta questão inclusive passando uns links de referência para ajudar. Dá uma lida neste comentário que você encontrará a solução que procura.

    abç.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.