PIM - Protocol Independent Multicast (IPv4)

PIM (Protocol Independent Multicast) - это семейство протоколов multicast маршрутизации, обеспечивающих эффективное распределение multicast трафика в IP сетях.

Обзор

PIM - протокол независимой от unicast маршрутизации multicast доставки:

  • Работает поверх любого unicast routing протокола (OSPF, BGP, IS-IS, статические маршруты)
  • Поддерживает сложные топологии с множеством источников и получателей
  • Масштабируется до тысяч multicast групп
  • Используется в data center, enterprise, service provider сетях

Стандарты:

  • RFC 7761 - PIM-SM (Sparse Mode) - основной режим
  • RFC 3973 - PIM-DM (Dense Mode) - устаревший
  • RFC 4607 - SSM (Source-Specific Multicast)
  • RFC 5059 - Bootstrap Router (BSR)
  • RFC 4601 - PIM-SM v2

VyOS поддерживает:

  • PIM-SM (Sparse Mode) - с явным RP (Rendezvous Point)
  • PIM-SSM (Source-Specific Multicast) - с IGMPv3
  • Bootstrap Router (BSR) - динамическое распределение RP
  • SPT (Shortest Path Tree) switchover - оптимизация путей
  • ECMP (Equal-Cost Multi-Path) - балансировка multicast потоков

Применение:

  • IPTV сервисы в сетях провайдеров
  • Видео конференции и корпоративное вещание
  • Финансовые данные (market data feeds)
  • Data center multicast приложения
  • Multicast VPN

PIM Режимы работы

PIM-SM (Sparse Mode)

PIM Sparse Mode - режим для сетей, где multicast получатели распределены редко (sparse).

Принцип работы:

  1. RP (Rendezvous Point) - центральная точка встречи источников и получателей
  2. Источники регистрируются на RP (Register сообщения)
  3. Получатели отправляют Join к RP (через промежуточные роутеры)
  4. RP пересылает трафик по Shared Tree (общее дерево от RP)
  5. Опционально переключение на SPT (Shortest Path Tree) - прямой путь от источника

Терминология:

  • RP (Rendezvous Point) - роутер-посредник между источниками и получателями
  • Shared Tree (*,G) - общее дерево от RP к получателям
  • Source Tree (S,G) - shortest path дерево от источника к получателям
  • DR (Designated Router) - выбранный роутер на сегменте для PIM операций
  • BSR (Bootstrap Router) - роутер для динамического распределения RP информации

Преимущества:

  • Эффективен для распределенных получателей
  • Масштабируется до больших сетей
  • Поддерживает множество источников
  • Оптимизация через SPT switchover

Недостатки:

  • Требует конфигурацию RP
  • Сложнее в настройке чем IGMP Proxy
  • Требует больше ресурсов

PIM-DM (Dense Mode)

PIM Dense Mode - режим для сетей, где получатели плотно распределены.

Принцип работы:

  • Flood-and-Prune: трафик сначала отправляется везде
  • Роутеры без получателей отправляют Prune (отказ)
  • Периодическое обновление (каждые 3 минуты)

Статус: Устаревший, не рекомендуется к использованию.

VyOS: Не поддерживает PIM-DM.

PIM-SSM (Source-Specific Multicast)

PIM Source-Specific Multicast - упрощенная версия PIM для известных источников.

Принцип работы:

  • Получатели подписываются на конкретный источник (S,G), а не только группу (G)
  • Требует IGMPv3 на клиентской стороне
  • Не требует RP (Rendezvous Point)
  • Всегда использует SPT (Shortest Path Tree)
  • Используется диапазон 232.0.0.0/8 (зарезервирован для SSM)

Преимущества:

  • Простота конфигурации (нет RP)
  • Оптимальные пути (всегда SPT)
  • Высокая безопасность (известные источники)
  • Меньше служебного трафика

Применение:

  • IPTV с известными источниками
  • Видео конференции
  • Финансовые данные

IGMPv3 требование:

  • Клиенты должны поддерживать IGMPv3
  • Указывают как группу, так и источник
  • Синтаксис: IGMP JOIN (S,G)

PIM Компоненты

Rendezvous Point (RP)

RP - центральный роутер для встречи источников и получателей в PIM-SM.

Функции RP:

  • Регистрация источников (получает Register сообщения)
  • Пересылка Join/Prune между источниками и получателями
  • Построение Shared Tree (*,G)
  • Пересылка multicast трафика

Типы RP конфигурации:

  1. Статический RP - вручную настроенный на всех роутерах
  2. BSR (Bootstrap Router) - динамическое распределение RP информации
  3. Auto-RP - Cisco проприетарный механизм (не поддерживается VyOS)

Placement RP:

  • Центральное расположение в сети
  • Высокая доступность и bandwidth
  • Стабильное соединение со всеми роутерами
  • Рекомендуется VRRP/HSRP для redundancy

Designated Router (DR)

DR - выбранный роутер на multi-access сегменте (Ethernet) для PIM операций.

Функции DR:

  • Отправка Register сообщений от источников к RP
  • Отправка Join/Prune к RP от получателей
  • Обработка IGMP членств
  • Предотвращение дублирования трафика

DR Election:

  • Выбирается роутер с наивысшим DR Priority
  • При равном priority - наивысший IP адрес
  • Hello сообщения (каждые 30 секунд по умолчанию)

Настройка DR Priority:

set protocols pim interface eth0 dr-priority 100

Значения: 1-4294967294 (выше = приоритетнее), по умолчанию 1.

Bootstrap Router (BSR)

BSR - механизм динамического распределения RP информации в PIM домене.

Функции BSR:

  • Автоматическое распределение RP-to-Group маппингов
  • Выбор BSR роутера (bootstrap election)
  • Периодические Bootstrap сообщения
  • Устранение необходимости статической конфигурации RP на всех роутерах

BSR Election:

  • Роутер с наивысшим BSR Priority побеждает
  • При равном priority - наивысший IP адрес
  • Bootstrap сообщения каждые 60 секунд

Candidate-RP:

  • Роутеры-кандидаты на роль RP
  • Отправляют Candidate-RP-Advertisement к BSR
  • BSR распространяет список RP

Преимущества BSR:

  • Автоматическая конфигурация
  • Динамическое failover RP
  • Масштабируемость
  • Стандартизированный (RFC 5059)

Базовая конфигурация PIM-SM

Простая PIM-SM с статическим RP

Сценарий: 3 роутера, один RP, один источник, получатели на разных сегментах.

Топология:

[Source] --- eth1 --- [R1] --- eth0 --- [R2-RP] --- eth0 --- [R3] --- eth1 --- [Receivers]
  10.1.1.0/24                  10.0.1.0/30      10.0.2.0/30         192.168.1.0/24
  239.1.1.1

Router R1 (первый hop от источника):

