Enviada: Dom Mar 09, 2008 7:22 pm Assunto: Balanceamento 2links c/ ou s/ rotas + squid fast balanciando
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
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]"
# 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
# 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.