Меню сайта

Библиотека

Установка igmpproxy для IPTV Ростелеком
Описание Интерактивное тв ростелеком Московская область
Для просмотра интерактивного тв Ростелекома, через свой само-собранный шлюз под Ubuntu, необходимо установить igmpproxy для проксирования IGMP и маршрутизации UDP multicast

Что имеем - интерфейсы:
eth0 - смотрит с локалку, домашнюю сеть
eth1 - внешний интерфейс, подключенный к Ростелекому
Авторизация через pppoe (Логин и пароль)

Установка igmpproxy
Cкачиваем последнюю версию igmpproxy, распаковываем:
Код:
wget http://downloads.sourceforge.net/project/igmpproxy/igmpproxy/0.1/igmpproxy-0.1.tar.gz
tar xzf igmpproxy-0.1.tar.gz
cd igmpproxy-0.1


Конфигурируем, собираем и устанавливаем:
Код:
./configure && make && make install

в результате автоматически будет создан и установлен deb-пакет igmpproxy

Настройка
После установки пакета, Создаем конфигурационный файл igmpproxy, открываем его редактором nano
Код:
mkdir /etc/igmpproxy
touch /etc/igmpproxy/igmpproxy.conf
nano /etc/igmpproxy/igmpproxy.conf


И вставляем в него готовый конфиг для Ростелекома Московской области
Код:
##------------------------------------------------------
## Enable Quickleave mode (Sends Leave instantly)
## Эту строчку раскомментируют только в том случае,
## если внутри всего лишь один клиент IP TV
##------------------------------------------------------
#quickleave

##------------------------------------------------------
## Configuration for eth1 (Upstream Interface)
## Здесь указаны параметры для публичного интерфейса,
## на который придет поток от провайдера
## и указаны сети, с которых возможно будут подключаться клиенты
##------------------------------------------------------
phyint eth1 upstream ratelimit 0 threshold 1
altnet 224.0.0.0/4
altnet 198.18.0.0/8
altnet 213.140.243.0/24

##------------------------------------------------------
## Configuration for eth0 (Downstream Interface)
## Типовая конфигурация для внутреннего интерфейса
## смотрящего в домашнюю сеть
##------------------------------------------------------
phyint eth0 downstream ratelimit 0 threshold 1

##------------------------------------------------------
## Интерфейсы которые не надо учитывать
##------------------------------------------------------
phyint ppp0 disabled
phyint lo disabled


Сообщаем ядру, что IP - форвардинг разрешен
Код:
echo 1 >/proc/sys/net/ipv4/ip_forward


Правила для iptables
Код:
iptables -A FORWARD -p igmp -i eth1 -o eth0 -j ACCEPT
iptables -A INPUT -d 224.0.0.0/240.0.0.0 -i eth1 -j ACCEPT
iptables -A INPUT -s 224.0.0.0/240.0.0.0 -i eth1 -j ACCEPT
iptables -A FORWARD -d 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -A FORWARD -s 224.0.0.0/240.0.0.0 -j ACCEPT


Автозапуск через init.d:
Создаем файл /etc/init.d/igmpproxy, выдаем права на выполнение
Код:
touch /etc/init.d/igmpproxy
chmod +x /etc/init.d/igmpproxy


