IGMPproxy

From Alpine Linux

Internet Protocol television (IPTV) is a system through which Internet television services are delivered using the architecture and networking methods of the Internet Protocol Suite over a packet-switched network infrastructure, e.g., the Internet and broadband Internet access networks, instead of being delivered through traditional radio frequency broadcast, satellite signal, and cable television (CATV) formats.

Installing tools

Install igmpproxy

apk add igmpproxy

Install iptables (optional, see troubleshooting)

apk add iptables

Setup igmpproxy

Open /etc/igmpproxy.conf in your favorite editor

nano /etc/igmpproxy.conf

Set upstream interface to your WAN interface. In my case eth0

phyint eth0 upstream  ratelimit 0  threshold 1

If you know your ISPs multicast sources you should add them here. If not don't worry we'll come back here later.

altnet 88.222.0.0/16
altnet 10.0.0.0/8

Set downstream interface to your LAN interface. In my case eth1

phyint eth1 downstream  ratelimit 0  threshold 1

Disable other unused interfaces

phyint lo disabled

If you haven't added multicast sources yet your igmpproxy.conf should look like this

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
phyint eth1 downstream  ratelimit 0  threshold 1
phyint lo disabled

Launch igmpproxy in debug mode

igmpproxy -d -v /etc/igmpproxy.conf

You should see output similar to this

RECV Membership query   from 10.253.88.1     to 224.0.0.1
RECV Membership query   from 10.254.88.1     to 224.0.0.1
RECV V2 member report   from 88.222.27.35    to 239.255.255.250

Now we know that ISPs multicast sources are 10.x.x.x (10.0.0.0/8) and 88.222.x.x(88.222.0.0/16). We need to specify them in /etc/igmpproxy.conf right after upstream interface declaration like this

phyint eth0 upstream  ratelimit 0  threshold 1
      altnet 88.222.0.0/16
      altnet 10.0.0.0/8

Your complete igmpproxy.conf should look like this

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
        altnet 88.222.0.0/16
        altnet 10.0.0.0/8
phyint eth1 downstream  ratelimit 0  threshold 1
phyint lo disabled

Launch igmpproxy and enjoy IPTV :)

igmpproxy /etc/igmpproxy.conf

Troubleshooting

  • Make sure your local subnet is not same as your ISP's multicast source. 192.168.0.0/24 is probably safe bet.
  • You might need to add forwarding rules to iptables
iptables -I FORWARD -s 88.222.0.0/16 -d 224.0.0.0/4 -j ACCEPT
iptables -I FORWARD -s 10.0.0.0/8 -d 224.0.0.0/4 -j ACCEPT
iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT
  • If you're using shorewall modify /etc/shorewall/shorewall.conf
MULTICAST=Yes

Add following rules to /etc/shorewall/rules

ACCEPT		all		fw:224.0.0.0/4
ACCEPT		all		net:224.0.0.0/4
ACCEPT		all		loc:224.0.0.0/4