Arquivos da categoria: Estudos e testes

LoadBalance para servidor com dois links de Internet e um para rede local (3 interfaces).

O Script faz o balanciamento através de marcação de pacotes (ip rule) para serem distribuídos pelo “ip route” de acordo com a tabela indicada.
# Em outros casos, poderá servir apenas de exemplo para ser estudado.

#!/bin/bash
#
### INTERFACES:
rede1=”eth0″
iface1=”eth1″
iface2=”eth2″
#
### Obs.: As interfaces tem que está de acordo com os gateways.
### Exemplo: eth1 10.15.20.21 gateway 10.15.20.10
### Exemplo: eth2 10.26.20.21 gateway 10.26.20.1
#
### GATEWAYS
gw1=”10.15.20.1″
gw2=”10.26.20.1″
#
### Outras variáveis
nomeScript=”loadbalance-s.sh”
op=0
a=true
#
### HABILITA ROTEAMENTO:
echo “1” > /proc/sys/net/ipv4/ip_forward
#
function start(){
### Chama funções.
limpeza ; nat ; rotas ; looping
}
#
function limpeza(){
### Limpa tabelas.
iptables -t mangle -F
iptables -t mangle -X
iptables –flush
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
ip route flush cache
}
#
function nat(){
### MASCARAMENTO(NAT) E MARCAÇÃO DE PACOTES PARA ROTEAMENTO.
iptables -t nat -A POSTROUTING -o $iface1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $iface2 -j MASQUERADE
iptables -t mangle -A PREROUTING -p tcp -m multiport –dports 80,443 -j MARK –set-mark 1
}
#
function marcacao1(){
### Altera a marcação de pacotes da tabela “mangle”
iptables -t mangle -R PREROUTING 1 -p tcp -m multiport –dports 80,443 -j MARK –set-mark 1
}
#
function marcacao2(){
### Altera a marcação de pacotes da tabela “mangle”
iptables -t mangle -R PREROUTING 1 -p tcp -m multiport –dports 80,443 -j MARK –set-mark 2
}
#
function rotas(){
### MARCA E PRIORIZA DE ACORDO COM A TABELA
ip rule add fwmark 1 table 10 prio 0
ip rule add fwmark 2 table 20 prio 0
### DESTINA OS PACOTES
ip route add default via $gw1 dev $iface1 table 10
ip route add default via $gw2 dev $iface2 table 20
}
#
function looping(){
### LOOP PARA MUDAR A MARCAÇÃO
while [ $a ]; do
sleep 1
if [ $op == 0 ]; then
op=1
marcacao1
else
op=0
marcacao2
fi
done
}
#
function para(){
### PARA O LOADBALANCE.
a=false
limpeza
kill -9 `ps aux |grep $nomeScript|awk ‘{print $2}’`
}
#
function helpp(){
### HELP
echo “Uso: loadbalance + opção”
echo “Modos:”
echo “./$nomeScript start &”
echo “./$nomeScript stop &”
echo “sh $nomeScript start &”
echo “sh $nomeScript stop &”
echo “Modo depuração: sh -x $nomeScript start”
}
#
case $1 in
### RECEBE VALOR EXTERNO
‘start’) start ; exit ;;
‘stop’) para ; exit ;;
‘–help’) helpp ; exit ;;
*) echo “Utilize start ou stop. Ex.: ./$nomeScript start.”; exit ;;
esac
#
#
# É o Senhor que mostra os caminhos. Obrigado Senhor por me ajudar atravez de tantos exemplos.
# infSite.org