Вставляем содержимое:
bash:
Подсветка синтаксиса : Bash
  1.     #! /bin/sh
  2.  
  3.     ### BEGIN INIT INFO
  4.     # Provides:            igmpproxy
  5.     # Required-Start:      $network $remote_fs $local_fs
  6.     # Required-Stop:      $network $remote_fs $local_fs
  7.     # Default-Start:      2 3 4 5
  8.     # Default-Stop:         0 1 6
  9.     # Short-Description:   Stop/start igmpproxy
  10.     ### END INIT INFO
  11.  
  12.     PATH=/sbin:/usr/local/sbin:/bin:/usr/local/bin
  13.     DESC=IGMPProxy
  14.     NAME=igmpproxy
  15.     CONFFILE=/etc/igmpproxy/igmpproxy.conf
  16.     DAEMON=/usr/local/sbin/$NAME
  17.     DAEMON_ARGS="$CONFFILE"
  18.     PIDFILE=/var/run/$NAME.pid
  19.     SCRIPTNAME=/etc/init.d/$NAME
  20.  
  21.     [ -x "$DAEMON" ] || exit 0
  22.  
  23.     [ -r /etc/default/$NAME ] && . /etc/default/$NAME
  24.  
  25.     . /lib/init/vars.sh
  26.  
  27.     . /lib/lsb/init-functions
  28.  
  29.     do_start()
  30.     {
  31.        start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON --
  32.             $DAEMON_ARGS
  33.         RETVAL="$?"
  34.         return "$RETVAL"
  35.     }
  36.  
  37.     do_stop()
  38.     {
  39.        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
  40.         RETVAL="$?"
  41.         rm -f $PIDFILE
  42.         return "$RETVAL"
  43.     }
  44.  
  45.     do_reload() {
  46.         start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME
  47.         RETVAL="$?"
  48.         return "$RETVAL"
  49.     }
  50.  
  51.     case "$1" in
  52.        start)
  53.          
  54.           [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
  55.           do_start
  56.           case "$?" in
  57.              0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
  58.              2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  59.           esac
  60.           ;;
  61.         stop)
  62.          
  63.           [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
  64.           do_stop
  65.           case "$?" in
  66.              0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
  67.              2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  68.           esac
  69.           ;;
  70.        status)
  71.           status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
  72.           ;;
  73.        restart)
  74.           log_daemon_msg "Restarting $DESC" "$NAME"
  75.           do_stop
  76.           case "$?" in
  77.              0|1)
  78.                 do_start
  79.                 case "$?" in
  80.                    0) log_end_msg 0 ;;
  81.                    1) log_end_msg 1 ;; # Old process is still running
  82.                    *) log_end_msg 1 ;; # Failed to start
  83.                 esac
  84.                 ;;
  85.              *)
  86.                 # Failed to stop
  87.                 log_end_msg 1
  88.                 ;;
  89.           esac
  90.           ;;
  91.        *)
  92.           echo "Usage: $SCRIPTNAME {start|stop|status|restart}" $
  93.           exit 3
  94.           ;;
  95.     esac
  96.  
  97.     exit $RETVAL
Parsed in 0.111 seconds, using GeSHi 1.0.8.11. Created cache - 11.09.23 6:20


прописываем в автозапуск:
Код:
update-rc.d igmpproxy defaults


После этого включаем телевизионную приставку и наслаждаемся интерактивным телевидением

Танцы с бубном:
Ростелеком считает, что ip-адрес на внешнем интерфейсе, не нужен для pppoe. НО если не прописан ip-адресс то igmpproxy просто не стартует, а вываливается с ошибкой. Пришлось прописать на внешнем интерфейсе
Код:
iface eth1 inet static
       address 10.228.42.163
        netmask 255.255.240.0
        gateway 10.228.32.1

Почему шлюз 10.228.32.1 ? да потому что засветился -
Код:
tcpdump -i eth1 igmp

Ip-адресс и маску подсмотрел на приставке когда она работала через adsl.

phyint на внешнем интерфейсе это подсети с каких ростелеком вещает свои каналы. Выискивать их , тот ещё геморрой -
Код:
tcpdump -i eth1 udp

Поверьте - этих, что я указал, достаточно для Ростелекома Московской области. И не спрашивайте меня от куда знаю Very Happy

Вообще для настройки запускаем igmpproxy в дебаг-режиме - igmpproxy -d -v -v /etc/igmpproxy/igmpproxy.conf

Грабли:
И самое главное.
По идее всё должно заработать, но у меня сразу не заработало - в приставке черный экран - менюшки, список каналов, и даже запись работает, но прямой эфир нет.
Заработало после того как прописал маршрутизацию в подсети где вещают сервера ростелекома.
Прописал в etc/network/interfaces
Код:
up ip route add 224.0.0.0/4 dev eth1
up ip route add 198.18.9.0/24 dev eth1
up ip route add 198.18.20.0/24 dev eth1
up ip route add 213.140.243.0/24 dev eth1


И только после этого всё заработало!

Вот и всё, ребята Laughing
 
Автор gosudar  •  Дата Февраль 18 2017, 23:18  •  Тип FAQ  •  Просмотров 7932
Категория Домашний сервер   •  Трекбек
  • 85
 голос(ов) 1


1 Комментарии

СообщениеЗаголовок: Отправляем трекбэк

Спасибо, помогло. Всё очень доходчиво Smile


Цитата Вернуться вверх

Gosudar Блог от Февраль 24 2017, 22:19

Часовой пояс: GMT + 3