Рейтинг:0

IGMP v3 JOIN отправлен, но нет трафика от коммутатора

флаг gr

Я пытаюсь присоединиться к многоадресному потоку IGMP с машины Centos 8, но после отправки JOIN трафик с коммутатора отсутствует.

Простое подключение:

Мультиплексор <-----------> cisco3850 <--------> Centos8
192.168.117.13 192.168.117.21

Восходящий коммутатор (Cisco Catalyst 3850) получает MPEG-TS на 239.1.1.1:4000 от мультиплексора.

я пробовал оба сокат и моя собственная программа для открытия сокета, присоединения к потоку и удержания сокета открытым. Оба отправляют одно и то же сообщение о присоединении к IGMP, подтвержденное wireshark:

Протокол управления группой Интернета
    [Версия IGMP: 3]
    Тип: Отчет о членстве (0x22)
    Зарезервировано: 00
    Контрольная сумма: 0xe9fb [верно]
    [Статус контрольной суммы: Хороший]
    Зарезервировано: 0000
    Количество групповых записей: 1
    Групповая запись: 239.1.1.1 Изменить режим исключения
        Тип записи: Изменить на режим исключения (4)
        Длина дополнительных данных: 0
        Номер источника: 0
        Многоадресный адрес: 239.1.1.1

С использованием ip маршрут добавить Я создал маршруты для мультикаст-групп к интерфейсу:

224.0.0.0/4 dev eth1 ссылка на область видимости
225.0.0.0/8 dev eth1 ссылка на область видимости
239.0.0.0/8 dev eth1 ссылка на область видимости

и кот /proc/net/igmp показывает, что к группе присоединились:

кот /proc/net/igmp
Устройство Idx: подсчет пользователей Querier Group Timer Reporter
3 эт1 : 2 В3
                                030101E1 1 0:00000000 0
                                010000E0 1 0:00000000 0

я подозревать это проблема с коммутатором, а не с Linux, но клиент (владеющий коммутатором) говорит, что все в порядке.

Что еще я могу сделать на стороне Linux, чтобы исследовать/исправить эту проблему?

Если проблема в коммутаторе, то в чем? Что там нужно настроить? (необходимо объяснить клиенту)


Для справки, моя программа, которая присоединяется и удерживает сокет открытым, выглядит так:

// Проверка ошибок для краткости опущена
fd = сокет (PF_INET, SOCK_DGRAM, IPPROTO_IP);
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes);

memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = mcastAddr;
saddr.sin_port = htons (порт);

bind(fd, (struct sockaddr *)&saddr, sizeof(saddr);

структура ip_mreq mcastReq;
mcastReq.imr_multiaddr.s_addr = mcastAddr;
&mcastReq.imr_interface.s_addr = адрес_интерфейса;

setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcastReq, sizeof(mcastReq);
Рейтинг:0
флаг gr

В конце концов, клиентский коммутатор не смог/не захотел активировать IGMPv3, поэтому мы настроили нашу машину на использование IGMP v2, создав файл под /etc/sysctl.d.

Затем JOIN сработал, но Linux не отвечал на многоадресные запросы о членстве, поэтому коммутатор отключил поток через 1-2 минуты (хотя у нас было net.ipv4.conf.default.rp_filter установить на ноль.

Получается, чтобы полностью отключить проверку обратного пути, нам нужно было установить все rp_filter настройки на ноль (включая явное перечисление интерфейса)

# Установить версию IGMP для eth1
# Установите значение «2» или «3» в зависимости от того, что включено в переключателе
net.ipv4.conf.eth1.force_igmp_version = 2

# Отключить проверку исходного маршрута
# В дополнение к 90-torque.conf также явно установите eth1 для игнорирования
# проверка пути возврата
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.