Проблемы приема мультикаста¶
Как принять мультикаст¶
Проверить возможность приема мультикаст-потока на компьютере можно следующими способами:
Попытаться запустить зонд и поставить ему задачу анализировать нужный мультикаст-поток.
Попробовать проиграть поток в сетевом плеере (например, в VLC плеере). Если поток начинает проигрываться, это означает, что вещание доходит до вашего компьютера и может быть принято Boro зондом. Если поток плеером не проигрывается, это еще не означает, что вы не получаете мультикаст. Возможно, у вас неправильно (иначе) настроена таблица маршрутизации. Для обхода правил маршрутизации Boro использует прямое указание сетевого интерфейса: заполните правильно поле “IP сетевого интерфейса” и проверьте, принимает ли Boro зонд данные. Если поле “IP сетевого интерфейса” оставлено пустым, зонд будет принимать данные согласно таблице маршрутизации.
Попробовать сдампить поток утилитой socat. Подробнее об утилите и пример команды читайте в разделе Дамп мультикаст-потоков. Если дамп создается успешно, это означает, что вы принимаете поток. Если файл дампа создается, но в него ничего не записывается (размер файла равен 0), это означает, что вы по каким-либо причинам не получаете указанный поток в пользовательское пространство (user space). Т.к. socat использует прямое указание сетевого интерфейса, таблица маршрутизации не влияет на возможность получения потока.
Компьютер принимает мультикаст, но зонд его не видит¶
Если ваш компьютер получает указанный мультикаст-поток, то проблема может быть в настройке зонда:
Наиболее популярной проблемой является невнимательная постановка задачи анализатору. Т.е. проблема банально кроется в ошибках написания мультикаст-группы.
Пример правильного указания URI:udp://235.0.0.5:1234
.Примеры адреса с ошибкой:udp://235.0.0:5:1234
илиudp://235.0.0.0.5:1234
.На первый взгляд досадную ошибку сложно обнаружить, пожалуйста, проверяйте внимательно задаваемые URI.
Второй типичной ошибкой является указание неправильного IP-адреса интерфейса. Проверьте правильность указания IP-адреса, убедитесь, что данный интерфейс все еще присутствует в системе и что именно данный интерфейс используется для приема мультикаста. В качестве адреса могут выступать IP сетевых карт, виртуальных интерфейсов и адрес 127.0.0.1 (localhost). Если адрес не задан, потоки будут приниматься согласно системной таблице маршрутизации.
Подобная ошибка часто возникает при ручном копировании конфигурации анализаторов с одного компьютера на другой. Мы рекомендуем для данных целей использовать удобный инструмент сохранения/применения конфигурации на сервере.
Если во время работы зонда пользователь изменял сетевые настройки (например получил другой IP-адрес или добавил VLAN) перезапуск зонда может решить проблему приема мультикаста.
Компьютер не принимает мультикаст¶
Проверка наличия трафика до компьютера¶
Чтобы определить, принимает ли компьютер мультикаст-вещание необходимо использовать захват трафика. Данный способ позволяет исключить влияние системных фильтров и фаервола на прием мультикаста. Необходимо выполнить два шага:
Подписаться на мультикаст-группу;
Исследовать трафик на необходимом сетевом интерфейсе.
Linux
Подписаться на мультикаст-группу можно следующей командой:
socat -u UDP4-RECV:7777,ip-add-membership=<MULTICAST_IP>:<NIC_IP>,reuseaddr CREATE:/dev/null
Проследить трафик можно несколькими способами, все они связаны с захватом трафика (т. н. packet capture) в обход всевозможных системных фильтров. Кроме этого, можно использовать режим Promiscuous mode, в котором сетевая карта позволяет принимать все пакеты независимо от того, кому они адресованы:
Утилита iftop в promiscuous mode (см. Инструкцию):
sudo iftop -p -i <INTERFACE_NAME> -F <MULTICAST_IP>/32
В таблице должна отобразиться строка с указанной группой.
Утилита tcpdump (см. Руководство):
tcpdump -i <INTERFACE_NAME> dst <MULTICAST_IP> and udp dst port <MULTICAST_PORT>
Должен отобразиться список принимаемых пакетов по указанному MULTICAST IP (необходимо подождать 10-20с).
Windows
Подписаться на мультикаст-группу можно, запустив поток в плеере VLC или начав дампить поток с помощью утилиты socat.
Для отслеживания трафика рекомендуется использовать следующие утилиты:
Утилита WinDump (см. Руководство). Требует установки драйвера WinPcap или NPcap. Команда идентична команде, описанной для ОС Linux:
WinDump.exe -i <INTERFACE_INDEX> dst <MULTICAST_IP> and udp dst port <MULTICAST_PORT>
Единственным отличием является указание имени адаптера — для версии Windows используются индексы, которые можно получить командой:
WinDump.exe -D
Программа WireShark (загрузить программу и прочитать руководство по использованию вы можете на официальном сайте Wireshark). Отфильтровать трафик можно по правилу:
dst <MULTICAST_IP> and udp dst port <MULTICAST_PORT>
.
Проверка влияния Firewall¶
Linux — CentOS
Для проверки влияния firewall можно его временно отключить:
systemctl stop firewalldВ CentOS 7/8 вместо отключения firewall можно использовать один из способов:
Добавить разрешения для всех входящих IGMP и мультикаст UDP-пакетов на всех интерфейсах:
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 destination address=224.0.0.0/4 protocol value=udp accept" firewall-cmd --permanent --add-rich-rule="rule family=ipv4 protocol value=igmp accept" firewall-cmd --reloadПереместить интерфейс с мультикастами в доверительную зону (в терминах FirewallD in CentOS):
firewall-cmd --zone=trusted --change-interface=<INTERFACE_NAME>
Linux — Ubuntu
Для проверки влияния firewall можно его временно отключить:
ufw disable
Вместо отключения firewall можно добавить разрешения для всех входящих IGMP и мультикаст UDP-пакетов на всех интерфейсах:
ufw allow proto udp to 224.0.0.0/4 ufw allow proto igmp to any
Windows
Случается, что брандмауэр Windows блокирует доступ к мультикаст-вещанию. Разрешите использовать частные и публичные сети для работы streamMonitor.exe (установите две галочки в Брандмауэре Windows).
Примечание
Способы настройки брандмауэра могут отличаться в различных версиях ОС Windows, воспользуйтесь поиском в вашем браузере.
Reverse Path Filtering¶
Linux
Reverse Path Filtering — это механизм, проверяющий “маршрутизируемость” до отправителя пакета (подробнее). Чтобы проверить влияние RPF на определенный интерфейс <IFACE>, отключите RPF-фильтр используя следующие команды:
echo 0 >/proc/sys/net/ipv4/conf/<IFACE>/rp_filter echo 0 >/proc/sys/net/ipv4/conf/all/rp_filterПосле отключения фильтра проверьте начал ли зонд принимать данные. В некоторых случаях может потребоваться перезапуск зонда. Если зонд начал принимать данные и влияние RPF-фильтра установлено, то для постоянного отключения фильтра рекомендуется внести следующие правки в
sysctl.conf
(вместо <IFACE> при этом нужно указать имя интерфейса):cat >>/etc/sysctl.conf <<EOF # disable RP filter: net.ipv4.conf.<IFACE>.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 EOFТаким образом, после внесения правок и перезагрузки ОС RPF-фильтр останется отключенным для целевого интерфейса.
Повышенные привилегии¶
Linux
Использование порта меньше 1024 требует повышенных привилегий (root user). Порты из этого диапазона считаются системными во многих ОС, поэтому зонд не сможет получать данные. При запуске от обычного пользователя зонд будет выдавать подобный лог в консоль:
09:08:28 source_udp_start()[258]: Creating UDP/RTP receiver for 224.1.5.172:1001 (bind iface 172.16.67.10) 09:08:28 small_rtp_init_receiver()[254]: ERROR: bind failed, err 0xD 09:08:28 small_rtp_init2()[414]: ERROR: small_rtp_init_receiver: failed 09:08:28 source_udp_start()[279]: ERROR: small_rtp_init failed with code -1Самое простое решение — запускать зонд от root командой:
sudo ./streamMonitor
Версии IGMP-протокола¶
Linux
Иногда устаревшее сетевое оборудование может не поддерживать последнюю версию IGMP-протокола. Посмотреть версию IGMP и IP-адреса, подписанные на прием мультикаста, можно в файле:
cat /proc/net/igmp
Принудительный выбор версии IGMP для необходимого сетевого интерфейса осуществляется командой:
echo 2 > /proc/sys/net/ipv4/conf/<IFACE>/force_igmp_version
Дамп мультикаст-потоков¶
Самый простой способ сдампить (сохранить в .ts файл) мультикаст-поток — использовать утилиту socat. Подробная информация по использованию утилиты представлена в Руководстве.
Linux
Пример команды:
MULTICAST=235.0.0.1:1234 INTERFACE=10.10.30.229 # name, ip or id of network interface socat -u \ UDP4-RECV:${MULTICAST#*:},ip-add-membership=${MULTICAST%:*}:$INTERFACE,bind=${MULTICAST%:*},reuseaddr \ CREATE:dump_$(tr ':' '_' <<<"$MULTICAST").$(date +'%F_%H.%M').tsСоздастся файл с указанными именем и датой, в который будет записываться поток, пока утилита не будет остановлена.
Windows
На момент написания статьи была протестирована версия socat 2.0.0 (beta 5) под управлением Windows 8.1. Скачать портированную версию утилиты socat можно на странице загрузки.
Пример команды:
socat -u UDP4-RECV:<PORT>,ip-add-membership=<MULTICAST_IP>:<NIC_IP>,reuseaddr CREATE:dump_name.tsСоздастся файл с указанным именем, в который будет записываться поток, пока утилита не будет остановлена.