Pull to refresh

Настройка IPTV в TomatoUSB + udpxy

Reading time 5 min
Views 41K

На Хабре уже рассматривался вопрос о настройке и просмотре IPTV через роутер на различных прошивках — openWRT, DDWRT и прочих, но никто не описывал подробно как настроить IPTV на прошивке Tomato за счёт перенаправления UDP трафика провайдера в TCP трафик клиента с помощью приложения udpxy. В этой статье я подробно опишу процесс установки и запуска udpxy на прошивке tomato v1.28, а так же расскажу как сделать мост WAN to LAN для отдельной IPTV приставки, ибо сам я потратил очень много времени чтобы разобраться во всём этом, и будь у меня под рукой подобная статья я бы справился намного быстрее.
Что такое udpxy? Официальный сайт разработчиков данного приложениея даёт нам такую формулировку:
udpxy — серверное приложение (daemon) для передачи данных из сетевого потока мультикаст канала (вещаемого по UDP) в HTTP соединение запрашивающего клиента.
Многие могут возразить, мол всё итак работает если просто включить multicast в настройках, но в моём случае просмотр IPTV через Wi-Fi корректно не работал: каналы загружались долго, картинка видео застывала, изображение «рассыпалось», интернет жутко начинал тормозить или совсем пропадал. Как следует поискав в интернете, я не нашёл внятной инструкции как перенаправить UDP в TCP на прошивке Tomato, попадались некоторые инструкции, но они были краткими и описывали сам механизм работы, а не конкретную настройку. Многие наши соотечественники даже писали, что это невозможно и нужно ставить другую прошивку и настраивать её или ставить прошивку которая «из коробки» поддерживает udpxy, но больно уж я полюбил «помидорную» прошивку за её производительность, функционал, и понятный, не нагруженный, интерфейс. В общем я решил довести дело до конца и попробовать самому во всём разобраться и настроить. В итоге появилась данная инструкция.

Оборудование и параметры использованные при настройке

  • Роутер NETGEAR WNR3500L с прошивкой Tomato Firmware v1.28.9054 MIPSR2-beta K26 USB Ext.
  • Прямое Ethernet соединение роутера с провайдером, тип соединения DHCP, внешний статический ip адрес.
  • Роутер вещает Wi-Fi на частоте 2,4ххGHz, скорость соединения 150мб/с, то есть полноценный 802.11n.
  • Ноутбук с wi-fi адаптером поддерживающим 802.11n, скорость 150мб/с, ОС Windows 8.1.
  • Тарифный план 40-100мб/с с подключенным IPTV вещанием, провайдер SkyNet Спб.
  • Локальный ip адрес роутера 192.168.1.1 маска сети 255.255.255.0.

