Não é possível pingar a máquina Linux multihomed na interface não padrão

7

Eu tenho um servidor Ubuntu multihomed com um conjunto de interfaces que inclui:

eth2: 10.10.0.131/24
eth3: 10.20.0.2/24

A interface padrão é eth2, com um gateway de 10.10.0.1. Veja como é a tabela de roteamento:

root@c220-1:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.0.1       0.0.0.0         UG        0 0          0 eth2
10.10.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eth2
10.20.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eth3
10.30.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.40.0.0       0.0.0.0         255.255.0.0     U         0 0          0 eth1

De uma rede separada ( 192.168.3.5/24 ) eu posso acessar esta máquina na interface eth2 (aquela com o gateway padrão), mas não na interface eth3. Eu posso pingar a interface eth3 de um roteador na mesma rede (10.20.0.1) sem nenhum problema.

Se eu pingar 10.10.0.131 de 192.168.3.5, os pacotes chegam à máquina, mas não envia nenhuma resposta:

c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 0, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 1, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 2, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 3, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 4, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 5, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 6, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 7, length 64

Se eu fizer ping do roteador (10.20.0.1) na mesma rede, o servidor responderá corretamente:

c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80

Observe que, de acordo com a resposta desta pergunta semelhante , eu tenho rp_filter em todas as interfaces, mas não resolva o problema:

$ for i in eth0 eth1 eth2 eth3 all default
> do
> cat /proc/sys/net/ipv4/conf/$i/rp_filter
> done
0
0
0
0
0
0
    
por Lorin Hochstein 14.03.2013 / 19:34

2 respostas

16

O problema é que, como a rota padrão passa pela eth2, as respostas do ping são enviadas pela eth2, embora as solicitações tenham sido recebidas na eth3. (Se você tcpdump eth2 você deve ver as respostas sendo enviadas.) Há, provavelmente, algum dispositivo que está descartando os pacotes porque eles têm um IP de origem inválido para a rede em que estão. Você precisa de um roteamento de política de origem para que as respostas sejam enviadas pela interface eles foram recebidos em.

  1. Crie uma nova tabela de roteamento (só precisa ser feita uma vez):

    echo 13 eth3 >> /etc/iproute2/rt_tables
    
  2. Adicione uma rota padrão a essa nova tabela saindo da eth3:

    ip route add default via 10.20.0.1 table eth3
    
  3. Adicione uma regra de política para usar esta nova tabela para pacotes com endereço de origem do IP da eth3:

    ip rule add from 10.20.0.2 lookup eth3
    
por 14.03.2013 / 20:08
1

From a separate network (192.168.3.5/24) I can reach this machine on the eth2 interface (the one with the default gateway), but not the eth3 interface. I can ping the eth3 interface from a router on the same network (10.20.0.1) without a problem.

Parece que você está perdendo uma rota para 192.168.3.5/24 da sub-rede 10.30.0 / 24. Você deve adicionar um diagrama de rede e traceroutes para cada rede de cada dispositivo.

    
por 14.03.2013 / 19:59