Настройка прохождения IPTV через шлюз CentOS и утилиты igmpproxy.

Основным механизмом доставки телевизионных программ до абонентов в локальных сетях является вещание в виде широковещательных IP-пакетов (иногда такой поток называют «мультикаст» от английского «multicast»). Особенностью данной технологии является то, что все мультимедийные потоки всегда направляются в сеть, вне зависимости от количества активных подписчиков в настоящий момент времени. Например, для передачи 20 телевизионных каналов со средним битрейтом 4 Мбит/сек на канал потребует порядка 4*20 = 80 Мбит/сек пропускной способности. Эти 80 Мбит/сек будут направляться в сеть, даже если ни один абонент в данный момент не подключен к сети, а также в случае, если количество активных абонентов гораздо более 1000.

Вещание мультимедийного контента в локальную сеть в виде широковещательных пакетов сопряжено с необходимостью четко контролировать какие пакеты и к какому получателю должны доставляться. Необходимо избегать ситуации, когда все пакеты доставляются всем абонентам. В этом случае абонентские устройства будут тратить ресурсы на обработку «непрошенных» пакетов и в итоге не смогут выполнять свои функции. Абоненту необходимо доставлять пакеты только того потока, который он запросил. Для этого абонентское оборудование сообщает о желании вступить в определенную группу по протоколу IGMP. Далее этот запрос регистрируется на маршрутизаторе, в терминах IGMP это устройство называется «Querier». После успешной регистрации, Ethernet коммутатор приступает к копированию широковещательных пакетов, предназначенных для данной группы, в порт, к которому подключен абонент.
Благодаря протоколу IGMP, Ethernet-коммутаторы могут определить какие широковещательные пакеты копировать в абонентский порт, а какие нет.

В настоящей статье описывается настройка протокола IGMP для просмотра пакета IPTV через шлюз под управлением CentOS.

На шлюзе две сетевые карты.

eth0 - провайдер.
eth1 - локальная сеть.
ppp0 - интернет, привязан на eth0.

Для начала прописываем правила в iptables. В файл /etc/sysconfig/iptables, добавляем:

секция *filter:
-A FORWARD -p igmp -i eth0 -o eth2 -j ACCEPT
-A INPUT -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -d 224.0.0.0/4 -j ACCEPT
 
секция *mangle:
-A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1

Выполняем:

modprobe ipt_TTL
service iptables reload
service iptables restart
 
route add -net 224.0.0.0/4 dev eth0
route add -net 224.0.0.0/4 dev eth2

Добавляем в файл /etc/rc.d/rc.local:

route add -net 224.0.0.0/4 dev eth0
route add -net 224.0.0.0/4 dev eth2

Теперь необходимо установить утилиту igmpproxy, которая и будет транслировать IPTV в локальную сеть.

Её можно собрать из исходников производителя, либо скачать собранный пакет.

wget http://centos.alt.ru/pub/repository/centos/6/x86_64/igmpproxy-0.1-1.el6.x86_64.rpm
rpm -i igmpproxy-0.1-1.el6.x86_64.rpm

или же подключить репозитарий CentALT

rpm -ivh http://centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm

и установить

yum install igmpproxy

Запускаем в режиме дебага:

/usr/sbin/igmpproxy -vd /etc/igmpproxy.conf

Находим примерную строку:

The source address 172.18.3.1 for group 224.0.42.1, is not in any valid net for upstream VIF

По ней определяем, что поток идет с IP 172.18.3.1

Открываем конфиг /etc/igmpproxy.conf:

в секцию phyint eth0 upstream ratelimit 0 threshold 1 добавляем подсеть транслятор:

altnet 172.18.3.1

в секцию phyint eth2 downstream ratelimit 0 threshold 1 можно ничего не добавлять, это локальная сеть.

Конфиг будет иметь вид:

##------------------------------------------------------
## Enable Quickleave mode (Sends Leave instantly)
##------------------------------------------------------
quickleave
 
##------------------------------------------------------
## Configuration for eth0 (Upstream Interface)
##------------------------------------------------------
phyint eth0 upstream ratelimit 0 threshold 1
altnet 172.18.3.1
 
##------------------------------------------------------
## Configuration for eth1 (Downstream Interface)
##------------------------------------------------------
phyint eth1 downstream ratelimit 0 threshold 1
 
##------------------------------------------------------
## Configuration for eth2 (Disabled Interface)
##------------------------------------------------------
phyint ppp0 disabled

Теперь можно смотреть IPTV, запускаем:

/usr/sbin/igmpproxy /etc/igmpproxy.conf&

Для автозапуска добавляем строку в файл /etc/rc.d/rc.local:

/usr/sbin/igmpproxy /etc/igmpproxy.conf&

Проверено и работает: IpTvPlayer, провайдер ISTV.

Добавить комментарий