# Интерфейс к источнику
set interfaces ethernet eth1 address 10.1.1.1/24

# Интерфейс к RP
set interfaces ethernet eth0 address 10.0.1.1/30

# Unicast routing (OSPF или статические маршруты)
set protocols ospf parameters router-id 10.255.0.1
set protocols ospf area 0 network 10.0.0.0/8

# PIM на интерфейсах
set protocols pim interface eth0
set protocols pim interface eth1

# Статический RP для всех групп
set protocols pim rp address 10.255.0.2

commit
save

Router R2 (RP):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.1.2/30
set interfaces ethernet eth1 address 10.0.2.1/30
set interfaces loopback lo address 10.255.0.2/32

# OSPF
set protocols ospf parameters router-id 10.255.0.2
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.255.0.2/32

# PIM на всех интерфейсах
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# Этот роутер - RP
set protocols pim rp address 10.255.0.2

commit
save

Router R3 (последний hop к получателям):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.2.2/30
set interfaces ethernet eth1 address 192.168.1.1/24

# OSPF
set protocols ospf parameters router-id 10.255.0.3
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 192.168.1.0/24

# PIM
set protocols pim interface eth0
set protocols pim interface eth1

# IGMP на интерфейсе к получателям
set protocols pim interface eth1 igmp

# Статический RP
set protocols pim rp address 10.255.0.2

commit
save

Проверка:

# На всех роутерах
show ip pim interface
show ip pim neighbor
show ip pim rp-info

# На R2 (RP)
show ip pim rp-info
show ip pim state

# На R3 (с получателями)
show igmp groups
show ip pim join

RP для конкретных групп

Назначение разных RP для разных диапазонов групп.

Router конфигурация:

# RP1 для групп 239.1.0.0/16
set protocols pim rp address 10.255.0.2 group 239.1.0.0/16

# RP2 для групп 239.2.0.0/16
set protocols pim rp address 10.255.0.3 group 239.2.0.0/16

# Default RP для всех остальных
set protocols pim rp address 10.255.0.4

commit
save

Применение:

  • Разделение нагрузки между RP
  • Географическое распределение
  • Разные источники для разных сервисов

IGMP интеграция

PIM требует IGMP на интерфейсах к получателям для обработки IGMP Join/Leave.

Конфигурация IGMP:

# Включить IGMP на интерфейсе
set protocols pim interface eth1 igmp

# IGMP версия (2 или 3)
set protocols pim interface eth1 igmp version 3

# IGMP Query Interval (секунды)
set protocols pim interface eth1 igmp query-interval 125

# IGMP Query Max Response Time (секунды)
set protocols pim interface eth1 igmp query-max-response-time 10

commit
save

IGMPv2 vs IGMPv3:

  • IGMPv2: (*,G) подписки - любой источник для группы
  • IGMPv3: (S,G) подписки - конкретный источник для группы (SSM)

PIM-SSM конфигурация

Простая SSM конфигурация

PIM-SSM - Source-Specific Multicast для известных источников.

SSM диапазон: 232.0.0.0/8 (IANA зарезервирован)

Конфигурация на всех роутерах:

# Интерфейсы
set protocols pim interface eth0
set protocols pim interface eth1

# SSM prefix list (не требуется если используется стандартный диапазон 232.0.0.0/8)
# Но можно явно указать для ясности
set protocols pim ssm prefix-list SSM-RANGE

# Prefix list для SSM
set policy prefix-list SSM-RANGE rule 10 action permit
set policy prefix-list SSM-RANGE rule 10 prefix 232.0.0.0/8

# IGMP v3 (обязательно для SSM)
set protocols pim interface eth1 igmp
set protocols pim interface eth1 igmp version 3

commit
save

SSM не требует RP - прямые пути от источников к получателям.

Проверка:

show ip pim state
show ip pim upstream
show igmp groups

SSM с кастомными диапазонами

Расширение SSM на другие диапазоны.

Конфигурация:

# Определить prefix list для SSM
set policy prefix-list SSM-CUSTOM rule 10 action permit
set policy prefix-list SSM-CUSTOM rule 10 prefix 232.0.0.0/8
set policy prefix-list SSM-CUSTOM rule 20 action permit
set policy prefix-list SSM-CUSTOM rule 20 prefix 239.100.0.0/16

# Применить к PIM
set protocols pim ssm prefix-list SSM-CUSTOM

# IGMP v3
set protocols pim interface eth1 igmp version 3

commit
save

Применение:

  • Использование organization-local диапазонов для SSM
  • Миграция с ASM (Any-Source Multicast) к SSM

SPT (Shortest Path Tree) Switchover

SPT Switchover концепция

SPT Switchover - переключение с Shared Tree (*,G через RP) на Source Tree (S,G прямо от источника).

Процесс:

  1. Получатель сначала получает трафик через RP (Shared Tree)
  2. После первого пакета от источника роутер узнает source IP
  3. Роутер оценивает стоимость пути
  4. Если прямой путь лучше - создается (S,G) entry
  5. Join отправляется напрямую к источнику
  6. Prune отправляется к RP для (*,G)
  7. Трафик идет по оптимальному пути

По умолчанию: VyOS переключается на SPT немедленно при получении первого пакета.

Отключение SPT Switchover

Infinity-and-Beyond - запрет переключения на SPT, всегда использовать RP.

Конфигурация:

set protocols pim spt-switchover infinity-and-beyond

commit
save

Применение:

  • Централизованный контроль трафика через RP
  • Упрощенная топология
  • Debugging и troubleshooting

Недостаток:

  • Неоптимальные пути (triangle routing)
  • Повышенная нагрузка на RP
  • Увеличенная задержка

SPT Switchover с prefix list

Селективное переключение на SPT для определенных групп.

Конфигурация:

# Создать prefix list для групп с SPT switchover
set policy prefix-list SPT-GROUPS rule 10 action permit
set policy prefix-list SPT-GROUPS rule 10 prefix 239.1.0.0/16

# Применить
set protocols pim spt-switchover prefix-list SPT-GROUPS

commit
save

Результат:

  • Группы из 239.1.0.0/16 - используют SPT
  • Остальные группы - остаются на Shared Tree через RP

ECMP (Equal-Cost Multi-Path)

ECMP для multicast

ECMP - балансировка multicast потоков по нескольким равноценным путям.

По умолчанию: PIM использует один путь (lowest IP next-hop).

Включение ECMP:

set protocols pim ecmp

commit
save

Эффект:

  • Разные (S,G) flows распределяются по разным next-hops
  • Улучшенная балансировка нагрузки
  • Более эффективное использование bandwidth

ECMP Rebalance

ECMP Rebalance - перераспределение потоков при отказе интерфейса.

Конфигурация:

set protocols pim ecmp
set protocols pim ecmp rebalance

commit
save

