Se o que você postou no seu script é tudo o que você fez, então está faltando alguns passos.
Para dar uma olhada no seu script, minha primeira preocupação são as seguintes linhas. O arquivo /etc/iproute2/rt_tables
geralmente não é recriado em cada reinicialização. Você provavelmente está repetidamente adicionando a mesma coisa ao arquivo. Isso causará problemas no futuro. Especialmente se você alterar os números que você usou.
echo "201 $TABLE1" >> /etc/iproute2/rt_tables
echo "202 $TABLE2" >> /etc/iproute2/rt_tables
A próxima questão é que as rotas que você adicionou às novas tabelas usam esses comandos.
ip route add default via $GW1 dev $DEV1 table $TABLE1
ip route add default via $GW2 dev $DEV2 table $TABLE2
Quando você cria uma nova tabela, ela fica completamente vazia. Isso significa que nem inclui rotas para sua rede local.
Então, se você executar um comando como este ip route show table main scope link
, deverá ver linhas como esta.
192.168.1.0/24 dev eth1 proto kernel src 192.168.1.100
192.168.2.0/24 dev eth2 proto kernel src 192.168.2.100
192.168.3.0/24 dev eth3 proto kernel src 192.168.3.1
São rotas locais, são necessárias para o roteamento funcionar e você deve recriá-las em todas as tabelas.
O comando genérico ficaria assim. Você precisa executar este comando para cada interface em cada tabela.
/sbin/ip route add table ${TABLE} scope link proto kernel dev ${IFACE} ${ROUTE}