Gerenciamento de conexões
Este artigo tem por objetivo mostrar como pode ser feito uma redundância com duas conexões de modo que uma possa substituir a outra em caso de falta de uma das duas.
Parte 2: Criando as tabelas de roteamento
Bom, iremos criar agora o conteúdo das tabelas, vamos criar um
pasta dentro do /etc com o nome "rotas" e dentro, um arquivo com
o conteúdo da tabela, que ficará desta forma:
## TABLE 1 ROUTS ##
ip route add 10.1.10.0/24 dev eth2 proto kernel scope link src 10.1.10.1 table tabela1
ip route add 192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.1 table tabela1
ip route add 200.144.22.0/21 dev eth0 proto kernel scope link src 200.144.22.1 table tabela1
ip route add default via 200.144.22.1 dev eth0 table tabela1
## TABLE 2 ROUTS ##
ip route add 10.1.10.0/24 dev eth2 proto kernel scope link src 10.1.10.1 table tabela2
ip route add 192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.1 table tabela2
ip route add 200.144.22.0/21 dev eth0 proto kernel scope link src 200.144.22.1 table tabela2
ip route add default via 192.168.10.1 dev eth0 table tabela1
ip rule add from 10.1.10.0/24 table tabela1
ip route add 10.1.10.0/24 dev eth2 proto kernel scope link src 10.1.10.1 table tabela1
ip route add 192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.1 table tabela1
ip route add 200.144.22.0/21 dev eth0 proto kernel scope link src 200.144.22.1 table tabela1
ip route add default via 200.144.22.1 dev eth0 table tabela1
## TABLE 2 ROUTS ##
ip route add 10.1.10.0/24 dev eth2 proto kernel scope link src 10.1.10.1 table tabela2
ip route add 192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.1 table tabela2
ip route add 200.144.22.0/21 dev eth0 proto kernel scope link src 200.144.22.1 table tabela2
ip route add default via 192.168.10.1 dev eth0 table tabela1
ip rule add from 10.1.10.0/24 table tabela1
Observe que iremos usar também 3 redes distintas, são somente exemplos, vou explicar o que cada linha quer dizer, ou melhor, será necessário explicar somente as 2 últimas linhas de cada tabela, pois segue-se o mesmo raciocínio para as demais linhas, cada linha corresponde a uma determinada placa de rede (ver introdução).
ip route add 200.144.22.0/21 dev eth0 proto kernel scope link src 200.144.22.1 table tabela1
ip route add default via 200.150.128.1 dev eth0 table tabela1
A primeira linha diz que a rede "200.144.22.0/24" corresponde a um gateway específico, no caso "200.144.22.1". A segunda linha diz que o default gateway vai ser "200.144.128.1". Agora, o que é essa linha no final? Muito bem, vamos lá.
ip rule add from 10.1.10.0/24 table tabela1
Essa linha quer dizer que a rede interna, que é "10.1.10.0/24", sairá pela tabela1, ou seja, o meu link que é o correspondente a tabela1, é simplesmente uma regra, passemos pra frente...
Observe agora que as duas rotas são praticamente iguais, como visto obedece ao mesmo raciocínio, mas com os "gateways default" diferentes, um corresponde a um link e o outro a outro. Muito bem, agora salve o arquivo, torne executável:
# chmod a+x tabela1
Agora, temos que fazer com que isso possa ser carregado na inicialização, o procedimento é bem simples, acho até que vocês já sabem. Pra quem não sabe, aí vai.
Edite um arquivo qualquer dentro de: /etc/rc.boot ou /etc/rc.local (depende da distro) e coloca dentro o caminho:
/etc/rotas/rc.rotas
Isso vai chamar o arquivo "rc.rotas" que está dentro do /etc/rotas que foi criado por você, isso, na hora que o sistema iniciar.
OK, tudo entendido, iremos passar para próxima etapa. Bem, até aqui criamos as tabelas, definimos quem é o que e colocamos pra iniciar junto com o sistema. Agora vamos aos scripts, a partir daqui iremos fazer o gerenciamento dos links por scripts, colocarei os scripts e direi como funcionam. São um total de três scripts que irão interagir entre eles, são pequenos e bem simples, porém muito práticos:
Teremos um script em especial que irá chamar os demais, caso seja realmente necessário, este, eu vou chamar de matriz, então teremos o seguinte:
#!/bin/sh
#
# By Márcio-MaRuJo®
#
# "MONITORAMENTO ENTRE 2 LINKS", CHAMARÁ SCRIPTS SECUNDÁRIOS DE ACORDO COM A NECESSIDADE.
#
# SCRIPT "MATRIZ"
#
# IRÁ GERAR UM ARQUIVO COM O NOME "ROTAS", DENTRO DA PASTA
ip rule >/tmp/rotas
# DEPOIS IRÁ CONSULTAR O ARQUIVO, E DE ACORDO COM O "GW DEFAULT" REGISTRADO, EXECUTARÁ O PROPOSTO.
if [ `cat /tmp/rotas | grep -c "tabela1"` -eq 1 ];
then
pasta/script2 # (ainda não definido
else if [ `cat /tmp/rotas | grep -c "tabela2"` -eq 1 ];
then
pasta/script3 # ainda não definido
fi
fi
#
# By Márcio-MaRuJo®
#
# "MONITORAMENTO ENTRE 2 LINKS", CHAMARÁ SCRIPTS SECUNDÁRIOS DE ACORDO COM A NECESSIDADE.
#
# SCRIPT "MATRIZ"
#
# IRÁ GERAR UM ARQUIVO COM O NOME "ROTAS", DENTRO DA PASTA
ip rule >/tmp/rotas
# DEPOIS IRÁ CONSULTAR O ARQUIVO, E DE ACORDO COM O "GW DEFAULT" REGISTRADO, EXECUTARÁ O PROPOSTO.
if [ `cat /tmp/rotas | grep -c "tabela1"` -eq 1 ];
then
pasta/script2 # (ainda não definido
else if [ `cat /tmp/rotas | grep -c "tabela2"` -eq 1 ];
then
pasta/script3 # ainda não definido
fi
fi
OK, como eu disse é bem simples, o script de uma forma geral irá gerar um arquivo de nome "rotas", em seguida irá fazer uma procura dentro do arquivo e vai ver qual a "tabela" que está especificada no momento, se é a tabela1 ou da tabela2, então, chamará o script correspondente. Observe que não coloquei um diretório em especial, fica a seu critério.
Parabéns... Faz tempo que eu procuro uma solução assim. Todo mundo me mandava comprar um routeador com load balance, pq o linux não fazia isso.
Show de bola... Resolveu um problemão...
Parabens, comunidade VOL, cada dia melhor....