I have a setup where I have a TP-Link WDR4300 running LEDE v17, which I built myself back then.
It is being used as a multicast router, where the upstream from the ISP is delivered on a VLAN to the WAN port of the router, and two decoders are connected to LAN1 and LAN2 on the device. I am using igmpproxy to forward the traffic between the upstream interface and the LAN on the router. This setup has been working brilliantly for years, and it still does.
However, I am now wanting to update to a modern version of OpenWRT, and since the WDR4300 is somewhat resource constrained, I've bought a used Netgear R7800 to replace it. This router is now running 22.03 stable (snapshot), and the build is based largely on @hnyman's build, I just customized it a little, adding for example igmpproxy to it.
I've manually edited the config of the new device to match the old as closely as possible, and it is almost working, but not quite. Streams can be started, but they stop after a short time, because the upstream provider isn't getting replies to the igmp queries. I suspect that it has something to do with igmpproxy, but I really can't say for sure. I can replicate the behaviour if I intentionally stop igmpproxy on the old device, but I realize that in itself that's not strong evidence of anything.
On the old device, igmpproxy would insert firewall rules, but on the new one (which uses fw4 and nftables), it does not. Not sure if that's really needed, though.
I can also see that on the old device, multicast routing is enabled (eth0.101 is the upstream IPTV interface):
root@WDR4300:/etc# sysctl -a 2>/dev/null | grep mc_forwarding net.ipv4.conf.all.mc_forwarding = 1 net.ipv4.conf.br-lan.mc_forwarding = 1 net.ipv4.conf.default.mc_forwarding = 0 net.ipv4.conf.eth0.mc_forwarding = 0 net.ipv4.conf.eth0.101.mc_forwarding = 1 net.ipv4.conf.gre0.mc_forwarding = 0 net.ipv4.conf.gretap0.mc_forwarding = 0 net.ipv4.conf.lo.mc_forwarding = 0 net.ipv4.conf.sit0.mc_forwarding = 0 net.ipv4.conf.wlan0.mc_forwarding = 0 net.ipv6.conf.all.mc_forwarding = 0 net.ipv6.conf.br-lan.mc_forwarding = 0 net.ipv6.conf.default.mc_forwarding = 0 net.ipv6.conf.eth0.mc_forwarding = 0 net.ipv6.conf.eth0.101.mc_forwarding = 0 net.ipv6.conf.gre0.mc_forwarding = 0 net.ipv6.conf.gretap0.mc_forwarding = 0 net.ipv6.conf.lo.mc_forwarding = 0 net.ipv6.conf.sit0.mc_forwarding = 0 net.ipv6.conf.wlan0.mc_forwarding = 0
On the new device, it is not:
root@TVrouter:/etc# sysctl -a 2>/dev/null | grep mc_forwarding net.ipv4.conf.all.mc_forwarding = 0 net.ipv4.conf.br-lan.mc_forwarding = 0 net.ipv4.conf.default.mc_forwarding = 0 net.ipv4.conf.eth0.mc_forwarding = 0 net.ipv4.conf.eth0/101.mc_forwarding = 0 net.ipv4.conf.eth1.mc_forwarding = 0 net.ipv4.conf.eth1/1.mc_forwarding = 0 net.ipv4.conf.lo.mc_forwarding = 0 net.ipv4.conf.sit0.mc_forwarding = 0 net.ipv4.conf.wlan0.mc_forwarding = 0 net.ipv4.conf.wlan1.mc_forwarding = 0 net.ipv6.conf.all.mc_forwarding = 0 net.ipv6.conf.br-lan.mc_forwarding = 0 net.ipv6.conf.default.mc_forwarding = 0 net.ipv6.conf.eth0.mc_forwarding = 0 net.ipv6.conf.eth0/101.mc_forwarding = 0 net.ipv6.conf.eth1.mc_forwarding = 0 net.ipv6.conf.eth1/1.mc_forwarding = 0 net.ipv6.conf.lo.mc_forwarding = 0 net.ipv6.conf.sit0.mc_forwarding = 0 net.ipv6.conf.wlan0.mc_forwarding = 0 net.ipv6.conf.wlan1.mc_forwarding = 0
As an experiment, I thought I'd manually enable it, but that's not possible:
root@TVrouter:/etc# sysctl -w net.ipv4.conf.all.mc_forwarding=1 sysctl: error setting key 'net.ipv4.conf.all.mc_forwarding': Permission denied
I am not sure if this is is the culprit or not. I've also made sure to disable igmp snooping everywhere, just to make sure that's not interfering with anything.
My kernel is configured with IP_MROUTE as well:
oyvind@debian-dev-owrt:~/owrt_mroek/owrt2203$ cat .config |grep MROUTE CONFIG_KERNEL_IP_MROUTE=y CONFIG_KERNEL_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_KERNEL_IPV6_MROUTE=y CONFIG_KERNEL_IPV6_MROUTE_MULTIPLE_TABLES=y
Are there any incompatibilities with igmpproxy and FW4/nftables? Any pointers would be greatly appreciated.