Автор Тема: igmpproxy долго отправляет пакеты выхода из группы (leave) [решено]  (Прочитано 1696 раз)

Оффлайн sl

  • Участник
  • *
  • Сообщений: 11
Такая проблемка, есть компьютер используемый в качестве маршрутизатора с установленным ALT Linux (Linux Element.localdomain 3.14.18-std-def-alt1 #1 SMP Mon Sep 8 10:03:02 UTC 2014 x86_64 GNU/Linux), для проброса IPTV используется igmpproxy (igmpproxy-0.1-alt1.qa1.x86_64.rpm). Заметил что плеер, которым смотрю IPTV (IPTV-Player) при переключении канала сразу отправляет пакет leave, а igmpproxy такой пакет отправляет примерно через пять минут после переключения канала. Таким образом после последовательного переключения 10-15 каналов IPTV перестает вещать и необходимо ждать пять минут пока подписка на каналы кончится.

tcpdump с внешнего интерфейса:
[root@Element etc]# tcpdump -i eth0 igmp
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:05:04.858685 IP com.ru > 239.1.10.5: igmp v2 report 239.1.10.5
19:05:05.894664 IP com.ru > 239.1.15.12: igmp v2 report 239.1.15.12
19:05:06.226685 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:05:13.166753 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:05:13.586682 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:05:19.842693 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:05:23.390672 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:05:27.662678 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:06:03.634684 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:06:03.639497 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:06:05.170701 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:06:06.558670 IP com.ru > 239.1.10.5: igmp v2 report 239.1.10.5
19:06:07.150667 IP com.ru > 239.1.15.11: igmp v2 report 239.1.15.11
19:06:10.110670 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:06:11.486678 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:06:12.846667 IP com.ru > 239.1.15.12: igmp v2 report 239.1.15.12
19:07:04.067782 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:07:04.074142 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:07:05.166666 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:07:05.462670 IP com.ru > 239.1.15.12: igmp v2 report 239.1.15.12
19:07:10.110666 IP com.ru > 239.1.10.5: igmp v2 report 239.1.10.5
19:07:10.798668 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:07:11.502664 IP com.ru > 239.1.15.11: igmp v2 report 239.1.15.11
19:07:11.502882 IP com.ru > all-routers.mcast.net: igmp leave 239.1.10.5
19:07:11.550664 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:07:11.559046 IP 169.254.1.37 > 239.1.10.5: igmp query v2 [max resp time 10] [gaddr 239.1.10.5]
19:07:12.556277 IP 169.254.1.37 > 239.1.10.5: igmp query v2 [max resp time 10] [gaddr 239.1.10.5]
19:08:04.558149 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:08:04.562770 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:08:05.478675 IP com.ru > 239.1.15.11: igmp v2 report 239.1.15.11
19:08:05.598750 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:08:09.518676 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:08:11.390668 IP com.ru > 239.1.15.12: igmp v2 report 239.1.15.12
19:08:12.286681 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:09:04.884442 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:09:04.889310 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:09:05.230719 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:09:06.286670 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:09:08.142734 IP com.ru > 239.1.15.12: igmp v2 report 239.1.15.12
19:09:08.398681 IP com.ru > 239.1.15.11: igmp v2 report 239.1.15.11
19:09:11.598720 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:09:16.298856 IP com.ru > all-routers.mcast.net: igmp leave 239.1.15.11
19:09:16.298965 IP com.ru > all-routers.mcast.net: igmp leave 239.1.15.12
19:09:16.351395 IP 169.254.1.37 > 239.1.15.11: igmp query v2 [max resp time 10] [gaddr 239.1.15.11]
19:09:16.362980 IP 169.254.1.37 > 239.1.15.12: igmp query v2 [max resp time 10] [gaddr 239.1.15.12]
19:09:17.346109 IP 169.254.1.37 > 239.1.15.11: igmp query v2 [max resp time 10] [gaddr 239.1.15.11]
19:09:17.384137 IP 169.254.1.37 > 239.1.15.12: igmp query v2 [max resp time 10] [gaddr 239.1.15.12]
19:10:05.293535 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:10:05.299849 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:10:05.454677 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:10:05.898670 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:10:12.350676 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:11:05.741322 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:11:05.748401 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:11:05.926684 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:11:11.438668 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:11:13.694668 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:11:21.302898 IP com.ru > all-routers.mcast.net: igmp leave 239.1.15.13
19:11:21.370992 IP 169.254.1.37 > 239.1.15.13: igmp query v2 [max resp time 10] [gaddr 239.1.15.13]
19:11:22.381360 IP 169.254.1.37 > 239.1.15.13: igmp query v2 [max resp time 10] [gaddr 239.1.15.13]
19:12:06.109012 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:12:06.115027 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:12:08.654711 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9
19:12:15.534672 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:13:06.509811 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:13:06.516654 IP 169.254.1.37 > all-systems.mcast.net: igmp query v2
19:13:08.034682 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
19:13:16.302670 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9

вначале лога переключаются каналы 239.1.10.5, 239.1.15.12, 239.1.15.13 и останавливаемся на 239.1.15.9:
19:05:04.858685 IP com.ru > 239.1.10.5: igmp v2 report 239.1.10.5
19:05:05.894664 IP com.ru > 239.1.15.12: igmp v2 report 239.1.15.12
19:05:06.226685 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:05:13.166753 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:05:13.586682 IP com.ru > 239.1.15.13: igmp v2 report 239.1.15.13
19:05:19.842693 IP com.ru > 239.1.15.9: igmp v2 report 239.1.15.9

а отваливается последний 239.1.15.13 только в 19:11:21:
19:11:21.302898 IP com.ru > all-routers.mcast.net: igmp leave 239.1.15.13

настройки igmpproxy:
quickleave
phyint breth0 upstream  ratelimit 0  threshold 1
        altnet 178.49.131.0/24
phyint breth1 downstream  ratelimit 0  threshold 1
phyint lo disabled
phyint tap0 disabled
phyint tap1 disabled
phyint tun0 disabled

Вобщем, нужно решение как листать каналы без пятиминутных пауз ).

