*nix / Настройка IPTV в OpenWRT

в 21:04, , рубрики: iptv, OpenWrt, UCI, udpxy, метки: , , ,

Хотя я практически не смотрю телевизор, иногда появляется непреодолимое желание посмотреть что сейчас вещают в новостях. Часто это желание возникает когда дочка спит, и телевизор уже вне зоны доступа. Как вы понимаете выход один — IPTV.

По счастливому стечению обстоятельств у меня подключен тарифный план с бесплатным пакетом IPTV и имеется роутер Netgear WNDR-3800. На роутере имеется прошивка OpenWrt Backfire 10.03.1.
На хабре было много статей об OpenWrt, о настройке сети в OpenWrt, настройке IPTV трансляций, и некоторые другие, но к сожалению в них процесс настройки собственно IPTV если и описан, то без каких либо подробностей. И хотя этот процес совсем не сложен, я надеюсь мой топик сократит время на поиск и чтение необходимых мануалов, которых в сети предостаточно. Я произвожу эти настройки не в первый раз, так как иногда в процессе экспериментов с VPN, Wi-Fi и другими плюшками роутер умирал и восстанавливался в аварийном режиме. Посему будьте внимательны и осторожны, что бы не пришлось обращаться к процедуре восстановления.

Все настройки будем производить из консоли, т.к. я с некоторых пор не доверяю LuCI. Предпологается что вы подключены к роутеру по ssh под рутом.

Первым делом устанавливаем udpxy:

opkg update opkg install udpxy

После успешной установки проверим что udpxy запускается:

/usr/bin/udpxy

Эта команда выведет версию udpxy и ее основные опции. Кстати подробное описание все опций можно найти здесь.

Перейдем собственно к настройке. В папке /etc/init.d создаем файл udpxy:

cd /etc/init.d vi udpxy

Этот файл — стартовый скрипт udpxy. Подробнее о стартовых скриптах OpenWrt можно узнать здесь.
Содержимое нашего файла будет примерно таким:

#!/bin/sh /etc/rc.common # Copyright © 2010 OpenWrt.org  START=99 STOP=10  IGMP_OPTS="-a br-lan -m eth1 -p 8888 -M 600" IGMP_BIN="/usr/bin/udpxy" PID_F="/var/run/udpxy.pid"  start() {         echo "Starting udpxy"         start-stop-daemon -S -x $IGMP_BIN -p $PID_F -b -m -- $IGMP_OPTS }  stop() {         echo "Stopping udpxy"         start-stop-daemon -K -x $IGMP_BIN -q }

Для запуска службы используется start-stop-daemon — утилита для контроля запуска и остановки системных служб. В IGMP_BIN указываем что и откуда запускать, PID_F — куда записать PID что бы в последствии за ним можно было следить, IGMP_OPTS — настройки запускаемой службы.

Прежде чем указывать настройки, советую попробовать запустить udpxy с этими настройками, и только после этого переносить их в конфиг, это поможет вам не стать жертвой опечатки, и возможно сэкономит немного времени.

После того как все настройки завершены, закрываем файл udpxy и запускаем сервис командой

/etc/init.d/udpxy start

Проверить запустилась ли udpxy можно при помощи команды

ps |grep udpxy

Если вы видите в результате только одну строку, возвращайтесь к настройкам и проверяйте что вы сделали не так. В случае если все верно, должно получиться что то вроде

 1637 root       804 S    /usr/bin/udpxy -a br-lan -m eth1 -p 8888 -M 600  29984 root      1372 S    grep udpxy 

Так же можно открыть в браузере страничку http://192.168.1.1:8888/status для проверки что udpxy работает.
Теперь можно прописать наш стартовый скрипт в автозагрузку. Для этого достаточно выполнить команду:

/etc/init.d/udpxy enable

после этого в папке /etc/rc.d должна появиться символическая ссылка вида S99udpxy. Проверить добавился ли скрипт в автозагрузку можно так же командой

/etc/init.d/udpxy enabled && echo «enabled»

если все нормально вы получите в ответ «enabled».

Дело осталось за малым — создать правила для 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, и после этого перезапустить службу командой:

/etc/init.d/firewall restart

Так же можно перезагрузить и сам роутер, что бы убедиться что все необходимые службы запускаются, ивсе рабтает именно так как мы задумали.
Теперь берем список каналов у провайдера, и все ссылки преобразуем так как описано в мануале к udpxy:

http://{address}:{port}/{protocol}/{channel_addr}:{channel_port}

то есть если у вас в списке каналов указано

rtp://@111.22.33.44:1234

то на выходе должно получиться

http://192.168.1.1:8888/udp/111.22.33.44:1234

После этого открываем список каналов любым подходящим проигрывателем и наслаждаемся.

Автор: Silver_Clash


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js