Для просмотра интерактивного тв Ростелекома, через свой само-собранный шлюз под 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 #! /bin/sh ### BEGIN INIT INFO # Provides: igmpproxy # Required-Start: $network $remote_fs $local_fs # Required-Stop: $network $remote_fs $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Stop/start igmpproxy ### END INIT INFO PATH=/sbin:/usr/local/sbin:/bin:/usr/local/bin DESC=IGMPProxy NAME=igmpproxy CONFFILE=/etc/igmpproxy/igmpproxy.conf DAEMON=/usr/local/sbin/$NAME DAEMON_ARGS="$CONFFILE" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME [ -x "$DAEMON" ] || exit 0 [ -r /etc/default/$NAME ] && . /etc/default/$NAME . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS RETVAL="$?" return "$RETVAL" } do_stop() { start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" rm -f $PIDFILE return "$RETVAL" } do_reload() { start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME RETVAL="$?" return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart}" $ exit 3 ;; esac exit $RETVAL
Parsed in 0.114 seconds, using GeSHi 1.0.8.11. Created cache - 26.12.24 6:48 |
прописываем в автозапуск:
Код: |
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 на внешнем интерфейсе это подсети с каких ростелеком вещает свои каналы. Выискивать их , тот ещё геморрой -
Поверьте - этих, что я указал, достаточно для Ростелекома Московской области. И не спрашивайте меня от куда знаю
Вообще для настройки запускаем 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 |
И только после этого всё заработало!
Вот и всё, ребята
