IPtv multicast
-
Есть программа прекрасно дополняющая igmpproxy. Работает как вместе с ней, так и отдельно.
Не подумайте ничего плохого про igmpproxy, она прекрасно работает, но есть одно НО!
Использование igmpproxy в локальной сети с зонами wi-fi чревато проблемами. Поток мультикаста перегружает маломощные 54Mb точки тоступа. Новые, 300 мегабитные работают нормально.
Стандарт 802.11g, тяжело переваривает маленькие пакеты, IPTV идет очень нестабильно, с постоянными прерываниями помимо этого точка доступа может зависать напрочь.Есть простое решение этой проблемы - udpxy (http://sourceforge.net/projects/udpxy/)
Основная задача udpxy заключается в передаче данных, считанных из мультикаст-канала (рассылающего данные подписчикам по протоколу UDP), в клиентское соединение, работающее в протоколе TCP. Таким образом, легко решается вышеописанная проблема!
Установка программы на pfsense 1.2.3 RC у меня заняла минут семь, это учитывая время на разбор параметров.
Ставиться из пакетов, pkg_add ftp.freebsd.org/pub/FreeBSD/ports/i386/packages/net/udpxy-1.0.16.tbz
Настройки фаервола те же, что и с igmpproxy, даже не менял ничего.Чтобы он начал автоматически запускаться нужно поправить udpxy и переименовать его в udpxy.sh в /usr/local/etc/rc.d/. Править его обязательно, т.к. у программы нет конфигурационного файла и все необходимые для работы опции прописываются в нем.
В udpxy.sh изменил всего две строчки:
udpxy_enable=${udpxy_enable-"YES"}
udpxy_flags=${udpxy_flags-" -a LAN_IP -c 4 -M 60 -m WAN_IP"}
а ну и в /etc/defaults/rc.conf добавил udpxy_enable-"YES", только не знаю надо или нет.-a - указать адрес (IPv4) или имя интерфейса для (HTTP) запросов к приложению [0.0.0.0 - по умолчанию]
-p - указать TCP порт для (HTTP) запросов к приложению (обязательный параметр)
-m - указать адрес (IPv4) или имя интерфейса мультикаст-каналов [0.0.0.0 - по умолчанию]
-с - максимальное количество клиентов, обслуживаемых одновременно [см. подсказку при запуске]
-M - периодически возобновлять подписку на мультикаст-канал [по умолчанию - 0 (секунд), т.е. не возобновлять]У меня без опции -M 60 (продление подписки на вещание, через сколько в секундах) прерывает поток.
Вот только чтобы смотреть IPTV нужно поправить плейлист в внем нужно поменять udp://@239.192.12.5:1234 на http://{LAN_IP}:4022/udp/239.192.12.5:1234
По адресу http://{LAN_IP}:4022/status можно посмотреть подключенных клиентов.
И еще один плюс - IPTV можно без лишнего гемороя раздавать через PPTP, лишь бы ширины канала хватало.
-
Скорее всего проблема в моем провайдере
Провайдеры спецом ставят ttl 1 чтобы не было маршрутизации мультикаста.
Если ttl 1 можно pf-ом поднять его.
Включив pf и указав в конфиге```
scrub in on re0 all min-ttl 10 -
Всё делал по инструкции, но все равно не работает:
Конфигурация:
WAN интерфейс rl0
LAN интерфейс fxp0Dec 9 10:26:20 igmpproxy: Warn: select() failure; Errno(4): Interrupted system call Dec 9 10:26:20 igmpproxy: Note: Got a interupt signal. Exiting. Dec 9 10:26:20 igmpproxy: Note: All routes removed. Routing table is empty. Dec 9 10:26:20 igmpproxy: Note: adding VIF, Ix 0 Fl 0x0 IP 0x635bc20a fxp0, Threshold: 1, Ratelimit: 0 Dec 9 10:26:20 igmpproxy: Note: adding VIF, Ix 1 Fl 0x0 IP 0xa2dd0c55 rl0, Threshold: 1, Ratelimit: 0 Dec 9 10:26:20 igmpproxy: Note: joinMcGroup: 224.0.0.2 on fxp0
$ tcpdump -ni fxp0 igmp 10:34:58.706927 IP 10.194.91.98 > 224.0.0.2: igmp leave 230.200.201.10 10:34:58.720635 IP 10.194.91.99 > 230.200.201.10: igmp query v2 [max resp time 20] [gaddr 230.200.201.10] 10:34:58.725357 IP 10.194.91.98 > 230.200.201.12: igmp v2 report 230.200.201.12 10:34:58.775770 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 10:34:58.781514 IP 192.168.90.55 > 230.200.201.10: igmp v2 report 230.200.201.10 10:34:58.791620 IP 192.168.90.55 > 230.200.201.10: igmp v2 report 230.200.201.10 10:34:59.147399 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 10:34:59.163425 IP 192.168.90.55 > 230.200.201.10: igmp v2 report 230.200.201.10 10:34:59.816381 IP 0.0.0.0 > 224.0.0.2: igmp leave 230.200.201.10 10:34:59.816586 IP 10.194.91.99 > 230.200.201.10: igmp query v2 [max resp time 20] [gaddr 230.200.201.10] 10:34:59.817460 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 10:35:00.136608 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 10:35:00.669068 IP 10.194.91.98 > 230.200.201.12: igmp v2 report 230.200.201.12
Если запускаешь tcpdump -ni rl0 'net 239.200.201.0/24 and (igmp or udp)' то вообще ничего не выводится
Т.е. как я понимаю pfsense не формирует IGMP-report на Upstream интерфейсе (WAN)
Подскажите что можно сделать?
-
Логи igmpproxy и tcpdump сделаны в разное время. Покажи один и тот же промеждуток времени.
-
$ tcpdump -c 30 -ni fxp0 igmp 11:17:17.908577 IP 10.194.91.89 > 239.255.255.250: igmp v1 report 239.255.255.250 11:17:18.492503 IP 10.194.90.201 > 224.0.0.9: igmp v2 report 224.0.0.9 11:17:18.508860 IP 10.194.91.89 > 239.255.255.253: igmp v1 report 239.255.255.253 11:17:20.202128 IP 10.194.90.184 > 239.255.255.250: igmp v2 report 239.255.255.250 11:17:21.474032 IP 10.194.90.11 > 224.0.1.22: igmp v2 report 224.0.1.22 11:17:22.149051 IP 10.194.91.98 > 224.0.0.2: igmp leave 230.200.201.10 11:17:22.168636 IP 10.194.91.98 > 230.200.201.11: igmp v2 report 230.200.201.11 11:17:22.180405 IP 10.194.91.99 > 230.200.201.10: igmp query v2 [max resp time 20] [gaddr 230.200.201.10] 11:17:22.229644 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 11:17:22.235996 IP 192.168.90.55 > 230.200.201.10: igmp v2 report 230.200.201.10 11:17:22.259361 IP 192.168.90.55 > 230.200.201.10: igmp v2 report 230.200.201.10 11:17:22.568011 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 11:17:22.589687 IP 192.168.90.55 > 230.200.201.10: igmp v2 report 230.200.201.10 11:17:23.206527 IP 0.0.0.0 > 224.0.0.2: igmp leave 230.200.201.10 11:17:23.225876 IP 10.194.91.99 > 230.200.201.10: igmp query v2 [max resp time 20] [gaddr 230.200.201.10] 11:17:23.275553 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 11:17:23.587565 IP 10.194.90.2 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 11:17:25.252686 IP 10.76.75.254 > 224.0.0.2: igmp leave 230.200.201.10 11:17:30.258999 IP 10.194.91.98 > 230.200.201.11: igmp v2 report 230.200.201.11 11:17:36.900150 IP 10.194.91.98 > 230.200.201.11: igmp v2 report 230.200.201.11 11:17:59.335757 IP 10.194.90.144 > 224.0.0.2: igmp leave 239.255.255.250 11:18:41.843031 IP 10.194.91.98 > 224.0.0.2: igmp leave 230.200.201.11 11:18:41.858197 IP 10.194.91.99 > 230.200.201.11: igmp query v2 [max resp time 20] [gaddr 230.200.201.11] 11:18:41.861067 IP 10.194.91.98 > 230.200.201.32: igmp v2 report 230.200.201.32 11:18:41.892491 IP 10.194.90.2 > 230.200.201.11: igmp query v2 [max resp time 10] [gaddr 230.200.201.11] 11:18:41.903041 IP 192.168.90.55 > 230.200.201.11: igmp v2 report 230.200.201.11 11:18:41.924535 IP 192.168.90.55 > 230.200.201.11: igmp v2 report 230.200.201.11 11:18:42.737689 IP 10.194.90.2 > 230.200.201.11: igmp query v2 [max resp time 10] [gaddr 230.200.201.11] 11:18:42.756164 IP 192.168.90.55 > 230.200.201.11: igmp v2 report 230.200.201.11 11:18:42.918487 IP 0.0.0.0 > 224.0.0.2: igmp leave 230.200.201.11
Dec 9 11:15:00 check_reload_status: check_reload_status is starting Dec 9 11:16:51 kernel: fxp0: promiscuous mode enabled Dec 9 11:16:51 kernel: fxp0: promiscuous mode disabled Dec 9 11:17:17 kernel: fxp0: promiscuous mode enabled Dec 9 11:18:43 kernel: fxp0: promiscuous mode disabled
-
вижу два tcpdump, нужно логи igmpproxy и tcpdump
-
В логах igmpproxy в это время ничего не пишет
Только раньшеDec 9 11:14:04 igmpproxy: Warn: select() failure; Errno(4): Interrupted system call Dec 9 11:14:04 igmpproxy: Note: Got a interupt signal. Exiting. Dec 9 11:14:04 igmpproxy: Note: All routes removed. Routing table is empty. Dec 9 11:14:04 igmpproxy: Note: adding VIF, Ix 0 Fl 0x0 IP 0x635bc20a fxp0, Threshold: 1, Ratelimit: 0 Dec 9 11:14:04 igmpproxy: Note: adding VIF, Ix 1 Fl 0x0 IP 0xa2dd0c55 rl0, Threshold: 1, Ratelimit: 0 Dec 9 11:14:04 igmpproxy: Note: joinMcGroup: 224.0.0.2 on fxp0 Dec 9 11:14:04 php: : Started Igmpproxy service sucsesfully.
-
Значит igmpproxy не видит igmp пакеты вообще. Измени правило для igmp -> поставь destination=224.0.0.0/4
-
Спасибо Evgeny! Поставил destination=224.0.0.0/4 заработало.
Правда ещё в Настройках IGMP proxy в upstream нужно было добавить в Networks адреса с которых вещается (у меня 10.1.0.0/16). -
Спасибо Evgeny! Поставил destination=224.0.0.0/4 заработало.
Правда ещё в Настройках IGMP proxy в upstream нужно было добавить в Networks адреса с которых вещается (у меня 10.1.0.0/16).Пожалуйста -)
а про networks в моем мануале есть ;-) -
Уважаемый Evgeny
я скачал и поставил pfSense-2.0-BETA4-20101212-2242
Но в ней нет в стандартных пакетах IGMPProxy. Не могли бы Вы выложить куда нибудь последнюю рабочую версию. Заранее благодарен -
Уважаемый Evgeny
я скачал и поставил pfSense-2.0-BETA4-20101212-2242
Но в ней нет в стандартных пакетах IGMPProxy. Не могли бы Вы выложить куда нибудь последнюю рабочую версию. Заранее благодаренон там сразу встроен..
-
он там сразу встроен..
Действительно, не заметил. Спасибо
-
Спасибо Evgeny! Поставил destination=224.0.0.0/4 заработало.
Правда ещё в Настройках IGMP proxy в upstream нужно было добавить в Networks адреса с которых вещается (у меня 10.1.0.0/16).Сразу не заметил проблему, просто переключал каналы. А проблема такая:
Через небольшое время просмотра канала, изображение со звуком пропадает, помогает нажатие stop и play в проигрывателе.
Посмотрел tcpdump, на wan пропадает udp поток.
Как выяснилось при нажатии кнопки play на lan периодически появляются igmp# tcpdump -ni fxp0 'net 230.200.201.10 and igmp' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on fxp0, link-type EN10MB (Ethernet), capture size 96 bytes 08:22:21.193209 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10 08:22:29.369448 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10 08:22:29.777390 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10 08:23:34.023161 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10 08:25:42.488905 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10 08:27:40.933002 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10 08:27:49.925479 IP 10.194.91.98 > 230.200.201.10: igmp v2 report 230.200.201.10
А на wan igmp появляются только при старте воспроизведения
# tcpdump -ni rl0 'net 230.200.201.10 and igmp' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes 08:22:21.194200 IP 85.12.221.162 > 230.200.201.10: igmp v2 report 230.200.201.10 08:22:26.061086 IP 85.12.221.162 > 230.200.201.10: igmp v2 report 230.200.201.10 08:26:08.242102 IP 10.2.16.12 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10] 08:26:08.255177 IP 10.2.16.12 > 230.200.201.10: igmp query v2 [max resp time 10] [gaddr 230.200.201.10]
И из-за этого (как мне кажется) пропадает udp поток.
Подскажите куда копать? -
а что показывает в это время```
tcpdump -ni rl0 igmp -
В 9.55.56 запустил воспроизведение в 10.0.26 оно зависло
# tcpdump -ni rl0 igmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes 09:55:56.775046 IP 85.12.221.162 > 230.200.201.10: igmp v2 report 230.200.201.10 09:55:56.798371 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:56:04.944641 IP 85.12.221.162 > 230.200.201.10: igmp v2 report 230.200.201.10 09:56:06.967462 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:56:15.794431 IP 10.210.32.205 > 224.0.0.1: igmp query v2 09:56:16.533733 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:56:27.509133 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:56:36.904563 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:56:46.646303 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:56:56.841511 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:57:06.662194 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:57:16.602727 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:57:26.704765 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:57:26.709092 IP 10.2.16.12 > 224.0.0.1: igmp query v2 09:57:36.522333 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:57:46.619396 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:57:56.469419 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:58:07.570873 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:58:17.559399 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:58:21.456414 IP 10.210.32.205 > 224.0.0.1: igmp query v2 09:58:26.943834 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:58:37.909058 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:58:47.850050 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:58:57.910988 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:59:07.032072 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:59:17.887298 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:59:27.017059 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:59:30.869481 IP 85.12.221.162 > 224.0.1.22: igmp v2 report 224.0.1.22 09:59:31.146346 IP 85.12.221.162 > 224.0.1.22: igmp v2 report 224.0.1.22 09:59:32.177108 IP 10.2.16.12 > 224.0.0.1: igmp query v2 09:59:36.963195 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:59:47.157535 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 09:59:57.155172 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 10:00:07.152021 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 10:00:17.061100 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe 10:00:26.568221 IP 10.210.32.205 > 224.0.0.1: igmp query v2 10:00:26.964765 IP 10.2.16.12 > 224.0.0.4: igmp dvmrp Probe
-
ты на какой версии pfSense пробуешь?
Попробуй на WAN такое же правило для igmp прописать, что и для LAN - на 224.0.0.0/4 -
ты на какой версии pfSense пробуешь?
Попробуй на WAN такое же правило для igmp прописать, что и для LAN - на 224.0.0.0/4Помогло. На wan начали периодически появляться igmp report
Спасибо большое!Версия pfsense 1.2.3-RELEASE
-
Пожалуйста.
Для пущей безопасности можешь попробовать изменить 224.0.0.0/4 на 224.0.0.1/32 -
Пожалуйста.
Для пущей безопасности можешь попробовать изменить 224.0.0.0/4 на 224.0.0.1/32С таким правилом тоже работает нормально