Просмотр IPTV через домашний сервер
У моего провайдера есть бесплатное IP-телевидение передаваемое по технологии IP multicast. Для просмотра IPTV на компьютере подключенном к провайдеру напрямую достаточно установить VLC и скачать плейлист. Сложности начинаются, когда дома установлен сервер и смотреть IPTV хочется на нескольких компьютерах домашней сети…
Если в роли домашнего шлюза установлен сервер с Linux на борту и доступ в Интернет с домашних компьютеров осуществляется через него по технологии NAT, то установкой VLC на компьютеры дело не решится. В этом случае для просмотра IPTV необходимо на сервер установить программу для проксирования IGMP 1) и маршрутизации UDP multicast 2). Также есть второй способ - использовать UDP proxy 3) на шлюзе. Для просмотра с помощью второго способа есть приложение под Android, позволяющее смотреть IP ТВ на планшете.
Multicast routing
Для начала разрешим на брандмауэре (у меня Shorewall) UDP multicast:
- /etc/shorewall/rules
... 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:
- скачиваем исходники отсюда: http://sourceforge.net/projects/igmpproxy
- распаковываем:
tar -xzf igmpproxy-src-*.tar.gz
- переходим в распакованный каталог
- компилируем IGMPproxy:
./configure && make
- устанавливаем checkinstall:
sudo apt-get install checkinstall
- запускаем checkinstall:
sudo checkinstall -D -y --pkgname=igmpproxy --pkgversion=0.1
- в результате автоматически будет создан и установлен deb-пакет igmpproxy с необходимым нам демоном, который в будущем можно удалить командой
dpkg -r igmpproxy
- перемещаем конфигурационный файл:
sudo mv /usr/local/etc/igmpproxy.conf /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
- значение altnet можно узнать запустив демон в debug-режиме:
igmpproxy -v -d /etc/igmpproxy.conf
и пощёлкав ТВ-каналы в VLC - когда конфигурационный файл налажен, можно настроить автозапуск демона:
- /etc/rc.local
/usr/local/sbin/igmpproxy /etc/igmpproxy.conf exit 0
- всё, можно смотреть!
UDP proxy
В репозиториях 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:- /etc/shorewall/rules
... ACCEPT net fw:224.0.0.0/4 ACCEPT fw net:224.0.0.0/4 ACCEPT loc fw tcp 9999
- изменим ссылки на каналы в плейлисте так, чтобы они указывали на udpxy: 4)
# 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
- открываем на своём компьютере VLC и загружаем в него получившийся плейлист
- смотрим IPTV!