Меню

настройка igmp proxy debian

diablero’s homepage

Через тернии к звездам

Как я iptv за nat пробрасывал…igmpproxy

Получил задание пробросить iptv в локальную сеть за шлюз. Раньше я это делал дома, просто обновив прошивку роутера и установив галочку multicast в положение enable.

На этот раз условия были иными, а именно:

  • Шлюз на debian 6.0.4 squeeze 2.6.32-5-686;
    • isc-dhcp-server, bind9, iptables…
  • 3 интерфейса;
    • eth0 смотрит на провайдера интернет, там же идет вещание iptv 172.31.242.0/24;
    • eth1 смотрит в локальную сеть пользователя 192.168.0.1/24;
    • eth2 смотрит в другую локальную сеть, там тоже есть интернет =) 192.168.0.0/24;
  • Iptv приставка MAG250, пока одна, но положение изменится, внесу поправки в конфиг;
  • И маловажный факт, приставка со шлюзом соединена с помощью двух адаптеров D’link DHP-501AV, он конечно подпортил жизнь, но об этом в другой раз;

Прежде чем приступить к настройке нужно понять, что за зверь такой multicast, и так, маленький “ликбез”.

Существует несколько вариантов передачи пакетов в сетях tcp/ip

  • unicast, пакеты передаются одному определенному адресату;
  • broadcast, пакеты передаются всем;
  • multicast, пакеты передаются некому подмножеству адресов, входящих в определенную группу;
  • anycast, появился в tcp/ip v6, пакет передается до первого принявшего узла из некого подмножества.

Подробнее можно почитать в википедии, пока ее не закрыли =) *привет реестр сайтов

Для работы iptv использует протокол igmp, по этому нам нужно разрешить его на шлюзе и научить транслировать все это добро в локальную сеть. Будем использовать программу igmpproxy. Её нет в репозитории debian и нам придется ее собирать. Для сборки понадобится gcc и make со всеми зависимостями.

Качаем igmpproxy:

На сегодня 0.1 последняя версия, распаковываем и переходим в папку с программой:

Собираем и устанавливаем, не забываем выполнять действия от имени администратора (sudo):

Отредактируем конфигурационный файл igmpproxy

У вас он может оказаться в другом месте, например в /usr/local/etc/igmpproxy.conf

Важно выяснить с каких адресов идет вещание, для этого вооружимся программой tcpdump, она входит в стандартные репозитории debian, и если еще не установлена, то:

  • -i eth0 интерфейс который собираемся анализировать
  • -n заменяет хост ip адресом
  • -t не выводим метку времени, для удобства
  • port 1234 отображаем информацию переданную исключительно на порт 1234, порт на котором сидит igmpproxy

Посыпется информация из которой нужно выудить адреса вещания, точнее диапазон который будет переправляться к нам за nat.

Вывод будет примерно следующий:

Соответственно диапазон вещания 172.31.242.0

С полученной информацией идем редактировать конфиг, повторюсь:

Он должен иметь примерно такой вид:

В iptables нужно добавить следующие строки (все исходя из вашего плейлиста, тут описаны сугубо мои настройки)

Так же проверьте что бы были разрешены multicast, igmp и порты udp с 5242 по 5352, и порт 1235 для получения списка каналов.

Далее необходимо добавить igmpproxy в автозагрузку, напоминаю, что у меня debian. Создаем файл /etc/init.d/igmpproxy

В него записываем следующее содержание, не помню у кого украдено:

Теперь нужно проверить, включена ли поддержка multicast в ядре, для этого выполните команду :

sudo ifconfig eth0

И найдите слово MULTICAST, если есть, значит все нормально, в ином случае надо пересобрать ядро с поддержкой multicast

Все должно работать, всех благ.

5 thoughts on “ Как я iptv за nat пробрасывал…igmpproxy ”

Спасибо, а можно такой вопрос: Можно ли на дебиане IceCast посылать в сеть по IGMP – Учитывая, что кодируется в AAC CBR – пара десятков слушателей легко потянется на дохлом аплоаде ADSL… кажется.

> D’link DHP-501AV, он конечно подпортил жизнь, но об этом в другой раз
Можно уточнить, чем D’link DHP-501AV подпортил жизнь? 🙂

Добрый день.
Отличная статья.
Подскажите такая проблема при
tcpdump -i eth0 -n -t port 1234
пусто … что это может быть?

Читайте также:  zxdsl 931 vii настройки

