- Настройка IPTV в OpenWRT Asus RT-N13U
- IPTV / UDP multicast
- Основные положения
- Решение
- IGMP proxy
- Установка igmpproxy
- Настройки Firewall
- Запуск igmpproxy
- Подсети провайдера из которых идет вещание
- udpxy
- Установка udpxy
- Пример изменения стартового скрипта /etc/init.d/udpxy
- Настройки Firewall
- Запуск udpxy
- Примечание по совместному использованию igmpproxy и udpxy
Настройка IPTV в OpenWRT Asus RT-N13U
Столкнулся с проблемой прошивки на своем роутере. Никак не хотел работать стабильно. В итоге, перепробовав кучу разных прошивок, остановился на OpenWRT. Для желающих установить следуем сюда.
Итак, я отвлёкся. Мой провайдер предоставляет доступ к IPTV, поэтому изредка за работой я включаю себе что-нибудь из телепередач. Перейдя на данную прошивку заметил, что стандартной настройки UDP-HTTP в ней нет. Поэтому начал рыть рунет на предмет чего-нибудь, что поможет мне в данной ситуации. В результате набрел на статью Silver_Clash «Настройка IPTV в OpenWRT», однако по описанному методу у меня сделать ничего не получилось. Провозившись до 5 утра и найдя в комментариях заветные строки, я его запустил. Теперь хочу поделиться инструкцией с читателями.
Первым делом заходим на ваш роутер по ssh под root пользователем. Все настройки будем производить из консоли.
Устанавливаем udpxy:
opkg update opkg install udpxy
После успешной установки проверим что udpxy запускается:
Если всё в порядке, команда выведет версию udpxy и ее основные опции.
Перейдем, собственно, к настройке (мне было удобнее работать с файлами на роутере через графический интерфейс приложения WinSCP). Открываем файл настроек udpxy (как вам будет удобнее, но напишу для тех, кто работает в putty):
*в случае, если будет установлена новая версия, возможен вариант изменения названия файла настроек, тогда команда будет выглядеть так:
*
Скорее всего, вы увидите что-то такое:
config udpxy option verbose '0' option status '1' # option bind '0.0.0.0' option port '4022' # option source '0.0.0.0' # option max_clients '5' # option log_file '/var/log/udpxy' # option buffer_size '4096' # option buffer_messages '-1' # option buffer_time '-1' # option nice_increment '0' # option mcsub_renew '0'
Тут вам необходимо изменить (или оставить как есть) порт, на котором будет крутиться udpxy.
Изменили? Тогда идем далее.
Запускаем кодировщик командой:
Проверить запустилась ли udpxy можно при помощи команды:
Если вы видите в результате только одну строку, возвращайтесь к настройкам и проверяйте, что вы сделали не так. Если все верно, вы увидите что-то вроде:
2035 root 844 S /usr/bin/udpxy -T -p 4022 -S 2158 root 1476 S grep udpxy
Можно открыть в браузере страничку 192.168.1.1:4022/status для проверки что всё работает.
Теперь нужно прописать наш стартовый скрипт в автозагрузку.
Теперь необходимо настроить фаервол для udp трафика:
config rule option src 'wan' option proto 'igmp' option target 'ACCEPT' config rule option src 'wan' option proto 'udp' option dest_ip '224.0.0.0/4' option target 'ACCEPT'
Эти правила добавляем в /etc/config/firewall, после этого перезапускаем службу:
Есть еще одна проблема, когда нет прописанного маршрута для мультикаста (у меня этот момент был критичным).
Тогда добавляем этот статический маршрут в cron:
@daily route add -net 224.0.0.0/4 dev eth0.2 metric 1
И для надежности прописываем в ssh:
route add -net 224.0.0.0/4 dev eth0.2 metric 1
eth0.2 — это интерфейс, на который wan порт прицеплен.
Теперь можно перезагрузить и сам роутер, чтобы убедиться, что все необходимые службы запускаются, и все работает именно так, как мы задумали.
Берем список каналов у провайдера и все ссылки преобразуем так, как описано в мануале к udpxy:
То есть если у вас в списке каналов указано:
То на выходе должно получиться:
http://192.168.1.1:4022/udp/239.77.0.93:1234
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 snooping» присутствует в вашей прошивке OpenWrt и включена!
# cat /sys/devices/virtual/net/br-lan/bridge/multicast_snooping
Если команда выдаст сообщение содержащие « No such file or directory », то прошивка скомпилирована без поддержки «IGMP snooping» и просмотр IPTV затормозит вашу беспроводную сеть.
Если файл существует, то вывод команды выдаст либо « 1 », либо « 0 ». Если выдается « 1 », то ничего делать не надо, а если « 0 », то для включения «IGMP snooping» в файл /etc/config/network , в конфигурации интерфейса «br-lan», необходимо добавить строку:
Примечание: В версии OpenWrt Attitude Adjustment 12.09, «IGMP snooping» по умолчанию включен, поэтому никакие изменения в /etc/config/network для OpenWrt AA 12.09 не нужны! Однако начиная с ревизии r36463, «IGMP snooping» по умолчанию отключен и для его включения требуются вышеупомянутые действия.
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 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 будет сразу стартовать автоматически в процессе загрузки роутера.
Проверка сервиса igmpproxy
# ps | grep igmp 1900 root 952 S /usr/sbin/igmpproxy /var/etc/igmpproxy.conf 1941 root 1336 S grep igmp #
При отсутствии строки “/usr/sbin/igmpproxy /var/etc/igmpproxy.conf”, отладка сервиса из командной строки
# igmpproxy -d -vv /var/etc/igmpproxy.conf
В случае падений сервиса, можно добавить в cron команду
*/30 * * * * /usr/bin/pgrep igmpproxy || /etc/init.d/igmpproxy start
Подсети провайдера из которых идет вещание
Если вы не уверены, что надо написать в строках 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 ». Адрес, указанный после source address необходимо прописать в list altnet файла конфигурации /etc/config/igmpproxy . В случае нескольких адресов, прописать соответсвующую маску.
Для универсальности можно разрешить igmpproxy слушать все возможные адреса, прописав
config phyint option network wan option direction upstream list altnet 0.0.0.0/0
Однако в этом случае возможна нестабильность.
Также следует учитывать, что значение 0.0.0.0/0 поддерживается начиная с ревизии r40729. На старых ревизиях igmpproxy откажется запускаться с данным значением, выдав ошибку: « The bits part of the address is invalid : 4286488 ».
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-ALL' option src 'wan' option proto 'all' option dest_ip '224.0.0.0/4' option target 'ACCEPT'
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website. OK More information about cookies
Self-registration in the wiki has been disabled.
If you want to contribute to the OpenWrt wiki, please post HERE in the forum or ask on IRC for access.
Except where otherwise noted, content on this wiki is licensed under the following license:
CC Attribution-Share Alike 4.0 International