Настройка 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
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/
во всём плейлисте. Нажимаем заменить во всех местах в открытом файле (плейлисте).
В результате получим следующий плейлист
#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.