источник

Linux Debian проброс multicast / IPTV пробросить через NAT в локальную сеть

Linux 3.2.0-1-686-pae i686 GNU/Linux

1. Маршрутизация multicast трафика через Linux роутер

2. Раздача IPTV через Linux в локальную сеть на Windows клиентов

Дано: Сеть провайдера (eth0 10.72.55.177 шлюз 10.72.48.1), локальная сеть (eth1 192.168.0.1/24 (клиент 192.168.0.2)) и wi-fi интерфейс wlan для нетбука (192.168.1.1/24 (клиент 192.168.1.1.)) и инет ppp0

Далее, скачиваем igmpproxy, который будет заниматься прокидыванием multicast заголовков http://sourceforge.net/projects/igmpproxy/ распаковываем, конфигурируем, собираем, ставим

tar xvfz igmpproxy-0.1.tar.gz

Разрешаем ядру пропускать multicast трафик

net.ipv4.ip_forward=1
net.ipv4.conf.all.mc_forwarding = 1
net.ipv4.conf.default.mc_forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 1
net.ipv4.conf.wlan0.mc_forwarding = 1
net.inet.ip.mforwarding=1
multicast_router=YES

По умолчанию фаервол в Debian пропускает всё и вся, поэтому добавлены правила, только для доступа клиентам локалки в локалку провайдера + выход в интернет

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 10.0.0.0/8 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 10.0.0.0/8 -o eth0 -j MASQUERADE

Конфигурируем igmpproxy , указываем сети + интерфейсы с которых слушать multicast и интерфейсы, на которые отдавать его

##——————————————————
## Enable Quickleave mode (Sends Leave instantly)
##——————————————————
quickleave
##——————————————————
## Configuration for eth0 (Upstream Interface)
##——————————————————
phyint eth0 upstream ratelimit 0 threshold 1
altnet 224.0.0.0/4
##——————————————————
## Configuration for eth1 (Downstream Interface)
##——————————————————
phyint eth1 downstream ratelimit 0 threshold 1
phyint wlan0 downstream ratelimit 0 threshold 1
##——————————————————
## Configuration for eth2 (Disabled Interface)
##——————————————————
phyint ppp0 disabled

Подсеть 224.0.0.0/4 как раз и является распространителем multicast шторма 🙂 )

Маленький нюанс, местный провайдер вещает 224.0.0.0/4 не от имени шлюза локального, так что строку route add -net 224.0.0.0/4 gw 10.72.48.1 не торопитесь добавлять!

Теперь пробуем тест. Запускаем VLC или спец программу для IPTV, которую распространяет ваш провайдер, и включаем приём потока (наш интерфейс должен начать громко кричать, что он хочет присоединиться к группе ипов на приём рассылки udp трафика, к примеру с адреса 239.192.0.12:1234)

На серверороутере од управлением Debian выполняем

igmpproxy -v -d /usr/local/etc/igmpproxy.conf

ВНИМАНИЕ! Здесь в первой половине команды использован относительный путь переменной окружения PATH и прямой путь к файлу конфига, вы в своём случае должны точно знать, к примеру, что бинарник и конфиг находятся в нужных местах и явно их вызывать. Например, данную строку в своём случае мне можно указать явно

/usr/local/sbin/igmpproxy -v -d /usr/local/etc/igmpproxy.conf

ключи -v и -d помогут нам для отлова дебагов.

Запущен у нас на виндовой машине клиент и запущен igmpproxy и нет никакого ТВ … Кликаем канал и внимательно смотрим лог igmpproxy

RECV Membership query from 192.168.0.1 to 239.192.0.12
RECV V2 member report from 192.168.0.2 to 239.192.0.12
Inserted route table entry for 239.192.0.12 on VIF #0
joinMcGroup: 239.192.0.12 on eth0
RECV V2 member report from 10.72.55.177 to 239.192.0.12
The IGMP message was from myself. Ignoring.
Route activation request from 10.72.55.177 for 239.192.0.12 is from myself. Ignoring.
The source address 172.16.110.210 for group 239.192.0.12, is not in any valid net for upstream VIF.
RECV V2 member report from 192.168.0.2 to 239.192.0.12
Updated route entry for 239.192.0.12 on VIF #0
RECV V2 member report from 192.168.0.1 to 224.0.0.251
The IGMP message was from myself. Ignoring.
RECV V2 member report from 10.72.55.177 to 239.192.0.12
The IGMP message was from myself. Ignoring.

