Eu mesmo encontrei a solução para isso: Roteamento para vários uplinks / provedores
Uma configuração comum é a seguinte, na qual existem dois provedores que conectam uma rede local (ou até mesmo uma única máquina) à grande Internet.
________
+------------+ /
| | |
+-------------+ Provider 1 +-------
__ | | | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | if1 | /
/ \ | | |
| Local network -----+ Linux router | | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +------+-------+ +------------+ |
| | | \
+-------------+ Provider 2 +-------
| | |
+------------+ \________
como direcionar as respostas para os pacotes que chegam em um determinado provedor, por exemplo, Provedor 1, retorne novamente pelo mesmo provedor.
Vamos primeiro definir alguns nomes simbólicos. Seja $ IF1 o nome da primeira interface (if1 na imagem acima) e $ IF2 o nome da segunda interface. Então deixe $ IP1 ser o endereço IP associado a $ IF1 e $ IP2 ao endereço IP associado a $ IF2. Em seguida, deixe $ P1 ser o endereço IP do gateway no Provedor 1 e $ P2 o endereço IP do gateway no provedor 2. Finalmente, deixe $ P1_NET ser a rede IP $ P1, e $ P2_NET a rede IP $ P2 está em.
Um cria duas tabelas de roteamento adicionais, digamos T1 e T2. Estes são adicionados em / etc / iproute2 / rt_tables. Em seguida, você configura o roteamento nessas tabelas da seguinte maneira:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
Nada espetacular, apenas crie uma rota para o gateway e construa uma rota padrão através desse gateway, como faria no caso de um único provedor de upstream, mas coloque as rotas em uma tabela separada por provedor. Observe que a rota da rede é suficiente, pois informa como localizar qualquer host nessa rede, o que inclui o gateway, conforme especificado acima. Em seguida, você configura a tabela de roteamento principal. É uma boa ideia direcionar as coisas para o vizinho direto através da interface conectada ao vizinho. Observe os argumentos 'src', eles garantem que o endereço IP de saída correto seja escolhido.
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Em seguida, sua preferência pela rota padrão: ip route add default via $ P1
Em seguida, você configura as regras de roteamento. Eles realmente escolhem com qual tabela de roteamento será roteada. Você deseja certificar-se de que você direciona uma determinada interface se você já tiver o endereço de origem correspondente: ip rule add from $ IP1 tabela T1 ip rule add from $ IP2 tabela T2