TL; DR
Como configurar duas rotas padrão no linux (correspondentes a duas interfaces), de modo que o tráfego de entrada de ambas as interfaces seja aceito.
Cenário
Eu tenho um host com duas NICs eth0 e eth1 . Está conectado a duas redes, digamos:
-
Dev: eth0 , IP: 1.1.1.4 , Máscara de rede: 255.255.255.0 , Gateway: 1.1.1.1
-
Dev: eth1 , IP: 2.2.2.4 , Máscara de rede: 255.255.255.0 , Gateway: 2.2.2.1
(Ambas as redes estão conectadas à internet.)
As rotas são ( ip route show ):
default via 1.1.1.1 dev eth0 metric 1
default via 2.2.2.1 dev eth1 metric 2
1.1.1.0/24 dev eth0 src 1.1.1.4
2.2.2.0/24 dev eth1 src 2.2.2.4
(Menor métrica significa maior prioridade).
Agora, quando alguém pinga 2.2.2.4 de algum host externo (digamos, 4.4.4.4 ), não há resposta.
A saída de tcpdump -i eth1 no meu host é:
22:41:27.431539 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 4, length 64
22:41:28.439492 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 5, length 64
22:41:29.447666 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 6, length 64
22:41:30.455528 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 7, length 64
Após alguma pesquisa, verifica-se que quando a pilha de rede linux recebe um pacote de 4.4.4.4 , verifica sua tabela de roteamento para ver qual interface deveria ter sido usada para 4.4.4.4 (que é eth0 na tabela de roteamento ). Agora, como o pacote veio da interface eth1 , o linux simplesmente o descarta (essa política provavelmente evita o spoofing de IP).
O que eu quero é:
-
O tráfego de saída (originado localmente) deve usar a interface eth0 por padrão.
-
O tráfego de entrada deve ser aceito de ambas as interfaces. (Portanto, 4.4.4.4 deve conseguir fazer ping dos1.1.1.4 e 2.2.2.4 )