Добавляем чудесный адрес в igmppoxy.conf в раздел к сетям, с которых ловим multicast (я специально не указал его раньше, чтобы вы на своём примере таким же образом прописали необходимый свой адрес (во многих конфигах в инете народ пишет, что достаточно указать 0.0.0.0.0 и всё! НО! моя версия igmpproxy с таким диапазоном не запустилась))

Читайте также:  как узнать пароль настроек модема

##——————————————————
## Enable Quickleave mode (Sends Leave instantly)
##——————————————————
quickleave
##——————————————————
## Configuration for eth0 (Upstream Interface)
##——————————————————
phyint eth0 upstream ratelimit 0 threshold 1
altnet 224.0.0.0/4
altnet 172.16.110.210
##——————————————————
## Configuration for eth1 (Downstream Interface)
##——————————————————
phyint eth1 downstream ratelimit 0 threshold 1
phyint wlan0 downstream ratelimit 0 threshold 1
##——————————————————
## Configuration for eth2 (Disabled Interface)
##——————————————————
phyint ppp0 disabled

Запускаем, на клиенте щёлкаем канал и смотрим, должно всё заработать 🙂

/usr/local/sbin/igmpproxy -v -d /usr/local/etc/igmpproxy.conf

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

Добавил перед exit 0 строку

su – userme -c ‘screen d -m -S igmptraff igmpproxy /usr/local/etc/igmpproxy.conf’

Проверяем, чтобы для userme был доступ к бинарнику и конфигу

screen -d -m -S igmptraff igmpproxy -v -d /usr/local/etc/igmpproxy.conf

Сворачиваем сессию, не закрывая и не прерывая выполнение

источник

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

Настройка IPTV в роутерах Mikrotik на примере Ростелеком

IPTV в настоящее время стал стандартом де факто, практически полностью вытеснив «классическое» кабельное телевидение. Сегодня практически любой провайдер предлагает комплексные тарифные планы, включающие телевидение и интернет, предоставляет в аренду уже настроенное оборудование и вообще всякими способами стремится завлечь абонента в свои сети. И это хорошо, здоровая конкуренция снижает цены и повышает качество услуг. Но как быть, если вы предпочитаете настраивать свое сетевое оборудование самостоятельно? Сегодня мы как раз поговорим об этом.

Подключение IPTV-приставки непосредственно в сеть провайдера

Самый простой и нетребовательный к ресурсам способ смотреть IPTV, полностью оправдан, если ваша приставка не имеет никаких иных функции, которые требуют доступа к ресурсам локальной сети. Если вспомнить былые времена, то многие провайдеры при подключении IPTV ставили перед роутером простой свитч, куда включали IPTV-приставку, фактически мы повторим эту схему, но с использованием возможностей Mikrotik.

Прежде всего определим порт, в который будет подключена приставка и выведем его из моста локальной сети (если он туда включен), в нашем случае это будет порт ether4. Для этого перейдем в Bridge — Ports и удалим запись для нужного порта.

Затем создадим новый мост и введем в него порт приставки и внешний порт, смотрящий в сторону провайдера:

Чтобы избежать возможных конфликтов с активным оборудованием провайдера отключим в свойствах моста протокол RSTP:

Если вы используете для подключения к интернету коммутируемое подключение, то в его свойствах вместо внешнего интерфейса (ether5 в нашем примере) следует указать интерфейс моста bridge2. В данном случае это будет PPPoE подключение провайдера Ростелеком.

При использовании иных методов доступа в интернет не забудьте изменить порт внешнего подключения с ether5 на bridge2, а также внести аналогичные изменения в правила файрволла, при коммутируемом подключении (PPPoE) делать этого не надо.

После чего достаточно перезагрузить приставку, и она самостоятельно «разберется» с настройками, после чего вы сможете полноценно пользоваться услугой IPTV вашего провайдера.

Настройка IGMP Proxy

Однако предложенный выше способ может быть не всегда приемлем, вместо приставки могут использоваться иные, более функциональные устройства: SmartTV, TV BOX на Android и т.д. и т.п., которым нужно обеспечить доступ к ресурсам локальной сети. Также приставка может быть подключена не напрямую к роутеру, а через дополнительный коммутатор, либо вы еще по какой-либо причине не хотите выводить устройство за пределы домашней сети. В этом случае потребуется настройка IGMP Proxy, который обеспечит перенаправление мультикастового потока IPTV в локальную сеть и прохождение IGMP-пакетов для управления этим потоком.

