LINUX.ORG.RU
решено ФорумAdmin

iptv igmp multicast


0

0

Привет!

Пошли слухи, что провайдер предоставляет iptv. Слил плейлист, а там адреса вида: udp://@234.5.2.1:20000, udp://@234.5.2.2:20000 и т.д.

Если подключить напрямую к winxp, то vlc кажет тв.

Хочется раздать это дело через самосборный роутер на домашнюю сеть. Поставил igmpproxy.

Настроил:

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
        altnet 10.0.0.0/8
        altnet 192.168.1.0/24
        altnet 224.0.0.0/4

phyint eth1 downstream  ratelimit 0  threshold 1
        altnet 10.0.0.0/24

phyint lo disabled

phyint ppp0 disabled

Провайдер на eth0 c сетью 192.168.1.0/24. Интернет через pppoe — ppp0 и там статический ip. Домашняя сеть eth1 с 10.0.0.0/24.

В iptables:

...
$ipt -F allow-iptv-multicast
$ipt -A allow-iptv-multicast -d 224.0.0.0/240.0.0.0 -j ACCEPT
...
$ipt -A INPUT -p igmp -j ACCEPT
$ipt -A INPUT -j allow-iptv-multicast
...
$ipt -A FORWARD -j allow-iptv-multicast
...
$ipt -t mangle -A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1
vlc тв не кажет.

iptraf при прослушивании eth1 говорит следующее:

...
IGMP (46 bytes) from 10.0.0.120 to 234.5.2.8 on eth1
...
UDP (345 bytes) from 192.168.1.1:1900 to 239.255.255.250:1900 on eth1
Последних пакетов очень много, но они быстро заканчиваются.

Что мне стоит попробовать или сделать, чтобы заработало?


FreeBSD 8.0 поддерживает мультироутинг «из коробки». IP-TV завёл без проблем, ничего никуда не прописывая, разрешив IGMP-трафик в PF.

iZEN ★★★★★ ()
Ответ на: комментарий от ien

Странно, но на роутере вообще не получается получить доступ к iptv. Ни через mplayer, ни через vlc. Выходит, что проблема скорее всего не в igmpproxy...

ien ()
Ответ на: комментарий от iZEN

FreeBSD 8.0 поддерживает мультироутинг «из коробки». IP-TV завёл без проблем, ничего никуда не прописывая, разрешив IGMP-трафик в PF.

А еще FreeBSD 8.0 падает на роутинге да. С большим количеством маршрутов.

ventilator ★★★ ()

ПоGoogle на тему параметров ipv4:
rp_filter
force_igmp_version

У меня vlc стал показывать, когда я установил параметр
force_igmp_version=2
echo «2» > /proc/sys/net/ipv4/conf/default/force_igmp_version
либо на конкретном интерфейсе
echo «2» > /proc/sys/net/ipv4/conf/eth0/force_igmp_version
Возможно в твоем случае дополнительно прийдется установить
rp_filter=0

tid ()
Ответ на: комментарий от tid

Задал оба параметра. Показывать не стал, но определенно что-то изменилось. Теперь, в ответ на запрос, идут такие пакеты: [code] ... UDP (1344 bytes) from 77.94.170.3:51175 to 234.5.2.1:20000 on eth0 ... [/code]

Но ни mplayer, ни vlc не работают.

ien ()

ТС, загляни в соседний трэд, там вроде советы и тебе подходят.

P.S. iZEN, не смеши людей, [фряшеый] mrouted - это ППЦ, мало того, что основан на сдохшем DVMRP, но сам по себе R.I.P. и смердит изрядно. фряха и динамический роутинг мультикаста - это два взаимоисключающих понятия...

sda00 ★★★ ()
Ответ на: комментарий от sda00

