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



  1. #1
    maverick_cba
    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
    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

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






Tópicos Similares

  1. Configurar squid com link adsl - Ajuda ai galera...
    Por BrasileiroNet no fórum Servidores de Rede
    Respostas: 10
    Último Post: 12-07-2010, 10:42
  2. Balanceamento com duas ADSL brt
    Por mauriciojmjr no fórum Redes
    Respostas: 1
    Último Post: 01-04-2009, 20:49
  3. Respostas: 4
    Último Post: 11-06-2008, 10:03
  4. Balanceamento com 2 adsl IP Fixo no mesmo hub
    Por alexandreriosf no fórum Redes
    Respostas: 0
    Último Post: 02-06-2008, 16:51
  5. Respostas: 1
    Último Post: 19-10-2007, 14:02

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L