Balanceamento de 3 links com redundância no Linux

Como continuação do artigo anterior, neste apresento um script atualizado e modificado para uso de redundância entre 3 links de internet.

[ Hits: 66.458 ]

Por: Cristiano Landsmann em 08/06/2009


Modificando as tabelas e rotas



Modificando as tabelas e rotas, mudanças em negrito.

1. Acrescente no arquivo rt_tables:

1 gvt
2 brt
3 net

2. Acrescente a nova rota para os três links, abaixo incluo a regra no arquivo rc.local:

ip route flush table gvt #Limpa as rotas no cache da tabela gvt

ip route flush table brt #Limpa as rotas no cache da tabela brt

ip route flush table net #Limpa as rotas no cache da tabela net

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table gvt
ip route add default via 192.168.1.1 table gvt

ip route add 192.168.2.0/24 dev eth2 src 192.168.2.10 table brt
ip route add default via 192.168.2.1 table brt

ip route add 192.168.3.0/24 dev eth3 src 192.168.3.10 table net
ip route add default via 192.168.3.1 table net


ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.2.10 table brt
ip rule add from 192.168.3.10 table net

#Esta regra abaixo é responsável pelo balanceamento, vamos dividir a saída com peso 2:1:1, vamos supor que a gvt é 2x
mais rápida com link de 3 mega, link da brt com 1 mega, e link da net com 1 mega.

ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 2 nexthop via 192.168.2.1 dev eth2 weight 1
nexthop via 192.168.3.1 dev eth3 weight 1

ip route flush cache #Limpa as rotas no cache

Dicas

1. Caso queira trabalhar somente com dois links balanceados e três links redundantes, é necessário remover a regra de balanceamento "nexthop via 192.168.3.1 dev eth3 weight 1" dos arquivos "rc.local" e "gwping.sh", nesse caso os três links ficarão fora do balanceamento.

2. Posso utilizar os três links que ficaram de fora do balanceamento usando a marcação de pacotes, neste caso os três links trabalharão especificamente para um serviço ou um destino, veja exemplo:

#A regra abaixo determina que toda rede interna balanceada irá acessar o Bradesco pelo 3 link:
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d bradesco.com.br -j MARK --set-mark 0x30

#A regra abaixo determina que toda rede interna balanceada irá acessar as portas 110(pop) e 25(smtp) pelo 3 link:
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport --dports 110,25 -j MARK --set-mark 0x30

3. Cuidado ao trabalhar com regras de marcação, como trabalhamos com redundância se algum link cair e não deletar a marcação feita para ele, o serviço ficará indisponível até o link voltar... para corrigir esse problema adicionei ao arquivo "gwping.sh" a regra para deletar a marcação do link que caiu... é necessário limpar a tabela mangle e adicionar as novas regras de marcação para quando o link voltar.

#Deleta marcação da tabela de roteamento:
ip rule del fwmark 0x30 lookup net prio 3

#Deleta as regras da tabela mangle:
iptables -F -t mangle
iptables -X -t mangle

Obs.: Não esqueça de desativar o balanceamento dos três links se for utilizá-los com marcação de pacotes, caso contrário não funcionará.

4. Na explicação anterior, para a chamada do script no arquivo rc.local, o comando nohup cria um arquivo "nohup.out" e isso gera um grande acúmulo de dados ocupando espaço desnecessário no HD, se esse log não for necessário para você, é possível desativá-lo acrescentando a opção > /dev/null o que jogará todo esse lixo para o buraco negro. Veja como ficaria a linha de comando:

# nohup > /dev/null /etc/link/gwping &

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Modificando as tabelas e rotas
   3. Script gwping.sh
Outros artigos deste autor

Squid - Níveis de bloqueio para usuários

Balanceamento de links + redundância + acesso remoto + sites de bancos

Leitura recomendada

Instalando e configurando o PostgreSQL

Autenticar estação de trabalho GNU/Linux no Windows Server - Instalação e configuração do Centrify

Bluetooth no Debian 4.0

Impressoras no Linux - Instalando mais de 2000 modelos

Relatórios de impressão em PHP com CUPS + JASmine

  
Comentários
[1] Comentário enviado por gustavoisouza em 09/06/2009 - 07:50h

Primeiramente parabéns pelo artigo.
Já implementei algumas vezes balanceamento, parando nesse problema de sites de banco que interrompem a conexão quando identificam a troca do IP proveniente.
Não tive a chance de testar se poderíamos colocar, em vez do nome de todos os bancos no IPTABLES, colocar --dport 443 para sair por 1 link só resolveria esse problema.

[2] Comentário enviado por info24hs em 09/06/2009 - 08:20h

