Столкнулся с проблемой прошивки на своем роутере. Никак не хотел работать стабильно. В итоге, перепробовав кучу разных прошивок, остановился на OpenWRT. Для желающих установить следуем сюда.

Итак, я отвлёкся. Мой провайдер предоставляет доступ к IPTV, поэтому изредка за работой я включаю себе что-нибудь из телепередач. Перейдя на данную прошивку заметил, что стандартной настройки UDP-HTTP в ней нет. Поэтому начал рыть рунет на предмет чего-нибудь, что поможет мне в данной ситуации. В результате набрел на статью Silver_Clash «Настройка IPTV в OpenWRT», однако по описанному методу у меня сделать ничего не получилось. Провозившись до 5 утра и найдя в комментариях заветные строки, я его запустил. Теперь хочу поделиться инструкцией с читателями.

Первым делом заходим на ваш роутер по ssh под root пользователем. Все настройки будем производить из консоли.

Устанавливаем udpxy:

opkg update
opkg install udpxy

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

/usr/bin/udpxy

Если всё в порядке, команда выведет версию udpxy и ее основные опции.

Перейдем, собственно, к настройке (мне было удобнее работать с файлами на роутере через графический интерфейс приложения WinSCP). Открываем файл настроек udpxy (как вам будет удобнее, но напишу для тех, кто работает в putty):

vi /etc/config/udpxy 

*в случае, если будет установлена новая версия, возможен вариант изменения названия файла настроек, тогда команда будет выглядеть так:

 vi /etc/config/udpxy-opkg
*
Скорее всего, вы увидите что-то такое:

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.

Изменили? Тогда идем далее.

Запускаем кодировщик командой:

/etc/init.d/udpxy start

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

ps |grep udpxy

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

 2035 root       844 S    /usr/bin/udpxy -T -p 4022 -S
 2158 root      1476 S    grep udpxy


Можно открыть в браузере страничку 192.168.1.1:4022/status для проверки что всё работает.
Теперь нужно прописать наш стартовый скрипт в автозагрузку.

/etc/init.d/udpxy enable


Теперь необходимо настроить фаервол для 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

Есть еще одна проблема, когда нет прописанного маршрута для мультикаста (у меня этот момент был критичным).
Тогда добавляем этот статический маршрут в 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://{address}:{port}/{protocol}/{channel_addr}:{channel_port}

То есть если у вас в списке каналов указано:
udp://@239.77.0.93:1234

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

http://192.168.1.1:4022/udp/239.77.0.93:1234

Спасибо за внимание.

Комментарии (11)