IPtv multicast
-
igmpproxy.conf
##–----------------------------------------------------
Enable Quickleave mode (Sends Leave instantly)
##------------------------------------------------------
quickleave
phyint rl1 upstream ratelimit 0 threshold 1
altnet 212.49.127.0/24phyint rl0 downstream ratelimit 0 threshold 1
altnet 192.168.0.0/24 -
Ну вот и отлично! в чём теперь проблема?
По идее то устройство, что генерит multicast (на upstream интерфейсе) должно увидеть IGMP и понять, что на данном сегменте сети есть желающие получть этот трафик. После того, как данное устройство осознало столь значительный факт, ты должен незамедлительно получать multicast на upstream интерфейсе, который уже ядром будет доставлен на downstream интерфейс. -
Кстати, всем интересующимся. Можете uninstall/install igmpproxy package и попробовать. Патч наконец-то стал доступен.
-
Я невнимательно посмотрел на внешнем интерфейсе есть IGMP но он от удаленного устройства а не от моего шлюза
IGMP запросы ходят только по внутреннему интерфейсуPS версию igmpproxy обновил через пакеты
-
Это внутри
18:56:04.464254 IP 192.168.0.97 > 224.0.0.252: igmp v2 report 224.0.0.252
18:56:04.464674 IP 192.168.0.97 > 239.255.0.147: igmp v2 report 239.255.0.147
18:58:07.967229 IP 192.168.0.1 > 224.0.0.1: igmp query v2Это снаружи
19:02:56.110616 IP 10.255.189.193 > 224.0.0.1: igmp query v2
19:03:56.363288 IP 10.255.189.193 > 224.0.0.1: igmp query v2
19:04:57.298533 IP 10.255.189.193 > 224.0.0.1: igmp query v2 -
Не уверен, что это корректно, на сколько я помню моя тестовая программулина (какой-то плэйер) слал membership report на 224.0.0.2, а внутри уже был адрес типа 239.255.0.147. Я гляну в RFC, как должно быть.
@filosoff96:18:56:04.464674 IP 192.168.0.97 > 239.255.0.147: igmp v2 report 239.255.0.147
Что у тебя с маршрутизацией покажи пожалуйста
netstat -rn -
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.255.189.193 UGS 0 202232 rl1
10.255.189.192/27 link#2 UC 0 0 rl1
10.255.189.193 00:0c:31:65:7d:00 UHLW 2 105 rl1 1074
10.255.189.195 127.0.0.1 UGHS 0 0 lo0
127.0.0.1 127.0.0.1 UH 1 0 lo0
192.168.0.0/24 link#1 UC 0 0 rl0
192.168.0.97 00:11:d8:d7:72:18 UHLW 1 49921 rl0 1007 -
Попробуй добавить следующее
route add host 239.255.0.147 10.255.189.193 -
##–----------------------------------------------------
Enable Quickleave mode (Sends Leave instantly)
##------------------------------------------------------
quickleave
phyint rl1 upstream ratelimit 0 threshold 1
altnet 212.49.127.0/24phyint rl0 downstream ratelimit 0 threshold 1
altnet 192.168.0.0/24Это конфиг
-
Попробуй добавить следующее
route add host 239.255.0.147 10.255.189.193route: bad address: host
-
Пардон
route add -host 239.255.0.147 10.255.189.193 -
нет тишина на внешнем …
-
так не бывает -)
netstat -rn опять пожалуйста и что говорит igmpproxy если запустить с debug? -
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.255.189.193 UGS 0 242955 rl1
10.255.189.192/27 link#2 UC 0 0 rl1
10.255.189.193 00:0c:31:65:7d:00 UHLW 3 190 rl1 39
10.255.189.195 127.0.0.1 UGHS 0 0 lo0
127.0.0.1 127.0.0.1 UH 1 0 lo0
192.168.0.0/24 link#1 UC 0 0 rl0
192.168.0.97 00:11:d8:d7:72:18 UHLW 1 122870 rl0 1198
239.255.0.147 10.255.189.193 UGHS 0 0 rl1 -
Debu: SENT Membership query from 10.255.189.195 to 224.0.0.1
Debu: Sent membership query from 10.255.189.195 to 224.0.0.1. Delay: 10
Debu: Created timeout 3 (#0) - delay 10 secs
Debu: (Id:3, Time:10)
Debu: Created timeout 4 (#1) - delay 21 secs
Debu: (Id:3, Time:10)
Debu: (Id:4, Time:21)
Debu: Packet from 10.255.189.195: proto: 2 hdrlen: 20 iplen: 8 or 2048
Note: RECV Membership query from 10.255.189.195 to 224.0.0.1 (ip_hl 20, data 8)
Debu: About to call timeout 3 (#0)
Debu: Aging routes in table.
Debu:
Current routing table (Age active routes);
–---------------------------------------------------Debu: No routes in table...
Debu: -
Фикня какая-то, а где 239.255.0.147 в debug логе?
-
А нету …
внутри есть
19:36:59.593338 IP 192.168.0.97 > 239.255.0.147: igmp v2 report 239.255.0.147
19:37:00.046835 IP 192.168.0.97 > 239.255.0.147: igmp v2 report 239.255.0.147 -
Это при запуске
igmpproxy -d /tmp/igmpproxy.conf
igmpproxy, Version 0.1 beta2, Build 090427
Copyright 2005 by Johnny Egeland johnny@rlo.orgDistributed under the GNU GENERAL PUBLIC LICENSE, Version 2 - check GPL.txtDebu: Searching for config file at '/usr/local/etc/igmpproxy.conf'
Debu: Config: Quick leave mode enabled.
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface rl0.
Debu: Config: IF: Got upstream token.
Debu: Config: IF: Got ratelimit token '0'.
Debu: Config: IF: Got threshold token '1'.
Debu: Config: IF: Got altnet token 239.255.1.0/24.
Debu: Config: IF: Altnet: Parsed altnet to 239.255.1/24.
Debu: Config: IF: Got altnet token 239.255.0.0/24.
Debu: Config: IF: Altnet: Parsed altnet to 239.255.0/24.
Debu: Config: IF: Got altnet token 212.48.127.0/24.
Debu: Config: IF: Altnet: Parsed altnet to 212.48.127/24.
Debu: Config: IF: Got altnet token 212.49.127.0/24.
Debu: Config: IF: Altnet: Parsed altnet to 212.49.127/24.
Debu: IF name : rl0
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 1
Debu: Allowednet ptr : 2820c040
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface dc0.
Debu: Config: IF: Got downstream token.
Debu: Config: IF: Got ratelimit token '0'.
Debu: Config: IF: Got threshold token '1'.
Debu: IF name : dc0
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 2
Debu: Allowednet ptr : 0
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface lo.
Debu: Config: IF: Got disabled token.
Debu: IF name : lo
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 0
Debu: Allowednet ptr : 0
Debu: Adding Physical Index value of IF 'rl0' is 1
Debu: buildIfVc: Interface rl0 Addr: 192.168.0.1, Flags: 0xffff8943, Network: 192.168.0/24
Debu: Adding Physical Index value of IF 'rl1' is 2
Debu: buildIfVc: Interface rl1 Addr: 10.255.189.195, Flags: 0xffff8943, Network: 10.255.189.192/27
Debu: Adding Physical Index value of IF 'lo0' is 7
Debu: buildIfVc: Interface lo0 Addr: 127.0.0.1, Flags: 0xffff8049, Network: 127/8
Debu: Found config for rl0
Note: adding VIF, Ix 0 Fl 0x0 IP 0x0100a8c0 rl0, Threshold: 1, Ratelimit: 0
Debu: Network for [rl0] : 192.168.0/24
Debu: Network for [rl0] : 239.255.1/24
Debu: Network for [rl0] : 239.255.0/24
Debu: Network for [rl0] : 212.48.127/24
Debu: Network for [rl0] : 212.49.127/24
Note: adding VIF, Ix 1 Fl 0x0 IP 0xc3bdff0a rl1, Threshold: 1, Ratelimit: 0
Debu: Network for [rl1] : 10.255.189.192/27
Debu: Got 262144 byte buffer size in 0 iterations
Debu: Joining all-routers group 224.0.0.2 on vif 10.255.189.195
Note: joinMcGroup: 224.0.0.2 on rl1
Debu: SENT Membership query from 10.255.189.195 to 224.0.0.1
Debu: Sent membership query from 10.255.189.195 to 224.0.0.1. Delay: 10
Debu: Created timeout 1 (#0) - delay 10 secs
Debu: (Id:1, Time:10)
Debu: Created timeout 2 (#1) - delay 21 secs
Debu: (Id:1, Time:10)
Debu: (Id:2, Time:21)
Debu: Packet from 10.255.189.195: proto: 2 hdrlen: 20 iplen: 8 or 2048
Note: RECV Membership query from 10.255.189.195 to 224.0.0.1 (ip_hl 20, data 8)
Debu: About to call timeout 1 (#0)
Debu: Aging routes in table.
Debu:
Current routing table (Age active routes);
–---------------------------------------------------Debu: No routes in table...
Debu:
-----------------------------------------------------/johnny@rlo.org -
Как я уже постил раньше, должно быть примерно так:
должно быть примерно так:
Debu: Packet from 192.168.7.185: proto: 2 hdrlen: 20 iplen: 8 or 2048
Note: RECV V2 member report from 192.168.7.185 to 224.0.0.22 (ip_hl 20, data
Debu: Should insert group 239.142.1.1 (from: 192.168.7.185) to route table. Vif Ix : 0
Debu: No existing route for 239.142.1.1. Create new.
Debu: Found existing routes. Find insert location.
Debu: Inserting at beginning, before route 224.0.1.60
Info: Inserted route table entry for 239.142.1.1 on VIF #0
Debu: Joining group 239.142.1.1 upstream on IF address 2.2.2.2
Note: joinMcGroup: 239.142.1.1 on le1Не вижу у тебя при старте
Debu: Found config for rl1… -
Смущает вот эта строка
Debu: Config: IF: Config for interface dc0.
такого интерфейса нет в системе
есть rl0, rl1, ed0
rl0 > LAN
rl1 > WAN
ed0 > ADSL - не настроен -
Вот это вот выдаётся, когда разбирается igmpproxy.conf
Debu: Allowednet ptr : 2820c040 Debu: Config: Got a phyint token. Debu: Config: IF: Config for interface dc0. Debu: Config: IF: Got downstream token. Debu: Config: IF: Got ratelimit token '0'. Debu: Config: IF: Got threshold token '1'.
возможно тупой вопрос, но ты уверен, что в /tmp/igmpproxy.conf у тебя нет этого интерфейса?
-
С первой строчкой разобрался
в остальном все так же непонятно
-
с первой строчкой?
-
Копался вот что вышло
Debu: Aging Origin 192.168.0.99 Dst 239.255.255.250 PktCnt 1 -> 1
Debu: Origin 192.168.0.99 Vif bits : 0x00000000
Debu: Identified Input VIF #0 as DOWNSTREAM.
Debu: Setting TTL for UPSTREAM Vif 1 to 1
Note: Removing MFC: 192.168.0.99 -> 239.255.255.250, InpVIf: 0
Debu: Removing group 239.255.255.250. Died of old age.
Debu: Removed route entry for 239.255.255.250 from table.
Note: Route is not active. No kernel updates done.
Debu:
Current routing table (Remove route); -
На внешнем интерфейсе появилось вот это
14:13:09.750924 IP 10.255.189.193 > 239.255.0.133: igmp query v2 [max resp time 10] [gaddr 239.255.0.133]
14:13:10.750688 IP 10.255.189.193 > 239.255.0.133: igmp query v2 [max resp time 10] [gaddr 239.255.0.133]
14:13:11.749474 IP 10.255.189.193 > 239.255.0.133: igmp query v2 [max resp time 10] [gaddr 239.255.0.133] -
Вообще что я понял
1. на внутренний интерфейс пакеты приходят:
14:39:15.816624 IP 192.168.0.98 > 239.255.0.146: igmp v2 report 239.255.0.146
14:39:16.034333 IP 192.168.0.99 > 239.192.152.143: igmp v2 report 239.192.152.143
14:39:18.034329 IP 192.168.0.99 > 239.255.0.143: igmp v2 report 239.255.0.143
14:39:28.733350 IP 192.168.0.98 > 224.0.0.2: igmp leave 239.255.0.1462. Прокси их видит:
Note: New origin for route 239.192.152.143 is 192.168.0.99, flood 0
Debu: Origin 192.168.0.99 Vif bits : 0x00000000
Debu: Identified Input VIF #0 as DOWNSTREAM.
Debu: Setting TTL for UPSTREAM Vif 1 to 1
Note: Adding MFC: 192.168.0.99 -> 239.192.152.143, InpVIf: 0
Debu:
Current routing table (Activate Route);
–---------------------------------------------------Debu: #0: Dst: 239.192.152.143, Age:2, St: A, OutVifs: 0x00000000
Debu: #0: Origin: 192.168.0.99 floodIf 0 pktcnt 0
Debu:3. Но на внешнем интерфейсе ничего нет
14:37:36.341589 IP 10.255.189.193 > 224.0.0.1: igmp query v2
14:38:36.469784 IP 10.255.189.193 > 224.0.0.1: igmp query v2
14:39:36.471234 IP 10.255.189.193 > 224.0.0.1: igmp query v2
14:40:36.588887 IP 10.255.189.193 > 224.0.0.1: igmp query v2 -
А почему multicast address всегда меняется?
Замаршрутизируй тогда весь multicast range на upstream interface.
route add -net 224.0.0.0/4 10.255.189.193Здесь же видишь multicast на WAN:
14:13:09.750924 IP 10.255.189.193 > 239.255.0.133: igmp query v2 [max resp time 10] [gaddr 239.255.0.133]
14:13:10.750688 IP 10.255.189.193 > 239.255.0.133: igmp query v2 [max resp time 10] [gaddr 239.255.0.133]
14:13:11.749474 IP 10.255.189.193 > 239.255.0.133: igmp query v2 [max resp time 10] [gaddr 239.255.0.133] -
Маршрутизацию уже делал …
Адреса меняются в зависимости от канала
239.255.0.0/24
239.255.1.0/24провайдер пишет что достаточно написать
altnet 212.49.127.0/24
-
altnet сейчас вообще ни на что не влияет. Это дело присутствует в коде, но до ума его не довели. Можно не париться и вообще в конфиге не указывать.
Давай ещё раз к твоему случаю.
1. Upstream и downstream должны быть правильно присвоены.
2. Маршрутизация должна вести на upstream.
У меня это работает. Должно работать и у тебя.
Теперь что должно работать: IGMP пакеты, принятые на downstream interface, должны быть странслированы на upstream interface. -
Как то еще странно ведет себя прокси проходит наружу только 3 пакета и все.
Потом только переустановка прокси и еще 3 пакета пройдетПрокси жадный по поводу железа?
Машинка П-133
-
Нет, совсем не жадный.
Я тебе отправил новый бинарник для 1.2.2. В нём igmp шлётся строго с upstream, не обращая внимания на маршрутизацию.
Запусти его пожалуйста с -d и весь debug зашли мне обратно.
Похоже мы тут спамим с тобой, может лучше по почте продолжим? -
ок
-
После получения net dump'ов от filosoff96 и немерянного числа безуспешных попыток понять что же происходит я похоже набрёл на правду. Все IGMP пакеты, генерируемые его проигрывателем имеют IP Router Alert Option в IP-заголовке, а pf на данный момент такие пакеты тупо молча игнорирует. Вобщем они даже не доходят до демона igmpproxy.
Пока выхода два:- найти плэйер, который не вставляет это дело в IP (
Edited: например, http://www.nsplayer.org/Download-4.html) - запретить pf (но это не опция, это так - для теста)…
Вопрос задан разработчикам, посмотрим, что ответят. (Edited: в 2.0 решено http://redmine.pfsense.org/issues/show/54 )
Вот такая фикня -((((
PS: filosoff, если не жалко пришли пожалуйста дамп того, что шлёт твой хост 192.168.0.99 - очень интересно. - найти плэйер, который не вставляет это дело в IP (
-
-
В pfSense 2.0 есть галочка "разрешать IP options", т.е. pf не будет отфильтровывать эти пакеты.
Как ведёт себя igmpproxy в 2.0 я понятия не имею. -
К своему великому удивлению я обнаружил эту опцию в своём 1.2.2
Идём на downstream interface в Rules, кликаем Edit и в Advanced options есть галочка "This allows packets with ip options to pass otherwise they are blocked by default i.e. with multicast routing/proxing." Отмечаем её, сохранить, применить и всё. Работает. -
Теперь бы еще резюме с полным процессом настройки. Мне например не понятно чего указывать в настройках igmpproxy в параметрах downstream и upstream.
-
Процесс очень прост. Upstream - это тот нитерфейс, на котором к тебе приходит мультикаст (провайдер я предполагаю, т.е. WAN).
Downstream - интерфейсы где хочешь видеть этот multicast трафик. На счёт altnet можно не заморачиваться, этот параметр сейчас игнорируется. Что в правилах будет разрешено, то и будет проходить. -
Что в правилах будет разрешено, то и будет проходить.
И чего в правилах нужно добавить для воркания ИП-ТВ? Типа фром 239.0.2.17 ту эни локал?
-
На LAN нужно прежде всего разрешить IGMP c LAN на Multicast address (типа 239.0.2.17) и указать вышеупомянутую опция в Advanced Options.
На WAN нужно разрешить с (кто вещает) на 239.0.2.17