Пример настройки протокола многоадресной рассылки, независимая от протокола Protocol Independent Multicast в режиме Sparse Mode. Multicast трафик будет передаваться между различными сегментами сети. Сегменты будут объеденены с помощью VPN c использованием L2TP/IPsec.
Будут использоваться:
- RouterOS: v 7.10.2
- VLC: 3.0.18
Ссылки по теме:
Multicast это многоадресное вещание или вещание определенной группе. Также можно считать, что Multicast - это частный случий Broadcast.
Заметки:
- Клиент и сервер не обязательно должны иметь адреса из одной подсети и выполнять Ping друг друга - достаточно, чтобы они были в одном широковещательном домене.
- Все устройства, подключенные к одному коммутатору и находящиеся в одном Broadcast домене, или в одном VLAN, будут получать Multicast. И даже те устройства, кто явно и не запрашивал его. Для решения этой проблемы был реализован "IGMP Snooping".
Принцип работы многоадресной рассылки:
- Независимо от количества клиентов, источник посылает только одну копию трафика;
- Мультикаст трафик доставляется только тем, кто его запросил.
Multicast IPv4-адреса:
Для них заложен блок адресов "Класса-D 224.0.0.0/4". Адресом назначения в multicast трафике указывается тоже мультикастовый. Поэтому трафик с адресом назначения 225.0.0.5 будут получать все те, кто подключен на этот групповой адрес. Один адрес - это одна группа, обычно она обозначается буквой - G.
IANA - IPv4 Multicast Address Space Registry | RFC 5771 | RFC 3171
- Local Network Control Block: этот блок требует выставления "TTL=1"
224.0.0.0 - 224.0.0.255 - Диапазон зарезервирован под link-local коммуникации. Multicast пакеты с такими адресами назначения не могут выходить за пределы одного широковещательного сегмента.
- Globally Scoped Addresses:
224.0.1.0 - 238.255.255.255 - Диапазон зарезервирован под протоколы, которым необходимо передавать мультикаст по всей сети, т.е. проходить через маршрутизаторы.
- For private multicast domains/organizations:
239.0.0.0 - 239.255.255.255
Основные термины:
Единственный протокол мультикастовой маршрутизации который прежился это "PIM-SM".
- MDT (Multicast Distribution Tree) - Дерево распространения мульт кастового трафика. Общее название для всех деревьев RPT и SPT;
- Incoming Interface - Восходящий интерфейс откуда приходит мультикастный трафик. Для каждой пары группы источник может быть только один восходящий интерфейс;
- OIL (Outgoing Interface List) - Список нисходящих интерфейсов куда нужно передавать копии входящего мультикаст трафика. Может быть несколько для каждой группы;
- FHR (First Hop Router) - Маршрутизатор ближайший к источнику с которого начинает путь мультикастный трафик;
- LHR (Last Hop Router) - Маршрутизатор ближайший к получателям. Для мультикастового трафика он последний на пути;
- Source DR (Source Designater Router) - Выделенный маршрутизатор при источнике. Если в одном сегменте с источником несколько маршрутизаторов, то только один из них выбирается основным, который будет посылать трафик в сеть, другие его просто резервируют. Source DR=FHR;
- Receiver DR (Receiver Designater Router) - Выделенный маршрутизатор при получателе. Если в одном сегменте с получателем несколько маршрутизаторов, то только один из них выбирается основным, остальные его резервируют. Receiver DR=LHR;
- RP (Rendezvous Point) - Точка встречи источника и клиентов. Некая точка в сети, которая обладает информацией, как о всех источниках, так и о том, где есть получатели. Некая точка притяжения куда стремится мультикаст трафик;
- RPT (Rendezvous Point Tree) - Дерево MDT от RP до клиентов. Shared tree = RPT;
- SPT (Shortest Path Tree) - Дерево от источника до получателей или до точки RP. Source tree = SPT;
- RPF (Reverse Path Forwarding) - Принцип маршрутизации мультикастового трафика, позволяющий избежать петель. Трафик должен прийти по кратчайшему пути, остальной трафик отбрасывается.
Основные протоколы для построения мультикастового дерева - PIM и IGMP:
С помощью "IGMP" конечные получатели (клиенты) сообщают ближайшим маршрутизаторам о том, что хотят получить трафик. А "PIM" строит путь движения мультикастового трафика от источника до получателей через маршрутизаторы.
IGMP - Internet Group Management Protocol - позволяет клиентам динамически запрашивать/отказываться от мультикаст-групп. IGMP работает только на отрезке Маршрутизатор -> Клиент;
IGMPv1 - нет сообщений Leave, нет выбора Querier, нет поддержки SSM;
IGMPv2 - есть сообщения Leave, есть выбор Querier, нет поддержки SSM;
IGMPv3 - Бонусом поддерживает Source Specific Multicast. Также выделен специальный адрес: 224.0.0.22.
-----
PIM - Protocol Independent Multicast - Многоадресная рассылка, независимая от протокола;
PIM Dense Mode (DM) - Должен использоваться в сетях с высокой плотностью мультикастовых клиентов;
PIM Sparse Mode (SM) - Здесь отказались от идеи безусловного наводнения мультикастом сети.
Пример использования PIM, IGMP:
SRV-SRC --- R1 --- IP-сеть --- R(x) --- SW --- CL 1,2,3..CL(x)-DST
| | |
| | |
|<----------PIM-------->|<------------IGMP----------->|
Пример построенного multicast дерева MDT:
SRV-SRC --- R1 --- R2 (RP) --- R3 --- CL-DST
| | |
| | |
|-----SPT-----|--------RPT-------|
| MDT |
|--------------------------------|
MikroTik PIM-SM:
Настройка многоадресной потоковой передачи по сети.
Схема сети:
Server (R1) -------------------- ISP -------------------- Client (R2)
- VPN 172.31.250.1/32 - VPN 172.31.250.2/32
- R1 172.16.10.1/24 - R2 172.16.11.1/24
- Host 172.16.10.254 - Host 172.16.11.254
- Souce Group 225.0.0.5 - Recipient Group 225.0.0.5
Upstream Information Base - UIB:
- Старкомаджи (*, G) - Сообщает что есть получатели (клиенты) multicast трафика. Это может быть также и другой маршрутизатор.
- Эскомаджи (S, G) - Сообщает о том, что маршрутизатор знает о источнике с неким адресом, который вещает трафик для определенной группы.
Neighbor:
После того как установлено соседство между маршрутизаторами в neighbors - они готовы принимать заявки на multicast группы.
PIM-SM:
Без указания Static RP - PIM-SM работать не будет.
Также у нас уже настроена маршрутизация между сетями "172.16.10.0/24" и "172.16.11.0/24" и используется "VPN L2TP/IPsec" с Interface List's. Еще как вариант, для лучшей надежности, можно на каждом маршрутизаторе создать "loop-back" интерфейс, назначить на него адрес с /32 маской и настроить между петлевыми интерфейсами маршрутизацию. Их также нужно будет добавить в разделе "Interface Template".
R1-(RP_FHR-1):
/routing/pimsm/
> instance/add name=pimsm-instance1 vrf=main afi=ipv4
> interface-template/add instance=pimsm-instance1 interfaces=LAN,VPN join-tracking-support=yes
> static-rp/add instance=pimsm-instance1 group=225.0.0.5/32 address=172.31.250.1
- Mangle: на случий, если в приложении нет возможности задать необходимый TTL.
/ip/firewall/mangle/add chain=prerouting dst-address=225.0.0.5 in-interface-list=LAN action=change-ttl new-ttl=set:3 comment="change TTL for Multicast"
R2-(LHR-1):
/routing/pimsm/
> instance/add name=pimsm-instance1 vrf=main afi=ipv4
> interface-template/add instance=pimsm-instance1 interfaces=VPN,LAN join-tracking-support=yes
> static-rp/add instance=pimsm-instance1 group=225.0.0.5/32 address=172.31.250.1
Windows:
В качестве источника и получателя будет использоваться "VLC". Передача будет вестись по протоколу "UDP".
С чем можно столкнуться:
- Metric - В системе имеется несколько активных интерфейсов, важно, чтобы метрика была наименьшей для Incoming Interface. Также можно отключить неиспользуемые интерфейсы.
- TTL - По умолчанию VLC устанавливает TTL для пакетов потокового вещания равным -1. Это можно изменить в настройках или же создать правило в Mangle. Подобрать необходимый TTL можно запустив трассировку маршрута со стороны источника к получателю.
Источник:
- Инструменты -> Настройки -> Показать настройки (все) -> Вывод Потока -> Модули вывода -> Лимит хопов (TTL) = 3;
Медиа -> Передать -> Выбор файлов -> + Добавить -> Поток -> Следующий -> Новое назначение -> UDP (legacy) -> Добавить
- Адрес: 225.0.0.5
- Порт: 1234
-> Следующий -> (-) Включить перекодирование -> Следующий
- (-) Выводить элементарные потоки
- Строка вывода для генерируемого потока: :sout=#udp{dst=225.0.0.5:1234} :no-sout-all :sout-keep
-> Поток.
Получатель:
Медиа -> Открыть URL...
- Введите сетевой адрес: udp://@225.0.0.5:1234 -> Воспроизвести.
Полезные команды:
- Вывести ARP-таблицу:
> arp -a
- Просмотреть членство в мультикастных группах:
> netsh interface ipv4 show joins
- Отобразить таблицу маршрутизации:
> route print
- Запустить трассировку маршрута:
> tracert 172.16.11.254
На этом все 🙂.