Página 1 de 7 123456 ... ÚltimoÚltimo
+ Responder ao Tópico



  1. 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 20:07.

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

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








Tópicos Similares

  1. Balanceamento de Carga do Link
    Por SeuMadruga no fórum Redes
    Respostas: 27
    Último Post: 10-05-2015, 19:55
  2. Balanceamento de portas entre 2 links
    Por angelangra no fórum Redes
    Respostas: 15
    Último Post: 20-11-2007, 01:03
  3. Balanceamento de carga usando 2 links
    Por dumer99 no fórum Redes
    Respostas: 16
    Último Post: 14-12-2006, 15:42
  4. Respostas: 1
    Último Post: 16-08-2006, 09:08
  5. Respostas: 3
    Último Post: 19-01-2003, 10:32

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L