Como configurar duas rotas padrão no linux

3

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 )

por Tanmay 28.12.2016 / 18:31

3 respostas

5

Usando o iproute2 você pode fazer algo assim:

echo "1 admin" >> /etc/iproute2/rt_tables
echo "2 users" >> /etc/iproute2/rt_tables

ip rule add from 192.168.122.40/32 dev eth0 table admin
ip rule add from 192.168.123.41/32 dev eth1 table users

ip route add default via 192.168.122.1 dev eth0 table admin
ip route add default via 192.168.123.1 dev eth1 table users

Agora você terá duas tabelas de roteamento com dois gateways.

    
por 28.12.2016 / 18:39
0

No caso de sua aplicação se vincular a 0.0.0.0 , também é necessário adicionar regras como:

ip rule add from 0.0.0.0/32 to 192.168.122.0/24 dev eth0 table admin

ip rule add from 0.0.0.0/32 to 192.168.123.0/24 dev eth1 table users

    
por 29.06.2018 / 19:37
0

Esse fenômeno é chamado de unicast rpf (encaminhamento de caminho reverso) como um filtro de caminho padrão, mas reverso, no Linux. Você pode desabilitar isso sem quaisquer conseqüências negativas importantes (a menos que você seja um isp .. e um roteador).

echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

Então o seu exemplo deve funcionar como você deseja.

    
por 29.06.2018 / 19:46