Re: Download perde conexão - Balanceamento...
On 26 jun, 14:20, "Júnior Bohn" <movidoali...@gmail.com> wrote:
> Boa tarde!
>
> Mas esse script faz exatamente isto, manda todas as requisções vindas da
> rede, ora por um link, ora por outro, fazendo balanceamente, faz download
> pelos dois links, mas o serviçoes locais saem por um link, por isso que tem
> que setar rota padrão.
> Usei isto no meu provedor fazendo balancemento de dois adsl um de 1 Mb e
> outro de 800 kbps e funcionou 100%.
>
> Junior
>
> 2008/6/25 Julio <cbju...@gmail.com>:
>
> > On 25 jun, 21:10, "Júnior Bohn" <movidoali...@gmail.com> wrote:
> > > Boa noite, se não me engano você tem que adicionar uma regra para manter
> > as
> > > conexões ativas, ou seja se sai por um link, tem que sair somente por
> > aquele
> > > até que seja encerrada, senão dá esse problema, segue abaixo o script que
> > eu
> > > usei para fazer isto:
> > > Segue o script:
> > > **************************************************************
> > > #!/bin/bash
>
> > > #IPT=/usr/local/sbin/iptables
> > > INT=eth2
> > > IF_ADSL1=eth0
> > > IF_ADSL2=eth1
>
> > > # Limpando Regras antigas
> > > iptables -t nat -F
> > > iptables -t filter -F
> > > iptables -t mangle -F
> > > iptables -t nat -X
> > > iptables -t filter -X
> > > iptables -t mangle -X
>
> > > #remove defaults routers
> > > route del default gw 192.168.3.1
> > > route del default gw 192.168.4.1
>
> > > # Definicao de regras padrã$IPT
> > > iptables -P INPUT ACCEPT
> > > iptables -P OUTPUT ACCEPT
> > > iptables -P FORWARD ACCEPT
>
> > > #marcando pacotes do msn
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6891 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6892 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6893 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6894 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6895 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6896 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6897 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6898 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6899 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6900 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 1863 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 1863 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 5190 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 6901 -j MARK
> > > --set-mark 4
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 6901 -j MARK
> > > --set-mark 4
>
> > > #setando https
> > > #iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 443 -j MARK
> > > --set-mark 4
>
> > > #marcando o resto dos pacotes
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 80 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 80 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 110 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 110 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 25 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 22 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 21 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 53 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 53 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 23 -j MARK
> > > --set-mark 3
> > > iptables -A PREROUTING -t mangle -i eth2 -p udp --dport 69 -j MARK
> > > --set-mark 3
>
> > > #mascarando as conexoes
> > > iptables -t nat -A POSTROUTING -o $IF_ADSL2 -j MASQUERADE
> > > iptables -t nat -A POSTROUTING -o $IF_ADSL1 -j MASQUERADE
>
> > > # Mantendo conexoes ativas:
>
> > > echo -n "Manutencao de conexoes ativas..."
> > > iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
> > > echo " [OK]"
>
> > > echo -n "Otimizando o roteamento..."
> > > iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
> > > 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
> > > cat /proc/sys/net/ipv4/conf/*/rp_filter
> > > echo " [OK]"
>
> > > #Citç:
> > > #!/bin/bash
>
> > > # Interface ADSL 1
> > > IF1=eth0
> > > # Interface ADSL 2
> > > IF2=eth1
>
> > > # IP 1
> > > IP1=192.168.3.5
> > > # IP 2
> > > IP2=192.168.4.5
>
> > > # Gateway 1
> > > P1=192.168.3.1
> > > # Gateway 2
> > > P2=192.168.4.1
>
> > > # Rede 1
> > > P1_NET=192.168.3.0
> > > # Rede 2
> > > P2_NET=192.168.4.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
>
> > > #roteando o msn por um link (adsl Fixo)
> > > #ip rule add fwmark 4 table ADSL2 prio 2
>
> > > #balanceamento dos links
> > > ip rule add fwmark 3 lookup ADSL0 prio 3
> > > ip route add default table ADSL0 nexthop via $P1 dev $IF1 weight 2
> > nexthop
> > > via $P2 dev $IF2 weight 1
>
> > > #carregando nat e ip forward
> > > modprobe iptable_nat
> > > echo 1 > /proc/sys/net/ipv4/ip_forward
>
> > > #aplicando as regras
> > > ip route flush cache
>
> > > #para acesso local a internet
> > > route add default gw 192.168.4.1
>
> > > #redirecionando portas
> > > iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-dest
> > > 192.168.1.10:80
> > > iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 25 -j DNAT --to-dest
> > > 192.168.1.10:25
> > > iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 110 -j DNAT
> > --to-dest
> > > 192.168.1.10:110
> > > iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 10000 -j DNAT
> > --to-dest
>
> > > 192.168.1.10:10000
> > > iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to-dest
> > > 192.168.1.10:22
> > > iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 53 -j DNAT --to-dest
> > > 192.168.1.10:53
> > > #iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT
> > --to-dest
> > > 192.168.1.10:8
> > > ***********************************************************************
>
> > > Junior Bohn
> > > 100% movido a linux
>
> > > 2008/6/25 Julio <cbju...@gmail.com>:
>
> > > > Boa tarde pessoal.
> > > > Há alguns dias postei sobre um problema com MSN e balanceamento de
> > > > carga...Consegui resolver determinando uma rota específica na tabela /
> > > > etc/iproute2/rt_tables. Assim o MSN só sai por um gateway.
> > > > Estou usando a regra:
>
> > > > ip route add default nexthop via 201.200.200.254 dev ppp0 weight 1
> > > > nexthop via 201.200.200.254 dev ppp1 weight 1
>
> > > > Sendo assim, tenho os links disponíveis como se fosse um só (o flash
> > > > get funciona que é uma beleza, pois faz os downloads nas 2 conexões
> > > > simultaneamente).
> > > > Porém, estou com um problema nos downloads pelo navegador. O problema
> > > > é claro: o navegador se perde de vez em quando, pois os IPs das 2
> > > > conexões se trocam (acho que o navegador não se dá bem com esse
> > > > problema, pois a conexão começa a mandar pacotes por outro IP, e aí o
> > > > download pára).
> > > > Alguém tem alguma idéia de como resolver isso? Existe alguma forma de
> > > > marcar pacotes de uma conexão até ela ser finalizada?
> > > > Por exemplo: "Faça esse download de 100 megas pelo browser. Até esse
> > > > download não terminar, ele não muda de rota (se pegou pela ppp0,
> > > > termina pela ppp0)".
> > > > Já tentei usando o CONNMARK, mas não tive sucesso.
> > > > Como possuo duas redes locais, poderia até fazer cada uma saindo por
> > > > uma ADSL, mas assim fico limitado (gostaria era de ter duas conexões
> > > > ao meu dispor o tempo todo, independente da rede).
> > > > Espero ter esclarecido.
> > > > Alguma ajuda?
>
> > > > --
> > > > To UNSUBSCRIBE, email to
> > debian-user-portuguese-REQU...@lists.debian.org
> > > > with a subject of "unsubscribe". Trouble? Contact
> > > > listmas...@lists.debian.org
>
> > Boa noite Junior. Obrigado pela resposta.
> > Mas desse jeito ele não "soma as 2 ADSLs" né...
> > O que ele faz é setar que 1 IP vai sempre sair por uma ADSL, e outro
> > IP (ou rede) sairá sempre por outra ADSL..como você fez:
>
> > ip rule add from $IP1 table ADSL1
> > ip rule add from $IP2 table ADSL2
>
> > Mas o que eu gostaria de saber é se tem como somar as 2. Ou seja,
> > posso usar as duas ao mesmo tempo, independente em que rede esteja. To
> > mandando pacotes pela porta 80 pela ADSL1 e ao mesmo tempo mandando
> > outros pacotes (de outra conexão, um download por exemplo) pela ADSL2.
> > Estou achando que com CONNMARK é viável. Mas até agora não consegui
> > fazer...
> > Será que existe forma de se fazer isso?
>
> > --
> > To UNSUBSCRIBE, email to debian-user-portuguese-REQU...@lists.debian.org
> > with a subject of "unsubscribe". Trouble? Contact
> > listmas...@lists.debian.org
Olá Junior.
Você poderia me explicar como funciona seu script?
Não entendi muito bem...
Vi que você marca alguns pacotes com 3 e 4, aí logo abaixo você
compartilha a conexão...
Depois você adiciona as rotas às tabelas (ADSL1 e ADSL2)
Aí você faz:
ip rule add from $IP1 table ADSL1
ip rule add from $IP2 table ADSL2...
...querendo dizer que o o IP1e o IP2 tem rotas definidas pelos 2 links
que você possui...
E então você adiciona a regra (ip rule...) com prioridade 3, que diz
que todo o tráfego
com marca 3 (inclusive o tráfego http - 80) sairá pela ADSL0:
ip rule add fwmark 3 lookup ADSL0 prio 3
Mas depois você faz a regra que seria para balancear as 2 conexões...
ip route add default table ADSL0 nexthop via $P1 dev $IF1 weight 2
nexthop via $P2 dev $IF2 weight 1
Mas entendi que o tráfego com marca 3 (inclusive http) cairá primeiro
na regra que vem antes, fazendo com que
ele seja roteado pela ADSL0...
Estou certo? Então não será balanceado entre os dois links...Me
corrija por favor Junior.
Abraço. E obrigado pela ajuda.
Reply to: