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

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


=== Обозначения ===
=== Обозначения ===


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


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


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


В новых ядрах по умолчанию используется igmp v3.
В новых ядрах по умолчанию используется igmp v3.
провайдер, скорее всего, будет использоваться igmp v1 или igmp v2.
провайдер, может использовать 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


У меня провайдер использует igmp v2:
=== 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


В сетевых руководствах в таких случаях рекомендуется форсировать протокол igmp v2,
Вместо
  /etc/net/sysctl.conf
  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 трафика. Достаточно переключить десяток каналов
и по какой-то причине не отписаться от соответствующих групп - и беспроводной канал забит.


=== Маршруты multicast ===
Альтернативное решение - вместо 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}}}}

Текущая версия от 11: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.

Ссылки