IPTV
Материал из ALT Linux Wiki
(→Узнаем используюемую версию igmp) |
|||
Строка 6: | Строка 6: | ||
=== Обозначения === | === Обозначения === | ||
- | wan0 - интерфейс в сеть провайдера | + | wan0 - интерфейс в сеть провайдера (ваш можеет называться, например, eth0; |
+ | в таком случае во всех примерах надо заменить wan0 на eth0) | ||
lan0 - интерфейс в локальную проводную сеть | lan0 - интерфейс в локальную проводную сеть | ||
Строка 19: | Строка 20: | ||
# tcpdump -i eth0 igmp | # tcpdump -i eth0 igmp | ||
- | Если провайдер | + | Если провайдер не поддерживает igmp v3, то |
в сетевых руководствах в таких случаях рекомендуется форсировать протокол igmp v2, | в сетевых руководствах в таких случаях рекомендуется форсировать протокол igmp v2, | ||
для чего внести в /etc/net/sysctl.conf | для чего внести в /etc/net/sysctl.conf | ||
Строка 27: | Строка 28: | ||
net.ipv4.icmp_echo_ignore_broadcasts = 0 | net.ipv4.icmp_echo_ignore_broadcasts = 0 | ||
но у меня все работает и без этих настроек, с настройками по умолчанию. | но у меня все работает и без этих настроек, с настройками по умолчанию. | ||
- | + | Похоже, провайдер нормально работает с igmp v3. | |
+ | Другой случай, где эти настройки могут понадобиться - | ||
+ | если собираетесь настраивать igmpproxy. На момент написания igmpproxy-0.1 не поддерживал igmp v3. | ||
=== Маршруты multicast === | === Маршруты 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 -a ap0 -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://habrahabr.ru/blogs/sysadm/111317/#habracut | ||
+ | * http://linux-bash.ru/mseti/77-iptv.html |
Версия 23:20, 21 февраля 2012
Содержание |
Настройка 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 -a ap0 -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://habrahabr.ru/blogs/sysadm/111317/#habracut
- http://linux-bash.ru/mseti/77-iptv.html