Redundância de links - Mon + Shell Script
Este script foi desenvolvido, de maneira simples, para sanar a necessidade de realizar redundância com dois links de Internet.
Parte 2: O script
Para uma melhor interpretação do script, deve-se considerar que:
1. Escolhi dois hosts de destino para teste, sendo o primeiro 8.8.8.8 e o segundo 8.8.4.4;
2. Adicionei uma rota para cada um dos hosts, onde o destino 8.8.8.8 é testado via fping pelo meu link primário, e o 8.8.4.4 é testado pelo meu link secundário;
3. Adicionei as linhas abaixo no arquivo /etc/network/interfaces para que as rotas sejam adicionadas na inicialização do serviço networking:
Por fim, edite o arquivo /usr/lib/mon/mon.d/availability.monitor e deixe-o da seguinte maneira:
Finalizo por aqui meu primeiro artigo, salientando a simplicidade e eficiência deste método nos ambientes onde implantei.
Espero ter ajudado de alguma forma.
Abraço.
1. Escolhi dois hosts de destino para teste, sendo o primeiro 8.8.8.8 e o segundo 8.8.4.4;
2. Adicionei uma rota para cada um dos hosts, onde o destino 8.8.8.8 é testado via fping pelo meu link primário, e o 8.8.4.4 é testado pelo meu link secundário;
3. Adicionei as linhas abaixo no arquivo /etc/network/interfaces para que as rotas sejam adicionadas na inicialização do serviço networking:
post-up route add -host 8.8.8.8 gw 189.10.11.12 dev eth1
post-up route add -host 8.8.4.4 gw 201.10.11.12 dev eth2
post-up route add -host 8.8.4.4 gw 201.10.11.12 dev eth2
Por fim, edite o arquivo /usr/lib/mon/mon.d/availability.monitor e deixe-o da seguinte maneira:
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
export PATH
# Host a ser pingado pela eth1
host_eth1="8.8.8.8"
# Host a ser pingado pela eth2
host_eth2="8.8.4.4"
# Gateway preferido
pref_gw="189.10.11.12"
# Gateway padrao atual
deflt_gw=$(/usr/bin/sudo /sbin/route -n | grep ^0.0.0.0 | awk '{print $2}' | /usr/bin/head -n1)
# Gateway do link da inetrface eth1
iface_eth1_gw="189.10.11.12"
# Gateway do link da interface eth2
iface_eth2_gw="201.10.11.12"
# Interface do link/gateway preferido
iface_pref_gw="eth1"
# Endereco de e-mail de administrador
admin="correiabrux@gmail.com"
# Data atual
date=$(date +%d-%m-%Y)
# Hora atual
time=$(date +%H:%M:%S)
# Endereco IP da interface eth1
iface_eth1_ip="189.10.11.13"
# Endereco IP da interface eth2
iface_eth2_ip=201.10.11.13
# Funcao para trocar para o link da interface eth1
link_iface_eth1() {
/usr/bin/sudo /sbin/route del default gw $iface_eth2_gw
/usr/bin/sudo /sbin/route add default gw $iface_eth1_gw dev eth1
/usr/bin/sudo /sbin/route del -host $host_eth1 gw $iface_eth1_gw dev eth1 || true
/usr/bin/sudo /sbin/route del - host $host_eth2 gw $iface_eth2_gw dev eth2 || true
/usr/bin/sudo /sbin/route add -host $host_eth1 gw $iface_eth1_gw dev eth1
/usr/bin/sudo /sbin/route add -host $host_eth2 gw $iface_eth2_gw dev eth2
/usr/sbin/squid -k reconfigure
for mail in $admin ; do
echo "Link primário da interface eth1 ativado" | /usr/bin/mail -s "[Empresa] Link Internet primário da interface eth1 ativado em $date as $time" $mail
done
}
# Funcao para trocar para o link da interface eth2
link_iface_eth2() {
/usr/bin/sudo /sbin/route del default gw $iface_eth1_gw
/usr/bin/sudo /sbin/route add default gw $iface_eth2_gw dev eth2
/usr/bin/sudo /sbin/route del -host $host_eth1 gw $iface_eth1_gw dev eth1 || true
/usr/bin/sudo /sbin/route del -host $host_eth2 gw $iface_eth2_gw dev eth2 || true
/usr/bin/sudo /sbin/route add -host $host_eth1 gw $iface_eth1_gw dev eth1
/usr/bin/sudo /sbin/route add -host $host_eth2 gw $iface_eth2_gw dev eth2
/usr/sbin/squid -k reconfigure
for mail in $admin ; do
echo "Link secundário da interface eth2 ativado" | /usr/bin/mail -s "[Empresa] Link Internet secundário da interface eth2 ativado em $date as $time" $mail
done
}
# Checa se ambos os links estao disponiveis ...
if /usr/bin/fping -q $host_eth1 && /usr/bin/fping -q $host_eth2; then
if [ $deflt_gw = $pref_gw ] ; then
echo "Links OK!!"
else
link_iface_eth1
fi
else
if [ $deflt_gw = $iface_eth2_gw ] ; then
echo "Scundário Ativo"
else
if /usr/bin/fping -q $host_eth2 ; then
link_iface_eth2
fi
fi
fi
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
export PATH
# Host a ser pingado pela eth1
host_eth1="8.8.8.8"
# Host a ser pingado pela eth2
host_eth2="8.8.4.4"
# Gateway preferido
pref_gw="189.10.11.12"
# Gateway padrao atual
deflt_gw=$(/usr/bin/sudo /sbin/route -n | grep ^0.0.0.0 | awk '{print $2}' | /usr/bin/head -n1)
# Gateway do link da inetrface eth1
iface_eth1_gw="189.10.11.12"
# Gateway do link da interface eth2
iface_eth2_gw="201.10.11.12"
# Interface do link/gateway preferido
iface_pref_gw="eth1"
# Endereco de e-mail de administrador
admin="correiabrux@gmail.com"
# Data atual
date=$(date +%d-%m-%Y)
# Hora atual
time=$(date +%H:%M:%S)
# Endereco IP da interface eth1
iface_eth1_ip="189.10.11.13"
# Endereco IP da interface eth2
iface_eth2_ip=201.10.11.13
# Funcao para trocar para o link da interface eth1
link_iface_eth1() {
/usr/bin/sudo /sbin/route del default gw $iface_eth2_gw
/usr/bin/sudo /sbin/route add default gw $iface_eth1_gw dev eth1
/usr/bin/sudo /sbin/route del -host $host_eth1 gw $iface_eth1_gw dev eth1 || true
/usr/bin/sudo /sbin/route del - host $host_eth2 gw $iface_eth2_gw dev eth2 || true
/usr/bin/sudo /sbin/route add -host $host_eth1 gw $iface_eth1_gw dev eth1
/usr/bin/sudo /sbin/route add -host $host_eth2 gw $iface_eth2_gw dev eth2
/usr/sbin/squid -k reconfigure
for mail in $admin ; do
echo "Link primário da interface eth1 ativado" | /usr/bin/mail -s "[Empresa] Link Internet primário da interface eth1 ativado em $date as $time" $mail
done
}
# Funcao para trocar para o link da interface eth2
link_iface_eth2() {
/usr/bin/sudo /sbin/route del default gw $iface_eth1_gw
/usr/bin/sudo /sbin/route add default gw $iface_eth2_gw dev eth2
/usr/bin/sudo /sbin/route del -host $host_eth1 gw $iface_eth1_gw dev eth1 || true
/usr/bin/sudo /sbin/route del -host $host_eth2 gw $iface_eth2_gw dev eth2 || true
/usr/bin/sudo /sbin/route add -host $host_eth1 gw $iface_eth1_gw dev eth1
/usr/bin/sudo /sbin/route add -host $host_eth2 gw $iface_eth2_gw dev eth2
/usr/sbin/squid -k reconfigure
for mail in $admin ; do
echo "Link secundário da interface eth2 ativado" | /usr/bin/mail -s "[Empresa] Link Internet secundário da interface eth2 ativado em $date as $time" $mail
done
}
# Checa se ambos os links estao disponiveis ...
if /usr/bin/fping -q $host_eth1 && /usr/bin/fping -q $host_eth2; then
if [ $deflt_gw = $pref_gw ] ; then
echo "Links OK!!"
else
link_iface_eth1
fi
else
if [ $deflt_gw = $iface_eth2_gw ] ; then
echo "Scundário Ativo"
else
if /usr/bin/fping -q $host_eth2 ; then
link_iface_eth2
fi
fi
fi
Finalizo por aqui meu primeiro artigo, salientando a simplicidade e eficiência deste método nos ambientes onde implantei.
Espero ter ajudado de alguma forma.
Abraço.