Como evitar que o linux elimine pacotes que tenham um endereço mac incorreto (promíscuo não funciona)

1

Eu configurei três máquinas de maneira proxy_arp estática:

----------------------+   +-----------------------------------------------+   +----------------------
    Machine A         |   |                   Machine B                   |   |     Machine C
----------------------+   +-----------------------------------------------+   +----------------------
                  eth0|---|tap0                                       tap1|---|eth0  
mac: 52:54:00:12:34:56|   |mac: b6:e0:11:97:fd:5f   mac: 36:46:74:b1:92:71|   |mac: 52:54:00:22:22:22
   ip: 192.168.12.2/24|   |ip: 0.0.0.0                         ip: 0.0.0.0|   |ip: 192.168.12.4/24
                      |   |promisc up                           promisc up|   |

Machine A:
arp -i eth0 -s 192.168.12.4 b6:e0:11:97:fd:5f

Machine C:
arp -i eth0 -s 192.168.12.2 36:46:74:b1:92:71

Machine B:
echo 1 > /proc/sys/net/ipv4/ip_forward
route add 192.168.12.4 dev tap1
route add 192.168.12.2 dev tap0

Com esta configuração, posso pingar 192.168.12.4 com sucesso da máquina A.

A questão é, se eu substituir a rota arp estática na máquina C com:

arp -i eth0 -s 192.168.12.2 22:22:22:22:22:22

Por que ele para de funcionar? a resposta do ping é recebida por tap1 na máquina B (aparece em wireshark), mas por alguma razão, embora tap1 seja o modo promíscuo, o pacote não é transmitido para a camada IP e não é encaminhado para tap0 como deveria!

Você sabe qual componente do kernel é responsável por eliminar esse pacote de entrada com base no endereço MAC de destino, mesmo quando a interface está no modo promíscuo?

    
por Nicolas G 30.12.2015 / 01:12

1 resposta

1

A camada de rede recebe o pacote para o MAC 22: 22: 22: 22: 22, mas como o endereço MAC não pertence a tap1, o pacote é ignorado. Definir a interface como promíscua não desabilita essa verificação, apenas a move para mais tarde no código de rede.

Encaminhar pacotes que têm um destino MAC que não é o da interface na qual o pacote é recebido é chamado de ponte. Se você conectar pacotes através da máquina B, você poderá configurar as máquinas A e C normalmente sem as rotas ARP estáticas, e parece que é isso que você quer fazer.

    
por 02.01.2016 / 01:05