A few discovery protocols (most prominently mDSN DNS-SD and UPnP SSDP) that are used by end consumer products are using multicast for transport. Unfortunately when setting up a smart home, you cannot ignore those discovery protocols, because often you have no control how the proprietary products discover their peer nodes.
Also, if you set up a smart home, you will have a non-negligible number of nodes with untrustworthy firmware that you may want to segregate from you trusted nodes, and possibly even from the internet. This leads you to a segmented network using VLANs. There are several ways of doing it. For this post I would like to focus only on a setup like this:
(1) 1x OpenWRT router (not using AP functionality) accessing the VLANs via a trunked interface to a managed switch (e.g. Ubiquity Unify Switch),
(2) with NO interface bridging on the side of OpenWRT, hence IGMP snooping disabled.
(3) Let us also assume that all multicast senders and receivers are on wired ethernet connections, so there is NO need to convert multicast traffic to directed unicast datastreams for better WiFi performance.
The main challenge is getting the multicast discovery datagrams form the sender's subnet to the subnets containing relevant receivers:
(4) these UDP multicast datagrams usually have a TTL of 1, and
(5) we assume that we have no way of influencing that by configuring the sender (e.g. a Logitech Harmony Hub, or a Sony PlayStation).
For sender appliances using mDNS DNS-SD there is a simple solution available: AVAHI with enabled "reflector" (think "proxy") will pick up the multicast packets destined to port 5353 and re-transmits them on the other subnets. This solves the TTL=1 problem elegantly. Unfortunately AVAHI is specifically targeting mDNS and does not work for UPnP SSDP datagrams (UDP port 1900).
Therefore I am looking for a more general solution, possible not involving datagram mangling using firewall rules to increase the TTL by 1.
Looking around I found a number of candidate solutions, but I am not sure which are the right direction:
- smcroute with pimbd: does not seem not to solve the TTL=1 issue
- igmpproxy with udpx: solves the problem subscribing to upstream WAN multicast groups and converting the downstream multicast traffic to unicast for better Wifi performance.
- mcproxy: not sure what exactly it does but it seems to create a unidirectional proxy that re-transmits UDP multicast datagrams from 1 subnet to a configurable set of other subnets
- omcproxy: see mcproxy
Maybe someone more enlightened than me can shed more light on these? Which of those would work for the use case described above?
Thanks for helping out!
J/C