Balanceamento de carga entre links com iproute2 - mini-howto - Under-Linux.org Fóruns
Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org Fóruns > Geral > Serviços > Proxy/NAT/Firewall
Wiki Classificados Galeria Reviews Jogos Comunidades RSS Feeds FAQ Termos de Uso Sobre
Cadastre-se FotosBlogs Lista de Membros Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Balanceamento de carga entre links com iproute2 - mini-howto



Resposta
 
LinkBack Opções do Tópico
Antigo 30-01-2008, 21:41   #1 (permalink)
Padrão Balanceamento de carga entre links com iproute2 - mini-howto

Como muitos tem dúvidas de como balancear o acesso a Internet por diversos links, resolvi escrever esse mini-howto para evitar a necessidade de novos post no fórum.

Vamos ao problema. Imaginemos um roteador rodando kernel GNU/Linux com as opções de roteamento avançado ativado. Este computador está conectado a N links dedicados. Desejamos balancear a carga das requisições entre esses N links. Sejam LIP0, LIP1, ... , LIPN os endereços IP atribuidos aos links, LIF0, LIF1, ... , LIFN as interfaces de rede, LNTW, LNTW1, ... , LNTWN as redes e LGW0, LGW1, ... , LGWN os gateways de cada link.

Primeiramente devemos criar N tabelas de roteamento, onde N é o número total de links que o gateway possui:
echo 10 tb0 >> /etc/iproute2/rt_tables
echo 11 tb1 >> /etc/iproute2/rt_tables
...
echo XX tbN >> /etc/iproute2/rt_tables
Feito isso, devemos atribuir as redes dos links as suas respectivas tabelas de roteamento:
ip route add LNTW0 dev LIF0 src LIP0 table tb0
ip route add to 0/0 via LGW0 table tb0

ip route add LNTW1 dev LIF1 src LIP1 table tb1
ip route add to 0/0 via LGW1 table tb1
...
ip route add LNTWN dev LIFN src LIPN table tbN
ip route add to 0/0 via LGWN table tbN
deve-se, também, incluir informações sobre a rede local:
ip route add LOCALNET dev IFLOCALNET table tb0
ip route add LOCALNET dev IFLOCALNET table tb1
...
ip route add LOCALNET dev IFLOCALNET table tbN
obs: todas as redes locais devem estar presentes em todas as tabelas!!!

Agora, devemos definir as rotas das redes através da tabela padrão:
ip route add LNTW0 dev LIF0 src LIP0
ip route add LNTW1 dev LIF1 src LIP1
...
ip route add LNTWN dev LIFN src LIPN
obs: se você está com seus link configurados através dos arquivos de configuração das distribuiçoes, a etapa anterior pode ser omitida. Basicamente se ao tentar inserir uma rota na tabela padrão, e a mesma já existir você receberá a seguinte mensagem:
RTNETLINK answers: File exists

Agora você adiciona regras que decidem por onde os pacotes de vem passar:
ip rule add from LIP0 table tb0
ip rule add from LIP1 table tb1
...
ip rule add from LIPN table tbN
Por ultimo, porém o não menos importante, na verdade escencial pois até agora não fizemos nada... Devemos definir o balanceamento de carga:
ip route add to 0/0 nexthop via LGW0 dev LIF0 weight 1 nexthop via LGW1 dev LIF1 weight 1 ... nexthop via LGWN dev LIFN weight 1
Note que o parâmetro weight pode ser explorado para atribuir maior prioridade de envio por um provedor. E você também pode (deve) atribuir um link padrão:
ip route add to 0/0 via LGWP
Bem, pronto... Agora apenas algumas considerações...

O kernel mantém tabelas de roteamento estátcas, portanto, se N pessoas tentarem acessar o site Google por exemplo, todas as tentativas de conexão sairão pelo mesmo link.

Existem alguns patchs disponíveis para melhorar o mecanismo de roteamento. Procurem, informem-se e vejam se são adequados as suas realidades.

