Инструменты пользователя

Инструменты сайта


blog:2011:0829_iptv_through_nat

Просмотр 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!
blog/2011/0829_iptv_through_nat.txt · Последнее изменение: 2022-02-19 18:16 — 127.0.0.1