Balanceamento e Redundancia (2 Links)
por
em 13-11-2008 às 11:25 (38262 Visualizações)
Introdução
Após instalar o Balanceamento e Redundancia adquirido na internet e modificado conforme minha necessidade, acabei deparando com alguns problemas, como acessar Bancos Online que utilizam portas seguras, e fazer Acesso Remoto na rede interna.
Partindo do principio que, a instalação e configuração das Ferramentas foram bem sucedidas, apenas vou comentar as modificações que foram necessárias para funcionar de acordo..
Rede:
Link 1 = ETH1 = IP 192.168.1.10 GVT
Link 2 = ETH2 = IP 192.168.2.10 BRT
Link 3 = ETH0 = IP 192.168.0.1 Rede Interna
As estação possui ip fixo e dispõe uma porta para conexão remota, ex.:
192.168.0.3 porta de acesso do radmin 4893
O programa radmin cliente 3 possibilita scanear todas as estações cadastradas, apenas é necessário configurar o ip e porta da estação.
Ferramentas
Utilizei o método de Balanceamento retirado do site abaixo, onde explica como instalar.
Balanceamento e Redundancia retirado do Site
How To: Load Balancing & Failover With Dual/ Multi WAN / ADSL / Cable Connections on Linux
Script Gwping para Redundancia
http://blog.taragana.com/wp-content/upload/gwping
Programa Radmin 3 - Servidor e Cliente para Acesso Remoto estações Windows
http://www.radmin.com
Iptables v. 1.4.2
Kernel v. 2.6.24-etchnhalf.1-486
Distro. Debian 4.0
Balanceamento de Link
Criei as tabelas no arquivo rt_tables:
########################### rt_tables ##########################
1 gvt
2 brt
Adicionei as rotas padrão para balancear a carga de saída do tráfego, no meu caso utilizei os links da GVT e BRT, abaixo incluío as regras no arquivo rc.local:
########################### rc.local ###########################
#Limpa as rotas no cache das tabelas
ip route flush table gvt
ip route flush table brt
#Adiciona as rotas dos links para as tabelas
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table gvt
ip route add default via 192.168.1.1 table gvt
ip route add 192.168.2.0/24 dev eth2 src 192.168.2.10 table brt
ip route add default via 192.168.2.1 table brt
#Adiciona a regra de marcação dos links nas tabelas
ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.2.10 table brt
# Adcionando a Marcação e Prioridade para as Tabelas
ip rule add fwmark 0x10 lookup gvt prio 3
ip rule add fwmark 0x20 lookup brt prio 3
#Esta regra abaixo é responsável pelo balancemento com peso 2:1, porque no meu caso a gvt é 2x mais rápida que o link da brt
ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 2 nexthop via 192.168.2.1 dev eth2 weight 1
#Limpa as rotas no cache
ip route flush cache
Firewall
###################### firewall ######################
# Variáveis para compartilhamento
### Multi WAN ###
ETH="eth+"
### Rede Lan ###
LAN="192.168.0.0/24"
# Ativa o compartilhamento
iptables -t nat -A POSTROUTING -o $ETH -s $LAN -j MASQUERADE
# Ativa acessos que podem ir de uma interface mas que voltam por outra
# Fundamental estar desabilitado para funcionar o roteamento com 2 links.
echo "0" > /proc/sys/net/ipv4/conf/default/rp_filter
# Tempo máximo que o kernel espera até tentar uma nova rota quando perceber que a atual está morta.
echo "10" > /proc/sys/net/ipv4/route/gc_timeout
Redundancia
Agora vamos criar a chamada do script "gwping" que é responsável pela Redundancia, optei em coloca-lo na pasta /etc/link, e alterar as permissões do aquivo usando o comando: chmod 755 /etc/link/gwping
#Adcione o comando no arquivo rc.local:
nohup /etc/link/gwping &
No script "gwping" fiz algumas alterações conforme minha necessidade
###################### gwping ######################
#IP Address or domain name to ping. The script relies on the domain being pingable and always available
##Modifique para um endereço mais perto, ou seja mais rápido, neste caso usei o IP da GVT
TESTIP=200.139.127.26
# Relative weights of routes. Keep this to a low integer value.
## Peso das rotas, como o link da Gvt é 2x mais rápido que a BRT, deixei a proporção 2:1
W1=2
W2=1
# Broadband providers name; use your own names here.
## Mudei para o nome das minhas tabelas
NAME1=GVT
NAME2=BRT
# No of repeats of success or failure before changing status of connection.
## No meu caso se houver 4 tentativas sem resposta o link é desabilitado, uma tentativa com sucesso ele reabilida o link. Assim o script não vai trocar a rota padrão e achar que o link caiu quando houver sobrecarga.
SUCCESSREPEATCOUNT=1
FAILUREREPEATCOUNT=4
## Abaixo acrescentei as regras para desmarcar os pacotes caso um link caia, assim os pacotes marcados não retornaram sem resposta.
echo Switching to $NAME2
ip route replace default scope global via $GW2 dev $EXTIF2
#Deleta a Marcação e Prioridade para as Tabelas
ip rule del fwmark 0x10 lookup gvt prio 3
ip rule del fwmark 0x20 lookup brt prio 3
#Limpa as rotas no cache
ip route flush cache
elif [[ $LLS1 -eq 0 && $LLS2 -eq 1 ]]; then
echo Switching to $NAME1
ip route replace default scope global via $GW1 dev $EXTIF1
#Deleta a Marcação e Prioridade para as Tabelas
ip rule del fwmark 0x10 lookup gvt prio 3
ip rule del fwmark 0x20 lookup brt prio 3
#Limpa as rotas no cache
ip route flush cache
elif [[ $LLS1 -eq 0 && $LLS2 -eq 0 ]]; then
echo Restoring default load balancing
#Adiciona a Marcação e Prioridade para as Tabelas
ip rule add fwmark 0x10 lookup gvt prio 3
ip rule add fwmark 0x20 lookup brt prio 3
ip route replace default scope global nexthop via $GW1 dev $EXTIF1 weight $W1 nexthop via $GW2 dev $EXTIF2 weight $W2
#Limpa as rotas no cache
ip route flush cache
Configurando Portas para Acesso Remoto e Sites de Bancos
Configurando Portas da conexão interna para Acesso Remoto e Conexão Segura aos Bancos
Ex. o acesso ao servidor remoto do IP 192.168.0.3 porta 4893
####################### Firewall ######################
#Carregar modulos
modprobe ipt_mark
modprobe ipt_MARK
#Marcando a saída das portas 110(POP3),25(SMTP) pelo link da BRT, as portas 80 e 443 (os bancos bradesco e banrisul), sairão pelo link da GVT, os demais destinos pela porta 80 serão balanceados.
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport --dports 110,23,25 -j MARK --set-mark 0x20
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d bradesco.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x10
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d banrisul.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x10
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp --dport 443 -j MARK --set-mark 0x10
#Permite o acesso a porta 4893 na estação windows da rede interna, marca a entrada e saída do link, nesse caso usei o link da Gvt
iptables -I FORWARD -p tcp --dport 4893 -j ACCEPT
iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 4893 -j DNAT --to-dest 192.168.0.3
iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.3 --sport 4893 -j MARK --set-mark gvt
OBS: A marcação dos pacotes também devem estar no arquivo de redundância, pois é necessário o script deletar e acrescentar as marcações quando mudar o status dos links. Veja mais detalhes no Artigo: Balanceamento e Redundancia (3 Links)
Comentários
+ Enviar Comentário