Com o uso de regras de roteamento (ip rule) você pode definir qual link padrão para a saída de pacotes de uma determinada rede. Ex:
ip rule add from 10.1.0.0/24 table tb0
ip rule add from 10.2.0.0/24 table tb1
Pode-se. também, dividir por seviços. ex:
iptables -t mangle -A PREROUTING -i LOCALNET -p tcp --dport 21 -j MARK --set-mark 0x60
ip rule add fwmark 0x60 table tbN
Só isso... fiz este post com o intuíto dele se tornar permanente... espero que os moderadores aceitem...
__________________
Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia

Última edição por PEdroArthurJEdi : 31-01-2008 às 21:07.
Usuário
 
Avatar de PEdroArthurJEdi
 
Registrado em: Sep 2007
Localização: Rio Grande do Norte
Mensagens: 148
Agradeceu: 0
Agradecido 23 vez(es) em 17 Posts
Reputação: 32 PEdroArthurJEdi
Responder com Quote PEdroArthurJEdi está offline  
Os seguintes 6 usuarios agradeceram a PEdroArthurJEdi por este post:
flexvoice (01-07-2008), kalz (30-05-2008), magal (31-08-2008), michel11br (28-02-2008), NetoGO23 (11-07-2008), scorpion (01-02-2008)
Antigo 21-08-2008, 16:53   #2 (permalink)
Padrão

Citação:
Postado Originalmente por PEdroArthurJEdi Ver Mensagens
Pode-se. também, dividir por seviços. ex:
iptables -t mangle -A PREROUTING -i LOCALNET -p tcp --dport 21 -j MARK --set-mark 0x60
ip rule add fwmark 0x60 table tbN
Só isso... fiz este post com o intuíto dele se tornar permanente... espero que os moderadores aceitem...
Amigo isso seria para poder dividir por portas certo???
entendi essa regra só ñ entendo esse 0x60. foi um nome qualquer q vc deu somente para registrar a marcação?
obrigado...
Usuário
 
Avatar de erickwa
 
Registrado em: Jul 2005
Mensagens: 68
Agradeceu: 0
Agradecido 0 vez(es) em 0 Posts
Reputação: 0 erickwa
Responder com Quote erickwa está offline  
Antigo 22-08-2008, 0:29   #3 (permalink)
Padrão

Citação:
Postado Originalmente por erickwa Ver Mensagens
Amigo isso seria para poder dividir por portas certo???
entendi essa regra só ñ entendo esse 0x60. foi um nome qualquer q vc deu somente para registrar a marcação?
obrigado...
Veja que eu pus uma regra de roteamento, fwmark, e o valor era 0x60. Então, na regra do iptables deve colocar o valor que escolhi na regra de roteamento.
__________________
Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia
Usuário
 
Avatar de PEdroArthurJEdi
 
Registrado em: Sep 2007
Localização: Rio Grande do Norte
Mensagens: 148
Agradeceu: 0
Agradecido 23 vez(es) em 17 Posts
Reputação: 32 PEdroArthurJEdi
Responder com Quote PEdroArthurJEdi está offline  
Antigo 22-08-2008, 8:35   #4 (permalink)
Padrão

Citação:
Postado Originalmente por PEdroArthurJEdi Ver Mensagens
Veja que eu pus uma regra de roteamento, fwmark, e o valor era 0x60. Então, na regra do iptables deve colocar o valor que escolhi na regra de roteamento.
Legal...
Vou tentar usar seu topico ja instalei iproute2 e tudo mais, estou precisando justamente disso, preciso mandar para um link trafego nobre e para o outro preciso mandar o resto, vou tentar qualquer duvidade posso entrar em contato denovo? mas seu tutorial esta bem elaborado e bem feito, agradeço, e repito era justamente o q precisava...

Abraços tudo de bom...
Usuário
 
Avatar de erickwa
 
Registrado em: Jul 2005
Mensagens: 68
Agradeceu: 0
Agradecido 0 vez(es) em 0 Posts
Reputação: 0 erickwa
Responder com Quote erickwa está offline  
Antigo 22-08-2008, 10:04   #5 (permalink)
Padrão Eis meu teste

