Erro balanceamento links

Iniciado por RafaM, 17 de Novembro de 2014, 16:01

tópico anterior - próximo tópico

RafaM

Estou tentando utilizar balanceamento de links com iproute2, sem sucesso.
Fiz alguns testes com anguns tutos, mas nada resolve. Possuo 2 link Oi e Copel, a ideia seria balancear meio a meio, mas só o OI é usado.
Estou usando o Ubuntu 14.04 LTS x64, com squid3 e kernel padrão.
Não tenho mais ideia do que fazer, provavelmente é algo simples mas não encontro.

Segue o script de balanceamento:

#!/bin/bash
OI_IPA="192.168.254.18"
OI_NET="192.168.254.0/24"
OI_GAT="192.168.254.254"
OI_NIC="eth1"
COPEL_IPA="177.x.x.179"
COPEL_NET="177.x.x.176/29"
COPEL_GAT="177.x.x.177"
COPEL_NIC="eth2"
ip route flush table OI
ip route flush table COPEL
ip route flush table BALANCEAMENTO
ip rule del from 192.168.254.18 table COPEL
ip rule del from 192.168.254.18 table OI
ip rule del fwmark 0x2 table BALANCEAMENTO
ip rule del fwmark 0x1 table COPEL
ip route del default
ip route add $OI_NET dev $OI_NIC src $OI_IPA table OI
ip route add default via $OI_GAT table OI
ip rule  add from $OI_IPA table OI
#ip route add 127.0.0.0/8 dev lo table OI
ip route add $COPEL_NET dev $COPEL_NIC src $COPEL_IPA table COPEL
ip route add default via $COPEL_GAT table COPEL
ip rule  add from $COPEL_IPA table COPEL
#ip route add 127.0.0.0/8 dev lo table COPEL
ip rule add fwmark 2 table BALANCEAMENTO
ip rule add fwmark 1 table COPEL
ip route add default scope global table BALANCEAMENTO nexthop via $OI_GAT dev $OI_NIC weight 1 nexthop via $COPEL_GAT dev $COPEL_NIC weight 1
ip route add default via $OI_GAT
ip route flush cache

Meu script de firewall

#!/bin/bash
### limpando tabela filter nat mangle (omitido)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth1 -d 192.168.254.18 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.8:80
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 0/0 -j MARK --set-mark 2
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# tentei estas linhas mas não resolveu
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A PREROUTING  -i eth0 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3129
Tentei fazer um link especifico para um site mas não surtiu efeito
iptables -I PREROUTING -t mangle -s 192.168.0.0/24 -d proxydetect.com -j MARK --set-mark 1

minha configuração de rede

auto eth0
iface eth0 inet static
address 192.168.0.8
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
# oi
auto eth1
iface eth1 inet static
address 192.168.254.18
netmask 255.255.255.0
network 192.168.254.0
broadcast 192.168.254.255
gateway 192.168.254.254
dns-nameservers 201.10.120.2 201.10.128.3 8.8.8.8 8.8.4.4
dns-search transardo
# copel
auto eth2
iface eth2 inet static
address 177.x.x.179
netmask 255.255.255.248
network 177.x.x.176
broadcast 177.x.x.183
gateway 177.x.x.177
dns-nameservers 200.195.159.100 200.195.159.101
# testei comentar o gateway e o dns-nameservers mas não surtiu efeito

zekkerj

Eu acho que o problema está no fato de vc estar tentando fazer ao mesmo tempo o balanceamento de carga pelo firewall, e o proxy transparente. O que acaba ocorrendo é que o tráfego desviado para o squid acaba saindo com o IP do próprio roteador, o que de certa forma "quebra" o balanceamento --- e com certeza remove a marcação dos pacotes.

Experimente desativar o proxy transparente, e veja se o comportamento melhora.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

RafaM

#2
Citação de: zekkerj online 17 de Novembro de 2014, 17:55
Eu acho que o problema está no fato de vc estar tentando fazer ao mesmo tempo o balanceamento de carga pelo firewall, e o proxy transparente. O que acaba ocorrendo é que o tráfego desviado para o squid acaba saindo com o IP do próprio roteador, o que de certa forma "quebra" o balanceamento --- e com certeza remove a marcação dos pacotes.

Experimente desativar o proxy transparente, e veja se o comportamento melhora.

O problema é que necessito do squid, para controle de acesso, neste caso como deveria proceder?
Tem alguma outra forma usando o mesmo servidor, ou seriam necessários 2 equipamentos distintos?

Testei sem o squid, comentei a linha do firewall (iptables -t nat -A PREROUTING  -i eth0 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3129)
e  testei com os comandos MASQUERADE, funcionou mas absurdamente lento. iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE



zekkerj

CitarO problema é que necessito do squid, para controle de acesso, neste caso como deveria proceder?
Olha, eu não sei se haveria uma forma de fazer as duas coisas ao mesmo tempo, na mesma máquina. Teria que ver qual é o critério de balanceamento, se for pelo IP de destino ainda vai funcionar, mas pelo IP de origem não rola, pq depois de passar pelo squid vai tudo ficar com o IP de sua máquina.

O que talvez te ajude é fazer a marcação na cadeia OUTPUT da tabela nat, em vez de (ou junto com) marcar na cadeia PREROUTING. Assim, teoricamente, vc tentaria balancear também o tráfego que vc mesmo gera. Mas se isso não resolver, a solução seria separar o SQUID em outra máquina.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

RafaM

já tentei testar o PREROUTING com
iptables -I PREROUTING -t mangle -s 192.168.0.0/24 -d proxydetect.com -j MARK --set-mark 1

que no caso deveria sair pelo link da COPEL , mas ele sai pelo da OI.
Eu acho que estou errando em algum detalhe, vi que nos Kernels 2.x tinha que recompilar, mas li em algum lugar que o Kernel no Ubuntu tá com as opções habilitadas por padrão.

zekkerj

Não é na PREROUTING que vc tem que colocar a regra, é na OUTPUT.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

RafaM

Citação de: zekkerj online 19 de Novembro de 2014, 14:26
Não é na PREROUTING que vc tem que colocar a regra, é na OUTPUT.
Desculpe a demora para responder.
Testei mudando para OUTPUT, mas  não resolveu, e o carregamento da s páginas esta absurdamente lento.
Não sei masi o que fazer, alguem teria um toto ou documento como fazer isso, pos tudo que testei da web até agora não funcionou do Ubuntu 14.04.

zekkerj

Tutorial como, se a gente não sabe nem se é possível fazer como você quer?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

RafaM

Acabei comprando um Load Balance da TP-LINK, o TL-R480T+ para fazer o serviço.
Agora está funcionando.