Поведение:

  • При отказе одного next-hop потоки перераспределяются на оставшиеся
  • Автоматическая балансировка
  • Повышенная отказоустойчивость

Примечание: Может вызвать кратковременные дубликаты пакетов во время перераспределения.

PIM Интерфейс параметры

Hello Interval

Hello интервал - частота отправки PIM Hello сообщений.

Конфигурация:

set protocols pim interface eth0 hello <seconds>

commit
save

Значения: 1-180 секунд, по умолчанию 30 секунд.

Пример:

set protocols pim interface eth0 hello 10

commit
save

Применение:

  • Уменьшение для быстрого обнаружения соседей (10-15 сек)
  • Увеличение для снижения служебного трафика (60-120 сек)

Hold Time: Автоматически устанавливается как 3.5 * hello-interval.

DR Priority

DR Priority - приоритет для выбора Designated Router.

Конфигурация:

set protocols pim interface eth0 dr-priority <priority>

commit
save

Значения: 1-4294967294, по умолчанию 1.

Пример:

# Роутер с высоким приоритетом станет DR
set protocols pim interface eth0 dr-priority 100

commit
save

Применение:

  • Контроль выбора DR на multi-access сегментах
  • Предпочтение более мощных роутеров
  • Load balancing между роутерами

Passive Interface

Passive интерфейс - принимать PIM сообщения, но не отправлять.

Конфигурация:

set protocols pim interface eth0 passive

commit
save

Применение:

  • Интерфейсы к источникам (source-only)
  • Снижение служебного трафика
  • Безопасность (не отвечать на внешние PIM запросы)

Примечание: IGMP продолжает работать.

PIM Timing параметры

Join-Prune Interval

Join-Prune Interval - частота отправки Join/Prune сообщений upstream.

Конфигурация:

set protocols pim join-prune-interval <seconds>

commit
save

Значения: 60-600 секунд, по умолчанию 60 секунд.

Пример:

set protocols pim join-prune-interval 120

commit
save

Эффект:

  • Меньшее значение - быстрее реакция на изменения, больше трафика
  • Большее значение - меньше служебного трафика, медленнее сходимость

Keep-Alive Timer

Keep-Alive Timer - время хранения (S,G) state без трафика.

Конфигурация:

set protocols pim keep-alive-timer <seconds>

commit
save

Значения: 31-60000 секунд, по умолчанию 210 секунд.

Пример:

set protocols pim keep-alive-timer 300

commit
save

Применение:

  • Увеличение для редких multicast потоков (periodic broadcasts)
  • Уменьшение для экономии памяти (short-lived sessions)

Register параметры

Register Suppress Time

Register Suppress Time - время подавления Register сообщений от DR к RP.

По умолчанию: 60 секунд (hardcoded в FRR).

Описание:

  • После получения Register-Stop от RP, DR подавляет Register сообщения
  • Периодически отправляет Null-Register для проверки интереса
  • Если RP снова заинтересован - возобновляет Register

Настройка: Не доступна в VyOS CLI (управляется FRR внутренне).

Register Accept List

Register Accept List - фильтрация источников, которые могут регистрироваться на RP.

Применение: Безопасность на RP - разрешить только доверенные источники.

Примечание: Не реализовано в текущей версии VyOS PIM (FRR).

Bootstrap Router (BSR) конфигурация

BSR Candidate

Настройка роутера как BSR Candidate.

Конфигурация:

# Определить интерфейс для BSR адреса
set protocols pim interface lo

# Loopback адрес
set interfaces loopback lo address 10.255.0.1/32

# BSR Candidate
set protocols pim bsr candidate-bsr address 10.255.0.1
set protocols pim bsr candidate-bsr priority 100

commit
save

Параметры:

  • address: IP адрес этого роутера для BSR
  • priority: 0-255, выше = приоритетнее, по умолчанию 0

BSR Election:

  • Роутер с наивысшим priority побеждает
  • При равном priority - наивысший IP адрес

Candidate-RP

Настройка роутера как Candidate-RP (кандидат на роль RP).

Конфигурация:

# Candidate-RP для всех групп
set protocols pim bsr candidate-rp address 10.255.0.1

# Candidate-RP для конкретных групп
set protocols pim bsr candidate-rp address 10.255.0.1 group 239.1.0.0/16
set protocols pim bsr candidate-rp address 10.255.0.1 priority 192

commit
save

Параметры:

  • address: IP адрес этого роутера как RP
  • group: Диапазон групп (опционально)
  • priority: 0-255, выше = приоритетнее, по умолчанию 192

Процесс:

  1. Candidate-RP отправляет Candidate-RP-Advertisement к BSR
  2. BSR собирает список всех Candidate-RP
  3. BSR распространяет RP-Set через Bootstrap сообщения
  4. Все PIM роутеры получают RP mappings автоматически

Полная BSR конфигурация

Сценарий: 2 роутера - один BSR и RP, второй backup.

Router 1 (Primary BSR и RP):

# Loopback
set interfaces loopback lo address 10.255.0.1/32

# OSPF для loopback
set protocols ospf area 0 network 10.255.0.1/32

# PIM на интерфейсах
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# BSR Candidate с высоким приоритетом
set protocols pim bsr candidate-bsr address 10.255.0.1
set protocols pim bsr candidate-bsr priority 200

# Candidate-RP с высоким приоритетом
set protocols pim bsr candidate-rp address 10.255.0.1
set protocols pim bsr candidate-rp priority 200

commit
save

Router 2 (Backup BSR и RP):

# Loopback
set interfaces loopback lo address 10.255.0.2/32

# OSPF
set protocols ospf area 0 network 10.255.0.2/32

# PIM
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# BSR Candidate с низким приоритетом
set protocols pim bsr candidate-bsr address 10.255.0.2
set protocols pim bsr candidate-bsr priority 100

# Candidate-RP с низким приоритетом
set protocols pim bsr candidate-rp address 10.255.0.2
set protocols pim bsr candidate-rp priority 100

commit
save

На всех остальных роутерах: Только PIM на интерфейсах, не нужна статическая RP конфигурация.

Проверка:

show ip pim bsr
show ip pim rp-info

Примеры конфигурации

Пример 1: IPTV провайдер (Yandex Cloud)

Сценарий:

  • VyOS роутер в Yandex Cloud как PIM-SM для IPTV
  • RP на центральном роутере
  • Источник: IPTV сервер 10.100.0.50
  • Клиенты: в сетях 192.168.0.0/16
  • Группы: 239.10.0.0/16

Топология:

[IPTV Server] --- eth1 --- [R1-DR] --- eth0 --- [R2-RP] --- eth0 --- [R3] --- eth1 --- [STB]
  10.100.0.50                        10.0.1.0/30      10.0.2.0/30       192.168.10.0/24
  239.10.1.1-255                                                        Set-Top Boxes

Router R1 (First-hop DR):

# Интерфейсы
set interfaces ethernet eth1 address 10.100.0.1/24
set interfaces ethernet eth1 description 'To IPTV Server'
set interfaces ethernet eth0 address 10.0.1.1/30
set interfaces ethernet eth0 description 'To RP'

# OSPF
set protocols ospf parameters router-id 10.255.0.1
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.100.0.0/24

# PIM на интерфейсах
set protocols pim interface eth0
set protocols pim interface eth0 dr-priority 100

set protocols pim interface eth1
set protocols pim interface eth1 dr-priority 200
set protocols pim interface eth1 hello 10

# Статический RP
set protocols pim rp address 10.255.0.2 group 239.10.0.0/16

# Firewall для PIM
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 description 'Allow PIM'
set firewall ipv4 input filter rule 100 protocol pim

commit
save

Router R2 (RP):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.1.2/30
set interfaces ethernet eth1 address 10.0.2.1/30
set interfaces loopback lo address 10.255.0.2/32
set interfaces loopback lo description 'RP Address'

# OSPF
set protocols ospf parameters router-id 10.255.0.2
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.255.0.2/32

# PIM на всех интерфейсах
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# Этот роутер - RP
set protocols pim rp address 10.255.0.2 group 239.10.0.0/16

# ECMP для балансировки
set protocols pim ecmp
set protocols pim ecmp rebalance

# Firewall
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol pim

commit
save

Router R3 (Last-hop к клиентам):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.2.2/30
set interfaces ethernet eth1 address 192.168.10.1/24
set interfaces ethernet eth1 description 'To Set-Top Boxes'

# OSPF
set protocols ospf parameters router-id 10.255.0.3
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 192.168.10.0/24

# PIM
set protocols pim interface eth0
set protocols pim interface eth1

# IGMP на интерфейсе к клиентам
set protocols pim interface eth1 igmp
set protocols pim interface eth1 igmp version 2
set protocols pim interface eth1 igmp query-interval 125

# Статический RP
set protocols pim rp address 10.255.0.2 group 239.10.0.0/16

# Firewall для IGMP и PIM
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol igmp

set firewall ipv4 input filter rule 110 action accept
set firewall ipv4 input filter rule 110 protocol pim

# Разрешить multicast трафик
set firewall ipv4 input filter rule 120 action accept
set firewall ipv4 input filter rule 120 destination address 239.10.0.0/16
set firewall ipv4 input filter rule 120 description 'Allow IPTV multicast'

commit
save

Проверка:

# На всех роутерах
show ip pim interface
show ip pim neighbor
show ip pim rp-info

# На R1 (источник)
show ip pim upstream

# На R2 (RP)
show ip pim state
show ip pim rp-info

# На R3 (получатели)
show igmp groups
show ip pim join
show ip pim state

Мониторинг:

# Multicast трафик
tcpdump -i eth1 -n host 239.10.1.1

# PIM сообщения
tcpdump -i eth0 -n proto 103

# Статистика
show interfaces ethernet eth0
show interfaces ethernet eth1

Пример 2: Video Streaming SSM (VK Cloud)

Сценарий:

  • VK Cloud: PIM-SSM для корпоративного видео вещания
  • Видео серверы: 10.50.0.0/24 (известные источники)
  • SSM диапазон: 232.1.0.0/16
  • Клиенты с IGMPv3 поддержкой
  • Распределение по офисам

Топология:

[Video Server 1] --- eth1 --- [R1] --- eth0 ---|
  10.50.0.10                                   |
  232.1.1.1                                    |--- [R2-Core] --- eth1 --- [R3] --- eth2 --- [Office A]
                                               |                                    192.168.10.0/24
[Video Server 2] --- eth2 --- [R1] --- eth0 ---|
  10.50.0.20
  232.1.2.1

Router R1 (First-hop от источников):

# Интерфейсы
set interfaces ethernet eth1 address 10.50.0.1/24
set interfaces ethernet eth1 description 'Video Servers'
set interfaces ethernet eth0 address 10.0.1.1/30
set interfaces ethernet eth0 description 'To Core'

# OSPF
set protocols ospf parameters router-id 10.255.0.1
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.50.0.0/24

# PIM
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface eth1 dr-priority 200

# SSM prefix list
set policy prefix-list SSM-VIDEO rule 10 action permit
set policy prefix-list SSM-VIDEO rule 10 prefix 232.1.0.0/16

set protocols pim ssm prefix-list SSM-VIDEO

# Firewall
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol pim

commit
save

Router R2 (Core Router):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.1.2/30
set interfaces ethernet eth1 address 10.0.2.1/30
set interfaces loopback lo address 10.255.0.2/32

# OSPF
set protocols ospf parameters router-id 10.255.0.2
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.255.0.2/32

# PIM на интерфейсах
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# SSM
set policy prefix-list SSM-VIDEO rule 10 action permit
set policy prefix-list SSM-VIDEO rule 10 prefix 232.1.0.0/16

set protocols pim ssm prefix-list SSM-VIDEO

# ECMP
set protocols pim ecmp
set protocols pim ecmp rebalance

# Firewall
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol pim

commit
save

Router R3 (Last-hop к офису):

# Интерфейсы
set interfaces ethernet eth1 address 10.0.2.2/30
set interfaces ethernet eth2 address 192.168.10.1/24
set interfaces ethernet eth2 description 'Office A'

# OSPF
set protocols ospf parameters router-id 10.255.0.3
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 192.168.10.0/24

# PIM
set protocols pim interface eth1
set protocols pim interface eth2

# IGMP v3 (обязательно для SSM)
set protocols pim interface eth2 igmp
set protocols pim interface eth2 igmp version 3
set protocols pim interface eth2 igmp query-interval 125

# SSM
set policy prefix-list SSM-VIDEO rule 10 action permit
set policy prefix-list SSM-VIDEO rule 10 prefix 232.1.0.0/16

set protocols pim ssm prefix-list SSM-VIDEO

# Firewall
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol igmp

set firewall ipv4 input filter rule 110 action accept
set firewall ipv4 input filter rule 110 protocol pim

set firewall ipv4 input filter rule 120 action accept
set firewall ipv4 input filter rule 120 destination address 232.1.0.0/16

commit
save

Тестирование клиента (Linux с IGMPv3):

# Подписка на (S,G) с IGMPv3
# Источник: 10.50.0.10, Группа: 232.1.1.1
socat UDP4-RECV:5000,sourceport=5000,ip-add-source-membership=232.1.1.1:10.50.0.10:eth0 STDOUT

# Или с VLC
vlc udp://@232.1.1.1:5000

Проверка SSM:

# На всех роутерах
show ip pim state
show ip pim upstream

# На R3
show igmp groups
show igmp sources

Пример 3: PIM с BSR (Auto-configuration)

