IPTV: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Category:HOWTO category:admin Настройка IPTV.»)
 
Нет описания правки
 
(не показано 8 промежуточных версий 2 участников)
Строка 1: Строка 1:
[[Category:HOWTO]]
== Настройка IPTV. ==
[[category:admin]]


Настройка IPTV.
=== Обозначения ===
 
wan0 - интерфейс в сеть провайдера (ваш можеет называться, например, eth0;
в таком случае во всех примерах надо заменить wan0 на eth0)
 
lan0 - интерфейс в локальную проводную сеть
 
ap0 - интерфейс в локальную беспроводную сеть
 
=== Уточняем используюемую версию igmp ===
 
В новых ядрах по умолчанию используется igmp v3.
провайдер, может использовать igmp v1 или igmp v2.
Чтобы узнать, какая версия протокола используется, прослушаем сеть:
# tcpdump -i eth0 igmp
 
Если провайдер не поддерживает igmp v3, то
в сетевых руководствах в таких случаях рекомендуется форсировать протокол igmp v2,
для чего внести в /etc/net/sysctl.conf
net.ipv4.conf.wan0.force_igmp_version = 2
Аналогично можно форсировать igmp v1.
Также, встречается совет отключить
net.ipv4.icmp_echo_ignore_broadcasts = 0
но у меня все работает и без этих настроек, с настройками по умолчанию.
Похоже, провайдер нормально работает с igmp v3.
Другой случай, где эти настройки могут понадобиться -
если собираетесь настраивать igmpproxy. На момент написания igmpproxy-0.1 не поддерживал igmp v3.
 
=== Маршруты multicast ===
Для того, чтобы иметь возможность присоединяться к multicast группам, обязательно надо указать
маршрут для multicast запросов:
# ip route add 224.0.0.0/4 dev wan0
На постоянной основе вписываем его в etcnet в ipv4route внешнего интерфейса:
$ cat /etc/net/ifaces/wan0/ipv4route
default via xxx.xxx.xxx.xxx
224.0.0.0/4
 
=== Firewall ===
Коротко:
iptables -I INPUT -i wan0 -d 224.0.0.0/4 -j ACCEPT
и, опционально, если фильтруется OUTPUT
iptables -I OUTPUT -o wan0 -d 224.0.0.0/4 -j ACCEPT
 
Вместо
iptables -I INPUT -i wan0 -d 224.0.0.0/4 -j ACCEPT
я использую более детализированные правила
iptables -I INPUT -o wan0 -d 224.0.0.0/4 -p igmp -j ACCEPT
iptables -I INPUT -i wan0 -d 224.0.0.0/4 -p udp -m udp \! --dport 1900 -j ACCEPT
на случай, если вдруг захочется поднять igmpproxy на 1900 порту.
 
=== Multicast sharing ===
 
При таких настройках можно смотреть IPTV на основной машине.
Далее хочется раздавать IPTV в домашнюю сеть.
В общем случае можно использовать igmpproxy для маршрутизации multicast трафика.
Однако в домашней сети не так много машин, чтобы проявились достоинства multicast,
а в сети есть жалобы, что из-за глюков в igmpproxy или неудачных настроек можно легко зафлудить сеть,
особенно беспроводную.
Действительно, 1 TV канал - около 5Mbit трафика. Достаточно переключить десяток каналов
и по какой-то причине не отписаться от соответствующих групп - и беспроводной канал забит.
 
Альтернативное решение - вместо igmpproxy поднять udpxy, который раздает в локальную сеть обычные unicast потоки.
пример настроек
$ cat /etc/sysconfig/udpxy
OPTIONS="-m net0 -a lan0 -p 4022 -c 2 -S -l /var/log/udpxy.log -B 2048K"
неудобство - придется править playlist:
sed -e 's/^udp:\/\/\@/http:\/\/192.168.1.1:4022\/udp\//' -i tv.m3u
где 192.168.1.1 -- адрес машины, на которой поднят udpxy.
 