Прошу прощения за длинный код, хотел убрать его под спойлер, но он(спойлер) раскрывается только на две строки, по моему читать было бы сложно.
« Последнее редактирование: 24.11.2015 18:41:36 от Skull »

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Прошу прощения за длинный код, хотел убрать его под спойлер
Код лучше не убирать под спойлер. В таком виде его могут читать все, в том числе владельцы мобильных устройств и иных, где экран мал. В спойлер лучше убирать какую-либо текстовую информацию, имеющую второстепенное значение.

Оффлайн sl

  • Участник
  • *
  • Сообщений: 11
К сожалению решить проблему используя igmpproxy не удалось, поэтому решил с помощью udpxy. На всякий случай кратко опишу как, вдруг кому-то пригодится.

[root@Element ~]# apt-get update
[root@Element ~]# apt-get install udpxy

Правим файл /etc/sysconfig/udpxy, указываем на каком порту вещать, если требуется:
[root@Element ~]# cat /etc/sysconfig/udpxy
OPTIONS="-p 8888"

Добавляем правило в iptables:
[root@Element ~]# iptables -A INPUT -i breth1 -m tcp -p tcp --port 8888 -j ACCEPT
Запускаем сервис и добавляем в автозапуск:
[root@Element ~]# service udpxy start
Starting udpxy service:                                                                                         [ [color=green]DONE[/color] ]
[root@Element ~]# chkconfig udpxy on

Создаем скрипт конвертации плейлиста. У меня монитор 16:10, поэтому скрипт исправляет еще и соотношение сторон. Если этого не требуется, то уберите "; s/4:3/16:10/g" в 19-й строке:
[root@Element ~]# cat /root/UDPXY/down-convert-for-udpxy.sh
#!/bin/sh

cd /root/playlist
# URL откуда качать плейлист
wget http://www.cn.ru/data/tv/playlist.m3u

# Откуда взять скачанный плейлист
DEF="/root/playlist/playlist.m3u"

# Куда положить сконвертированный плейлист
UDPXY="/var/www/html/playlist.m3u"

# IP адрес сервера и порт на котором висит UDPXY
IP_ADDR="192.168.1.1:8888"

PATTERN="udp:\/\/@"
URL="http:\/\/${IP_ADDR}\/udp\/"

sed "s/${PATTERN}/${URL}/g; s/4:3/16:10/g" ${DEF} > ${UDPXY}

exit 0;

У меня /var/www/html/ это директория веб-сервера. Отсюда "IP-TV Player" будет скачивать сконвертированный плейлист.

