notby.NET Logo

Настройка IPTV утилитой udpxy в FreeBSD

У меня сервер FreeBSD используется как маршрутизатор, а у провайдера есть IPTV по средствам Multicast (IGMP). Можно использовать конечно маршрутизацию и трансляцию Multicast в локальную сеть, но это сложнее и у меня сеть телевизор которые понимает только прямые HTTP трансляции. Для этих задач есть серверная программа udpxy. Принцип работы основан на том что она принимает Multicast по протоколу UDP и транслирует его в протокол TCP. Вещание осуществляет по средствам HTTP запросов.

Это удобно когда устройства или программы не умеют работать с IP-телевидением по средствам Multicast. А еще это дает возможность получить доступ к IPTV провайдера с любого места в интернете (если есть внешний IP-адрес). Можно будет смотреть IPTV находясь не дома.

1. Установка udpxy

Для установки переходим в каталог /usr/ports/ports-mgmt/portmaster/ и устанавливаем

cd /usr/ports/net/udpxy && make install clean
Установка порта udpxy, выбор конфигурации "RELEASE"

2. Загрузка и запуск udpxy

Добавим udpxy в автозагрузку. Открываем файл /etc/rc.conf и добавляем строки

nano /etc/rc.conf
udpxy_enable="YES"
udpxy_flags="-m 80.95.110.25 -a 192.168.0.1 -p 4022"
# За место IP можно указать имя сетевого интерфейса.
# Это полезно когда IP-адрес динамический.
#udpxy_flags="-m em0 -a 192.168.0.1 -p 4022"
  • флаг -m (80.95.110.25)IP-адрес внешнего сетевого интерфейса (Интернет) или сетевой интерфейс
  • флаг -a (192.168.0.1)IP-адрес внутренний сетевой карты или сетевой интерфейс
  • флаг -p (4022) – порт подключения.

В такой конфигурации подключится к udpxy можно будет только из внутренней сети к 192.168.0.1 по 4022 порту. Если не указывать флаг -a, то к udpxy можно будет подключиться с любого адреса.

Запускаем udpxy

service udpxy start

3. Добавляем правила в IPFW

Этот шаг можно пропустить если и так разрешен IGMP трафик на внешней сетевой карте.

Открываем файл конфигурации фаервола IPFW (в моем случае /usr/local/etc/ipfw_config)

nano /usr/local/etc/ipfw_config

И добавляем необходимые строчки

# Переменная для пути запуска ipfw.
fwcmd="/sbin/ipfw"
# Переменная для внешнего сетевого интерфеса (Интернет).
internet="em0"
# Разрешаем прохождения IGMP (multicast) трафика.
${fwcmd} add allow igmp from any to any via ${internet}
# Разрешаем UDP трафик от IP адресов с которых ведется Multicast вещание.
# Для каждого IPTV-провайдера IP-адреса будут свои.
# Посмотреть их можно в файле плейлиста от провайдера.
${fwcmd} add allow udp from any to 224.10.50.0/24 via ${internet}
${fwcmd} add allow udp from any to 234.10.1.0/24 via ${internet}

4. Проверяем IPTV

Чтобы подключения к IPTV через udpxy используем подобный запрос

http://<IP-адрес udpxy>:<порт udpxy>/<протокол>/<IP адрес и порт IP вещания>

Открываем файл плейлиста от провайдера IPTV и берем протокол, IP-адрес, порт.

#EXTM3U

----------------------------

#EXTINF:-1,First Channel
udp://@234.10.1.10:1234
#EXTINF:-1,Channel Science
udp://@234.10.1.11:1234

---------------------------

Строчка для подключения будет выглядеть примерно так

http://192.168.0.1:4022/udp/234.10.1.10:1234

Вставляем строчку в программу просмотра IPTV и проверяем. Должно работать. Теперь нужно переделать весь плейлист.

5. Переделываем плейлист IPTV

Откроем плейлист провайдера (m3u) в текстовом редакторе. 

В текстовых редакторов функция замены запускается нажатием Ctrl + H

Нажимаем, вписываем что необходимо заменить и на что заменить. В моем случае необходимо заменим udp://@ на http://192.168.0.1:4022/udp/ во всём плейлисте. Нажимаем заменить во всех местах в открытом файле (плейлисте).

Показывается пример как заменить udp://@ на http://192.168.0.1:4022/udp/ в текстовом редакторе Geany
Пример замены udp://@ на http://192.168.0.1:4022/udp/ в текстовом редакторе Geany

В результате получим следующий плейлист

#EXTM3U

----------------------------

#EXTINF:-1,First Channel
http://192.168.0.1:4022/udp/234.10.1.10:1234
#EXTINF:-1,Channel Science
http://192.168.0.1:4022/udp/234.10.1.11:1234

---------------------------

Теперь скидываем его на телевизор или другое устройство и проверяем.

Если разрешить подключатся через внешний IP (вместо 192.168.0.1 пишем внешний IP-адрес), то можно подключатся к каналам телевидения из любой точки мира. Но нужно обезопасить подключение, чтобы никто посторонний не мог использовать IPTV. Например, в начале подключатся к серверу через VPN и потому же к IPTV.