Ver Feed RSS

info24hs

Balanceamento e Redundancia (2 Links)

Avaliação: 4 votos, 5,00 média.
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)

Atualizado 03-10-2009 em 11:35 por info24hs

Categorias
Linux , Balanceamento e Redundância

Comentários

Página 2 de 2 PrimeiroPrimeiro 12
  1. Avatar de hugo.andrade
    Cara,
    Otimo esse seu artigo... Justamente o que eu estava precisando no momento. so que me pintou uma duvida aqui.
    no meu caso eu ja tenho o iptables configurado com um link. como ficaria e meu script do iptables?
    olha ai como ele esta hj.

    #!/bin/sh

    internet="eth1 "
    redelocal="eth0"

    echo "####################ATIVANDO IPTABLES#######################"
    iptables -F INPUT
    iptables -F OUTPUT
    iptables -F FORWARD
    iptables -F POSTROUTING -t nat
    iptables -F PREROUTING -t nat
    iptables -F -t nat
    echo "Limpando as regras ..................................[ OK ]"

    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    echo "Politica Default das Cadeias ........................[ OK ]"

    echo "0" > /proc/sys/net/ipv4/ip_forward
    echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
    echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies

    /sbin/modprobe iptable_nat
    /sbin/modprobe ip_conntrack
    /sbin/modprobe ip_conntrack_ftp
    /sbin/modprobe ip_nat_ftp
    /sbin/modprobe ipt_LOG
    /sbin/modprobe ipt_REJECT
    /sbin/modprobe ipt_MASQUERADE
    /sbin/modprobe ip_nat_pptp
    echo "Carregando os modulos ...............................[ OK ]"

    # Conectividade Social
    iptables -t nat -A PREROUTING -s 131.195.2.21 -d 0.0.0.0/0 -j ACCEPT #CONTABIL4
    iptables -t nat -A PREROUTING -s 131.195.2.24 -d 0.0.0.0/0 -j ACCEPT #PESSOAL1
    iptables -t nat -A PREROUTING -s 131.195.2.11 -d 0.0.0.0/0 -j ACCEPT #CPD-NOTEBOOK
    iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 200.201.174.0/24 --dport 80 -j REDIRECT --to-port 3128
    echo "Regras DP e Contabilidade ...........................[ OK ]"

    # PORTA 3128 - ACEITA PARA A REDE LOCAL
    iptables -A FORWARD -i $redelocal -p tcp --dport 3128 -j ACCEPT
    iptables -A FORWARD -i $redelocal -p tcp --dport 80 -j ACCEPT

    # Redireciona porta 80 para 3128 (squid)
    iptables -t nat -A PREROUTING -i $redelocal -p tcp --dport 80 -j REDIRECT --to-port 3128

    iptables -A FORWARD -i $redelocal -p tcp --dport 53 -j ACCEPT
    iptables -A FORWARD -i $redelocal -p udp --dport 53 -j ACCEPT
    iptables -A FORWARD -i $redelocal -p tcp --dport 110 -j ACCEPT
    iptables -A FORWARD -i $redelocal -p udp --dport 110 -j ACCEPT
    iptables -A FORWARD -i $redelocal -p tcp --dport 25 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    iptables -A INPUT -p udp --dport 443 -j ACCEPT
    iptables -A FORWARD -i $redelocal -p tcp --dport 443 -j ACCEPT
    iptables -A FORWARD -p tcp --dport 20 -j ACCEPT
    iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --set
    iptables -A INPUT -p tcp --dport 22 --syn -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j LOG --log-prefix 'SSH REJECT: '
    iptables -A INPUT -p tcp --dport 22 --syn -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j REJECT --reject-with tcp-reset
    iptables -A FORWARD -p tcp --syn --dport 22 -m recent --name sshattack --set
    iptables -A FORWARD -p tcp --dport 22 --syn -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j LOG --log-prefix 'SSH REJECT: '
    iptables -A FORWARD -p tcp --dport 22 --syn -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j REJECT --reject-with tcp-reset
    iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
    iptables -A FORWARD -p tcp --dport 3456 -j ACCEPT #RECEITANET
    iptables -A FORWARD -p tcp --dport 5006 -j ACCEPT #SICOOB
    iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT #SICOOB
    iptables -A FORWARD -p tcp --dport 6330 -j ACCEPT #CHECKLINE

    iptables -A INPUT -i $internet -m state --state ! ESTABLISHED,RELATED -j DROP
    iptables -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
    echo "Cadeia de Entrada ...................................[ OK ]"

    iptables -t nat -F POSTROUTING
    iptables -t nat -A POSTROUTING -o $internet -j MASQUERADE
    echo "Ativando o mascaramento .............................[ OK ]"

    iptables -A FORWARD -i $internet -j ACCEPT
    iptables -A FORWARD -o $internet -m state --state ESTABLISHED,RELATED -j ACCEPT
    echo "Ativando o acesso ftp.. .............................[ OK ]"

    #iptables -A INPUT -p all -j DROP
    #iptables -A FORWARD -p all -j DROP
    echo "Rejeitando saida e entrada ..........................[ OK ]"

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
    echo "Quais sockets sao validos ...........................[ OK ]"

    # Proteç contra tronjans
    iptables -A INPUT -p TCP -i $internet --dport 666 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 4000 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 6000 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 6006 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 16660 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 27444 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 27665 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 31335 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 34555 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 35555 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 3128 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport 8080 -j DROP
    iptables -A INPUT -p TCP -i $internet --dport telnet -j DROP

    iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
    #iptables -A INPUT -i $internet -m unclean -j DROP
    iptables -A FORWARD -p tcp --dport 135 -i $internet -j REJECT
    iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT
    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -o $internet -i $redelocal -j ACCEPT
    echo "Caregado tabela filter ............................. [ OK ]"

    echo "1" > /proc/sys/net/ipv4/ip_forward

    echo "##################FIM DE REGRAS IPTABLES####################"
    exit 0
Página 2 de 2 PrimeiroPrimeiro 12

+ Enviar Comentário