Você precisa desabilitar o filtro de caminho inverso (rp_filter) para cada interface individual
# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0
Estou tentando configurar um servidor que precisa ter interfaces na mesma sub-rede IP, mas diferentes VLANs:
eth1.102 Link encap:Ethernet HWaddr 00:50:56:b1:00:0f
inet addr:10.1.1.6 Bcast:10.1.1.255 Mask:255.255.255.0
eth1.103 Link encap:Ethernet HWaddr 00:50:56:b1:00:0f
inet addr:10.1.1.12 Bcast:10.1.1.255 Mask:255.255.255.0
O problema que estou vendo é que quando uma solicitação ARP chega de um dispositivo em uma das sub-redes, o servidor responde apenas ao ARP em uma interface e parece ignorar qualquer ARP na outra interface:
Primeira interface:
# ping -I eth1.102 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.6 eth1.102: 56(84) bytes of data.
^C
--- 10.1.1.1 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7008ms
segunda interface:
# ping -I eth1.103 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.12 eth1.103: 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.400 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.332 ms
^C
(para o registro, 10.1.1.1 existe em ambas as sub-redes em ambas as VLANs)
# arp -an
? (10.1.1.1) at 02:00:1a:f2:00:02 [ether] on eth1.103
? (10.1.1.1) at 02:00:72:a3:00:08 [ether] on eth1.102
Mesmo se eu fizer ping do dispositivo cliente para o IP específico da interface do servidor, ele ainda será ignorado em uma e responderá na outra.
O Ubuntu tem alguns filtros arp / spoofing por padrão, então eu desativei o que eu posso encontrar, por exemplo
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
Eu já vi algumas perguntas com problemas semelhantes, mas geralmente é com o fluxo de ARP porque é o mesmo segmento (não separado por VLAN) e a solicitação ARP está sendo respondida por ambos, o que não é o caso aqui. Se eu tcpdump ambas as interfaces, o ARP vindo que não é respondido não é visto em qualquer lugar em qualquer outra interface (pensando nas linhas que está respondendo em uma interface diferente) - parece apenas silenciosamente ignorar o pedido.
Alguém se deparou com isso antes?
EDITAR:
Okay, sinta-se um pouco idiota, mas pode ajudar os outros ...
Eu estava na área certa desativando o rp_filter, mas presumivelmente porque ele está ativado por padrão com o Ubuntu ele o aplicou em todas as interfaces, então enquanto eu definia rp_filter = 0 para as duas entradas listadas acima, o configurações de interface ainda eram 1, assim ..
# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0
... fez o truque.
Você precisa desabilitar o filtro de caminho inverso (rp_filter) para cada interface individual
# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0
Tags ethernet arp linux mac-address ubuntu