+ Responder ao Tópico



  1. #1

    Padrão balanceamento de links

    fala galera, como estão as coisas??

    pessoal, já li bastante sobre balanceamento de links, mas acho q não entendi muito do q eu li...

    bom.. vamos lá...

    supomos q tenho em meu servidor 3 placas de rede:
    eth0 - 10.0.0.1/24
    eth1 - 192.168.0.1/24
    eth2 - 192.168.1.1/24

    e que eu tenha também dois links ADSL e q os mesmos estejam ligados em suas respectivas placas no servidor.
    link1 - 192.168.0.254/24 - 600 kbps
    link2 - 192.168.1.254/24 - 1024 kbps

    a idéia é colocar os dois links pra funcionar juntos, para isso temos 3 alternativas:
    1 - balanceamento total, as requisições feitas ao servidor serão dividas igualmente pelos links;
    2 - balenceamento por peso, as requisições serão divididas de forma q o link 1024 responda por 60% delas;
    3 - balanceamento por serviço, deixando um dos links como gateway padrão, algumas portas são marcadas para usar o link sobressalente.

    Para usar o modo 3 não seria complicado, exmplo:
    teríamos como gateway padrão o adsl 600

    # então seria marcar os pacotes desejados:
    iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -d 0/0 -p tcp --dport 80 -j MARK --set-mark 1
    # Criando nova tabela
    echo "20 adsl2" >> /etc/iprout2/rt_tables
    depois especificar a rota para onde eles devem passar:
    ip rule add fwmark 1 table 20 prio 20
    ip route add default via 192.168.1.1 dev eth2 table 20
    ip route flush cache
    # O mascaramento
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
    isso é o q eu li em vários documentos, não sei se está correto, se não estiver alguém por favor me corrija...
    --------------------------------------------------------------------------------------------

    Agora para as situações 1 e 2 q vem as dúvidas grandes:
    1 - Como devem estar as configurações dos links ADSL?? devem estar configurados normalmente, inclusive o gateway padrão?
    2 - como definir corretamente o peso para cada link?
    3 - como fazer? pois li um monte de coisa e não consegui fazer....

    Vamos lá... seguindo o http://lartc.org/howto/ , a sessão 4.2 onde fala sobre multiplos links, as configurações seriam desta forma:

    IF1=eth1
    IF2=eth2

    IP1=192.168.0.1
    IP2=192.168.1.1

    P1=192.168.0.254
    P2=192.168.1.254

    P1_NET=192.168.0.0
    P2_NET=192.168.1.0

    echo "199 T1" >> /etc/iproute2/rt_tables
    echo "200 T2" >> /etc/iproute2/rt_tables

    ip route add $P1_NET dev $IF1 src $IP1 table T1
    ip route add default via $P1 table T1
    ip route add $P2_NET dev $IF2 src $IP2 table T2
    ip route add default via $P2 table T2

    ip route add $P1_NET dev $IF1 src $IP1
    ip route add $P2_NET dev $IF2 src $IP2

    ip route add default via $P1

    ip rule add from $IP1 table T1
    ip rule add from $IP2 table T2

    ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
    nexthop via $P2 dev $IF2 weight 1
    Depois viria o padrão do mascaramento do iptables.

    Mas voltando a pergunta, como deve estar a configuração das interfaces de rede dos links adsl antes da aplicação destas regras?
    Como fazer para o balanceamento funcionar com peso?
    Estas configurações deverão ser executadas todas as vezes que iniciar o micro? todas as vezes que rodar o script de firewall? ou somente uma vez?

    Tentei fazer exatamente como citado acima, mas não obtive sucesso.

    Onde estou errando??

    valeu

  2. #2
    silvamelo
    Visitante

    Padrão Re: balanceamento de links

    lucianogf, implementei o load balance e vou tentar ajudar você em suas dúvidas.

    1. Os links ADSL serão configurados normalmente, entretanto, a rota padrão deve ser excluída para que seja incluída uma nova regra no final, informando que a rota padrão será composta pelo balanceamento dos dois links:

    ip route add default table $T0 nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

    Também será configurada uma rota padrão para a tabela main.

    2. Essa regra é a principal do load balance, e para fazer o balanceamento com pesos diferentes basta mudar na regra acima o valor de um dos valores após a palavra "weight":

    ip route add default table $T0 nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 3

    Neste caso, para 100 pacotes transmitidos através da $IF1 para fora, aproximadamente 30% dos pacotes serão transmitidos através do LINK da $IF1.

    3. Essa é a mais importante das dúvidas: como fazer?

    IF1=eth1
    IF2=eth2

    IP1=192.168.0.1
    IP2=192.168.1.1

    P1=192.168.0.254
    P2=192.168.1.254

    P1_NET=192.168.0.0
    P2_NET=192.168.1.0

    echo "199 T1" >> /etc/iproute2/rt_tables
    echo "200 T2" >> /etc/iproute2/rt_tables
    echo "201 T0" >> /etc/iproute2/rt_tables

    iptables -A PREROUTING -t mangle -s 10.0.0.1/24 -d 0/0 -j MARK --set-mark 3

    ip route add $P1_NET dev $IF1 src $IP1 table T1
    ip route add default via $P1 table T1
    ip route add $P2_NET dev $IF2 src $IP2 table T2
    ip route add default via $P2 table T2

    ip route add $P1_NET dev $IF1 src $IP1
    ip route add $P2_NET dev $IF2 src $IP2

    ip route add default via $P1

    ip rule add from $IP1 table T1
    ip rule add from $IP2 table T2

    ip rule add fwmark 3 lookup $T0 prio 3
    ip route add default table $T0 nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

    ip route flush cache

    As únicas diferenças entre esse script e o que você postou é a existência de uma terceira tabela onde será configurada a rota padrão por onde sairão os pacotes da rede interna (que foram marcados antes), devidamente balanceados.

    Quando tentei implementar o loadbalance pela primeira vez, todos os scripts que eu encontrava na Internet configuravam o balanceamento na rota padrão. Tentei por diversas vezes implementar do modo como você postou e não consegui.

    Daí tive a idéia de marcar os pacotes da rede interna direcionados aos links e direcioná-los para a tabela $T0. Não sei te explicar porquê, mas sem uma rota na tabela main não rola...

    Bem, espero ter ajudado. Tenta aê e posta o resultado!

  3. #3

    Padrão Re: balanceamento de links

    cara...

    fiz uns testes aqui mas não saiu como o esperado...

    os todas as requisições sempre saem pela rota padrão..

    até onde eu sei deveria intercalar entre as duas interfaces, mas não é isso que está acontecendo...

    as regras que estou usando são as seguintes:

    #!/bin/bash

    IPT=/usr/local/sbin/iptables
    INT=eth0
    IF_ADSL1=eth1
    IF_ADSL2=eth2

    # Limpando Regras antigas
    $IPT -t nat -F
    $IPT -t filter -F
    $IPT -t mangle -F
    $IPT -t nat -X
    $IPT -t filter -X
    $IPT -t mangle -X

    # Definicao de regras padrão
    $IPT -P INPUT ACCEPT
    $IPT -P OUTPUT ACCEPT
    $IPT -P FORWARD ACCEPT

    $IPT -A PREROUTING -t mangle -i eth0 -d 0/0 -j MARK --set-mark 3

    $IPT -t nat -A POSTROUTING -o $IF_ADSL2 -j MASQUERADE
    $IPT -t nat -A POSTROUTING -o $IF_ADSL1 -j MASQUERADE
    #!/bin/bash

    # Interface ADSL 1
    IF1=eth1
    # Interface ADSL 2
    IF2=eth2

    # IP 1
    IP1=10.0.1.1
    # IP 2
    IP2=10.0.2.1

    # Gateway 1
    P1=10.0.1.254
    # Gateway 2
    P2=10.0.2.254

    # Rede 1
    P1_NET=10.0.1.0
    # Rede 2
    P2_NET=10.0.2.0

    ip route add $P1_NET dev $IF1 src $IP1 table ADSL1
    ip route add default via $P1 table ADSL1
    ip route add $P2_NET dev $IF2 src $IP2 table ADSL2
    ip route add default via $P2 table ADSL2

    ip route add $P1_NET dev $IF1 src $IP1
    ip route add $P2_NET dev $IF2 src $IP2

    ip route add default via $P1

    ip rule add from $IP1 table ADSL1
    ip rule add from $IP2 table ADSL2

    ip rule add fwmark 3 lookup ADSL0 prio 3

    ip route add default table ADSL0 nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

    ip route flush cache
    /etc/iproute2/rt_tables
    #
    # reserved values
    #
    255 local
    254 main
    253 default
    0 unspec
    #
    # local
    #
    #1 inr.ruhep
    200 ADSL2
    199 ADSL1
    198 ADSL0
    valeu

  4. #4

    Padrão Re: balanceamento de links

    cara..

    resolvi a parada aqui...

    seguindo o seguinte endereço:

    http://www.debian-administration.org/articles/377

    depois de ver este artigo, percebi q o problema é q em todos os artigos q havia lido, neles falava pra adicionar a rota padrão, mas se irá fazer balanceamento não precisa adicioná-la, o próprio balanceamento adiciona as duas ou mais rotas como padrão, mas definindo que será feito balanceamento..

    e pra poder balancear especificando os tipos de pacotes foi bem simples, é só marcar o pacote com iptables, depois adicionar o outro link, q nao seja o padrão, a uma tabela, e depois especificar a marcação para esta tabela...

    valeu

  5. #5
    silvamelo
    Visitante

    Padrão Re: balanceamento de links

    Eu não conseguia fazer no início por isso... Daí adicionei mais uma tabela conforme postei, marquei os pacotes da rede interna pra serem roteados através da tabela $T0 e tá funcionando aqui até hoje.

    Quando eu tentei fazer sem especificar a rota padrão na tabela main não funcionava de jeito nenhum...

    Mas gostei de saber disso! Vou "acertar" o meu aqui e testar pra ver se funciona.

  6. #6

    Padrão Re: balanceamento de links

    cara..

    eu testei das duas maneiras, colocar os dois links pra serem usados balanceadamente

    e colocar um como padrão e no outro especificar que tipo de serviço usará ele...

    aqui vou usar a segunda opção, pois desta forma posso melhorar a qualidade de serviços específicos, como http, https, dns.. e assim vai

  7. #7

    Padrão

    puts...

    é o trem q pula mesmo..

    a parada não funciona nem ca porra