Статья последний раз была обновлена 04.03.2023
Просмотр 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!
http://www.kasatkin.org/doku.php?id=blog:2011:0829_iptv_through_nat
- Как узнать IP-адрес по MAC-адресу - 07.04.2023
- Пинг проходит, а страницы в браузере не открываются - 07.04.2023
- Что если сайт пингуется «извне», но не открывается из под «локалки»? - 07.04.2023