AGH! Palavras famosas,
The one significant difference between my not-working host and my working host is ...
... por aí estão dragões!
AGH! Suposições famosas,
...But...
... pois aí está a raiz de toda confusão!
O problema é a filtragem de caminho reverso de rede do Linux. O problema é que os pacotes estão chegando em uma interface e a tabela de roteamento vê que o endereço do host de envio deve passar pela outra interface (na qual está o roteador padrão). Portanto, o kernel estava descartando os pacotes e não os enviando para o meu aplicativo.
Os relatórios IGMP foram enviados porque, bem, eu disse a socat qual interface eu deveria usar. E os roteadores e switches montaram o multicast corretamente para ir exatamente onde eu mandei. Em última análise, foi o kernel que não foi feliz.
O conserto barato e desprezível é usar sysctl para alterar net.ipv4.conf.all.rp_filter
de 1
para 0
, mas isso pode causar consequências imprevistas se você não for cuidadoso (pacotes fora de ordem, recebendo pacotes que você não usa) t quer, pacotes chegando na interface errada). É melhor garantir que a tabela de roteamento reflita a realidade do que você está tentando fazer. Portanto, a outra correção é definir /etc/sysconfig/network-scripts/route-iface
para que haja uma rota de origem ou de rede específica para o IP do emissor de multicast nessa determinada iface (ou seja, eth1
ou o que você tem).