- 30-01-2008 #1
- Data de Ingresso
- Sep 2007
- Localização
- Rio Grande do Norte
- Posts
- 249
- Posts de Blog
- 18
- Reputação
- 63
Balanceamento de carga entre links com iproute2 - mini-howtoComo 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
Feito isso, devemos atribuir as redes dos links as suas respectivas tabelas de roteamento:
echo 11 tb1 >> /etc/iproute2/rt_tables
...
echo XX tbN >> /etc/iproute2/rt_tables
ip route add LNTW0 dev LIF0 src LIP0 table tb0
deve-se, também, incluir informações sobre a rede local:
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
ip route add LOCALNET dev IFLOCALNET table tb0
obs: todas as redes locais devem estar presentes em todas as tabelas!!!
ip route add LOCALNET dev IFLOCALNET table tb1
...
ip route add LOCALNET dev IFLOCALNET table tbN
Agora, devemos definir as rotas das redes através da tabela padrão:ip route add LNTW0 dev LIF0 src LIP0
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:
ip route add LNTW1 dev LIF1 src LIP1
...
ip route add LNTWN dev LIFN src LIPN
RTNETLINK answers: File exists
Agora você adiciona regras que decidem por onde os pacotes de vem passar:ip rule add from LIP0 table tb0
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 rule add from LIP1 table tb1
...
ip rule add from LIPN table tbN
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
Pode-se. também, dividir por seviços. ex:
ip rule add from 10.2.0.0/24 table tb1
iptables -t mangle -A PREROUTING -i LOCALNET -p tcp --dport 21 -j MARK --set-mark 0x60
Só isso... fiz este post com o intuíto dele se tornar permanente... espero que os moderadores aceitem...
ip rule add fwmark 0x60 table tbN
Última edição por PEdroArthurJEdi; 31-01-2008 às 22:07.
Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia
- 21-08-2008 #2
- 22-08-2008 #3
- Data de Ingresso
- Sep 2007
- Localização
- Rio Grande do Norte
- Posts
- 249
- Posts de Blog
- 18
- Reputação
- 63
Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia
- 22-08-2008 #4
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...
- 22-08-2008 #5
Eis meu testeMinhas 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...

- 23-08-2008 #6
- Data de Ingresso
- Sep 2007
- Localização
- Rio Grande do Norte
- Posts
- 249
- Posts de Blog
- 18
- Reputação
- 63
As saídas dos seguintes comandos podem ajudar mais:
ip route show table all
iptables -t mangle -L -n -v
Porém, numa primeira vista, não parece haver nenhum erro no seu script. Testei algumas coisas aqui nos meu servidores e deu certo. Como disse, a saída ajudará mais...Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia
- 31-08-2008 #7
Pedro,
fiz tudo que está no tuto, mas o cliente não encherga o servidor.
Tenho:
FEDORA 8
3 links
2 WIMAX(512 cada) - embratel
192.168.10.x - gw1 - saida para a porta 80 e 443
192.168.10.x - gw2 - saida para a porta 25 e 110
1 link dedicado(1 mb, para acesso ao terminal service) - embratel
192.168.16.x - gw3 - só passa por aqui acesso ao ts, saída pela interface interna pela porta 3389
será o que posso ta errando?
- 31-08-2008 #8
- Data de Ingresso
- Sep 2007
- Localização
- Rio Grande do Norte
- Posts
- 249
- Posts de Blog
- 18
- Reputação
- 63
Antes de realizar o balanceamento os clientes estavam funcionando?Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia
- 31-08-2008 #9
Sim, todos estão funcionando.
Pedro, LOCALNET refere-se á rede local(192.168.160.0/24), é isso?
Vlw
- 04-09-2008 #10
- Data de Ingresso
- Sep 2007
- Localização
- Rio Grande do Norte
- Posts
- 249
- Posts de Blog
- 18
- Reputação
- 63
Sim, localnet é o endereço da rede local...
Seria de grande ajuda a saida dos seguintes comandos:
# ip route show table all
# iptables -t mangle -L -n -vPor mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
-- Prof. Dr. Antonio Ronaldo Garcia
Tópicos Similares
Balanceamento de portas entre 2 links
Por angelangra no fórum MikrotikRespostas: 15Último Post: 20-11-2007, 03:03Balanceamento de carga usando 2 links
Por dumer99 no fórum Mikrotik BalanceamentoRespostas: 16Último Post: 14-12-2006, 17:42Problemas com iproute2 fazendo balenceamento de carga
Por ruyneto no fórum Redes/ProtocolosRespostas: 6Último Post: 15-02-2005, 00:24Balanceamento entre links
Por jairof no fórum Adm. em GeralRespostas: 3Último Post: 24-06-2004, 00:35Como fazer balanceamento de carga em dois links usando o Lin
Por no fórum Redes/ProtocolosRespostas: 3Último Post: 19-01-2003, 12:32



LinkBack URL
About LinkBacks
Citação




Marcadores