=== Ссылки ===
* http://wiki.mikrotik.com/wiki/Manual:Multicast_detailed_example
* http://xgu.ru/wiki/Multicast_%D0%B2_Linux
* http://www.linuxplanet.com/linuxplanet/tutorials/6604/1
* http://sda00.blogspot.com/2010/02/multicast-forwardrouting-linux-openbsd.html
* http://www.tonchik.ru/pub/over/Linux%20Multicast%20Routing%20with%20IGMPProxy.html
* http://blog.lystor.org.ua/2010/03/watching-udp-multicast-stream-on-linux.html
* http://habrahabr.ru/blogs/sysadm/111317/#habracut
* http://linux-bash.ru/mseti/77-iptv.html
* http://versuz.livejournal.com/34258.html
 
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Текущая версия от 14:57, 19 июля 2015

Настройка IPTV.

Обозначения

wan0 - интерфейс в сеть провайдера (ваш можеет называться, например, eth0; в таком случае во всех примерах надо заменить wan0 на eth0)

lan0 - интерфейс в локальную проводную сеть

ap0 - интерфейс в локальную беспроводную сеть

Уточняем используюемую версию igmp

В новых ядрах по умолчанию используется igmp v3. провайдер, может использовать igmp v1 или igmp v2. Чтобы узнать, какая версия протокола используется, прослушаем сеть:

# tcpdump -i eth0 igmp

Если провайдер не поддерживает igmp v3, то в сетевых руководствах в таких случаях рекомендуется форсировать протокол igmp v2, для чего внести в /etc/net/sysctl.conf

net.ipv4.conf.wan0.force_igmp_version = 2

Аналогично можно форсировать igmp v1. Также, встречается совет отключить

net.ipv4.icmp_echo_ignore_broadcasts = 0

но у меня все работает и без этих настроек, с настройками по умолчанию. Похоже, провайдер нормально работает с igmp v3. Другой случай, где эти настройки могут понадобиться - если собираетесь настраивать igmpproxy. На момент написания igmpproxy-0.1 не поддерживал igmp v3.

Маршруты multicast

Для того, чтобы иметь возможность присоединяться к multicast группам, обязательно надо указать маршрут для multicast запросов:

# ip route add 224.0.0.0/4 dev wan0

На постоянной основе вписываем его в etcnet в ipv4route внешнего интерфейса:

$ cat /etc/net/ifaces/wan0/ipv4route
default via xxx.xxx.xxx.xxx
224.0.0.0/4

Firewall

Коротко:

iptables -I INPUT -i wan0 -d 224.0.0.0/4 -j ACCEPT

и, опционально, если фильтруется OUTPUT

iptables -I OUTPUT -o wan0 -d 224.0.0.0/4 -j ACCEPT

Вместо

iptables -I INPUT -i wan0 -d 224.0.0.0/4 -j ACCEPT

я использую более детализированные правила

iptables -I INPUT -o wan0 -d 224.0.0.0/4 -p igmp -j ACCEPT
iptables -I INPUT -i wan0 -d 224.0.0.0/4 -p udp -m udp \! --dport 1900 -j ACCEPT

на случай, если вдруг захочется поднять igmpproxy на 1900 порту.

Multicast sharing

При таких настройках можно смотреть IPTV на основной машине. Далее хочется раздавать IPTV в домашнюю сеть. В общем случае можно использовать igmpproxy для маршрутизации multicast трафика. Однако в домашней сети не так много машин, чтобы проявились достоинства multicast, а в сети есть жалобы, что из-за глюков в igmpproxy или неудачных настроек можно легко зафлудить сеть, особенно беспроводную. Действительно, 1 TV канал - около 5Mbit трафика. Достаточно переключить десяток каналов и по какой-то причине не отписаться от соответствующих групп - и беспроводной канал забит.

Альтернативное решение - вместо igmpproxy поднять udpxy, который раздает в локальную сеть обычные unicast потоки.

пример настроек

$ cat /etc/sysconfig/udpxy
OPTIONS="-m net0 -a lan0 -p 4022 -c 2 -S -l /var/log/udpxy.log -B 2048K"

неудобство - придется править playlist:

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

где 192.168.1.1 -- адрес машины, на которой поднят udpxy.

Ссылки