Home | Downloads | Fórums | Notícias | Preferências | Galeria | Cadastro | Wiki-BR
 

[ Comunidade Fedora Brasil ]: Forums



Comunidade Fedora Brasil :: Exibir tópico - Balanceamento 2links c/ ou s/ rotas + squid fast balanciando
 FAQFAQ   PesquisarPesquisar   GruposGrupos   PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   LoginLogin 

Balanceamento 2links c/ ou s/ rotas + squid fast balanciando

 
Novo Tópico   Responder Mensagem    Comunidade Fedora Brasil - Índice do Fórum -> Fedora Linux rodando como Servidor
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
MMX
Novato
Novato


Registrado em: Jun 30, 2007
Mensagens: 22

MensagemEnviada: Dom Mar 09, 2008 7:22 pm    Assunto: Balanceamento 2links c/ ou s/ rotas + squid fast balanciando Responder com Citação

Script funcionando com IPTABLES+IPROUTER2 (roteamento avançado)

O script anexado abaixo está funcionando exatamente como foi postado aqui, com o balanceamento de dois links roteados e sem direcionamento de portas, dividindo o download em duas partes, podendo tb assumir toda a rede caso a outra se desconecta. Caso queira direcionar as portas, comente as linhas de algumas tabelas e balanceamento depois retire os comentários de todo o direcionamento de portas e algumas tabelas de rotas. Para melhorar aínda mais coloquei o squid com acl nos dois links e setei o dns da rede de saida dos clientes, fazendo o balanceamento completo nas duas rotas. Lembrando tb que o proxy não funciona com alguns clientes usando access point em cliente isp, por isso direcionei os ips cadastrados dos mesmos para detectar toda a rede sem passar pelo proxy (não gostei da idéia, mas só assim que funcionou comigo). Caso queira acrescentar outras modificações ou correções fiquem a vontade! Agradeceria novas informações postadas aqui nesse assunto que possam otimizar o script e proteger mais o servidor.

Primeiro vamos argumentar as tabelas do iproute2:

#---------------------------- /etc/iproute2/rt_tables ------------------------
#
# reserved values
#
#255 local
#254 main
#253 default
#0 unspec

#
# local
#
#1 inr.ruhep
10 Operadora1
11 Operadora2
30 Operadora
#---------------------------- /etc/iproute2/rt_tables ----------------

Agora vamos criar o firewall no iptables:

#---------------------------- /sbin/firewall.sh -----------------------
#!/bin/sh
######################################
# Firewall for ADSL Sua Operadora #
# By MMX #
# OBS: Balanceamento de trafego para #
# 2 links ADSL #
######################################

# Legenda
#
#eth1 -> Rede interna (192.168.0.1/24)
#eth0 -> Operadora #1 (192.168.1.2/24)
#eth2 -> Operadora #2 (192.168.2.2/24)

#No lugar do xxx coloque os DNS do seu provedor.
# Variaveis #
DNS1="xxx.xxx.xxx.xxx"
DNS2="xxx.xxx.xxx.xxx"

# 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 192.168.0.1 -i lo -j ACCEPT
iptables -A INPUT -p ALL -s 192.168.1.2 -i lo -j ACCEPT
iptables -A INPUT -p ALL -s 192.168.2.2 -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 192.168.0.0/24 --sport 53 -d $DNS1 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/24 --sport 53 -d $DNS2 -j ACCEPT
echo " [OK]"

#--liberando determindos clientes para todo acesso da rede

echo -n "Retirando access point cliente do proxy"
iptables -t nat -A PREROUTING -s 192.168.0.10 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.201 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.202 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.203 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.204 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.205 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.206 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.208 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.209 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.210 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.211 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.212 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.213 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.214 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.215 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.216 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.217 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.218 -d 0.0.0.0/0 -j ACCEPT
echo " [ok]"

# SQUID TRANSPARENTE

echo -n "Redirecionando portas principais..."
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 70 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3128
echo " [OK]"

# DHCP Server

echo -n "Liberando servidor DHCP..."
iptables -A INPUT -p udp -s 192.168.0.0/24 --sport 79 -d 192.168.0.1 -j ACCEPT
echo " [OK]"

# Descartar pacotes fragmentados:

echo -n "Bloqueando pacotes fragmentados..."
iptables -A INPUT -i eth1 -f -j LOG --log-prefix "Pacote fragmentado: "
iptables -A INPUT -i eth1 -f -j DROP
iptables -A INPUT -i eth2 -f -j LOG --log-prefix "Pacote Fragmentado: "
iptables -A INPUT -i eth2 -f -j DROP
echo " [OK]"

# Bloqueando ataques do tipo SPOOF de IP:

echo -n "Bloqueando spoofing..."
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j DROP
iptables -A INPUT -i eth0 -s 240.0.0.0/5 -j DROP
echo " [OK]"

