Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

igmpproxy with udpxy on localhost #67

Open
maximushugus opened this issue May 8, 2020 · 4 comments
Open

igmpproxy with udpxy on localhost #67

maximushugus opened this issue May 8, 2020 · 4 comments

Comments

@maximushugus
Copy link

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
Copy link
Owner

pali commented May 8, 2020

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
Copy link
Author

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
Copy link
Owner

pali commented May 9, 2020

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
Copy link
Author

ok, thanks for the clear and detail answer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants