Tenho 2 caixas Linux com a seguinte descrição
Caixa A: Kernel: Linux 2.6 IP: 172.19.1.99/24
Caixa B: Kernel: Linux 3.14 IP: 192.168.200.100/24
Conectado com o switch da camada 2
Ambas as caixas executam um serviço de transmissão UDP e um serviço UDP Receiver. O que quer que seja enviado por transmissão é recebido pelo recebimento do serviço. Esses serviços juntos formam o protocolo de descoberta personalizado usado por um aplicativo da Web executado nessas caixas.
Problema:
Quando a Caixa A é movida para a sub-rede 192.168.200.0/24 e depois movida de volta para a sub-rede 172.19.1.0/24, o serviço receptor na Caixa B ainda receberá a transmissão da Caixa A, mas tecnicamente deve parar de receber a transmissão de A. Agora mesmo serviço em execução na Caixa A não recebe a transmissão da Caixa B neste ponto.
Só para confirmar eu anexei strace ao serviço de recebimento na Caixa B e posso ver que a chamada do sistema recvfrom
está, de fato, recebendo broadcast enviado pelo Box A
para endereço 192.168.200.255.
Agora, se eu matar o serviço de recebimento na Caixa B e reiniciá-lo, ele deixará de receber as transmissões enviadas da Caixa A.
Em suma, o problema é visto apenas quando uma caixa em execução na mesma sub-rede é migrada para uma sub-rede diferente e só é vista na Caixa B.
Alguma idéia de por que isso pode estar acontecendo?.
UPDATE: Apenas para adicionar mais informações, o Box B também usa o iptables com módulos conntrack. Isso pode influenciar este comportamento?.
Tags udp linux-networking subnet