Сценарий:

  • Автоматическое распределение RP через BSR
  • 2 Candidate-RP (redundancy)
  • 1 Primary BSR, 1 Backup BSR
  • Все роутеры получают RP mappings автоматически

Router R1 (Primary BSR и Primary RP):

# Интерфейсы
set interfaces loopback lo address 10.255.0.1/32
set interfaces ethernet eth0 address 10.0.1.1/30
set interfaces ethernet eth1 address 10.0.2.1/30

# OSPF
set protocols ospf parameters router-id 10.255.0.1
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.255.0.1/32

# PIM
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# BSR Candidate - высокий priority
set protocols pim bsr candidate-bsr address 10.255.0.1
set protocols pim bsr candidate-bsr priority 200

# Candidate-RP - высокий priority
set protocols pim bsr candidate-rp address 10.255.0.1
set protocols pim bsr candidate-rp priority 200

commit
save

Router R2 (Backup BSR и Backup RP):

# Интерфейсы
set interfaces loopback lo address 10.255.0.2/32
set interfaces ethernet eth0 address 10.0.1.2/30
set interfaces ethernet eth1 address 10.0.3.1/30

# OSPF
set protocols ospf parameters router-id 10.255.0.2
set protocols ospf area 0 network 10.0.0.0/8
set protocols ospf area 0 network 10.255.0.2/32

# PIM
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim interface lo

# BSR Candidate - низкий priority
set protocols pim bsr candidate-bsr address 10.255.0.2
set protocols pim bsr candidate-bsr priority 100

# Candidate-RP - низкий priority
set protocols pim bsr candidate-rp address 10.255.0.2
set protocols pim bsr candidate-rp priority 100

commit
save

Router R3, R4, R5 (Regular PIM routers):

# Только PIM на интерфейсах
set protocols pim interface eth0
set protocols pim interface eth1

# Не требуется статический RP!
# RP информация получается автоматически от BSR

commit
save

Проверка BSR:

# На всех роутерах
show ip pim bsr

# Вывод покажет:
# PIMv2 Bootstrap information
# BSR address: 10.255.0.1 (priority 200)
# Uptime: 00:15:23, BSR Candidate priority: 200
# RP Set:
#   Group 224.0.0.0/4
#     RP: 10.255.0.1 (priority 200, holdtime 150s)
#     RP: 10.255.0.2 (priority 100, holdtime 150s)

show ip pim rp-info

# Вывод:
# RP: 10.255.0.1 (primary, learned via BSR)
# Group: 224.0.0.0/4

Failover тестирование:

# Выключить R1 (Primary BSR/RP)
# На R2 автоматически станет BSR
# Все роутеры переключатся на RP 10.255.0.2

Пример 4: Multi-RP для разных сервисов

Сценарий:

  • RP1 для IPTV (239.1.0.0/16)
  • RP2 для Video Conferencing (239.2.0.0/16)
  • RP3 для Financial Data (239.3.0.0/16)
  • Load balancing между RP

RP1 Router:

set interfaces loopback lo address 10.255.0.1/32
set protocols ospf area 0 network 10.255.0.1/32

set protocols pim interface eth0
set protocols pim interface lo

# RP для IPTV
set protocols pim rp address 10.255.0.1 group 239.1.0.0/16

commit
save

RP2 Router:

set interfaces loopback lo address 10.255.0.2/32
set protocols ospf area 0 network 10.255.0.2/32

set protocols pim interface eth0
set protocols pim interface lo

# RP для Video Conf
set protocols pim rp address 10.255.0.2 group 239.2.0.0/16

commit
save

RP3 Router:

set interfaces loopback lo address 10.255.0.3/32
set protocols ospf area 0 network 10.255.0.3/32

set protocols pim interface eth0
set protocols pim interface lo

# RP для Financial Data
set protocols pim rp address 10.255.0.3 group 239.3.0.0/16

commit
save

Все остальные роутеры:

set protocols pim interface eth0
set protocols pim interface eth1

# Все три RP
set protocols pim rp address 10.255.0.1 group 239.1.0.0/16
set protocols pim rp address 10.255.0.2 group 239.2.0.0/16
set protocols pim rp address 10.255.0.3 group 239.3.0.0/16

commit
save

Проверка:

show ip pim rp-info

# Вывод:
# Group: 239.1.0.0/16
#   RP: 10.255.0.1 (static)
# Group: 239.2.0.0/16
#   RP: 10.255.0.2 (static)
# Group: 239.3.0.0/16
#   RP: 10.255.0.3 (static)

Операционные команды

Show Commands

PIM Interface:

show ip pim interface

Вывод:

Interface  State  Address      PIM Nbrs  PIM DR  FHR IfChannels
eth0       up     10.0.1.1     1         local   0   0
eth1       up     10.100.0.1   0         local   1   5
lo         up     10.255.0.1   0         local   0   0

PIM Interface детали:

show ip pim interface eth0

Вывод:

Interface: eth0
  State: up
  Address: 10.0.1.1
  Designated Router: 10.0.1.1 (local)
  DR Priority: 1
  Hello Period: 30 sec
  Hello Timer: 00:00:18
  Neighbor Count: 1

PIM Neighbors:

show ip pim neighbor

Вывод:

Interface  Neighbor    Uptime    Timer     DR Pri  DR
eth0       10.0.1.2    01:23:45  00:01:25  1       10.0.1.2
eth1       10.0.2.1    00:45:12  00:01:30  100     10.0.2.1

PIM RP Information:

show ip pim rp-info

Вывод:

RP address       group/prefix-list   OIF         I am RP    Source   Group-Type
10.255.0.2       224.0.0.0/4         lo          yes        Static   ASM
10.255.0.1       239.1.0.0/16        eth0        no         Static   ASM
232.0.0.0/8      232.0.0.0/8         -           -          -        SSM

PIM State:

show ip pim state

Вывод:

Codes: J -> Pim Join, I -> IGMP Report, S -> Source, * -> Inherited from (*,G)
Active Sources:
Source          Group           Proto  Input      Output     TTL  Uptime
10.100.0.50     239.10.1.1      J      eth1       eth0       1    00:15:23

Active Groups:
Source          Group           Input      Output     Flags    Uptime
*               239.10.1.1      -          eth0       J        00:20:15
10.100.0.50     239.10.1.1      eth1       eth0       SJ       00:15:23

PIM Join:

show ip pim join

Вывод:

Interface  Address      Source         Group          State      Uptime    Expire
eth0       10.0.1.1     *              239.10.1.1     JOIN       00:20:15  00:00:42
eth0       10.0.1.1     10.100.0.50    239.10.1.1     JOIN       00:15:23  00:00:38

PIM Upstream:

show ip pim upstream

Вывод:

