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



  1. #1
    maverick_cba
    Visitante

    Padrão Balanceamento com 2 links ADSL

    Olá comunidade Underlinux! Estou com o seguinte problema na qual irei descrever com bastante detalhe para que talvez alguem possa me ajudar, mas antes tenho algumas perguntas.


    1 - Alguem aqui desse fórum já conseguiu fazer um balanceamento de carga entre 2 links ADSL? Já vi muitos por aí que dizem ter feito mas já estou a 1 mês tentando diversas soluções e nenhuma foi bem sucedida.
    2 - Quais as ferramentas? Utilizei iproute2 com marcação de pacotes pelo iptables e tb não tive sucesso.
    3 - É necessário alguma ferramenta extra ou algum patch no kernel alem do que já vem com o slackware 10.0? Algum protocolo de roteamento diferente?


    O problema que estou tendo é óbvio, o 2º link não funciona, somente o default. E necessário apagar as rotas na tabela default? E mesmo quando rodo o script as rotas se perdem e todo o trafego na rede se perde.
    Em fim segue abaixo uma descrição dos procedimentos que efetuei para que analizem.

    tabelas criadas no rt_tables:
    Código :
    10    link1 
    11    link2 
    30    interna

    Script usado:
    Código :
    #!/bin/bash 
    ###################################### 
    #    Script de Configuração para     # 
    #    Balanceamento de Carga entre    # 
    #            2 links ADSL            # 
    ###################################### 
     
     
    # Definindo variaveis 
    IP1=192.168.0.2 # ip da interface ligada ao link 1 
    GW1=192.168.0.1 # ip do link 1 
    NET1=192.168.0.0/24 # rede 1 
    IF1=eth0 # placa de rede do link 1 
    IP2=192.168.157.1 # ip da interface ligada ao link 2 
    GW2=192.168.157.100 # ip do link 2 
    NET2=192.168.157.0/24 # rede 2 
    IF2=eth2 # placa de rede do link 2 
    RI=10.10.1.0/24 # ip da rede interna 
     
    # Carregando os modulos basicos: 
     
    echo -n "Carregando os modulos..." 
    modprobe ip_tables 
    modprobe iptable_filter 
    modprobe ip_conntrack 
    modprobe ip_conntrack_ftp 
    modprobe iptable_nat 
    modprobe ip_nat_ftp 
    modprobe ipt_LOG 
    modprobe ipt_state 
    modprobe ipt_MASQUERADE 
    echo "                                     [OK]" 
     
    # Resetando o Firewall: 
     
    echo -n "Resetando o firewall..." 
    iptables -F 
    iptables -Z 
    iptables -X 
     
    iptables -t nat -F 
    #iptables -P INPUT DROP 
    #iptables -P FORWARD DROP 
    #iptables -P OUTPUT ACCEPT 
    echo "                                      [OK]" 
     
    # Habilitando o roteamento de pacotes: 
     
    echo -n "Habilitando o roteamento..." 
    echo "1" > /proc/sys/net/ipv4/ip_forward 
    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 
     
    echo "                                  [OK]" 
     
    # Liberando a chain INPUT para o localhost: 
     
    echo -n "Liberando acesso do localhost..." 
    iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT 
    iptables -A INPUT -p ALL -s $RI -i lo -j ACCEPT 
    iptables -A INPUT -p ALL -s $IP1 -i lo -j ACCEPT 
    iptables -A INPUT -p ALL -s $IP2 -i lo -j ACCEPT 
    echo "                             [OK]" 
     
    # Otimizando o firewall: 
     
    echo -n "Otimizando o roteamento..." 
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
    echo "                                   [OK]" 
     
    # Liberando resposta dos servidores DNS: 
     
    echo -n "Liberando servidores DNS..." 
    #iptables -A INPUT -p udp -s $RI --sport 53 -d $DNS1 -j ACCEPT 
    #iptables -A INPUT -p udp -s $RI --sport 53 -d $DNS2 -j ACCEPT 
    echo "                                  [OK]" 
     
    # Descartar pacotes fragmentados: 
     
    echo -n "Bloqueando pacotes fragmentados..." 
    iptables -A INPUT -i $IF1 -f -j LOG --log-prefix "Pacote fragmentado: " 
    iptables -A INPUT -i $IF1 -f -j DROP 
    iptables -A INPUT -i $IF2 -f -j LOG --log-prefix "Pacote Fragmentado: " 
    iptables -A INPUT -i $IF2 -f -j DROP 
    echo "                           [OK]" 
     
    # Liberando alguns acessos por ping: 
     
    echo -n "Liberando acesso por ping..." 
    iptables -A INPUT -p icmp --icmp-type 8 -i $IF1 -j ACCEPT 
    iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
    iptables -A INPUT -p icmp -s $NET1 -d 0/0 -j ACCEPT 
    echo "                                 [OK]" 
     
    # Regra para SSH: (opcional) 
     
    echo -n "Liberando acesso ao SSH..." 
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
    echo "                                   [OK]" 
     
    # Regras do FORWARD 
     
    # Descarta pacotes invalidos: 
     
    echo -n "Descartando pacotes invalidos para reenvio..." 
    iptables -A FORWARD -m state --state INVALID -j DROP 
    echo "                [OK]" 
     
    # Mantendo conexoes ativas: 
     
    echo -n "Manutencao de conexoes ativas..." 
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT  
    echo "                             [OK]" 
     
    # Liberando acesso de dentro para fora 
     
    echo -n "Liberando FORWARDING" 
     
    iptables -A FORWARD -s $RI -j ACCEPT 
    #iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128 
     
    echo "                           [OK]" 
     
    # Fazendo mascaramento de enderecos IP (NAO NAT): 
     
    echo -n "Habilitando o mascaramento..." 
    iptables -t nat -A POSTROUTING -j MASQUERADE 
    iptables -t nat -A POSTROUTING -o $IF1 -j MASQUERADE 
    iptables -t nat -A POSTROUTING -o $IF2 -j MASQUERADE 
    echo "                                [OK]" 
     
    # Marcando pacotes 
     
    echo -n "Marcando pacotes..." 
    iptables -A PREROUTING -t mangle -s $RI -d 0/0 -j MARK --set-mark 3 
    echo "                                [OK]" 
    # Desabilitando o filtro de pacotes do martian source 
    echo -n "Desligando rp_filter..." 
    for eee in /proc/sys/net/ipv4/conf/*/rp_filter; do 
    echo 0 > $eee 
    done 
    echo "                                [OK]" 
     
    # Definindo regras de balanceamento de Link: 
    echo -n "Balanceando links ADSL..." 
     
    # Link 1 
    ip route add $NET1 dev $IF1 src $IP1 table link1 
    ip route add default via $GW1 table link1 
     
    # Link 2 
    ip route add $NET2 dev $IF2 src $IP2 table link2 
    ip route add default via $GW2 table link2 
     
    # Colocando os links na tabela principal de roteamento 
    ip route add $NET1 dev $IF1 src $IP1 
    ip route add $NET2 dev $IF2 src $IP2 
     
    # setando a rota preferencial 
    ip route add default via $GW1 
     
    # regras das tabelas 
    ip rule add from $IP1 table link1 
    ip rule add from $IP2 table link2 
     
    # balanceamento de link 
    ip rule add fwmark 3 lookup interna prio 3 
    ip route add default table interna nexthop via $GW1 dev $IF1 \ 
    weight 1 nexthop via $GW2 dev $IF2 weight 1 
     
    # flush no roteamento 
    ip route flush cache 
    echo "               [OK]" 
    sleep 3

    Espero que possamos discutir bem esse assunto, ou até mesmo montar-mos um tutorial para que os usuários fiquem mais esclarecidos a respeito desse assunto visto que é muito interessante alem de ser uma solução barata.

    Agradeço a juda que puderem dar!

  2. #2
    meraki
    Visitante

    Padrão Balanceamento com 2 links ADSL

    Maverick, eu sei que o Windows NT oferece este tipo de conexão, já vi isso a muito tempo atras, mas só funciona se o sistema do outro lado (Provedor, router,etc) disponibilizar esse tipo de conexão também. Infelizmente é tudo que sei sobre o assunto.

  3. #3
    Visitante

    Padrão Balanceamento de links


  4. #4

    Padrão Balanceamento com 2 links ADSL

    Cara te digo, ja tentei de tudo, não da, o unico jeito que da se não me engano eh se tiver mtos ips ae a provedora faz o balanceamento, usando AS se não me engano.

    falows

  5. #5

    Padrão Balanceamento com 2 links ADSL

    Non pirem... balaceamento de link é uma coisa, agregacao de link é outra.

    agregacao é onda as pontas precisam "chegar em um acordo", balanceamento nao, ou entao voce ta me dizendo que um pacote sai por um link e nao pode retornar por outro? se voce pensar que as rotas tem que ser obrigatoriamente simetrica voce esta enganado.

    eu jah fiz isso faz um certo tempo com links ADSLs, _aparentemente_ seu script parece ok e tudo mais, mas na realidade voce so precisa dessa linha de fato:

    ip route add default nexthop via ip.addr \
    weight 1 nexthop via ip.addr weight 1

    nao precisa ficar criando tabela, etc, etc, etc nem marcando pacote, voce esta somente balanceando os links de saidas, voce precisa _sim_ marcar o pacote quando voce quer fazer um QoS da vida ou marcar um pacote para sair sempre por um link, coisas nesse estilo, mas simplesmente para balancear o link, basta criar uma rota default com 2 nexthops (coisa que o route nao faz, so faz para uma)

    bom jah falei muito, tente da maneira simples e veja se voce consegue, sem muitas regras de firewall nem nada... se conseguir, veja onde esta errando... ah.. nao espere que voce conseguia baixar usando somente um "download" uma taxa de 1Mbit, supondo q voce tem 2 links de 512k. Ai realmente nao vai funcionar legal.

    Vou te dar uma dica onde voce deve ler, eu jah respondi essa pergunta nesse forum uma vez, pode pesquisar depois se quiser mas leia o seguinte: Adv-Routing-Howto (advanced routing howto), voce pode encontrar ele na tldp (www.tldp.org), ele cobre tanto load balance, quanto outros quesitos de roteamento avancado no linux, basta seguir passo a passo o howto que funciona legal.

  6. #6

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por mistymst
    Non pirem... balaceamento de link é uma coisa, agregacao de link é outra.

    agregacao é onda as pontas precisam "chegar em um acordo", balanceamento nao, ou entao voce ta me dizendo que um pacote sai por um link e nao pode retornar por outro? se voce pensar que as rotas tem que ser obrigatoriamente simetrica voce esta enganado.

    eu jah fiz isso faz um certo tempo com links ADSLs, _aparentemente_ seu script parece ok e tudo mais, mas na realidade voce so precisa dessa linha de fato:

    ip route add default nexthop via ip.addr \
    weight 1 nexthop via ip.addr weight 1

    nao precisa ficar criando tabela, etc, etc, etc nem marcando pacote, voce esta somente balanceando os links de saidas, voce precisa _sim_ marcar o pacote quando voce quer fazer um QoS da vida ou marcar um pacote para sair sempre por um link, coisas nesse estilo, mas simplesmente para balancear o link, basta criar uma rota default com 2 nexthops (coisa que o route nao faz, so faz para uma)

    bom jah falei muito, tente da maneira simples e veja se voce consegue, sem muitas regras de firewall nem nada... se conseguir, veja onde esta errando... ah.. nao espere que voce conseguia baixar usando somente um "download" uma taxa de 1Mbit, supondo q voce tem 2 links de 512k. Ai realmente nao vai funcionar legal.

    Vou te dar uma dica onde voce deve ler, eu jah respondi essa pergunta nesse forum uma vez, pode pesquisar depois se quiser mas leia o seguinte: Adv-Routing-Howto (advanced routing howto), voce pode encontrar ele na tldp (www.tldp.org), ele cobre tanto load balance, quanto outros quesitos de roteamento avancado no linux, basta seguir passo a passo o howto que funciona legal.
    Cara vou ser sincero, ja fiz como vc falou, ja usei o how to da tldp, e já ouvi mta gente falar que fez e conseguiu, mas todas as vezes que tentei o balanceamento ate funcionava, mas downloads grandes travam no meio, msn cai, banco não entra, pelo que eu percebi acontece isso pq no meio do download por exemplo muda o ip que chega na outra ponta, ae a outra ponta não continua mandando normal, então acho que por mais que mta gente diga que fez e conseguiu eu nunca consegui fazer ele funcionar 100%

    falows

  7. #7

    Padrão Balanceamento com 2 links ADSL

    msn vc pode setar 1 dos 2 ips para ficar sempre autenticando pelo mesmo, as bancos o mesmo se aplica ao Download dos arquivos grandes recomende DAP


    tenho 2 PPOA aqui e estou neste momento preparando 1 maquina teste especialmente para essa finalidade

  8. #8

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por Pirigoso
    msn vc pode setar 1 dos 2 ips para ficar sempre autenticando pelo mesmo, as bancos o mesmo se aplica ao Download dos arquivos grandes recomende DAP


    tenho 2 PPOA aqui e estou neste momento preparando 1 maquina teste especialmente para essa finalidade
    Cara vc não entendeu, o problema não eh do do arquivo grande parar o download por problema, e sim pq muda de ip de adsl que sai, ex: primeiro ta saindo pelo ip 200.0.0.0 e do nada muda para o ip 201.0.0.0 ae o servidor da outra ponta não entende isso e trava, e o esquema do msn eh depois de autenticado se vc manda uma mensagem por outro ip da problema, assim como bancos-on-line, ou seja nunca consegui fazer funcionar o esquema sem filtrar o que sai, ae se filtrar msn, bancos on-line e der um jeito nos downloads ate consegui fazer ele funcionar, mas não fica um esquema 100%, entende?

  9. #9

    Padrão Balanceamento com 2 links ADSL

    Tá eu também estou passando por esse problema, então haveria uma forma de fazer com que os downloads por exemplo fossem feitos por um link só e a conversação no msn também pudesse ser direcionada só para um dos links? E como ficaria essa regra no firewall?

  10. #10

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por jrctec
    Tá eu também estou passando por esse problema, então haveria uma forma de fazer com que os downloads por exemplo fossem feitos por um link só e a conversação no msn também pudesse ser direcionada só para um dos links? E como ficaria essa regra no firewall?
    aee alguém pode dar uma mão??

  11. #11

    Padrão Balanceamento com 2 links ADSL

    Cara onde tem o balanceamento eu nunca conseguir implementar essa divisao, a unica forma que consegui ofi num servidor antes que filtrava o tipo de pacotes se fosse alguma requisoção de arquivo ou msn ele sia prum um linkc, o resto era balanceado, ate que funciona, mas nao eh mto bom.

    falows

  12. #12

    Padrão Balanceamento com 2 links ADSL

    Bem pessoal, tb to tentando fazer um load balance aqui...

    O que ocorre é que tenho um link ppp e gostaria que o adsl empresarial ajudasse esse link sempre que ele estivesse com sobrecarga, ou até mesmo substituílo caso o ppp caia e vice-versa.

    ETH0: 200.x.x.2 GW 200.x.x.1
    ETH1: 192.168.10.2 GW 192.168.10.1
    ETH2: 192.168.4.0/24 (rede local)

    Pois bem, inicialmente segui o tutorial, nao funcionou. Então segui o conselho no mystmst, tb nao funfou... Pois bem, setei os respectivos gw's no arquivo de configuração de rede, meu comandou route retorna:

    debian:~# route
    Tabela de Roteamento IP do Kernel
    Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
    192.168.4.0 * 255.255.255.0 U 0 0 0 eth2
    localnet * 255.255.255.0 U 0 0 0 eth0
    192.168.10.0 * 255.255.255.0 U 0 0 0 eth1
    default 192.168.10.1 0.0.0.0 UG 0 0 0 eth1
    default 200.x.x.1 0.0.0.0 UG 0 0 0 eth0

    então adicionei a regra:

    ip route add default nexthop via 192.168.10.1 \ weight 1 nexthop via 200.x.x.1 weight 1

    e dá o erro:

    Error: "nexthop" or end of line is expected instead of " weight"

    Então tirei a barrinha:

    ip route add default nexthop via 192.168.10.1 weight 1 nexthop via 200.x.x.1 weight 1

    e retorna:

    RTNETLINK answers: File exists

    Pois bem amigos, eu teria de fazer algo além? Como posso testar esse load balance? Se um link cair o outro deveria assumir? a Saída deveria ser pelos 2 links o tempo todo ou o segundo link só entra em ação qdo o primeiro sobrecarrega?

    Grato...

  13. #13

    Padrão Balanceamento com 2 links ADSL

    Jim para testar eu geralmente fazia um ftp num server de um amigo e pedia pra ele monitarar as requisições com o tcpdump e ver quando ele mudaria o link e depois que mudasse via se travava ou nao, mesmo que o balanceamento nao funcione se suas regras tiverem certas um link assume o outro sim, e seguindo o tutorial eh para ele balencear o link e nao ser um secundario.

    falows ae

  14. #14

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por ruyneto
    Citação Postado originalmente por Pirigoso
    msn vc pode setar 1 dos 2 ips para ficar sempre autenticando pelo mesmo, as bancos o mesmo se aplica ao Download dos arquivos grandes recomende DAP


    tenho 2 PPOA aqui e estou neste momento preparando 1 maquina teste especialmente para essa finalidade
    Cara vc não entendeu, o problema não eh do do arquivo grande parar o download por problema, e sim pq muda de ip de adsl que sai, ex: primeiro ta saindo pelo ip 200.0.0.0 e do nada muda para o ip 201.0.0.0 ae o servidor da outra ponta não entende isso e trava, e o esquema do msn eh depois de autenticado se vc manda uma mensagem por outro ip da problema, assim como bancos-on-line, ou seja nunca consegui fazer funcionar o esquema sem filtrar o que sai, ae se filtrar msn, bancos on-line e der um jeito nos downloads ate consegui fazer ele funcionar, mas não fica um esquema 100%, entende?
    E será que não tem algum script para você mandar a autencicação (bancos/downloads/msn) pelos 2 ips simultâneamente?

  15. #15

    Padrão Balanceamento com 2 links ADSL

    Ruy, mesmo sabendo que meu adsl é de 1 mb e meu link ppp é de 2 mb, nao poderia ter problemas ai?

    e afinal, tem que usar iproute e marcar pacote ou nao?

  16. #16

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por Jim
    Ruy, mesmo sabendo que meu adsl é de 1 mb e meu link ppp é de 2 mb, nao poderia ter problemas ai?

    e afinal, tem que usar iproute e marcar pacote ou nao?
    Eu sempre usei ip route pra marcar pacote, mas nunca consegui fazer funcionar 100%, quanto a um link ser maior que o outro pode usar o weight pra definir a proporção de cada um , por exemplo se por weight 4 em um e weight 1 em outro, de cada 5 pacotes ele manda 4 por 1 e 1 por outro.

    falows

  17. #17
    pilantrox
    Visitante

    Padrão Balanceamento com 2 links ADSL

    bom ,,,,fazer com q todo trafego passado por um server saia dividido por determinados links, acho q o nosso amigo daqui da underlinux usa uma solucao parecida, "Lacierdias" ,, ele marca os pacotes SMTP e POP pra sair por um link e os demais servicos pelo outro com iptables. parece q foi isso q vi dias atraz no forum ,,,,naum estou conseguindo encontrar no historico ,,mas acho q eh isso.

    Citação Postado originalmente por Jim
    Ruy, mesmo sabendo que meu adsl é de 1 mb e meu link ppp é de 2 mb, nao poderia ter problemas ai?

    e afinal, tem que usar iproute e marcar pacote ou nao?

  18. #18

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por pilantrox
    bom ,,,,fazer com q todo trafego passado por um server saia dividido por determinados links, acho q o nosso amigo daqui da underlinux usa uma solucao parecida, "Lacierdias" ,, ele marca os pacotes SMTP e POP pra sair por um link e os demais servicos pelo outro com iptables. parece q foi isso q vi dias atraz no forum ,,,,naum estou conseguindo encontrar no historico ,,mas acho q eh isso.

    Citação Postado originalmente por Jim
    Ruy, mesmo sabendo que meu adsl é de 1 mb e meu link ppp é de 2 mb, nao poderia ter problemas ai?

    e afinal, tem que usar iproute e marcar pacote ou nao?
    Sim isso tem como fazer, o que eu queria eh algo dinamico entende, ir dividindo sem ser pelo tipo de pacote, pq ae se botasse mais um adsl não prescisaria mais fazer nada, so por mais um link no arquivo do ip route.

    falows

  19. #19
    pilantrox
    Visitante

    Padrão Balanceamento com 2 links ADSL

    hum ,,,entendi,,,,, seria como um balanceamento de carga ,,,, q o trafego fosse dividindo a medida q vc coloque links ligado no server. eh isso ?

    Citação Postado originalmente por ruyneto
    Citação Postado originalmente por pilantrox
    bom ,,,,fazer com q todo trafego passado por um server saia dividido por determinados links, acho q o nosso amigo daqui da underlinux usa uma solucao parecida, "Lacierdias" ,, ele marca os pacotes SMTP e POP pra sair por um link e os demais servicos pelo outro com iptables. parece q foi isso q vi dias atraz no forum ,,,,naum estou conseguindo encontrar no historico ,,mas acho q eh isso.

    Citação Postado originalmente por Jim
    Ruy, mesmo sabendo que meu adsl é de 1 mb e meu link ppp é de 2 mb, nao poderia ter problemas ai?

    e afinal, tem que usar iproute e marcar pacote ou nao?
    Sim isso tem como fazer, o que eu queria eh algo dinamico entende, ir dividindo sem ser pelo tipo de pacote, pq ae se botasse mais um adsl não prescisaria mais fazer nada, so por mais um link no arquivo do ip route.

    falows

  20. #20

    Padrão Balanceamento com 2 links ADSL

    Citação Postado originalmente por pilantrox
    hum ,,,entendi,,,,, seria como um balanceamento de carga ,,,, q o trafego fosse dividindo a medida q vc coloque links ligado no server. eh isso ?

    Citação Postado originalmente por ruyneto
    Citação Postado originalmente por pilantrox
    bom ,,,,fazer com q todo trafego passado por um server saia dividido por determinados links, acho q o nosso amigo daqui da underlinux usa uma solucao parecida, "Lacierdias" ,, ele marca os pacotes SMTP e POP pra sair por um link e os demais servicos pelo outro com iptables. parece q foi isso q vi dias atraz no forum ,,,,naum estou conseguindo encontrar no historico ,,mas acho q eh isso.

    Citação Postado originalmente por Jim
    Ruy, mesmo sabendo que meu adsl é de 1 mb e meu link ppp é de 2 mb, nao poderia ter problemas ai?

    e afinal, tem que usar iproute e marcar pacote ou nao?
    Sim isso tem como fazer, o que eu queria eh algo dinamico entende, ir dividindo sem ser pelo tipo de pacote, pq ae se botasse mais um adsl não prescisaria mais fazer nada, so por mais um link no arquivo do ip route.

    falows
    Eh isso mesmo, se tem 2 ele divide entre os dois, se tem 3 ele divide entre os tres, assim por diante, e da pra por peso tb pra cada link, ou seja se um for de 2 megas e tiver outros 2 de 1 mega, pode por 2 , 1, 1, ou seja de 4 pacotes 2 vao pro link 1 e o resto cada um vai rpa um link.

    falows