Инструкция по настройке

  1. Для начала качаем нужные файлы: нам понадобится само приложение «udpxy», которое подходит для роутера WNR3500L, скачать можно отсюда.
  2. Так же нам понадобится утилита «PUTTY» для работы с роутером по протоколу SSH, качаем последнюю версию отсюда.
  3. Заходим в админ-панель роутера в раздел «Administration» ищем там подраздел «Admin Access» ставим галки на «Enable at Startup» и «Remote Access».
  4. Далее в том же разделе «Administration» заходим в подраздел «JFFS» и ставим галку на «Enable», после этого жмём кнопку «Format/Erase» и дожидаемся форматирования раздела JFFS.
  5. Жмём внизу «save» и потом слева «reboot» (перезагружаем роутер).
  6. Открываем утилиту putty вводим локальный адрес роутера (в моём случае это был 192.168.1.1) и нажимаем «open», вводим логин "root" и пароль, который вы ставили на роутер, если ничего не меняли, то пароль должен быть "admin".
  7. Теперь вводим команду:
    cd /jffs
    Жмём ввод (переходим в папку /jffs).
  8. Далее нам нужно выложить в сеть файл «udpxy» так чтобы он был доступен по прямой ссылке — я выкладывал на rghost.ru, у меня ссылка получилась такая:
    http://rghost.ru/download/51607682/5d8db6ffe010a13afdf1cb07ac9b7cd328c693ea/udpxy
    (заходим например на rghost.ru, загружаем файл, копируем ссылку на файл, она будет под кнопкой «скачать», и продолжаем)
  9. После скачивам в наш роутер приложение udpxy, находясь в каталоге /JFFS вводим в putty:
    wget http://прямая_ссылка_на_udpxy
    В моём случе это выглядело вот так:
    wget http://rghost.ru/download/51607518/5c3ff2536e7358f656931ee9f4aef9728c92f1ed/udpxy
    Если ссылка правильная и файл скачался то вы увидите:
    Connecting to "rghost.ru (217.199.218.100:80)" (или другой сервер на котором лежит файл)
    udpxy                100% |*******************************| 66067  00:00:00 ETA
  10. Теперь нам нужно дать правильные права на файл с помощью команды:
    chmod +x udpxy
  11. Проверим есть ли наш файл в папке, вводим:
    ls
    Если файл присутствует, то вы увидите его название.
  12. Далее нам нужно запустить данное приложение (службу) на роутере — делаем это командой:
    udpxy -c (кол-во подключаемых клиентов) -a (внутренний ip адрес вашего роутера) -p (порт на котором будет вещать IPTV) -m (внешний IP адрес вашего роутера) -M (периодически возобновлять подписку на мультикаст-канал)
    В моём случае это выглядело вот так:
    udpxy -c 10 -a 192.168.1.1 -p 7780 -m 93.100.126.169 -M 30
    При успешном вводе команды после нажатия ввода ничего не должно ругаться в командной строке.
  13. Теперь проверим работает ли наша служба, вводим команду:
    s |grep udpxy
    Если служба работает вы должны увидеть примерно следуюущее:
    634 root       792 S    /jffs/udpxy -c 10 -a 192.168.1.1 -p 7780 -m 93.100.126.169 -M 30
    671 root      1700 S    grep udpxy
  14. Далее чтобы удостовериться на 100%, что всё заработало, идём в браузер и набираем в адресной строке:
    http://адрес_роутера:порт_вещания/status
    В моём случае это было:
    http://192.168.1.1:7780/status
    Если увидели там страничку «udpxy status:» значит всё работает.
  15. Возвращаемся в putty и прописываем по порядку правила для Firewall, вводим:
    iptables -A INPUT -p igmp -j ACCEPT
    iptables -A INPUT -p udp -m udp -d 224.0.0.0/4 -j ACCEPT
  16. Теперь нам нужно настроить автозапуск службы вместе с включением роутера, для этого идём в админ панель роутера в раздел «Administration» в подраздел «Scripts» во вкладку «Init» в поле для текста прописываем таймаут для запуска службы и команду, которой запускали службу udpxy, в моём случае это выглядело вот так:
    sleep 30
    /jffs/udpxy -c 10 -a 192.168.1.1 -p 7780 -m 93.100.126.169 -M 30
  17. Там же переходим во вкладку «firewall» и сюда вписываем 2 правила для Firewall:
    iptables -A INPUT -p igmp -j ACCEPT
    iptables -A INPUT -p udp -m udp -d 224.0.0.0/4 -j ACCEPT
  18. И последний шаг — берём плейлист с каналами IPTV провайдера и редактируем все его ссылки (открываем блокнотом, я лично пользовался Akelpad и функцией «нати и заменить»):
  19. ссылки вида
    udp://@ip_адрес:порт
    должны стать вида
    http://192.168.1.1:7780/udp/ip_адрес:порт
    В моём случае это выглядело так:
    udp://@239.195.0.73:1234
    стало так:
    http://192.168.1.1:7780/udp/239.195.0.73:1234
    сохраняем полученный плейлист и закрываем блокнот.
  20. Теперь можно открыть наш правленый плейлист VLC плеером например и проверить всё ли работает, если работает — перезагружаем роутер и проверяем ещё раз, если после перезагрузки не работает проверяем пункты 16 и 17.

Итоги

Мы получили перенаправление UDP трафика от провайдера в TCP трафик клиента, за счёт этого разгрузили роутер, получили быструю скорость загрузки видеопотока и высокое качество видео без «замираний» и «рассыпаний» изображения при просмотре на ПК. У меня всё прекрасно работает через wi-fi соединение на ноутбуке, а так же работает на медиаплеере iconbit HDS6L, который подключен по LAN к роутеру. Способ не самый простой, но изящный. Реализация его доставила мне очень много удовольствия. Очень надеюсь что эта информация проиндексируется в поисковиках и поможет таким же, неопытным как я, пользователям.

Добавлено 24.10.2015
Я наконец нашёл время приобрести IPTV приставку и тут мне понадобилось сделать мост WAN to LAN, чтобы приставка получила ip от провайдера и начала работать.
В админке идем в «Утилиты» -> «Системные команды» (для нерусифицированной версии: Tools -> System) и набираем последовательно команды:
  1. Сначала проверка:
    nvram show | grep vlan.ports

    Мы должны получить ответ:
    vlan1ports=4 3 2 1 8*
    vlan2ports=0 8
  2. Если ответ совпадает, выполняем команды последовательно дальше:
    nvram set manual_boot_nv=1
    nvram set vlan1ports="4 3 2 8*"
    nvram set vlan2ports="0 1 8"
    nvram commit
    reboot
  3. Дожидаемся перезагрузки и проверяем повторно выполнив команду 1.
    nvram show | grep vlan.ports

    Мы должны получить ответ:
    vlan1ports=4 3 2 8*
    vlan2ports=0 1 8
  4. Втыкаем в 4-й порт кабель, идущий к приставке и вуаля — все работает!
Tags:
Hubs:
+5
Comments 6
Comments Comments 6

Articles