Добавляем в crontab выполнение скрипта:
[root@Element ~]# crontab -l
30 0 * * 1 /root/UDPXY/down-convert-for-udpxy.sh

В моем случае это каждый понедельник в 00:30.

В настройках "IP-TV Player" меняем адрес списка каналов с "http://www.cn.ru/data/tv/playlist.m3u" на "http://192.168.1.1/playlist.m3u" и жмем кнопку "Обновить".


Пролистал 120 каналов, все ок. Буферизация вроде немного медленнее, но может это субъективно.

Если уже где-то есть мануал. извиняйте за дубль. )
« Последнее редактирование: 03.05.2015 16:18:09 от sl »

Оффлайн sl

  • Участник
  • *
  • Сообщений: 11
Подниму темку.
Представилась возможность проверить отправку пакетов igmp leave на компьютере с AltLinux 4.
Пакеты отправляются корректно:
[root@cerber ~]# tcpdump -i eth1 igmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
00:43:25.932206 IP com.ru > all-routers.mcast.net: igmp leave 239.1.5.10
00:43:26.234223 IP com.ru > 239.1.5.22: igmp v2 report 239.1.5.22
00:43:26.941506 IP 169.254.3.1 > 239.1.5.10: igmp query v2 [max resp time 10] [gaddr 239.1.5.10]
00:43:27.941672 IP 169.254.3.1 > 239.1.5.10: igmp query v2 [max resp time 10] [gaddr 239.1.5.10]
00:43:33.617683 IP com.ru > 239.1.5.22: igmp v2 report 239.1.5.22
00:43:34.793619 IP com.ru > 239.1.5.22: igmp v2 report 239.1.5.22
00:43:56.560615 IP com.ru > all-routers.mcast.net: igmp leave 239.1.5.22
00:43:56.864361 IP com.ru > 239.1.5.11: igmp v2 report 239.1.5.11
00:43:56.941653 IP 169.254.3.1 > 239.1.5.22: igmp query v2 [max resp time 10] [gaddr 239.1.5.22]
00:43:57.941056 IP 169.254.3.1 > 239.1.5.22: igmp query v2 [max resp time 10] [gaddr 239.1.5.22]
00:44:05.135770 IP com.ru > 239.1.5.11: igmp v2 report 239.1.5.11
00:44:06.942426 IP 169.254.3.1 > all-systems.mcast.net: igmp query v2
00:44:09.359520 IP com.ru > 239.1.5.11: igmp v2 report 239.1.5.11
00:44:16.515113 IP com.ru > 239.255.255.250: igmp v2 report 239.255.255.250
00:44:20.548391 IP com.ru > all-routers.mcast.net: igmp leave 239.1.5.11
00:44:20.862909 IP com.ru > 239.1.5.7: igmp v2 report 239.1.5.7
00:44:20.944103 IP 169.254.3.1 > 239.1.5.11: igmp query v2 [max resp time 10] [gaddr 239.1.5.11]
00:44:21.940583 IP 169.254.3.1 > 239.1.5.11: igmp query v2 [max resp time 10] [gaddr 239.1.5.11]
00:44:23.858636 IP com.ru > 239.1.5.7: igmp v2 report 239.1.5.7
00:44:27.534411 IP com.ru > 239.1.5.7: igmp v2 report 239.1.5.7
информация о системе:
[root@cerber ~]# uname -a
Linux cerber 2.6.18-ovz-smp-alt26.M40.2 #1 SMP Thu Nov 13 21:39:12 MSK 2008 i686 GNU/Linux
[root@cerber ~]# igmpproxy -h
Usage: igmpproxy [-h] [-d] [-v [-v]] <configfile>

   -h   Display this help screen
   -d   Run in debug mode. Output all messages on stderr
   -v   Be verbose. Give twice to see even debug messages.

igmpproxy 0.1_beta4
Похоже что-то не правильно в x86_64-версии. Хотя отличия конечно не только в битности.

Оффлайн sl

  • Участник
  • *
  • Сообщений: 11
нда, похоже я сам себе злобный буратино )
дело не в битности и не в версии
iptables -A INPUT -i int_eth1 -p igmp -j ACCEPTоказалось достаточно. я его почему-то открыл только в FORWARD.
проблема решена.