Iif             Source          Group           State       Uptime    JoinTimer RSTimer
eth1            10.100.0.50     239.10.1.1      Joined      00:15:23  00:00:38  00:02:45
-               *               239.10.1.1      NotJoined   00:20:15  --:--:--  --:--:--

PIM BSR:

show ip pim bsr

Вывод:

PIMv2 Bootstrap information
BSR address: 10.255.0.1 (priority 200)
Uptime: 01:45:23, BSR Candidate priority: 200
This system is the Bootstrap Router (BSR)

RP Set:
  Group: 224.0.0.0/4
    RP: 10.255.0.1 (priority 200, holdtime 150s, uptime 01:45:20)
    RP: 10.255.0.2 (priority 100, holdtime 150s, uptime 01:45:18)

IGMP Commands (в контексте PIM)

IGMP Groups:

show igmp groups

Вывод:

Interface        Address         Group           Mode    Timer    Srcs  V  Uptime
eth1             192.168.10.1    239.10.1.1      EXCL    00:04:15  1    3  00:20:15
eth1             192.168.10.1    239.10.1.2      INCL    00:04:20  0    2  00:15:30

IGMP Sources (для IGMPv3 SSM):

show igmp sources

Вывод:

Interface  Address      Group        Source        Timer    Fwd  Uptime
eth1       192.168.10.1 232.1.1.1    10.50.0.10    00:03:45 Y    00:10:23
eth1       192.168.10.1 232.1.2.1    10.50.0.20    00:03:50 Y    00:08:15

IGMP Interface:

show igmp interface

Vывод:

Interface  State  Address      V  Querier  Query Timer  Other Timer  Group Count
eth1       up     192.168.10.1 3  local    00:01:05     00:00:00     2
eth2       up     192.168.20.1 2  local    00:01:15     00:00:00     1

Statistics

PIM Statistics:

show ip pim statistics

Вывод:

Interface eth0:
  Hello messages:
    Received: 1523
    Sent: 1520
  Join/Prune messages:
    Received: 245
    Sent: 198
  Register messages:
    Received: 0
    Sent: 0
  Register-Stop messages:
    Received: 0
    Sent: 0

Multicast Routing Table:

show ip mroute

Вывод:

Source          Group           Proto  Input  Output       TTL  Uptime
*               239.10.1.1      PIM    -      eth0         1    00:20:15
10.100.0.50     239.10.1.1      PIM    eth1   eth0         1    00:15:23

Multicast Routing Table детали:

show ip mroute 239.10.1.1

Вывод:

Group: 239.10.1.1
  Incoming interface: eth1
  Source: 10.100.0.50
  RPF neighbor: 10.100.0.50
  Outgoing interface list:
    eth0, Forward/Sparse, uptime 00:15:23, expires 00:02:37

Management Commands

Restart PIM:

restart pim

Clear PIM state (soft reset):

# Нет прямой команды, используйте restart
restart pim

Troubleshooting

PIM Neighbors не устанавливаются

Проблема: PIM соседи не появляются в show ip pim neighbor.

Проверка:

  1. PIM включен на интерфейсах:

    show protocols pim
    show ip pim interface
  2. IP connectivity:

    ping <neighbor-ip>
  3. PIM Hello сообщения:

    tcpdump -i eth0 -n proto 103

    Должны видеть периодические PIM Hello (каждые 30 сек).

  4. Firewall блокирует PIM (протокол 103):

    set firewall ipv4 input filter rule 100 action accept
    set firewall ipv4 input filter rule 100 protocol pim
    commit
  5. MTU issues:

    show interfaces ethernet eth0

    Проверьте что MTU достаточен (1500+).

  6. Unicast routing работает:

    show ip route <neighbor-ip>

    Должен быть маршрут к соседу.

Решение:

# Разрешить PIM в firewall
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol pim

# Restart PIM
restart pim

commit
save

RP не доступен

Проблема: show ip pim rp-info показывает RP, но нет connectivity.

Проверка:

  1. RP IP в routing table:

    show ip route <rp-address>

    Должен быть маршрут к RP.

  2. Ping RP:

    ping <rp-address>
  3. PIM соседи по пути к RP:

    show ip pim neighbor
  4. RPF check:

    show ip rpf <rp-address>

    Вывод покажет RPF interface и RPF neighbor.

  5. RP конфигурация одинакова на всех роутерах:

    show protocols pim rp

Решение:

# Убедитесь что RP IP в OSPF/BGP
set protocols ospf area 0 network <rp-network>

# Проверьте что RP адрес на loopback
set interfaces loopback lo address <rp-address>/32

# Одинаковая RP конфигурация на всех роутерах
set protocols pim rp address <rp-address>

commit
save

Multicast трафик не доходит до получателей

Проблема: IGMP подписки есть, но multicast трафик не приходит.

Проверка:

  1. IGMP группы активны:

    show igmp groups
  2. PIM Join отправлен upstream:

    show ip pim join
    show ip pim upstream

    Должны видеть JOIN для группы.

  3. PIM State для группы:

    show ip pim state

    Должны видеть (*,G) и (S,G) entries.

  4. Source регистрируется на RP:

    # На RP
    show ip pim upstream

    Должны видеть источник.

  5. Multicast routing table:

    show ip mroute <group>

    Должны видеть Incoming и Outgoing interfaces.

  6. Трафик достигает first-hop router:

    tcpdump -i eth1 -n host <multicast-group>
  7. RPF check проходит:

    show ip rpf <source-ip>

    RPF interface должен совпадать с incoming interface для источника.

  8. Firewall разрешает multicast:

    show firewall

    Проверьте правила для destination 224.0.0.0/4.

Решение:

# Разрешить multicast в firewall
set firewall ipv4 input filter rule 120 action accept
set firewall ipv4 input filter rule 120 destination address 224.0.0.0/4

set firewall ipv4 forward filter rule 120 action accept
set firewall ipv4 forward filter rule 120 destination address 224.0.0.0/4

# Проверить IGMP
set protocols pim interface eth1 igmp
set protocols pim interface eth1 igmp version 2

# Restart
restart igmp
restart pim

commit
save

RPF Failure

Проблема: RPF (Reverse Path Forwarding) check fail, трафик отбрасывается.

RPF принцип: Multicast пакет должен прибыть на интерфейс, который ведет обратно к источнику (по unicast routing table).

Диагностика:

show ip rpf <source-ip>

Вывод:

Routing entry for 10.100.0.50
Known via "connected", distance 0, metric 0
  * directly connected, eth1

RPF interface: eth1
RPF address: 10.100.0.50

Проверка:

  • RPF interface должен совпадать с incoming interface multicast трафика
  • Если не совпадает - RPF failure, пакет drop

