Возникла необходимость обеспечения возможности просмотра IPTV сразу на нескольких устройствах в домашней сети. Реализации данной схемы мешало то, что полученный от провайдера модем имел два раздельных порта для данных и для IPTV. Простейшим решением было бы закорачивание IPTV-порта в домашний коммутатор, но такая схема нарушает принципы построения безопасных систем и сулит появление паразитного трафика. В связи с этим было решено организовать перенаправление IPTV-трафика через локальный шлюз, на котором используется пакетный фильтр PF и IGMP-прокси.1. Включаем поддержку переброса между сетевыми интерфейсами мультикаст трафика, для OpenBSD:
echo "multicast_router=YES" >> /etc/rc.conf.local
перезагружаем систему.
Активируем перенаправление мультисаст трафика:
sysctl net.inet.ip.mforwarding=1
в /etc/sysctl.conf сохраняем настройку "net.inet.ip.mforwarding=1".
2. Устанавливаем пакет net/igmpproxy с реализацией igmp-прокси:
pkg_add igmpproxy
Отображаем свои сетевые настройки в файле конфигурации /etc/igmpproxy.conf:
quickleave
altnet 0.0.0.0/0 # принимаем igmp-трафик из всех подсетей
phyint vr2 upstream ratelimit 0 threshold 1
phyint vr0 downstream ratelimit 0 threshold 1
phyint pppoe0 disabledДобавляем запуск igmpproxy в /etc/rc.local, чтобы прокси запустился после перезагрузки.
3. Настраиваем параметры внешнего сетевого интерфейса, через который приходит IPTV-поток. Для работы igmpproxy на интерфейсе должен быть IP-адрес, для получения которого обычно можно использовать DHCP или назначить вручную (бывают случаи привязки IP к MAC-адресу телеприставки, что потребует подмены MAC-адреса на сетевом интерфейсе шлюза).
4. Настраиваем правила для прохождения IGMP-трафика и multicast-потока в пакетном фильтре PF (в нашем случае - это UDP трафик на 5002 порт). Основной проблемой, возникающей в процессе настройки, является то, что в IGMP пакетах используется опция протокола IP "Router Alert", которая по умолчанию вычищается из пакетов при использовании PF (для отключения чистки расширенных опций необходимо использовать параметр allow-opts). В pf.conf добавляем примерно следующее:
LAN = "vr0"
IPTV = "vr2"block on $IPTV
pass in on $IPTV inet proto udp from any to any port 5002
pass on {$LAN, $IPTV} proto igmp allow-optsURL: http://undeadly.org/cgi?action=article&sid=20110222002946
Обсуждается: http://www.opennet.me/tips/info/2538.shtml
Хочу использовать технологию для доставки сигнала по своим (не мультимедиа) протоколам.
Что для этого нужно с точки аппаратной стороны и что нужно научиться понимать?Мне это видится как подписка на поток сигналов выбранного типа.
а зачем multicast_router и net.inet.ip.mforwarding когда трафик всеравно проксируется igmpproxy. Помоему оно тут лишнее
Нет. IGMP прокси, проксирует только igmp запросы.
Получает запрос с внутренней сети, и подписывается на поток снаружи и добавляет маршрут в таблицу маршрутизации. ( можно посмотреть netstat -g ). Т.е. до клиента бежит multicast трафик.
Скорее всего вы перепутали с udpxy, который как раз сам подписывается на поток и перегоняет его к вам уже по unicast.
multicast_router не нужен точно. А вот forward нужен, тут я ошибся
Автор! Напишите версию OpenBSD, пожалуйста, на которой вы это делали.
у меня такое решение на FreeBSD 7 серии работает и давно уже (более года), раньше правда igmpproxy в портах не было, щас все легко и просто.по поводу конфигов, помоему у меня с 0.0.0.0/0 не работало, если такое наблюдается - можно перечислить как это у провайдера сделано например: altnet 10.0.0.0/8 и altnet 224.0.0.0/4
в PF использовал правила
mcast_ll= "10.0.0.0/8"
mcast_as= "224.0.0.0/4"
pass quick on {$int_if $ext_if} proto igmp to {$mcast_ll $mcast_as} allow-opts modulate state label "mcast"
pass quick on {$int_if $ext_if} proto udp to {$mcast_ll $mcast_as} port {1234, 9875} keep state label "mcast udp"единственное с чем не доконца разобрался - наблюдал много не очень нужных мне пакетов которые просто решил блокировать:
block in quick on $ext_if proto 103 all label "block in PIMv2 Cisco Hello spam"а в целом отличный проксик, с ключом -d инфы выдает очень много и подробно (если чего не выходит то можно поколупатся и поанализировать), очень благодарен умельцам которые ее с линукса портировали.
udpxy ни как не осилить?
По дефолту 16 клиентво на один процесс.
этому (udpxy) порту всего 13 месяцев, igmpproxy был доступен раньше.
ну и они разные вещи делают вообщето.
схожие, но udp и http раздача клиентам в локалкеэто не одно и тоже
Что-то я в свое время не осилил igmpproxy. На мой взгляд для локалки не будет заметно разницы между udpxy и igmpproxy по объему генерируемого трафика.
Тема заинтересовала, но у меня всё гораздо проще. IPTV идёт через ADSL модем. С модема убраны все разделдения портов на группы. Интернет настроен через PPPoE в модеме. VPI/VCI с потоком в режиме бридж, так же как и управляющий канал для приставки.
Из неприятного - приходится отказаться от DHCP. Точнее оно присутствует из-за управляющего канала и выдаёт хитрые адреса с медленным интернетом. Так что при отсутствии приставки можно просто убрать управляющий канал, а при её наличии вбивать адреса устройств руками.
Ещё встречался с проблемой, что некоторые каналы идут с 200 номера порта. Приходится играть с файерволом и перенаправлять их на порт выше 1024.
Укртелеком? Если нет приставки и нужно смотреть передачи на локальном компе, стоящем за опенроутером - как вам удалось всё это сконфигурировать?
Проброс IPTV для линукса, в примере используется Debian, может кому пригодитьсяhttp://rukul.ru/system-setting/linux-debian-проброс-multicast-iptv-пробросить-через-nat-в-лока