Visite também: BR-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
+ Responder ao Tópico
Página 1 de 3
1 2 3 ÚltimoÚltimo
Resultados 1 a 10 de 29

Tópico: Balanceamento de carga entre links com iproute2 - mini-howto

  1. #1
    Avatar de PEdroArthurJEdi
    PEdroArthurJEdi está desconectado At The JEdi Lair's PEdroArthurJEdi
    Data de Ingresso
    Sep 2007
    Localização
    Rio Grande do Norte
    Posts
    249
    Posts de Blog
    18
    Reputação
    63

    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...
    Ú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

  2. #2
    Data de Ingresso
    Jul 2005
    Posts
    68
    Reputação
    0

    Padrão

    Citação Postado originalmente por PEdroArthurJEdi Ver Post
    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...

  3. #3
    Avatar de PEdroArthurJEdi
    PEdroArthurJEdi está desconectado At The JEdi Lair's PEdroArthurJEdi
    Data de Ingresso
    Sep 2007
    Localização
    Rio Grande do Norte
    Posts
    249
    Posts de Blog
    18
    Reputação
    63

    Padrão

    Citação Postado originalmente por erickwa Ver Post
    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

  4. #4
    Data de Ingresso
    Jul 2005
    Posts
    68
    Reputação
    0

    Padrão

    Citação Postado originalmente por PEdroArthurJEdi Ver Post
    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...

  5. #5
    Data de Ingresso
    Jul 2005
    Posts
    68
    Reputação
    0

    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...



  6. #6
    Avatar de PEdroArthurJEdi
    PEdroArthurJEdi está desconectado At The JEdi Lair's PEdroArthurJEdi
    Data de Ingresso
    Sep 2007
    Localização
    Rio Grande do Norte
    Posts
    249
    Posts de Blog
    18
    Reputação
    63

    Padrão

    Citação Postado originalmente por erickwa Ver Post
    [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
    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

  7. #7
    Data de Ingresso
    Aug 2008
    Localização
    Bahia
    Idade
    24
    Posts
    33
    Reputação
    24

    Padrão

    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?

  8. #8
    Avatar de PEdroArthurJEdi
    PEdroArthurJEdi está desconectado At The JEdi Lair's PEdroArthurJEdi
    Data de Ingresso
    Sep 2007
    Localização
    Rio Grande do Norte
    Posts
    249
    Posts de Blog
    18
    Reputação
    63

    Padrão

    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

  9. #9
    Data de Ingresso
    Aug 2008
    Localização
    Bahia
    Idade
    24
    Posts
    33
    Reputação
    24

    Padrão

    Sim, todos estão funcionando.

    Pedro, LOCALNET refere-se á rede local(192.168.160.0/24), é isso?

    Vlw

  10. #10
    Avatar de PEdroArthurJEdi
    PEdroArthurJEdi está desconectado At The JEdi Lair's PEdroArthurJEdi
    Data de Ingresso
    Sep 2007
    Localização
    Rio Grande do Norte
    Posts
    249
    Posts de Blog
    18
    Reputação
    63

    Padrão

    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 -v
    Por mais que eu pinte um burro nas cores de uma zebra, um burro sempre será um burro!
    -- Prof. Dr. Antonio Ronaldo Garcia

+ Responder ao Tópico
Página 1 de 3
1 2 3 ÚltimoÚltimo

Tópicos Similares

  1. Balanceamento de portas entre 2 links
    Por angelangra no fórum Mikrotik
    Respostas: 15
    Último Post: 20-11-2007, 03:03
  2. Balanceamento de carga usando 2 links
    Por dumer99 no fórum Mikrotik Balanceamento
    Respostas: 16
    Último Post: 14-12-2006, 17:42
  3. Problemas com iproute2 fazendo balenceamento de carga
    Por ruyneto no fórum Redes/Protocolos
    Respostas: 6
    Último Post: 15-02-2005, 00:24
  4. Balanceamento entre links
    Por jairof no fórum Adm. em Geral
    Respostas: 3
    Último Post: 24-06-2004, 00:35
  5. Respostas: 3
    Último Post: 19-01-2003, 12:32

Visitantes encontraram esta pagina procurando por:

iproute2

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens