Le fait que la multidiffusion passe par votre machine Linux en utilisant le routage unicast est une combinaison de quelques circonstances chanceuses.
Le routage multicast n'est pas le même que le routage unicast. Le routage de monodiffusion est basé sur le fait que le trafic est envoyé à une seule adresse, mais le trafic de multidiffusion est envoyé à une adresse de groupe qui représente les hôtes qui souhaitent s'abonner au groupe de multidiffusion.
Les hôtes utilisent IGMP pour indiquer à un routeur multidiffusion qu'ils souhaitent rejoindre un groupe multidiffusion, et le routeur multidiffusion commencera alors à envoyer le trafic multidiffusion pour ce groupe au réseau des hôtes qui en font la demande.
Les commutateurs modernes utiliseront IGMP Snooping pour déterminer quels ports de commutateur ont des hôtes demandant à rejoindre un groupe de multidiffusion particulier, et ils n'enverront le trafic pour ce groupe de multidiffusion qu'aux ports de commutateur où les hôtes ont demandé à rejoindre le groupe de multidiffusion.
Linux, en soi, ne prend pas en charge le routage multidiffusion, et vous devez ajouter quelque chose au périphérique Linux pour prendre en charge le routage multidiffusion. Reportez-vous au schéma ci-dessous :
Lorsque la source de multidiffusion commence à envoyer du trafic de multidiffusion pour un groupe de multidiffusion, le commutateur n'a probablement vu aucune demande IGMP pour rejoindre le groupe de multidiffusion, de sorte que le trafic de multidiffusion de ce groupe ne va nulle part.
Lorsque l'un des PC sur le même commutateur veut rejoindre le groupe de multidiffusion, il enverra un message IGMP Join, et le commutateur espionnera cela et enverra le trafic de multidiffusion au port auquel le PC demandeur est connecté.
Si un PC de l'autre côté du routeur Linux veut rejoindre le groupe de multidiffusion, ce n'est pas de chance car le trafic de multidiffusion ne circule pas de ce côté du routeur Linux. Le routeur Linux n'a même pas rejoint le groupe de multidiffusion, donc le commutateur ne lui envoie jamais le trafic de multidiffusion.
Lorsque vous exécutez le routage multidiffusion sur un routeur, le routeur répondra à la demande IGMP de l'hôte et le commutateur saura qu'il s'agit d'un routeur multidiffusion et il enverra le trafic multidiffusion au port du commutateur auquel le routeur multidiffusion est connecté. De manière simpliste, le routeur n'enverra pas le trafic multicast vers une autre interface à moins qu'il y ait un récepteur actif sur une autre interface (cela dépend de la version multicast, par exemple, PIM-DM commencera à envoyer, mais reculera si aucune demande IGMP n'est vue) .
Lorsque le routage multidiffusion est activé sur le routeur, un PC connecté à l'autre interface enverra un message IGMP Join et le routeur Linux commencera à envoyer le trafic multidiffusion pour le groupe demandé à l'interface. Le commutateur espionnera la demande et enverra le trafic de multidiffusion au port du commutateur auquel le PC qui a demandé à rejoindre le groupe de multidiffusion est connecté.
Cela devient plus compliqué si vous devez router via plusieurs routeurs. IGMP est utilisé entre les hôtes et le routeur multicast local. PIM (ou un autre protocole de routage multidiffusion) est utilisé entre les routeurs multidiffusion.
Tout cela empêche le trafic multidiffusion d'aller là où il n'est pas souhaité.
Il existe des modules complémentaires pour Linux pour l'aider à gérer correctement le routage IGMP et multidiffusion.