IP-TV за NATом


Имеется сервер под debian linux, раздающий интернет по локалке. Выход в сеть провайдера и интернет с машин-клиентов через сервер уже настроен (Это отдельная тема, здесь не описывается). Провайдер предоставляет услугу ip-tv через мультикаст, необходимо настроить возможность использования ip-tv в своей локалке.
 
Сразу добавим маршрут к подсети, откуда ведется трансляция (узнаем у провайдера или смотрим, какие ip в плейлисте есть). Для псковлайна маршрут выглядит так:

route add -net 239.1.0.0 netmask 255.255.0.0 dev eth0

где eth0 - интерфейс, смотрящий во внешнюю сеть.

Теперь установим udpxy - сервер, который принимает multicast поток, идущий по UDP-протоколу и поступающий на внешний интерфейс, подключенный к провайдеру, и отдает его по запросу со стороны компьютера локальной сети уже по TCP-протоколу.

качаем udpxy, например отсюда:
UDPXY

Распаковываем:

tar -xzvf udpxy.1.0-Chipmunk-13.tgz

Заходим в папку:

cd udpxy-1.0-Chipmunk-13

Ставим:

make
make install


Перемещаем исполняемый файл udpxy, например в /usr/local/sbin/ :

mv udpxy /usr/local/sbin/

Запускаем:

/usr/local/sbin/udpxy -a ra0 -m eth0 -p 8888 -S -l /var/log/udpxy.log -B 2048K -c 2

(Можно добавить в автозапуск, например добавив в файл /etc/rc.local эту команду и заодно маршрут, что вбили выше).

-a - интерфейс, который будет слушать udpxy в ожидании tcp-запросов;
-m - интерфейс, на который приходит мультикаст; 
-p - прослушиваемый tcp-порт;
-B - размер буфера;
-S - вести статистику соединений;
-l - указание пути к файлу логов.
-c - колличество клиентов, имеющих возможность одновременно использовать ip-tv.

(В настройках фаервола сервера необходимо разрешить трафик к серверу на этот порт, если доступ по локалке ограничен)

Теперь качаем плейлист, в моем примере плейлист псковлайна:

wget http://pskovline.tv/tv.m3u

и изменяем ссылки в плейлисте под наши настройки:

sed -e 's/^udp:\/\/\@/http:\/\/192.168.10.1:8888\/udp\//' -i tv.m3u

где 192.168.10.1 - сервер с udpxy

Теперь можно открывать плейлист плеером vlc и наслаждаться зомбоящиком)

April 7, 2011