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
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
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.