@sda00 Благодарю, но ничего не помогло =(

mrouted тоже не запустился.

ничего не могу понять. вроде запросы идут. если при поднятом igmpproxy:

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
        altnet 77.94.170.0/24
phyint eth0 downstream  ratelimit 0  threshold 1
        altnet 10.0.0.0/24
phyint lo disabled
phyint ppp0 disabled

тыкнуть в плейлист повалит куча:
UDP (1344 bytes) from 77.94.170.4:20000 to 234.5.2.74:20000 on eth0                                                                              UDP (1344 bytes) from 77.94.170.4:20000 to 234.5.2.74:20000 on eth0                                                                              UDP (1344 bytes) from 77.94.170.4:20000 to 234.5.2.74:20000 on eth0                                                                              UDP (1344 bytes) from 77.94.170.4:20000 to 234.5.2.74:20000 on eth0
которой до этого не было. при этом на eth1 пусто. только :1900, что указаны в начале топика. но это не нужно, как я понял.

плюс:

martin ~ # cat /proc/net/ip_mr_cache
Group    Origin   Iif     Pkts    Bytes    Wrong Oifs
FAFFFFEF 6DCAB90A 0         42    13006        0  1:1
FAFFFFEF 55CAB90A 0          7      224        0  1:1
010205EA 63CAB90A -1         0        0        0
040205EA 63CAB90A -1         0        0        0

martin ~ # cat /proc/net/ip_mr_vif
Interface      BytesIn  PktsIn  BytesOut PktsOut Flags Local    Remote
 0 eth0          13230      49         0       0 00000 63CAB90A 00000000
 1 eth1              0       0     12782      35 00000 0100000A 00000000
 2 ppp0              0       0         0       0 00000 D2727055 00000000

martin ~ # cat /proc/sys/net/ipv4/ip_forward
1

martin ~ # cat /proc/sys/net/ipv4/conf/eth{0,1}/rp_filter
0
0

martin ~ # cat /proc/sys/net/ipv4/conf/eth{0,1}/mc_forwarding
1
1

но телевидения нет =(

ien ()
Ответ на: комментарий от ien

форвард/роутинг мультикаста (динамический) - это комплексная задача. не торопись. начни с простого. выруби на роутере фаер (flush), проверь ядро:

# zcat /proc/config.gz | grep MULTIC
CONFIG_IP_MULTICAST=y

помни, что твой роутинг может управлять только исходищими пакетами. потом настрой простой конфиг igmpproxy:

$ cat /etc/igmpproxy.conf

# easy things to begin with :) 
quickleave 
 
phyint eth0 upstream 
        altnet 0.0.0.0/0 
 
phyint eth1 downstream

(в твоём конфиге выше везде eth0 - ясен пень, что нихера не будет...)

запусти igmpproxy и посмотри на пакетики на роутере tcpdump-ом. теперь тебе надо понять, что является ИСТОЧНИКОМ мультикаста. в плейлистах ты видишь лишь адрес «подписки», но не адрес «выдачи» (почитай об особенностях протокола где-нить). проще всего на время убрать рутер, поставить на его место обычный писюк без фаера, запустить «картинку» iptv и отследить откуда летят пакетики. потом для общего развития стоит разобраться с какими протоколами работает «мультик». как правило это IGMP(2), UDP, реже PIM(102) или MTP(92). теперь на рутере аккуратно добавь цепочки iptables (если у нас igmp+udp - это «типовой» вариант):

-A INPUT -d 224.0.0.0/240.0.0.0 -p 2 -j ACCEPT  
-A INPUT -d 224.0.0.0/240.0.0.0 -p udp -m udp ! --dport 1900 -j ACCEPT  
-A FORWARD -d 224.0.0.0/240.0.0.0 -p udp -j ACCEPT

последнее - это настроить на рутере роутинг, чтобы «отклик» на мультикаст проходил аналогично «приёму» (по тем же интерфейсам без влияния ppp0). если заработало - аккуратно добей правила фаера на рутере и локальных машинках. обычно я такие вещи обкатывал на qemu, пробрасывая мультикаст на tap*, а потом переносил уже настроенный фаер на рутер. больше добавить нечего.

удачи.

sda00 ★★★ ()
Ответ на: комментарий от sda00

> [фряшеый] mrouted - это ППЦ, мало того, что основан на сдохшем DVMRP, но сам по себе R.I.P. и смердит изрядно. фряха и динамический роутинг мультикаста - это два взаимоисключающих понятия...

Не знаю, что там внутри (исходники не смотрел), но репортаж о первом полёте ПАКФА записал именно с IP TV на FreeBSD:
http://izen.dev.juga.ru/image/vlc-iptv-record-T-50.jpg

iZEN ★★★★★ ()
Ответ на: комментарий от iZEN

Не знаю, что там внутри (исходники не смотрел), но репортаж о первом полёте ПАКФА записал именно с IP TV на FreeBSD

iZEN, тебя тут уже все воспринимают как клоуна. ты вообще понимаешь, что такое «динамический форвард/роутинг мультикаста»? в FreeBSD by design нет средств для нормальной реализации этого механизма (ещё не встречал ситуаций, когда на фряхе без нареканий работал mrouted). в OpenBSD худо-бедно реализован dvmrpd, пришедший на смену косому и кривому mrouted-у, а «фряшников» в основном отсылают на пользование Xorp-ом или Windows Server 2003 (и/или выше) - кому что ближе, при условии, что Linux не устраивает. imho: основные проблемы mrouted-а (помимо всех прочих косяков) - он не может функционировать вместе с NAT-ом, сыпется при увеличении нагрузки/(не масштабируется) и «тушит свет» если вдруг внезапно решает туннелировать мультикаст (наблюдать это феерическое зрелище довольно забавно). в Linux тоже дела не блестящи. есть правда проприетарный Gated со своими заморочками, но в сухом остатке - «святая троица»: igmpproxy (который работает хоть как-то, хотя в некоторых случаях замечали проблемы с «отписками» из мультикаст-группы), smcroute (который static) и пресловутый mrouted (который RIP и must die...). по сути если нужен multicast forwarding и «общение» с теми же Cisco - поднимается OpenBSD или (чаще всего) используются только решения от Cisco. так что иди лучше похнычь в девел-рассылку фряхи на счёт слямзить dvmrpd из OpenBSD, может кто и почешется...

sda00 ★★★ ()
Ответ на: комментарий от iZEN

Это одна из замечательных фич FreeBSD 8.0.

?!? уже метанируем без привязки к топику ?! ты, уверен, даже RFC2992 не осилил... иди проонанируй что-ли и успокойся...

sda00 ★★★ ()
Ответ на: комментарий от sda00

Ключевые новшества FreeBSD 8.0

...

* Реализация поддержки протоколов групповой маршрутизации IGMPv3 (Internet Group Management Protocol) и SSM (Source Specific Multicast). IGMP активно используется для организации доставки широковещательного мультимедийного контента в IPTV системах; ...

Вопрос закрыт?

iZEN ★★★★★ ()
Ответ на: комментарий от iZEN

Вопрос закрыт?

пруф? чем и как? возможность работы с НАТ-ом? масштабирование? энкапсуляция? «связка» с теми же Cisco? ты, <censored>, действительно не понимаешь разницы между:

поддержкой протоколов групповой маршрутизации

(это сиречь тупая клиентская часть, которая обеспечивает приём контента, что уже надцать лет как везде реализовано) и

динамическим форвардом/роутингом мультикаст-трафика с корректной "подпиской" и "отпиской" на/от мультикаст-группы
?!

sda00 ★★★ ()
Ответ на: комментарий от iZEN

идиотам посвящается:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-routing.html

31.2.8 Multicast Routing

FreeBSD supports both multicast applications and multicast routing natively. Multicast applications do not require any special configuration of FreeBSD; applications will generally run out of the box. Multicast routing requires that support be compiled into the kernel:

options MROUTING

In addition, the multicast routing daemon, mrouted(8) must be configured to set up tunnels and DVMRP via /etc/mrouted.conf. More details on multicast configuration may be found in the manual page for mrouted(8).

    Note: As of FreeBSD 7.0 the mrouted(8) multicast routing daemon has been removed from the base system. It implements the DVMRP multicast routing protocol, which has largely been replaced by pim(4) in many multicast installations. The related map-mbone(8) and mrinfo(8) utilities have also been removed. These programs are now available in the FreeBSD Ports Collection as net/mrouted.

вот теперь вопрос закрыт.

sda00 ★★★ ()
Ответ на: комментарий от sda00

«IGMP активно используется для организации доставки широковещательного мультимедийного контента в IPTV системах»

iZEN ★★★★★ ()
Ответ на: комментарий от sda00

с корректной «подпиской» и «отпиской» на/от мультикаст-группы

— IGMP snooping, хак на L2.

iZEN ★★★★★ ()
Ответ на: комментарий от Myp3ik

Попробовал я pimd, результат тот же. Пакетики валят на upstream интерфейс.

для pimd надо:

# zcat /proc/config.gz | grep PIM
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y

(помимо CONFIG_IP_MULTICAST=y). перечитай ещё раз тред, попробуй спокойно по шагам всё сделать. блокировка на мультикаст может быть и на клиенте, посмотри на traceroute до источников мультикаста, аккуратно проверь маршруты - если что-то не проходит - значит где-то что-то мешает. такие вещи дистанционно не решаются. логику работы уже нарисовал выше.

sda00 ★★★ ()
Ответ на: комментарий от iZEN

«IGMP активно используется для организации доставки широковещательного мультимедийного контента в IPTV системах»

о^у^ть, вот это новость! иди, сосни glibc-ов, может полегчает...

sda00 ★★★ ()
Ответ на: комментарий от sda00

@sda00 Большое спасибо! Все получилось. Тот косяк в конфиге — это от экспериментов =)

Собственно проблема был в том, что route не был прописан. Сделал вот это:

route add -net 77.94.170.0/24 dev eth0

После этого картинка мгновенно появилась.

Дальнейшие эксперименты показали, что обязательно надо включать force_igmp_version == 2. (спасибо, tid)

Телевидение работает с включенным ppp0 без проблем.

Беда сейчас только одна: много corrupted. Но я думаю, что это уже другая история =)

Еще раз всем большое спасибо!

Кстати говоря, я ставил pimd(какой-то он левый, в portage его нет, пришлось компилировать руками). Он заработал, но с той же проблемой, что и первоначальный igmpproxy, т.е. в группы добавлял, а поток не приходил. Думаю, что теперь он тоже заработал бы. Всем, кто столкнется терпения и удачи!

ien ()
Ответ на: комментарий от sda00

намеренно оставил за рамками роутеры на FreeBSD, так как imho (хотел бы ошибаться, но практика, Господа...) эта система не содержит механизмов, позволяющих нормально решать вопросы динамического роутинга/форварда мультикаста одновременно с NAT-ом, о чём честно предупреждает handbook:

который написан для FreeBSD 7.x...

Ну-ну. :)))

iZEN ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.