Amigo,

Veja esse exemplo abaixo, essa regra uso atualmente para me conectar com o Banrisul. Entenda a regra, tudo que vier pela interface da rede interna com origem da minha rede interna e com destino ao ip do banco usando protocolo tcp e as portas 80 e 443 são marcadas para sair pelo link 1. Coloque o ip do banco ai invés do nome para evitar resolução de nomes ou alguma falha com o dns.

# Marcação Banco Banrisul
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 201.55.240.10 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x10

Utilizo essa regra para o Banrisul e tmb tenho outras similar para acessar outros bancos...

Abraço..

[3] Comentário enviado por gustavoisouza em 09/06/2009 - 08:31h

Entendi.....

Meu intuito era reduzir o número de linhas e trabalho para pegar todos os IP`s de banco ou outros sites que usam esse tipo de restrição de segurança na unha..... Mas perfeito.

Novamente parabéns, e em breve testo por aqui.

Abç.

[4] Comentário enviado por rafaelturazzi em 10/06/2009 - 08:26h

Parabéns pelo artigo!
Apenas uma pergunta: Como você trabalha com 3 links, você usa no linux as 3 rotas (uma de cada link) ou somente a do link com maior banda? Pergunto isso para saber como devemos proceder para sar um suporte remoto, entro por qual link?
Abraços,
Rafael

[5] Comentário enviado por info24hs em 10/06/2009 - 09:36h

Rafael,

Como tu pode ter visto no esquema acima é necessário configurar as 3 rotas.. uma para cada link, a seguir o comando que irá fazer o balanceamento configura a primeira rota como padrão do sistema, ou seja a segunda rota e a terceira na respectiva ordem. Veja exemplo:

# 1º rota ip x.x.1.1, 2º rota ip x.x.2.1, 3º rota ip x.x.3.1, nesse exemplo a rota padrao será o link 1 porque ele esta na frente de todos. A primeira conexão estabelecida sempre é feita pelo link da rota padrão do sistema, no caso abaixo o 3º será o último link a ser utilizado.

ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 2 nexthop via 192.168.2.1 dev eth2 weight 1
nexthop via 192.168.3.1 dev eth3 weight 1

# Veja abaixo a regra para acesso remoto configurada e marcada para ser usado pelo link 2, lembrando que o link 1 é a minha rota padrão.

iptables -I FORWARD -p tcp --dport 4893 -j ACCEPT
iptables -t nat -I PREROUTING -i eth2 -p tcp --dport 4893 -j DNAT --to-dest 192.168.0.3
iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.3 --sport 4893 -j MARK --set-mark 0x20


[6] Comentário enviado por qxada07 em 21/06/2009 - 08:26h

Cara.... Meus parabéns... Paguei um pau para este artigo.... Te garanto que muita genth irá precisar deste artigo...

Flw e continue assim!!!!!!!!!!

[7] Comentário enviado por gersonraymond em 24/07/2009 - 20:59h

Amigo dispensa comentários, pois trata -se de artigo de extrema utilidade, show de bola !!! Parabéns !!! e muito mais.

Um grande abraço.

[8] Comentário enviado por fell em 19/11/2009 - 10:04h

Uma duvida como este script faz a chacagem dos links,pois estou vendo que ele checa quando se executa o script,mas depois de carregando o script como que é feito esta checagem dos links.

[9] Comentário enviado por wellington.linux em 12/05/2010 - 16:46h

Ola, tenho uma dúvida e se o link que caiu voltar, esse script vai entender e voltar tudo ao normal?

[10] Comentário enviado por faosfbi em 16/11/2010 - 14:44h

Olá, primeiramente parabenizo pelo excelente artigo, de grande utilidade.
Apenas tenho uma dúvida.
Quando faço um teste de velocidade de uma estação de trabalho que está dentro desta infraestrutura o mesmo me retorna a velocidade de um link e não a somatória de todos os links. É assim mesmo ou o resultado teria de ser a soma de todos os links?

[11] Comentário enviado por giuseppeinfo em 28/03/2014 - 13:11h

Bom dia,

Meu script da erro no while :; do, tem alguma solução para isso.

Obrigado

[12] Comentário enviado por wagnerfs em 09/09/2014 - 18:16h

Parabéns amigo por compartilhar o conhecimento. Sucesso em tua vida.

[13] Comentário enviado por nunesdutra em 06/07/2015 - 11:37h


Bom dia Amigos!!!!

Estou com uma duvida!!!

Eu preciso do SCRIPT GWPING.SH para funcionar? Ou se eu apenas acrescentar as linhas no RC.local ja estarei em redundância???

Obrigado!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts