Arquivos mensais: fevereiro 2016

Loadbalance FAILOVER V.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
 
  ### CONFIGURE AS VARIÁVEIS AQUI:
  testeip="8.8.8.8"
  #
  iface1=eth2 #padrão
  iface2=eth0
  gw1="192.168.0.1"
  gw2="192.168.31.1"
  rede=12.79.42.0/23
  nomeGw1="NET"
  nomeGw2="OI"
  #
  ### FIM DA CONFIG.
  #
  rota=0
  datai=`date +"%d/%m/%Y %H:%M:%S"`
  nomeScript="loadbalanceFAILOVER.sh"
  #
  ### LIMPEZA:
  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
  ### HABILITA ROTEAMENTO:
  echo "1" > /proc/sys/net/ipv4/ip_forward
  ### MASCARA OS PACOTES COM DESTINO A INTERNET (NAT):
  iptables -t nat -A POSTROUTING -o $iface1 -j MASQUERADE
  iptables -t nat -A POSTROUTING -o $iface2 -j MASQUERADE
 
  ### ADICIONA OS GATEWAYS NAS DEVIDAS INTERFACES:
  route add -net default gw $gw1 dev $iface1
  route add -net default gw $gw2 dev $iface2
 
reparar() { 
	# verifica se o link padrao está de volta novamente, caso contrário continua no link alternativo.
	if [ $(ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $?) -eq 0 ]; then
		rota=0
		link1
	else
	#	reparar
		echo "Problema com Links ou interfaces, verique a conexao com a Internet."
		echo "Testando conexao em 10seg..."
		sleep 10
		link1
	fi
}
 
link2() {
	if [ $rota -eq 0 ]; then
		  	rota=1
			internet=$iface2
			while ip route del default; do :; done 
			route add -net default gw $gw1 dev $iface1
			route add -net default gw $gw2 dev $iface2
			. /etc/network/script.rules.sh
	fi
 
	while [ $(ping -qc 3 $testeip -I $iface2 > /dev/null 2>&1 ; echo $? ) = 0 ]
		do
			clear
			echo "Link2 em atividade: $nomeGw2"
			echo "Interface: $iface2"
			echo "Gateway: $gw2"
			echo "Status: Ok"
			echo "Data início: $datai"
			echo "Data fim: `date +"%d/%m/%Y %H:%M:%S"`"
				# verifica se o link padrao está de volta, caso contrário continua no link alternativo.
				if [ $(ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $?) -eq 0 ]; then
					rota=0
					link1
					break
				fi
	done
	reparar
}
 
link1() {
	if [ $rota = 0 ]; then
		  	rota=1
			internet=$iface1
			while ip route del default; do :; done
			route add -net default gw $gw2 dev $iface2
			route add -net default gw $gw1 dev $iface1
			. /etc/network/script.rules.sh
	fi
 
	while [ $(ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $? ) = 0 ]
		do
			clear
			echo "Link1 em atividade: $nomeGw1"
			echo "Interface: $iface1"
			echo "Gateway: $gw1"
			echo "Status: Ok"
			echo "Data início: $datai"
			echo "Data fim: `date +"%d/%m/%Y %H:%M:%S"`"
 
	done
 
	rota=0
	link2
}
 
 
parar(){
	kill -9 `ps aux | grep $nomeScript | awk '{print $2}'`
	echo "Morto"
	exit
}
helpp(){
	echo "Para executar o script, usa-se a seguinte sintaxe:"
	echo " "
	echo "Iniciar:"
	echo "sh $nomeScript start"
	echo "Parar:"
	echo "sh $nomeScript stop"
	echo "Rodar em modo background:"
	echo "sh $nomeScript start  > /var/log/loadbalance.log &"
	echo "Após rodar em background, verifique se está rodando:"
	echo "ps aux | grep $nomeScript"
	echo "Obs.: Não esquecer de configurar as VARIÁVEIS  do script de acordo com sua rede."
	echo " "
	echo "Desenvolvido por: Marcelo Viana"
	echo " "
	exit
}
 
 
 
case $1 in
'start') link1 ; exit ;;
'stop') parar ; exit ;;
'--help') helpp ; exit ;;
*) echo "Parâmetro desconhecido: '$1'" ; echo "Utilize --help para informações. Exemplo: sh $nomeScript --help"; exit ;;
esac
 
# Dev. Marcelo Viana
# infSite.org
# AMDG