Решение:

  1. Исправить unicast routing:

    # Убедитесь что маршрут к источнику правильный
    show ip route <source-ip>
  2. Использовать static mroute (если unicast и multicast топологии разные):

    # Не поддерживается VyOS CLI напрямую
    # Используйте FRR vtysh
    vtysh
    configure
    ip mroute <source-network> <rpf-interface>
    exit
    write
  3. ECMP: Если несколько путей к источнику:

    set protocols pim ecmp
    commit

SSM не работает с IGMPv2

Проблема: SSM группы (232.0.0.0/8) не работают с IGMPv2 клиентами.

Причина: SSM требует IGMPv3 для (S,G) подписок.

Решение:

  1. Upgrade клиентов к IGMPv3:

    # На Linux клиенте
    echo 3 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version
  2. Настроить IGMPv3 на VyOS:

    set protocols pim interface eth1 igmp version 3
    commit
  3. Проверка:

    show igmp interface eth1

    Должно показать Version: 3.

  4. Если клиенты не поддерживают IGMPv3 - использовать ASM (Any-Source Multicast) вместо SSM.

SPT Switchover не происходит

Проблема: Трафик продолжает идти через RP, не переключается на SPT.

Проверка:

  1. SPT switchover не отключен:

    show protocols pim

    Не должно быть spt-switchover infinity-and-beyond.

  2. PIM State:

    show ip pim state

    Должны видеть как (*,G) так и (S,G) entries после получения первого пакета.

  3. Unicast маршрут к источнику:

    show ip route <source-ip>
  4. Mroute table:

    show ip mroute <group>

    После SPT switchover Incoming interface должен измениться с RP path на source path.

Решение:

  1. Убрать infinity-and-beyond (если установлен):

    delete protocols pim spt-switchover infinity-and-beyond
    commit
  2. Проверить RPF к источнику:

    show ip rpf <source-ip>
  3. Restart PIM:

    restart pim

BSR не выбирается

Проблема: BSR election не происходит, нет RP mappings.

Проверка:

  1. Candidate-BSR настроен:

    show protocols pim bsr
  2. BSR status:

    show ip pim bsr

    Должно показать BSR address и RP Set.

  3. PIM neighbors:

    show ip pim neighbor

    BSR сообщения распространяются через PIM.

  4. Bootstrap сообщения:

    tcpdump -i eth0 -n proto 103 and 'ip[20] == 4'

    Тип 4 - Bootstrap Message.

Решение:

# На Primary BSR
set protocols pim bsr candidate-bsr address <loopback-ip>
set protocols pim bsr candidate-bsr priority 200

# На Backup BSR
set protocols pim bsr candidate-bsr address <loopback-ip>
set protocols pim bsr candidate-bsr priority 100

# Candidate-RP
set protocols pim bsr candidate-rp address <loopback-ip>
set protocols pim bsr candidate-rp priority 200

# Restart
restart pim

commit
save

High CPU от PIM

Проблема: Высокая загрузка CPU от FRR pimd процесса.

Причины:

  • Слишком много (S,G) state
  • Частые Join/Prune сообщения
  • Нестабильность источников (flapping)

Диагностика:

# Количество mroute entries
show ip mroute | count

# PIM state
show ip pim state | count

# PIM statistics
show ip pim statistics

Решение:

  1. Увеличить Join-Prune Interval:

    set protocols pim join-prune-interval 120
    commit
  2. Увеличить Keep-Alive Timer:

    set protocols pim keep-alive-timer 300
    commit
  3. Использовать SSM вместо ASM (меньше state):

    set protocols pim ssm prefix-list SSM-RANGE
    commit
  4. Ограничить количество групп через firewall или RP accept-list.

Мониторинг и логирование

Continuous Monitoring

Мониторинг PIM neighbors:

watch -n 5 'show ip pim neighbor'

Мониторинг PIM state:

watch -n 10 'show ip pim state'

Мониторинг IGMP groups:

watch -n 5 'show igmp groups'

Multicast трафик:

# PIM протокол
tcpdump -i eth0 -n -v proto 103

# Конкретная multicast группа
tcpdump -i eth0 -n host 239.10.1.1

# Все multicast
tcpdump -i eth0 -n 'dst net 224.0.0.0/4'

Logging

Системные логи:

show log tail 100 | match pim

Syslog для PIM:

set system syslog global facility protocols level info
commit

External syslog:

set system syslog host 192.168.1.100 facility protocols level info
set system syslog host 192.168.1.100 port 514
commit

FRR debug (осторожно, очень verbose):

# Войти в FRR shell
vtysh

# Debug PIM
debug pim events
debug pim packets

# Debug IGMP
debug igmp events
debug igmp packets

# Отключить debug
no debug pim events
no debug pim packets

exit

Логи в файл:

vtysh
configure
log file /var/log/frr/pim.log
log syslog informational
exit
write

SNMP Monitoring

SNMP для multicast статистики:

# Установить SNMP
set service snmp community public authorization ro
set service snmp community public network 192.168.1.0/24

commit

SNMP OIDs для PIM:

  • .1.3.6.1.2.1.157 - PIM-MIB
  • .1.3.6.1.2.1.83 - IGMP-MIB
  • .1.3.6.1.2.1.15 - IPMROUTE-MIB

SNMP query:

snmpwalk -v2c -c public <vyos-ip> .1.3.6.1.2.1.157

Performance Metrics

Bandwidth мониторинг:

# Установить bmon
sudo apt install bmon

# Запустить
bmon -p eth0,eth1 -b

# Или iftop для multicast
sudo iftop -i eth0 -f 'dst net 224.0.0.0/4'

Multicast пакеты статистика:

# Входящие multicast пакеты
show interfaces ethernet eth0 | match multicast

# Статистика mroute
show ip mroute count

Лучшие практики

Дизайн RP

  1. Placement RP:

    • Центральное расположение в топологии
    • Loopback адрес (стабильный)
    • Высокая доступность (используйте Anycast RP или BSR)
  2. Redundancy:

    • Несколько Candidate-RP с BSR
    • Или Anycast RP (advanced)
    • VRRP на интерфейсах RP
  3. Load Balancing:

    • Разные RP для разных диапазонов групп
    • Мониторинг нагрузки на RP

PIM Конфигурация

  1. DR Priority:

    • Настраивайте явно на multi-access сегментах
    • Предпочитайте более мощные роутеры
  2. Hello Interval:

    • Стандартные 30 секунд для стабильных сетей
    • 10-15 секунд для быстрой convergence
    • Не ниже 10 секунд (избыточный трафик)
  3. SPT Switchover:

    • Оставьте по умолчанию (immediate) для оптимальных путей
    • Используйте infinity-and-beyond только для специальных случаев
  4. SSM vs ASM:

    • Предпочитайте SSM если источники известны
    • SSM проще, безопаснее, меньше state
    • ASM для dynamic источников

