FreeBSD не отправляет IGMP Leave

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Abyrvalg
мл. сержант
Сообщения: 125
Зарегистрирован: 2009-03-04 10:24:44

FreeBSD не отправляет IGMP Leave

Непрочитанное сообщение Abyrvalg » 2020-09-02 15:03:24

Привет тебе, великий All!

Я столкнулся со странной проблемой при работе с мультикастом во FreeBSD 12.x. Проблема состоит в том, что система не отправляет запросы IGMP Leave, т.е. не отписывается от мультикаста по окончании его использования. В результате единожды запрошенный мультикаст льётся в сетевой интерфейс вечно, даже если он уже сто лет как не нужен. Это приводит к быстрому забиванию сетевой полосы и необходимости перезагрузки сервера. Либо я чего-то фатально не понял :(

Итак, следственный эксперимент выглядит так. Имеем под рукой две машинки: на одной 12.1, на другой - 11.3. На обеих установлен ffprobe 4.2.x. Проводим эксперимент на мультикасте 234.5.2.157:1234. Смысл эксперимента состоит в том, что мы запрашиваем мультикаст через ffprobe, при этом с помощью tcpdump пишем дамп всех IGMP-запросов, а сам ffprobe запускаем с помощью truss, чтобы отследить его вызовы.

Что в итоге вышло?

1) Смотрим системные вызовы setsockopt в логах truss.

11.3:

Код: Выделить всё

setsockopt(3,SOL_SOCKET,SO_NOSIGPIPE,0x7fffffffd92c,4) = 0 (0x0)
setsockopt(3,SOL_SOCKET,SO_REUSEADDR,0x80ecba028,4) = 0 (0x0)
setsockopt(3,IPPROTO_IP,IP_ADD_MEMBERSHIP,0x7fffffffe360,8) = 0 (0x0)
setsockopt(3,SOL_SOCKET,SO_RCVBUF,0x7fffffffe360,4) = 0 (0x0)
setsockopt(3,IPPROTO_IP,IP_DROP_MEMBERSHIP,0x7fffffffe440,8) = 0 (0x0)
12.1:

Код: Выделить всё

setsockopt(3,SOL_SOCKET,SO_NOSIGPIPE,0x7fffffffd3ac,4) = 0 (0x0)
setsockopt(3,SOL_SOCKET,SO_REUSEADDR,0x8055869e8,4) = 0 (0x0)
setsockopt(3,IPPROTO_IP,IP_ADD_MEMBERSHIP,0x7fffffffdde0,8) = 0 (0x0)
setsockopt(3,SOL_SOCKET,SO_RCVBUF,0x7fffffffdde0,4) = 0 (0x0)
setsockopt(3,IPPROTO_IP,IP_DROP_MEMBERSHIP,0x7fffffffe290,8) = 0 (0x0)
Таким образом, ffprobe в обоих случаях обращается к ядру с предложением избавиться от ставшего ненужным мультикаста. На практике это должно означать отправку запроса IGMP Leave.

2) Теперь смотрим IGMP-запросы по этому мультикасту в дампах tcpdump.

11.3:

Код: Выделить всё

14:42:39.191842 IP 192.168.171.66 > 234.5.2.157: igmp v2 report 234.5.2.157
14:42:43.428794 IP 192.168.171.66 > all-routers.mcast.net: igmp leave 234.5.2.157
12.1:

Код: Выделить всё

14:42:25.372999 IP 192.168.71.100 > 234.5.2.157: igmp v2 report 234.5.2.157
14:42:47.548742 IP 192.168.71.100 > 234.5.2.157: igmp v2 report 234.5.2.157
Как бы вот...
Что я делаю не так? Где что можно проверить?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Abyrvalg
мл. сержант
Сообщения: 125
Зарегистрирован: 2009-03-04 10:24:44

FreeBSD не отправляет IGMP Leave

Непрочитанное сообщение Abyrvalg » 2020-09-07 12:57:43

Если вдруг кому интересно, то грабли - в баге 248512. С нетерпением жду, когда исправления внесут в релиз.