Mikrotik + IPTV через Udpxy

Микротиком я обзавёлся примерно год назад, сложностей в его настройке у меня почти не возникло. Кроме одной: я не смог настроить IPTV. Все форумы упоминали два возможных варианта:

  1. Использование IGMP Proxy.
  2. Установка OpenWRT и использование udpxy.

Первый вариант у меня не заработал. Вообще никак. Пакеты просто не шли.

Все статьи по второму варианту ограничивались лишь фразой, что нужно использовать MetaROUTER. Каких-либо внятных инструкций я не нашёл (либо плохо искал). На тот момент это не было большой проблемой для меня, так как я уже использовал udpxy на домашнем сервере. И вот я решил попробовать всё-таки сделать проброс IPTV на роутере.

У меня Mikrotik RB951Ui-2Hnd. Он содержит 128 Мбайт оперативной памяти и 128 Мбайт флэш-памяти.

Будем считать, что всё основное уже настроено и Интернет работает. Вводные данные по интерфейсам:

  • Порт 1 — WAN;
  • Порты 2-5 — LAN;
  • Мост WAN-brigde содержит в себе WAN;
  • Мост LAN-bridge содержит в себе LAN2…LAN5 и WLAN;
  • Подключение к Интернету через PPPoE.

Для начала необходимо скачать образ OpenWRT. Сделать это можно, например, отсюда: http://openwrt.wk.cz/trunk/mr-mips/ . Либо с моего сайта: тыц. Также нам понадобится пакет udpxy, который можно будет взять там же.

Скачанный образ необходимо загрузить в Микротик (Files):

Создаём виртуальную машину. Для этого выбираем пункт меню MetaROUTER. Там нажимаем кнопку «Import Image«. Выбираем образ и выставляем 32 MB оперативной памяти, галочку Enabled убираем:

После успешного импорта у нас появилась новая виртуальная машина. Необходимо дважды щёлкнуть по ней для редактирования настроек. Добавляем диск на 12000 Кбайт:

Жмём OK. Теперь в окне MetaROUTERs переходим на вкладку Interfaces. Здесь надо добавить два интерфейса. Для LAN и WAN:

LAN-интерфейс для виртуальной машины
WAN-интерфейс для виртуальной машины

Теперь нашу виртуальную машину можно запустить. Выбираем Enable. Она автоматически перейдёт в состояние «running». Чтобы подключиться к ней — щёлкаем правой кнопкой мыши и выбираем Console. Увидим загрузку операционной системы. Затем для её активации — жмём Enter:

В списке интерфейсов теперь мы можем наблюдать два новых интерфейса — vif1 и vif2:

Необходимо настроить сеть. Для начала убедимся, что eth0 соответствует локальному интерфейсу. Вводим команду ifconfig и смотрим MAC-адрес. Он должен совпадать с MAC-адресом, который указан в интерфейсе подключенном к LAN-bridge:

Выполняем в консоли команду:

vi /etc/config/network

Нажимаем клавишу i и редактируем файл. После редактирования нажмаем Esc и вводим :wq для сохранения. Приводим файл к такому виду:

config interface loopback
        option ifname lo
        option proto static
        option ipaddr 127.0.0.1
        option netmask 255.0.0.0

config interface lan
        option ifname eth0
        option proto static
        option ipaddr 192.168.1.3
        option netmask 255.255.255.0
        option gateway 192.168.1.1
        option dns 192.168.1.1

192.168.1.3 — это IP-адрес, который получит виртуальная машина. Смените, при необходимости.

Удаляем встроенный DHCP/DNS сервер:

opkg remove dnsmasq

Перезагружаем интерфейсы:

/etc/init.d/network restart

Вручную поднимаем WAN интерфейс:

ifconfig eth1 up

Почему бы не поднимать WAN интерфейс автоматически? Дело в том, что у моего провайдера привязка по MAC-адресу. И если виртуальная машина подключится раньше, чем произойдёт установление PPPoE сессии, то доступ в Интернет будет заблокирован. Поэтому будем пускать виртулку в сеть чуть позже.

Теперь, при вводе команды ifconfig увидим что-то подобное:

Убедимся в том, что Интернет в виртуальной машине доступен. Для этого достаточно пропинговать любой сайт по его доменному имени.

Установим пакет udpxy:

wget http://download.19dx.ru/udpxy/udpxy_1.0.21-2-1_mr-mips.ipk
opkg install ./udpxy_1.0.21-2-1_mr-mips.ipk

Убедимся, что он запускается. Запустим его вручную со следующими параметрами:

udpxy -a eth0 -p 1234 -S -B 2048K -c 10

Теперь введём в браузере следующий URL и убедимся, что видим страницу статистики udpxy:

http://192.168.1.3:1234/status

Уже хорошо. Но для работы IPTV пока недостаточно. Нужно добавить маршруты:

route add -net 235.19.101.0 netmask 255.255.255.0 dev eth1
route add -net 239.0.0.0 netmask 255.0.0.0 dev eth1
route add -net 225.0.0.0 netmask 255.0.0.0 dev eth1

Конкретные адреса можно узнать у вашего провайдера, либо просто заглянув в плейлист.

Теперь необходимо изменить плейлист. Все ссылки вида udp://@x.x.x.x:1234 заменить на http://192.168.1.3:1234/udp/x.x.x.x:1234 . Это легко делается с помощью поиска и замены в любом текстовом редакторе.

Запускаем IPTV плеер и проверяем работу:

Всё отлично! Осталось только сделать так, чтобы маршруты и udpxy стартовали автоматически. Создаём файлик:

vi /etc/iptvstart.sh

Со следующим содержимым:

#!/bin/sh
sleep 30
ifconfig eth1 up
sleep 100
route add -net 235.19.101.0 netmask 255.255.255.0 dev eth1
route add -net 239.0.0.0 netmask 255.0.0.0 dev eth1
route add -net 225.0.0.0 netmask 255.0.0.0 dev eth1

udpxy -a eth0 -p 1234 -S -B 2048K -c 10

И редактируем файл автозагрузки:

vi /etc/rc.local

В него надо добавить только одну строку:
/etc/iptvstart.sh &

Осталось сделать файл исполняемым:

chmod +x /etc/iptvstart.sh

И перезагрузиться:

reboot

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

Все действия проводились на микротике с прошивкой 6.44.6. На последней версии 6.46.1 (на момент публикации) возникала проблема с импортом образов.

Иногда, во время настройки, а особенно при перезагрузке MetaROUTERа — перезагружался полностью Микротик. Судя по всему, это нормальная его реакция. Срабатывает watchdog.

Предупреждение!
Автор не несёт ответственности за возможную порчу оборудования. Всё, что вы делаете — вы делаете на свой страх и риск!