У моего провайдера есть бесплатное IP-телевидение передаваемое по технологии IP multicast. Для просмотра IPTV на компьютере подключенном к провайдеру напрямую достаточно установить VLC и скачать плейлист. Сложности начинаются, когда дома установлен сервер и смотреть IPTV хочется на нескольких компьютерах домашней сети…
Если в роли домашнего шлюза установлен сервер с Linux на борту и доступ в Интернет с домашних компьютеров осуществляется через него по технологии NAT, то установкой VLC на компьютеры дело не решится. В этом случае для просмотра IPTV необходимо на сервер установить программу для проксирования IGMP 1) и маршрутизации UDP multicast 2). Также есть второй способ - использовать UDP proxy 3) на шлюзе. Для просмотра с помощью второго способа есть приложение под Android, позволяющее смотреть IP ТВ на планшете.
Для начала разрешим на брандмауэре (у меня Shorewall) UDP multicast:
... ACCEPT net fw:224.0.0.0/4 ACCEPT net loc:224.0.0.0/4 ACCEPT fw loc:224.0.0.0/4
Далее устанавливаем IGMPproxy:
tar -xzf igmpproxy-src-*.tar.gz
./configure && make
sudo apt-get install checkinstall
sudo checkinstall -D -y --pkgname=igmpproxy --pkgversion=0.1
dpkg -r igmpproxy
sudo mv /usr/local/etc/igmpproxy.conf /etc/igmpproxy.conf
phyint eth1 upstream ratelimit 0 threshold 1 altnet 172.31.242.0/24 phyint eth0 downstream ratelimit 0 threshold 1 phyint wlan0 disabled
igmpproxy -v -d /etc/igmpproxy.conf
и пощёлкав ТВ-каналы в VLC/usr/local/sbin/igmpproxy /etc/igmpproxy.conf exit 0
В репозиториях Debian и Ubuntu программы udpxy ещё нет (разработчики занимаются этим вопросом), поэтому её нужно собрать из исходных кодов. Для этого:
sudo apt-get install build-essential wget "http://www.udpxy.com/download/1_23/udpxy.1.0.23-7-prod.tar.gz" tar -xvf udpxy.1.0.23-7-prod.tar.gz cd udpxy-1.0.23-7 make
/usr/local/bin
br0
), на котором будут приниматься подключения; порт, который будет прослушивать udpxy (у меня 9999
) и имя внешнего интерфейса, откуда будет приниматься IPTV: /usr/local/bin/udpxy -a br0 -p 9999 -m eth1
/etc/rc.local
shorewall
), разрешив multicast трафик из внешней сети на наш роутер и с роутера во внешнюю сеть, а также из локальной сети на порт udpxy: ... ACCEPT net fw:224.0.0.0/4 ACCEPT fw net:224.0.0.0/4 ACCEPT loc fw tcp 9999
# change "udp://@233.166.172.91:1234" to \ # "http://192.168.0.254:9999/udp/233.166.172.91:1234" sed -e 's/^udp:\/\/\@/http:\/\/192.168.0.254:9999\/udp\//' -i playlist.m3u