Безопасность

  1. Firewall для PIM:

    set firewall ipv4 input filter rule 100 action accept
    set firewall ipv4 input filter rule 100 protocol pim
    set firewall ipv4 input filter rule 100 source address 10.0.0.0/8
  2. Ограничение multicast групп:

    set firewall ipv4 input filter rule 110 action accept
    set firewall ipv4 input filter rule 110 destination address 239.0.0.0/8
    
    set firewall ipv4 input filter rule 999 action drop
    set firewall ipv4 input filter rule 999 destination address 224.0.0.0/4
    set firewall ipv4 input filter rule 999 description 'Drop unknown multicast'
  3. Rate limiting:

    set firewall ipv4 input filter rule 100 limit rate 100/second
  4. IGMP контроль:

    # Ограничить количество IGMP групп на интерфейс
    # (не поддерживается VyOS CLI, используйте FRR)

Производительность

  1. ECMP:

    set protocols pim ecmp
    set protocols pim ecmp rebalance
  2. Timers оптимизация:

    # Увеличить для снижения CPU
    set protocols pim join-prune-interval 120
    set protocols pim keep-alive-timer 300
  3. Limit (S,G) state:

    • Используйте SSM где возможно
    • Ограничивайте количество источников

Масштабирование

  1. Количество групп:

    • PIM-SM масштабируется до тысяч групп
    • Мониторинг: show ip pim state | count
  2. Количество (S,G) entries:

    • Зависит от памяти роутера
    • SSM снижает количество state
  3. Bandwidth:

    • Учитывайте репликацию multicast трафика
    • Используйте QoS для приоритизации

Интеграция с другими протоколами

PIM + OSPF

Сценарий: PIM поверх OSPF для unicast маршрутизации.

# OSPF
set protocols ospf parameters router-id 10.255.0.1
set protocols ospf area 0 network 10.0.0.0/8

# PIM использует OSPF routing table для RPF
set protocols pim interface eth0
set protocols pim rp address 10.255.0.2

commit

Важно: RP адрес должен быть в OSPF.

PIM + BGP

Сценарий: Inter-AS multicast с BGP.

# BGP
set protocols bgp system-as 65001
set protocols bgp neighbor 203.0.113.1 remote-as 65000

# PIM
set protocols pim interface eth0
set protocols pim rp address 10.255.0.2

commit

MSDP (Multicast Source Discovery Protocol): Не поддерживается текущей версией VyOS.

PIM + BFD

BFD (Bidirectional Forwarding Detection) - быстрое обнаружение отказа соседа.

Конфигурация:

# BFD глобально
set protocols bfd peer 10.0.1.2
set protocols bfd peer 10.0.1.2 interval transmit 300
set protocols bfd peer 10.0.1.2 interval receive 300
set protocols bfd peer 10.0.1.2 interval multiplier 3

# PIM будет использовать BFD автоматически если настроен
set protocols pim interface eth0

commit

Преимущества:

  • Sub-second обнаружение отказа PIM neighbor
  • Быстрая convergence

Примечание: VyOS PIM (FRR) поддерживает BFD для PIM neighbors.

PIM + VPN (IPsec/WireGuard)

Multicast через VPN туннель.

Требования:

  • VTI интерфейс (не policy-based VPN)
  • PIM на VTI интерфейсе
  • Unicast routing через VPN

Конфигурация:

# VTI интерфейс
set interfaces vti vti0 address 172.16.0.1/30

# IPsec VPN
set vpn ipsec site-to-site peer 203.0.113.2 vti bind vti0

# PIM на VTI
set protocols pim interface vti0
set protocols pim interface vti0 hello 10

# OSPF через VPN
set protocols ospf area 0 network 172.16.0.0/30

# RP
set protocols pim rp address 10.255.0.2

commit

Сравнение решений

PIM-SM vs IGMP Proxy

ХарактеристикаPIM-SMIGMP Proxy
ТопологияЛюбаяПростая (дерево)
МасштабируемостьТысячи группСотни групп
RedundancyПолнаяОграниченная
СложностьВысокаяНизкая
RPТребуетсяНе требуется
CPU/MemoryСреднееНизкое
ПрименениеEnterprise/SPEdge/Home

PIM-SM vs PIM-SSM

ХарактеристикаPIM-SMPIM-SSM
RPТребуетсяНе требуется
ИсточникиЛюбыеИзвестные
IGMP версияv2/v3v3 обязательно
State(*,G) + (S,G)(S,G) только
ComplexityВышеНиже
SecurityСредняяВысокая
ПрименениеDynamic sourcesKnown sources

Статический RP vs BSR

ХарактеристикаСтатический RPBSR
КонфигурацияВручную на всехАвтоматическая
FailoverРучнойАвтоматический
МасштабируемостьОграниченнаяВысокая
ComplexityНизкаяСредняя
ПрименениеМалые сетиБольшие сети

Ссылки и ресурсы

RFC Documents

  • RFC 7761 - PIM-SM (Sparse Mode) - основной стандарт
  • RFC 4601 - PIM-SM v2
  • RFC 3973 - PIM-DM (Dense Mode)
  • RFC 4607 - SSM (Source-Specific Multicast)
  • RFC 5059 - BSR (Bootstrap Router Mechanism)
  • RFC 5015 - Bidirectional PIM
  • RFC 3376 - IGMPv3 (для SSM)

VyOS Documentation

FRR Documentation

Полезные инструменты

  • pimd - PIM daemon (используется FRR)
  • smcroute - Static multicast routing
  • iperf - Multicast performance testing
  • VLC - Multicast streaming player
  • tcpdump - Packet capture
  • Wireshark - Protocol analyzer
  • Zabbix/Prometheus - Monitoring

Community

Следующие шаги

После настройки PIM рекомендуется изучить:

  • IGMP Proxy - для простых топологий
  • MPLS - для MVPN (Multicast VPN)
  • QoS - для приоритизации multicast трафика
  • Firewall - для защиты multicast сетей
  • OSPF - для unicast routing
  • BFD - для быстрого failover

Заключение

PIM (Protocol Independent Multicast) - мощное решение для multicast маршрутизации в сложных топологиях. PIM-SM с Rendezvous Point обеспечивает эффективное распределение multicast трафика для распределенных получателей, PIM-SSM упрощает конфигурацию для известных источников, а Bootstrap Router автоматизирует управление RP.

Ключевые моменты:

  • PIM-SM для сложных топологий с RP
  • PIM-SSM для известных источников (требует IGMPv3)
  • BSR для автоматического распределения RP
  • SPT switchover для оптимальных путей
  • ECMP для балансировки multicast потоков
  • Интеграция с OSPF/BGP для unicast routing
  • Мониторинг PIM neighbors, state, RP

Выбор решения:

  • IGMP Proxy - для простых топологий (home/small office)
  • PIM-SM - для enterprise и service provider сетей
  • PIM-SSM - для IPTV, видео стриминга с известными источниками
Проверено OpenNix LLC · Обновлено