Minhas condições aqui é a seguinte....

eth0 - 172.16.1.2 (rede local) ligo essa eth para outro server de monitoramento...
eth1 - 192.168.1.2 (rede ADSL) direto em um modem
eth2 - 201.xx.xx.xxx (rede cisco)

Antes do Roteamento...

[root@Proxy rc.d]# route
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
201.xx.xx.xxx * 255.255.255.248 U 10 0 0 eth2
192.168.1.0 * 255.255.255.0 U 10 0 0 eth1
link-local * 255.255.0.0 U 10 0 0 eth2
link-local * 255.255.0.0 U 10 0 0 eth1
default 201-xx-xx-xxx.c 0.0.0.0 UG 10 0 0 eth2

isso sem executar as regras...

agora executando tais regras, criei um script com todas dentro...


[root@Proxy rc.d]# cat /etc/rc.d/rc.routes

ip route add 172.16.1.0/24 dev eth1 src 192.168.1.1 table tb0
ip route add to 0/0 via 192.168.1.2 table tb0
ip route add 172.16.1.0/24 dev eth2 src 201.xx.xx.xxx table tb1
ip route add to 0/0 via 201.xx.xx.xxx(router cisco) table tb1

ip route add 172.16.1.0/24 dev eth0 table tb0
ip route add 172.16.1.0/24 dev eth0 table tb1

ip route add 172.16.1.0/24 dev eth1 src 192.168.1.1
ip route add 172.16.1.0/24 dev eth2 src 201.28.77.162

iptables -t mangle -A PREROUTING -i eth0 -p udp --dport 1024:65535 -j MARK --set-mark 0x60
ip rule add fwmark 0x60 table tb0
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 1024:65535 -j MARK --set-mark 0x61
ip rule add fwmark 0x61 table tb0
iptables -t mangle -A PREROUTING -i eth0 -p udp --dport 1:1023 -j MARK --set-mark 0x50
ip rule add fwmark 0x50 table tb1
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 1:1023 -j MARK --set-mark 0x51
ip rule add fwmark 0x51 table tb1


[root@Proxy rc.d]# ./rc.route
RTNETLINK answers: Invalid argument
RTNETLINK answers: File exists
RTNETLINK answers: Invalid argument

Agora apos executar as regras...

[root@Proxy rc.d]# route
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
201.xx.xx.xxx * 255.255.255.248 U 10 0 0 eth2
192.168.1.0 * 255.255.255.0 U 10 0 0 eth1
172.16.1.0 * 255.255.255.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 10 0 0 eth2
link-local * 255.255.0.0 U 10 0 0 eth1
default 201-xx-xx-xxx.c 0.0.0.0 UG 10 0 0 eth2


Pelo q percebi existe algum erro... c pudesse me dizer onde pequei... obrigado...


Usuário
 
Avatar de erickwa
 
Registrado em: Jul 2005
Mensagens: 68
Agradeceu: 0
Agradecido 0 vez(es) em 0 Posts
Reputação: 0 erickwa
Responder com Quote erickwa está offline  
Resposta

Opções do Tópico

Regras de Mensagens
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Trackbacks are Ligado
Pingbacks are Ligado
Refbacks are Ligado
Ir para...

Tópicos Similares
Tópico Tópico Iniciado Por Fórum Respostas Última Mensagem
Balanceamento de portas entre 2 links angelangra Mikrotik 15 20-11-2007 2:03
Balanceamento de carga usando 2 links dumer99 Mikrotik Balanceamento 16 14-12-2006 16:42
Problemas com iproute2 fazendo balenceamento de carga ruyneto Redes/Protocolos 6 14-02-2005 23:24
Balanceamento entre links jairof Adm. em Geral 3 23-06-2004 23:35
Como fazer balanceamento de carga em dois links usando o Lin Redes/Protocolos 3 19-01-2003 11:32

Horários baseados na GMT -3. Agora são 21:07.


Powered by vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.