Eu tenho várias interfaces ethernet em uma máquina, todas na mesma sub-rede. Normalmente, eles são configurados para serem executados em VMs separadas, e eu entendo as limitações impostas pelo Linux conforme descrito aqui , mas já estive encarregado de tentar fazê-lo funcionar em um host. Consegui configurá-los de forma que o tráfego de entrada e saída do host seja direcionado pelo dispositivo correto. O que não posso fazer é comunicar de um dispositivo para outro. Aqui está o que eu fiz para configurar os dispositivos até agora:
Definir endereços IP estáticos:
ip addr add 192.168.1.124 dev eth0
ip addr add 192.168.1.125 dev eth1
ip addr add 192.168.1.126 dev eth2
...
Ativar filtragem de arp:
sysctl -w net.ipv4.conf.all.arp_filter=1
Implemente o roteamento baseado na origem da seguinte forma:
Anexe o seguinte a /etc/iproute2/rt_tables
1 eth0
2 eth1
3 eth2
...
Adicionar rota padrão à tabela
ip route add default via 192.168.1.11 table eth0
ip route add default via 192.168.1.11 table eth1
ip route add default via 192.168.1.11 table eth2
...
Adicionar rota de sub-rede através de um dispositivo específico com base no IP src
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth0
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth1
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth2
...
adicionar regra
ip rule add from 192.168.1.124 table eth0
ip rule add from 192.168.1.124 table eth1
ip rule add from 192.168.1.124 table eth2
...
O hardware do dispositivo cuida da filtragem de pacotes de entrada com base no IP de destino.
Como eu disse, neste momento eu posso confirmar com o tcpdump que o tráfego dentro e fora do host é direcionado através do dispositivo correto. Multicast de egresso vai para o dispositivo correto desde que o src IP esteja ligado. Os pacotes multicast enviados de um dispositivo são recebidos por todos os outros. O que eu não posso fazer é ping de um dispositivo para outro. Usando o tcpdump, vejo as solicitações de arp de saída no dispositivo de envio e as solicitações de arp de ingresso no dispositivo receptor, mas nenhuma resposta é feita. Se eu adicionar a entrada arp diretamente, eu também vejo a solicitação de ping em ambos os dispositivos, mas nenhuma resposta é feita.
ATUALIZAÇÃO:
Os dados podem ser enviados entre os endereços IP atribuídos às interfaces, mas a pilha da rede não está enviando-os pelos dispositivos. Pacotes ICMP e multicast ESTÃO passando pelos dispositivos, mas nenhuma resposta é enviada de volta.
Existe uma maneira de:
A) Forçar os pacotes para fora do dispositivo mesmo ao enviar para o mesmo host?
B) Forçar o host a responder a solicitações ICMP do mesmo host?