pali / igmpproxy

IGMP multicast routing daemon
Other
150 stars 77 forks source link

igmpproxy with udpxy on localhost #67

Open maximushugus opened 4 years ago

maximushugus commented 4 years ago

Hello, I have a problem running igmpproxy with localhost programme using multicast : My ISP provides TV streams over multicast. So I used igmpproxy on my OpenWrt router to be able to stream those on my LAN from my WAN (I have managed switch with IGMP snooping, also enabled on my router) : this config works and I can join the multicast streams on my LAN (using VLC). Here is my igmpproxy config.

But I also want to be able to convert those multicast streams to unicast, using udpxy. While running udpxy on another machine than my router on my LAN works (it is able to do the conversion and I can access the unicast stream), I cannot make it work direclty on my routeur.

If I configure udpxy to join the multicast group on my router LAN IP, it receive the multicast stream from igmpproxy only if this stream is joined on another machine on my LAN. And as soon as I stop the multicast stream on the other machine, udpxy cannot receive it anymore.

I also tried to configure udpxy to connect the multicast source from localhost, adding localhost as downstream in igmpproxy config : config phyint option network loopback option direction downstream

or config phyint option network lo option direction downstream but this doesn't work.

How can i configure igmpproxy to catch the ask to join the multicast stream from a localhost application, or from the LAN IP of the router it is running on ?

thanks

pali commented 4 years ago

You do not need igmpproxy if you want udpxy (or any other software which receive multicast stream) on your router. Even more if igmpproxy is running, your application on router would ignore it, it does not interact with igmpproxy. So igmpproxy is in this setup irrelevant.

To receive multicast stream in your application, you have to tell your application from which interface it want to receive that multicast stream. Of course it should be from upstream interface. If you do not say it to your application, then interface would be chosen from (classic) routing table.

To check what is default interface you can use ip route command:

$ ip route get 224.0.0.0/4

To configure it call: ip route add 224.0.0.0/4 dev . To change, first delete it via del.

maximushugus commented 4 years ago

udpxy cannot work without opening the firewall for multicast adresses incoming from WAN, which I don't have to do with igmpproxy : I think it's more secure. That's why I want to "connect" udpxy to igmpproxy

By the way even if I configure the multicast routes to my LAN, it doesn't work the way I want...

Thanks for your answer

pali commented 4 years ago

That's why I want to "connect" udpxy to igmpproxy

igmpproxy is listening for requests on your downstream interfaces. Therefore if you want to use it (for whatever reason) you need to run your udpxy on (different) machine which is connected to downstream interface on your router.

By the way even if I configure the multicast routes to my LAN, it doesn't work the way I want...

So you need to debug it what, this is just plain firewall / system / multicast configuration and has nothing to do with igmpproxy.

udpxy cannot work without opening the firewall for multicast adresses incoming from WAN, which I don't have to do with igmpproxy : I think it's more secure.

Sorry I do not understand this sentense. Any application which wants to listen on multicast address (including igmpproxy and udpxy) need to use kernel multicast functions (setsockopt IP_ADD_MEMBERSHIP). Kernel then generates IGMP packets sent to configured interface. Packets are always subject to iptables/firewall.

igmpproxy is also listening on downstream interfaces for clients IGMP packets and on Linux this part is insecure as it ignores iptables/firewall and receive all packets (even those explicitly marked as REJECT/DROP). But this part is needed for multicast routing, to route packets from upstream interface to downstream interface to the different network.

When you run udpxy on your router, you are NOT doing any multicast routing therefore igmpproxy is not involved. You just have to properly configure this application to receive multicast stream. Sending unicast UDP packets has nothing with igmpproxy nor with multicast routing.

maximushugus commented 4 years ago

ok, thanks for the clear and detail answer