How to watch BT TV with an OpenWrt Router

I am writing this article to remember how I solved the issue of allowing my BT Sport channels to be available through my OpenWrt router. If it helps someone else, that is a bonus.

Problem

I have the BT TV Sport service bundled with my PlusNet Fibre Broadband. I used to have my BT master socket next to my main TV, and I used have my PlusNet router plugged straight into the OpenReach ADSL modem, with the TV set top box hanging off that router, and an OpenWrt mesh router to provide wifi coverage throughout my house. It wasn’t pretty but it worked and I knew that if I plugged the set top box into the OpenWrt router, it was not able to connect to the BT TV service. Then we moved house.

In the new house, the BT master socket was mysteriously in one of the bedrooms, and because of the COVID-19 pandemic I was not able to get anyone out to move it to somewhere more sensible.

Target

The way I wanted it to work was for the BT TV to be inside the network connected to the OpenWrt router, the set top box cannot be in the same room as the router so I used home plugs to link the two, but it was essentially a wired connection.

Why did I want this set up? The PlusNet router is alright for basic use, but it has very little customisation. With OpenWrt I have control of DNS,UPnP, VPNs, mesh, guest network, etc., OpenWrt gives me all the control I want and more.

Method

So what is going on? What is my PlusNet router doing that my OpenWrt router isn’t? How does IPTV work?

The answer is that IPTV is usually done via IPv4 UDP multicasting, i.e. the TV signal is streamed over UDP. UDP is usually blocked through router firewalls, however in this case the set top box is telling the PlusNet router to open the correct ports via UPnP. UPnP makes it easy to allow any device in your network to request new holes are opened in your firewall without your knowledge or consent. My OpenWrt router doesn’t do this although it could, however since UPnP is inherently insecure (in my opinion), I don’t, and won’t enable it.

So, what I needed to do is to allow UDP through the firewall, and that is not as simple as a firewall rule, you need an IGMP proxy. I could try to explain what IGMP is but there are plenty good IGMP descriptions out there. All I needed to do was install the OpenWrt igmp proxy package and work out what the source ip addresses were for the multicast traffic to the set top box that make up the TV stream. For that I needed to start a stream with from my set top box through my PlusNet router and then inspect the source of the packets that were streaming to it. So, I connected my set top box and computer to my PlusNet router, and used a packet sniffer, WireShark, to view the packets being routed to my set top box while it was streaming the TV channels (e.g. BT Sport). I switched channels a number of times to work out the IP range I needed to set up. For my BT Sport over PlusNet the answer was the 109.159.247.0/24 range, but other TV services will be different.

Configuration

OK, so here is the bit we have been waiting for, the router configuration:

  • Install igmpproxy
> opkg install igmpproxy
  • Set /etc/config/igmpproxy to the following:
config igmpproxy
option quickleave 1
config phyint wan
option network wan
option zone wan
option direction upstream
list altnet 109.159.247.0/24
config phyint lan
option network lan
option zone lan
option direction downstream
  • Make sure that bridging and IGMP snooping is configured for your lan network in /etc/config/network:
config interface lan
option type bridge
optioniigmp_snooping 1
  • Reboot router for good measure, make sure yout set top box has got an ip address from your OpenWrt router, and find which BT Sport channel is showing the rugby…

… and that is it. The OpenWrt IPTV guide has some other firewall settings for older router but they were not needed for my router, at this point I got all the channels I needed. If you got to this page because you have the same problem and google brought you here, I hope this helps you too.