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
)