iptables está tratando o tráfego de diferentes hosts de maneira diferente, apesar das regras

1

Algo assustador está acontecendo aqui e eu não sei como consertar isso. Resumo: o tráfego que parece idêntico ao tcpdump está sendo tratado pelo iptables de forma diferente. Detalhes abaixo.

Configuração de teste:

  • device 0 - Uma máquina linux localizada no endereço IP 192.168.0.121

  • dispositivo 1 - um dispositivo mudo que apenas envia pacotes para a porta 4000 em 192.168.0.121. O endereço IP deste dispositivo é definido com o comando: sudo arp -s 192.168.0.27 MAC_ADDRESS, porque ele não faz solicitações DHCP e não pode fazer nada além de seu trabalho.

  • device 2 - Uma máquina linux enviando pacotes para a porta 4000 em 192.168.121 com o comando:

    watch -n 1 "date | nc -4u -w1 -v 192.168.0.121 4000"

saída tcpdump da situação:

22:00:01.845359 IP 192.168.3.30.50705 > 192.168.0.121.4000: UDP, length 1
22:00:01.845391 IP 192.168.3.30.50705 > 192.168.0.121.4000: UDP, length 29
22:00:02.022257 IP 192.168.0.27.27 > 192.168.0.121.4000: UDP, length 12
22:00:03.022797 IP 192.168.0.27.27 > 192.168.0.121.4000: UDP, length 12
...

Nessa circunstância, a saída de socat udp-l:4000,fork stdout é:

�����XX@�XWed Sep  2 22:02:18 PDT 2015
������XX��XWed Sep  2 22:02:22 PDT 201
...

E a saída de socat udp-l:2700,fork stdout está vazia.

O lixo estranho é do sensor e a data é do comando acima. Observe que o IP / porta de destino desse tráfego é exatamente o mesmo de acordo com o tcpdump. Agora, se eu encaminhar todo o tráfego da porta UDP 4000 para 2700:

sudo iptables -t nat -A PREROUTING -p udp --dst 192.168.0.121 --dport 4000 -j DNAT --to-destination 192.168.0.121:2700

tcpdump parece exatamente o mesmo, mas agora, a saída de socat udp-l:4000,fork stdout é:

���@�@�@�������@�@�@�������@������������@�@@����@��� ...

e a saída de socat udp-l:2700,fork stdout é:

XXXWed Sep  2 22:05:42 PDT 2015
XXXWed Sep  2 22:05:46 PDT 2015
XXXWed Sep  2 22:05:50 PDT 2015
...

Como você pode ver, o tráfego do dispositivo 1 está sendo ignorado pelo iptables e continua no host na porta 4000, mas o tráfego do dispositivo 2 está sendo capturado pela regra e encaminhado para a porta 2700. Eu posso limpar o iptables e reemitir a regra durante todo o dia e apenas alterna entre esses dois estados.

Alguém tem alguma idéia do que pode estar acontecendo?

    
por indianajohn 03.09.2015 / 08:30

1 resposta

0

Acontece que dois dispositivos estavam ambos enviando o host linux em 192.168.0.121 de 192.168.0.27, apenas com endereços MAC diferentes. Obviamente, isso não é um comportamento compatível, e o iptables não deve lidar com isso.

Gostaria de algumas sugestões sobre como permitir que esses dois dispositivos coexistam na mesma rede sem que o fornecedor nos envie uma atualização de firmware. Então, se alguém tiver uma ideia, me avise.

    
por 04.09.2015 / 07:28