Modificando as tabelas e rotas, mudanças em negrito.
1. Acrescente no arquivo rt_tables:
1 gvt
2 brt
3 net
2. Acrescente a nova rota para os três links, abaixo incluo a regra no arquivo
rc.local:
ip route flush table gvt #Limpa as rotas no cache da tabela gvt
ip route flush table brt #Limpa as rotas no cache da tabela brt
ip route flush table net #Limpa as rotas no cache da tabela net
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table gvt
ip route add default via 192.168.1.1 table gvt
ip route add 192.168.2.0/24 dev eth2 src 192.168.2.10 table brt
ip route add default via 192.168.2.1 table brt
ip route add 192.168.3.0/24 dev eth3 src 192.168.3.10 table net
ip route add default via 192.168.3.1 table net
ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.2.10 table brt
ip rule add from 192.168.3.10 table net
#Esta regra abaixo é responsável pelo balanceamento, vamos dividir a saída com peso 2:1:1, vamos supor que a gvt é 2x
mais rápida com link de 3 mega, link da brt com 1 mega, e link da net com 1 mega.
ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 2 nexthop via 192.168.2.1 dev eth2 weight 1
nexthop via 192.168.3.1 dev eth3 weight 1
ip route flush cache #Limpa as rotas no cache
Dicas
1. Caso queira trabalhar somente com dois links balanceados e três links redundantes, é necessário remover a regra de balanceamento "nexthop via 192.168.3.1 dev eth3 weight 1" dos arquivos "rc.local" e "gwping.sh", nesse caso os três links ficarão fora do balanceamento.
2. Posso utilizar os três links que ficaram de fora do balanceamento usando a marcação de pacotes, neste caso os três links trabalharão especificamente para um serviço ou um destino, veja exemplo:
#A regra abaixo determina que toda rede interna balanceada irá acessar o Bradesco pelo 3 link:
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d bradesco.com.br -j MARK --set-mark 0x30
#A regra abaixo determina que toda rede interna balanceada irá acessar as portas 110(pop) e 25(smtp) pelo 3 link:
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport --dports 110,25 -j MARK --set-mark 0x30
3. Cuidado ao trabalhar com regras de marcação, como trabalhamos com redundância se algum link cair e não deletar a marcação feita para ele, o serviço ficará indisponível até o link voltar... para corrigir esse problema adicionei ao arquivo "gwping.sh" a regra para deletar a marcação do link que caiu... é necessário limpar a tabela mangle e adicionar as novas regras de marcação para quando o link voltar.
#Deleta marcação da tabela de roteamento:
ip rule del fwmark 0x30 lookup net prio 3
#Deleta as regras da tabela mangle:
iptables -F -t mangle
iptables -X -t mangle
Obs.: Não esqueça de desativar o balanceamento dos três links se for utilizá-los com marcação de pacotes, caso contrário não funcionará.
4. Na explicação anterior, para a chamada do script no arquivo rc.local, o comando nohup cria um arquivo "nohup.out" e isso gera um grande acúmulo de dados ocupando espaço desnecessário no HD, se esse log não for necessário para você, é possível desativá-lo acrescentando a opção > /dev/null o que jogará todo esse lixo para o buraco negro. Veja como ficaria a linha de comando:
# nohup > /dev/null /etc/link/gwping &