IPTV / UDP multicast
Многие интернет провайдеры предоставляют услуги IPTV, обычно используя при этом IPv4 UDP multicasting. Ниже приведены инструкции по настройке для большинства случаев.
Основные положения
Когда хост хочет начать получать широковещательный UDP трафик, то он должен принадлежать к группе «UDP multicast group». Контроль для широковещательных групп базируется на протоколе IGMP. Как только хост подписан, весь трафик для этой группы посылается ей используя broadcast L2 frames. Это важно, потому как многие роутеры направляют весь широковещательный трафик на все порты. В домашних сетях вы обычно используете Linux для управления проводными и беспроводными сетями, и если вы получаете широковещательный трафик по проводному каналу, то вы будете забивать им и беспроводные каналы тоже. К счастью в версии ядра Linux 2.6.34 есть возможность «IMGP snooping», которая отслеживает подобные ситуации и по умолчанию присутствует в OpenWrt. Таким образом у вас не будет нежелательного трафика на портах, который не были вами заданы для получения.
Ещё одним важным фактором является так же то, что из-за использования низкого уровня скорости (чтобы все клиенты могли «слушать»), а так же хитрых режимов энергосбережения – широковещание в беспроводных сетях работает не так, как этого от него ожидаешь. Зачастую широковещание бесполезно для IPTV.
Решение
Благодаря «IGMP snooping», утилита igmpproxy больше не должна создавать проблемы в беспроводных сетях. Теперь вы можете одновременно запускать обе утилиты igmpproxy и udpxy.
IGMP proxy
Если ваш клиент находится за NAT, то он не может подписываться на мультикаст напрямую. Для решения этой проблемы понадобится утилита igmpproxy.
Установка igmpproxy
Выполните команды устанавливающие igmpproxy:
# opkg update # opkg install igmpproxy
После установки пакета, необходимо отредактировать файл конфигурации /etc/config/igmpproxy:
config igmpproxy option quickleave 1 config phyint option network wan option direction upstream list altnet 192.168.0.0/16 list altnet 172.16.0.0/12 list altnet 10.0.0.0/8 list altnet 224.0.0.0/4 config phyint option network lan option direction downstream config phyint option network loopback option direction disabled
Настройки Firewall
Вы так же должны разрешить IGMP для WAN интерфейса и перенаправить широковещательный трафик следующими правилами в файле /etc/config/firewall:
config rule option name 'Allow-IGMP' option src 'wan' option proto 'igmp' option target 'ACCEPT' config rule option name 'Allow-IPTV-IGMPPROXY' option src 'wan' option proto 'udp' option dest 'lan' option dest_ip '224.0.0.0/4' option target 'ACCEPT'
Запуск igmpproxy
После добавления правил, необходимо перезапустить фаервол, добавить igmpproxy в автостарт и естественно запустить сам igmpproxy. Выполните следующие команды:
# /etc/init.d/firewall restart # /etc/init.d/igmpproxy enable # /etc/init.d/igmpproxy start
В дальнейшем igmpproxy будет сразу стартовать автоматически в процессе загрузки роутера.
Подсети провайдера из которых идет вещание
Если вы не уверены, что надо написать в строках list altnet файла конфигурации /etc/config/igmpproxy, то закомментируйте эти строки и посмотрите на вывод igmpproxy в логе роутера. Пытайтесь после запуска igmpproxy подписываться на какие-либо каналы с помощью VLC или каким-нибудь другим клиентом (проигрывателем). Если в файле конфигурации не будет хватать сетей, то вы увидите в логе, что-то типа: «Warn: The source address 10.254.16.66 for group 233.32.240.222, is not in any valid net for upstream VIF». Таким образом вы узнаете широковещательный адрес вашего провайдера и сможете добавить необходимую подсеть в файл конфигурации /etc/config/igmpproxy.
udpxy
Альтернативным путем, который позволяет получить доступ к широковещательным UDP потокам, является утилита udpxy. Работает довольно хорошо, как на проводных, так и на беспроводных соединениях.
Установка udpxy
Выполните команды устанавливающие udpxy:
# opkg update # opkg install udpxy
После установки пакета, возможно вам понадобится отредактировать стартовый скрипт /etc/init.d/udpxy в соответствии с вашими требованиями. Вас должна интересовать только строка OPTIONS="-T -S -p 4022". Вы можете ее оставить так, как она есть, но если вас что-то будет не устраивать в работе udpxy, то вы можете изменить ключи для запуска udpxy в соответствии с руководством по использованию данной утилиты.
Пример изменения стартового скрипта /etc/init.d/udpxy
#!/bin/sh /etc/rc.common
# To open multicast traffic, add the following rule at the end of
# /etc/config/firewall file:
#
# config 'rule'
# option 'target' 'ACCEPT'
# option '_name' 'multicast'
# option 'src' 'wan'
# option 'proto' 'all'
# option 'dest_ip' '224.0.0.0/4'
START=99
STOP=10
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
#OPTIONS="-T -S -p 4022"
OPTIONS="-T -S -m eth0.2 -p 4022 -B 2Mb -M 600"
start() {
service_start /usr/bin/udpxy $OPTIONS
}
stop() {
service_stop /usr/bin/udpxy
}
Настройки Firewall
Для того, чтобы udpxy мог работать с IGMP, вы должные добавить соответствующие правила в файл /etc/config/firewall:
config rule option name 'Allow-IGMP' option src 'wan' option proto 'igmp' option target 'ACCEPT' config rule option name 'Allow-IPTV-UDPXY' option src 'wan' option proto 'all' option dest_ip '224.0.0.0/4' option target 'ACCEPT'
Запуск udpxy
После добавления правил, необходимо перезапустить фаервол, добавить udpxy в автостарт и естественно запустить сам udpxy. Выполните следующие команды:
# /etc/init.d/firewall restart # /etc/init.d/udpxy enable # /etc/init.d/udpxy start
В дальнейшем udpxy будет сразу стартовать автоматически в процессе загрузки роутера.
Теперь когда вы захотите получить доступ, скажем, к udp://@239.64.64.58:1234, то вы должны указать своему проигрывателю соединиться с адресом http://192.168.1.1:4022/udp/239.64.64.58:1234. В данном примере, IP-адрес 192.168.1.1 является адресом вашего роутера в локальной сети.
Примечание по совместному использованию igmpproxy и udpxy
Если вы планируете использовать одновременно igmpproxy и udpxy, то в файле конфигурации фаервола – /etc/config/firewall у вас в итоге должно быть три правила:
config rule option name 'Allow-IGMP' option src 'wan' option proto 'igmp' option target 'ACCEPT' config rule option name 'Allow-IPTV-IGMPPROXY' option src 'wan' option proto 'udp' option dest 'lan' option dest_ip '224.0.0.0/4' option target 'ACCEPT' config rule option name 'Allow-IPTV-UDPXY' option src 'wan' option proto 'all' option dest_ip '224.0.0.0/4' option target 'ACCEPT'
ru/doc/howto/udp_multicast.txt · Last modified: 2013/05/15 03:00 by yohimba
This text is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