В базовой поставке RouterOS необходимая функциональность отсутствует и нам потребуется установить дополнительный пакет multicast. Для этого на официальном сайте следует скачать набор Extra packages для своей версии прошивки и архитектуры. Если у вас более старая версия RouterOS, то обновите ее.

Читайте также:  engineer mode сброс настроек

Затем откройте Winbox, перейдите в раздел Files и загрузите на устройство пакет multicast, это можно сделать простым перетаскиванием, затем перезагрузите роутер.

Если вы настраиваете IPTV от Ростелеком, то на внешнем интерфейсе, смотрящем в сторону провайдера, у вас не будет IP-адреса, так как протокол PPPoE, через который осуществляется доступ в интернет, работает на канальном уровне и не требует IP-адресов. Для работы IPTV внешнему интерфейсу необходимо будет присвоить адрес. Поддержка Ростелекома предписывает использовать адрес 1.0.0.1/30, на наш взгляд использование данного адреса не совсем корректно (он не является приватным) и, как показывает практика, вы можете присвоить интерфейсу любой адрес, но официальные рекомендации стоит иметь ввиду, особенно если больше ничего не помогает.

Если вы предпочитаете работу в консоли, то выполните:

Теперь перейдем в раздел Routing — IGMP Proxy и добавим внешний интерфейс, на который приходит IPTV. В поле Interface укажите внешний интерфейс, в нашем случае ether5, в поле Alternative Subnets0.0.0.0/0 и установите флажок Upstream.

Что касается Alternative Subnets, то данная настройка требует некоторых пояснений, в ней указывается подсеть, из которой осуществляется вещание, так как Ростелеком использует собственную изолированную сеть, то указание 0.0.0.0/0, т.е. принимать любые потоки, будет оправдано. Если же вы настраиваете IPTV на интерфейсе, смотрящем непосредственно в интернет, то желательно явно указать подсеть, уточнив ее в техподдержке провайдера.

Затем добавим внутренний интерфейс, куда следует перенаправить IPTV-поток, в этом качестве укажем мост локальной сети, никаких других настроек делать не нужно.

После чего нажмите кнопку Settings и установите флажок Quick Leave для быстрого переключения между каналами.

Также можно быстро выполнить все приведенные выше настройки через терминал:

Теперь осталось настроить правила брандмауэра для прохождения IPTV-трафика. Для этого добавим следующие записи: Chain — input, Protocol — igmp, In. Interface — ether5, так как по умолчанию действие accept, то на закладку Action можно не переходить. Данное правило разрешить входящий IGMP-трафик на внешнем интерфейсе.

Второе правило разрешит транзитный IPTV-трафик: Chain — forward, Protocol — udp, Dst. Port — 5000, In. Interface — ether5. Отдельного пояснения требует номер порта, Ростелеком использует порт 5000, для других провайдеров следует уточнить это значение в поддержке.

Также не забудьте перетащить данные разрешающие правила выше запрещающих в каждой из цепочек.

В терминале эти же правила добавляются командами:

После выполнения данных настроек перезагрузите IPTV-приставку и, если вы не допустили ошибок, все должно заработать.

IPTV через Wi-Fi

Скажем сразу, использовать беспроводную сеть, особенно в диапазоне 2,4 ГГц, для доставки IPTV — не самая удачная идея. Следует понимать, что Wi-Fi является разделяемой средой и вы делите доступную пропускную способность не только с клиентами вашей сети, но и с устройствами соседних сетей, работающих в том же частотном диапазоне. Проще говоря, даже если ваши собственные устройства не занимают Wi-Fi, то за стеной может оказаться ноутбук соседа, которые на этом же самом канале качает торренты, поэтому прием IPTV, особенно с HD-качеством в таких условиях может оказаться затруднительным.

Но если вы все-таки решили транслировать IPTV через Wi-Fi, то выполните следующие настройки: перейдите в свойства беспроводного интерфейса на закладку Wireless и перейдите в режим Advanced Mode.

Затем установите значения опций: WMM Support — enabled и Multicast Helper — full.

Это включит Wi-Fi multimedia и позволит отправлять мультикаст-пакеты на mac-адреса беспроводных клиентов, но не забывайте, что вы делите полосу пропускания не только между своими устройствами, поэтому работа таких клиентов может не соответствовать ожиданиям, особенно в городских условиях.

источник