# Liberando alguns acessos por ping:

echo -n "Liberando acesso por ping..."
iptables -A INPUT -p icmp --icmp-type 8 -i eth1 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp -s 192.168.0.0/24 -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 ao DNS para a rede interna (Email):

echo -n "Liberando DNS para rede interna..."

iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

iptables -A FORWARD -p udp -s 192.1680.0/24 -d $DNS1 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.0.0/24 -d $DNS2 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s $DNS1 --sport 53 -d 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -p udp -s $DNS2 --sport 53 -d 192.168.0.0/24 -j ACCEPT
echo " [OK]"

# Fazendo mascaramento de enderecos IP (NAO NAT):
# OBS: essa regra eh mutuamente excludente com a proxima, a do NAT
# ou seja, escolha uma das duas

echo -n "Habilitando o mascaramento..."
#iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
echo " [OK]"

#-- Rotas das portas
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 21 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 53 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 443 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 1863 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 5190 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 25 -j MARK --set-mark 3
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 110 -j MARK --set-mark 3
#iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 5948 -j MARK --set-mark 3

#-- Rota das poras de saida
#iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
#iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 2
#iptables -t mangle -A OUTPUT -p tcp --dport 53 -j MARK --set-mark 2
#iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
#iptables -t mangle -A OUTPUT -p tcp --dport 1863 -j MARK --set-mark 2
#iptables -t mangle -A OUTPUT -p tcp --dport 5190 -j MARK --set-mark 2
#iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
#iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3
#iptables -t mangle -A OUTPUT -p tcp --dport 5948 -j MARK --set-mark 3

# Marcando pacotes

echo -n "Marcando pacotes..."
iptables -A PREROUTING -t mangle -s 192.168.0.0/24 -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 Operadora..."

# Operadora #1 Operadora1
ip route add 192.168.0.0/24 dev eth0 src 192.168.1.2 table Operadora1
#ip route add 192.168.0.0/24 via 192.168.0.1 table Operadora1
ip route add default via 192.168.1.1 table Operadora1

# Operadora #2 Operadora2
ip route add 192.168.2.0/24 dev eth2 src 192.168.2.2 table Operadora2
#ip route add 192.1680.0/24 via 192.168.0.1 table Operadora2
ip route add default via 192.168.2.1 table Operadora2

# setando Operadora na tabela principal de roteamento
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.2
ip route add 192.168.2.0/24 dev eth2 src 192.168.2.2

# setando a rota preferencial
ip route add default via 192.168.1.1

# regras das tabelas
ip rule add from 192.168.1.2 table Operadora1
ip rule add from 192.168.2.2 table Operadora2

#--regras das rotas

# regras das tableas de roteamento
#ip rule add fwmark 2 table Operadora1 prio 20
#ip rule add fwmark 3 table Operadora2 prio 20

# balanceamento de link
ip rule add fwmark 3 lookup Operadora prio 3
ip route add default table Operadora nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 192.168.2.1 dev eth2 weight 1
#OBS: o comando assima deve ser digitado em uma só linha, ou
# usando o caractere para dividí­-la.

# flush no roteamento
ip route flush cache
echo " [OK]"
sleep 3

#--------------final do balanceamento firewall.sh-------------------------------

#-- Arquivo com scripts pessoais
#cd /sbin/rserver.inc
#./rserver.inc

printf "... Ok\n"

service sshd stop
service sshd start
service squid stop
service squid start
service named stop
service named start
service httpd stop
service httpd start
service dhcpd stop
service dhcpd start
arp -f /etc/ethers

htboff
htbon

#----------------------final de todo script-----------------------------------------

Agora entre no squid.conf e acrescente essas informações.

# acl_uses_indirect_client on
acl 192.168.1.1 src "/etc/sysconfig/network-scripts/ifcfg-eth0"
tcp_outgoing_address 192.168.0.1 192.168.1.1
acl 192.168.2.1 src "/etc/sysconfig/network-scripts/ifcfg-eth2"
tcp_outgoing_address 192.168.0.1 192.168.2.1

# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access allow 192.168.1.1
http_access allow 192.168.2.1
http_access deny manager

Coloque tb o DNS da rede de saída no squid.conf
dns_nameservers 192.168.0.1

Wink Pronto...

Caso alguém saiba como fazer duas adsl em modo bridge (ppp)...
Por favor coloque o script aqui no assunto ajudando a todos da comunidade fedora.

Troca de informações são mais valiosas do que a própria venda.

Fedora Core 6 + Kernel 2.6...
PC P4 HT3.0 - 1GB de RAM - HD 80GB - 3Ethernet + 150 clientes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    Comunidade Fedora Brasil - Índice do Fórum -> Fedora Linux rodando como Servidor Todos os horários são GMT - 3 Hours
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.

Powered by phpBB © 2001, 2005 phpBB Group

Forums ©
_