PIM6 - Protocol Independent Multicast для IPv6
PIM6 (Protocol Independent Multicast for IPv6) обеспечивает multicast маршрутизацию в IPv6 сетях, используя MLD (Multicast Listener Discovery) вместо IGMP.
Обзор
PIM6 - версия протокола PIM для IPv6 сетей.
Основные характеристики:
- Multicast маршрутизация для IPv6
- Использует MLD вместо IGMP
- Поддерживает PIM-SM (Sparse Mode) и PIM-SSM (Source-Specific Multicast)
- Работает с IPv6 адресным пространством ff00::/8
- Требует конфигурации RP (Rendezvous Point) для SM режима
- Встроенная поддержка Embedded RP (RFC 3956)
Стандарты:
- RFC 4601 - Protocol Independent Multicast - Sparse Mode (PIM-SM): основной стандарт
- RFC 7761 - Protocol Independent Multicast - Sparse Mode (PIM-SM): обновление
- RFC 3810 - Multicast Listener Discovery Version 2 (MLDv2) for IPv6
- RFC 3956 - Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast Address
- RFC 4607 - Source-Specific Multicast for IP
- RFC 5059 - Bootstrap Router (BSR) Mechanism for PIM
Применение:
- IPv6-only сети с multicast требованиями
- Современные data center с IPv6
- IoT сети на базе IPv6
- Видео конференции через IPv6
- IPTV over IPv6
- Software-defined networking (SDN) с IPv6 multicast
PIM6 vs PIM (IPv4)
Ключевые различия
| Характеристика | PIM (IPv4) | PIM6 (IPv6) |
|---|---|---|
| Группы управления | IGMP | MLD |
| Адресное пространство | 224.0.0.0/4 | ff00::/8 |
| RP адрес | IPv4 | IPv6, поддержка Embedded RP |
| SSM диапазон | 232.0.0.0/8 | ff3x::/32 |
| Neighbor discovery | PIM Hello (IPv4) | PIM Hello (IPv6) |
| BSR адрес | IPv4 | IPv6 |
| Auto-RP | Доступен | Не применим |
Общие функции
Схожие между PIM и PIM6:
- Алгоритм PIM-SM идентичен
- Механизм Bootstrap Router (BSR)
- Source-Specific Multicast (SSM)
- Register mechanism для новых источников
- Join/Prune сообщения
- Assert mechanism для выбора forwarder
MLD (Multicast Listener Discovery)
Обзор MLD
MLD - эквивалент IGMP для IPv6.
Версии MLD:
MLDv1 (RFC 2710):
- Базовая функциональность
- Listener Report и Listener Done сообщения
- Any-Source Multicast (ASM)
MLDv2 (RFC 3810):
- Source filtering (Include/Exclude)
- Source-Specific Multicast (SSM) поддержка
- Совместимость с MLDv1
MLD Сообщения
Multicast Listener Query:
- Отправляется роутером для обнаружения слушателей
- General Query - для всех групп
- Multicast-Address-Specific Query - для конкретной группы
- Multicast-Address-and-Source-Specific Query - для группы и источника (MLDv2)
Multicast Listener Report:
- Хост сообщает о желании получать multicast трафик
- Периодические обновления
Multicast Listener Done (MLDv1):
- Хост покидает multicast группу
- Быстрое удаление подписки
MLDv2 Report:
- Расширенный Report с source filtering
- Include/Exclude режимы
IPv6 Multicast Адреса
Структура IPv6 multicast: ffXY::/8
X - Flags:
- 0 = Well-known multicast
- 1 = Transient multicast
Y - Scope:
- 0 = Reserved
- 1 = Interface-local
- 2 = Link-local
- 4 = Admin-local
- 5 = Site-local
- 8 = Organization-local
- E = Global
Специальные адреса:
- ff02::1 - All Nodes (все узлы на link)
- ff02::2 - All Routers (все роутеры на link)
- ff02::5 - OSPFv3 All Routers
- ff02::6 - OSPFv3 Designated Routers
- ff02::9 - RIPng Routers
- ff02::d - PIM Routers
- ff02::16 - MLDv2 Reports destination
- ff02::1:2 - All DHCP Servers and Relay Agents
- ff05::1:3 - All DHCP Servers (site-local)
SSM диапазон: ff3x::/32 (x = scope)
- ff3e::/32 - SSM Global scope
Embedded RP: ff7x:0RP0::/96
- RP адрес встроен в multicast адрес
PIM6-SM (Sparse Mode)
Концепция
PIM6-SM использует shared tree через Rendezvous Point (RP).
Этапы работы:
Источник регистрируется:
- Designated Router (DR) источника инкапсулирует multicast пакеты в PIM Register
- Register отправляется unicast на RP
Получатели присоединяются:
- DR получателя отправляет PIM Join к RP
- Строится shared tree (*, G) от получателей к RP
Shortest Path Tree (SPT):
- DR получателя опционально переключается на SPT (S, G)
- Прямой путь от источника к получателю
- Отправляет Prune к RP для (*, G)
Оптимизация:
- SPT минимизирует задержку
- RP разгружается после построения SPT
RP для IPv6
Методы конфигурации RP:
Статический RP:
- Ручная конфигурация на всех роутерах
- Максимальный контроль
- Требует синхронизации
Embedded RP (RFC 3956):
- RP адрес встроен в multicast группу
- Автоматическое определение RP
- Формат: ff7x:0RP0::/96
Bootstrap Router (BSR):
- Динамическое распространение RP информации
- Candidate-RP и Candidate-BSR
- Автоматическое обновление
Embedded RP
Формат адреса:
ff7S:0RPN:PPPP:PPPP:PPPP:PPPP:GGGG:GGGGГде:
- S - Scope (4 бита)
- 0 - Reserved (4 бита)
- R - Riid (4 бита) - интерфейс RP
- P - Plen (8 бит) - длина префикса RP
- N - Network prefix (8 бит)
- P…P - RP IPv6 prefix (64 бита)
- G…G - Group ID (32 бита)
Пример:
RP адрес: 2001:db8::1
Multicast группа: ff75:0030:2001:0db8:0000:0000:0000:1234
Разбор:
ff75 - flags=7 (transient), scope=5 (site-local)
0030 - Riid=0, Plen=48 (2001:db8::/48)
2001:0db8:0000 - RP prefix
0000:0000:1234 - Group IDПреимущества:
- Не требует ручной конфигурации RP на каждом роутере
- RP определяется автоматически из группы
- Упрощенная конфигурация
Недостатки:
- Ограниченная гибкость выбора RP
- Зависимость от адресной схемы
Базовая конфигурация PIM6
Включение PIM6 на интерфейсе
Синтаксис:
set protocols pim6 interface <interface>Пример:
set protocols pim6 interface eth0
set protocols pim6 interface eth1
set protocols pim6 interface eth2
commit
saveЭффект:
- Включает PIM6 на интерфейсе
- Автоматически запускает MLD
- Отправляет/принимает PIM Hello сообщения
- Участвует в multicast маршрутизации
Базовая PIM6-SM сеть
Сценарий:
- Три роутера в треугольной топологии
- Статический RP на Router2
- Multicast источник за Router1
- Получатели за Router3
Топология:
[Source] --- Router1 --- Router2 (RP) --- Router3 --- [Receivers]
eth1 eth0 eth1 eth0 eth1Router1 (First Hop Router):
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:12::1/64
set interfaces ethernet eth1 address 2001:db8:1::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Статический RP (должен совпадать на всех роутерах)
set protocols pim6 rp address 2001:db8:2::1
commit
saveRouter2 (RP):
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:12::2/64
set interfaces ethernet eth1 address 2001:db8:23::1/64
set interfaces ethernet eth2 address 2001:db8:2::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
set protocols pim6 interface eth2
# RP на loopback или eth2
set protocols pim6 rp address 2001:db8:2::1
commit
saveRouter3 (Last Hop Router):
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:23::2/64
set interfaces ethernet eth1 address 2001:db8:3::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Статический RP
set protocols pim6 rp address 2001:db8:2::1
commit
saveПроверка базовой конфигурации
Проверка PIM6 интерфейсов:
show ipv6 pim interfaceВывод:
Interface State Address PIM Nbrs PIM DR DR Priority
eth0 up 2001:db8:12::1/64 1 2001:db8:12::2 1
eth1 up 2001:db8:1::1/64 0 local 1Проверка PIM6 соседей:
show ipv6 pim neighborВывод:
Interface Neighbor Uptime Holdtime DR Priority
eth0 2001:db8:12::2 00:15:23 105 1Проверка RP:
show ipv6 pim rp-infoВывод:
RP address Group Source State
2001:db8:2::1 ff00::/8 Static ActiveMLD Конфигурация
Включение MLD на интерфейсе
MLD автоматически включается при активации PIM6, но можно настроить параметры.
Просмотр MLD групп:
show ipv6 mld groupsВывод:
Interface Address Group Uptime Expires
eth1 2001:db8:3::1 ff3e::1234 00:05:23 00:04:12
eth1 2001:db8:3::1 ff05::5678 00:03:45 00:04:18Просмотр MLD интерфейсов:
show ipv6 mld interfaceВывод:
Interface State Address Version Querier Query Timer Uptime
eth0 up fe80::1 2 fe80::1 00:01:15 00:20:34
eth1 up fe80::2 2 fe80::2 00:00:58 00:20:34MLD параметры
Отключение MLD на интерфейсе:
set protocols pim6 interface <interface> mld disableПрименение:
- Интерфейс участвует в PIM6, но не обрабатывает MLD
- Используется для transit интерфейсов без клиентов
Пример:
set protocols pim6 interface eth0 mld disable
commit
saveQuery Interval:
set protocols pim6 interface <interface> mld interval <seconds>Параметры:
- seconds: 1-65535 (по умолчанию 125)
Пример:
set protocols pim6 interface eth1 mld interval 60
commit
saveLast Member Query Count:
set protocols pim6 interface <interface> mld last-member-query-count <count>Применение:
- Количество Group-Specific Queries после Listener Done
- Влияет на скорость удаления из группы
Пример:
set protocols pim6 interface eth1 mld last-member-query-count 2
commit
saveLast Member Query Interval:
set protocols pim6 interface <interface> mld last-member-query-interval <milliseconds>Параметры:
- milliseconds: 100-6553500 (по умолчанию 1000)
Пример:
set protocols pim6 interface eth1 mld last-member-query-interval 500
commit
saveMax Response Time:
set protocols pim6 interface <interface> mld max-response-time <milliseconds>Применение:
- Максимальное время ожидания ответа на Query
- Влияет на сходимость
Пример:
set protocols pim6 interface eth1 mld max-response-time 5000
commit
saveMLD Version:
set protocols pim6 interface <interface> mld version <1-2>Применение:
- Принудительное использование MLDv1 или MLDv2
- MLDv2 требуется для SSM
Пример:
set protocols pim6 interface eth1 mld version 2
commit
saveСтатическое присоединение к группе
Join группы на интерфейсе:
set protocols pim6 interface <interface> mld join <multicast-address>Пример:
set protocols pim6 interface eth1 mld join ff3e::1234
commit
saveПрименение:
- Роутер присоединяется к группе как host
- Полезно для тестирования
- Роутер начинает получать трафик группы на этом интерфейсе
Join с указанием источника (SSM):
set protocols pim6 interface <interface> mld join <multicast-address> source <source-address>Пример:
set protocols pim6 interface eth1 mld join ff3e::5678 source 2001:db8:100::10
commit
saveПрименение:
- Source-Specific Multicast
- Роутер получает только от указанного источника
- Требует MLDv2
RP конфигурация
Статический RP
Конфигурация RP адреса:
set protocols pim6 rp address <ipv6-address>Важно: Конфигурация должна быть идентична на всех PIM6 роутерах в домене.
Пример:
set protocols pim6 rp address 2001:db8:100::1
commit
saveПроверка:
show ipv6 pim rp-infoВывод:
RP address Group Source State
2001:db8:100::1 ff00::/8 Static ActiveRP для конкретных групп
RP для диапазона групп:
set protocols pim6 rp address <ipv6-address> group <prefix>Пример:
set protocols pim6 rp address 2001:db8:100::1 group ff3e::/32
set protocols pim6 rp address 2001:db8:100::2 group ff05::/16
commit
saveПрименение:
- Разные RP для разных групп
- Load balancing между RP
- Разделение по scope
Проверка:
show ipv6 pim rp-infoВывод:
RP address Group Source State
2001:db8:100::1 ff3e::/32 Static Active
2001:db8:100::2 ff05::/16 Static ActiveKeep-Alive Timer для RP
Keep-Alive для (S,G) на RP:
set protocols pim6 rp keep-alive-timer <seconds>Параметры:
- seconds: 31-60000 (по умолчанию 185)
Применение:
- Время хранения (S,G) state на RP
- Влияет на сходимость при изменениях
Пример:
set protocols pim6 rp keep-alive-timer 210
commit
saveBSR (Bootstrap Router) для IPv6
Обзор BSR
BSR обеспечивает динамическое распространение RP информации.
Компоненты:
Candidate-BSR (C-BSR):
- Роутер, участвующий в выборе BSR
- Выбирается на основе приоритета и адреса
- Распространяет RP-Set
Candidate-RP (C-RP):
- Роутер, желающий быть RP
- Отправляет Candidate-RP-Advertisement на BSR
- BSR включает в RP-Set
Bootstrap Message (BSM):
- Содержит RP-Set
- Распространяется через multicast ff02::d
- Flooding в PIM6 домене
Конфигурация BSR
Candidate-BSR:
set protocols pim6 rp candidate-bsr address <ipv6-address>
set protocols pim6 rp candidate-bsr priority <priority>Параметры:
- address: IPv6 адрес интерфейса
- priority: 0-255 (по умолчанию 0, выше = лучше)
Пример:
set protocols pim6 rp candidate-bsr address 2001:db8:100::1
set protocols pim6 rp candidate-bsr priority 100
commit
saveCandidate-RP:
set protocols pim6 rp candidate-rp address <ipv6-address>
set protocols pim6 rp candidate-rp priority <priority>
set protocols pim6 rp candidate-rp interval <seconds>Параметры:
- address: IPv6 адрес, который будет RP
- priority: 0-255 (по умолчанию 192, ниже = лучше для RP)
- interval: 1-16383 (по умолчанию 60) - интервал отправки C-RP Advertisement
Пример:
set protocols pim6 rp candidate-rp address 2001:db8:100::1
set protocols pim6 rp candidate-rp priority 50
set protocols pim6 rp candidate-rp interval 30
commit
saveCandidate-RP для конкретных групп:
set protocols pim6 rp candidate-rp address <ipv6-address> group <prefix>Пример:
set protocols pim6 rp candidate-rp address 2001:db8:100::1 group ff3e::/32
commit
saveПроверка BSR
Информация о BSR:
show ipv6 pim bsrВывод:
PIM6 Bootstrap Information
Current BSR Address: 2001:db8:100::1
Priority: 100
Hash Mask Length: 126
Expires: 00:01:45
Candidate BSR Address: 2001:db8:100::1
Priority: 100
Hash Mask Length: 126RP-Set от BSR:
show ipv6 pim rp-infoВывод:
RP address Group Source State Priority Holdtime
2001:db8:100::1 ff3e::/32 BSR Active 50 150
2001:db8:100::2 ff05::/16 BSR Active 100 150SSM (Source-Specific Multicast) для IPv6
Обзор SSM для IPv6
SSM для IPv6 использует диапазон ff3x::/32.
Формат адреса:
ff3S::/32Где S - scope:
- ff3e::/32 - Global SSM
- ff35::/32 - Site-local SSM
- ff38::/32 - Organization-local SSM
Преимущества SSM:
- Не требует RP
- Прямые (S,G) деревья
- Улучшенная безопасность
- Меньше state на роутерах
- Предсказуемые пути трафика
Конфигурация SSM
Автоматическое определение SSM: VyOS автоматически использует SSM для ff3x::/32.
Явная конфигурация SSM диапазона:
set protocols pim6 ssm-range <prefix>Пример:
set protocols pim6 ssm-range ff3e::/32
commit
saveПроверка SSM:
show ipv6 pim stateВывод покажет (S,G) entries без (*,G) для SSM групп:
Source Group IIF OIL
2001:db8:100::10 ff3e::1234 eth0 eth1, eth2MLDv2 для SSM
SSM требует MLDv2 для source filtering.
Включение MLDv2:
set protocols pim6 interface eth1 mld version 2
commit
saveПроверка:
show ipv6 mld interfaceВывод:
Interface State Address Version Querier Query Timer Uptime
eth1 up fe80::2 2 fe80::2 00:00:58 00:20:34Расширенная конфигурация
DR Priority
Настройка приоритета Designated Router:
set protocols pim6 interface <interface> dr-priority <priority>Параметры:
- priority: 0-4294967295 (по умолчанию 1, выше = лучше)
Применение:
- Выбор DR на multi-access сети
- DR регистрирует источники и отправляет Join
Пример:
set protocols pim6 interface eth0 dr-priority 100
commit
saveПроверка DR:
show ipv6 pim interface eth0Вывод:
Interface State Address PIM Nbrs PIM DR DR Priority
eth0 up 2001:db8:12::1/64 1 2001:db8:12::1 100Hello Interval
Настройка интервала Hello:
set protocols pim6 interface <interface> hello <interval>Параметры:
- interval: 1-65535 секунд (по умолчанию 30)
Применение:
- Частота отправки PIM Hello
- Влияет на обнаружение соседей
Пример:
set protocols pim6 interface eth0 hello 15
commit
saveJoin/Prune Interval
Настройка интервала Join/Prune:
set protocols pim6 join-prune-interval <seconds>Параметры:
- seconds: 60-600 (по умолчанию 60)
Применение:
- Частота отправки Join/Prune сообщений
- Refresh для существующих (S,G) и (*,G)
Пример:
set protocols pim6 join-prune-interval 90
commit
saveRegister Suppression Time
Настройка времени подавления Register:
set protocols pim6 register-suppress-time <seconds>Параметры:
- seconds: 5-60000 (по умолчанию 60)
Применение:
- Время подавления Register после Register-Stop
- DR источника прекращает инкапсуляцию в Register
Пример:
set protocols pim6 register-suppress-time 120
commit
saveMulticast Routing Table
SPT Switchover (iif): VyOS автоматически переключается на SPT при получении трафика.
Infinity для SPT Threshold: Отключить переключение на SPT (оставаться на shared tree):
set protocols pim6 spt-switchover infinity-and-beyondПрименение:
- Все трафик идет через RP
- Упрощенная топология
- Может увеличить задержку
Пример:
set protocols pim6 spt-switchover infinity-and-beyond
commit
savePacket Parameters
DSCP для PIM пакетов:
set protocols pim6 packet dscp <value>Параметры:
- value: 0-63
Пример:
set protocols pim6 packet dscp 46
commit
saveПримеры конфигурации
Пример 1: IPv6 Multicast в Yandex Cloud
Сценарий:
- VyOS роутер в Yandex Cloud как PIM6 RP
- Видео сервер в подсети 2001:db8💯:/64
- Три офиса получают IPv6 multicast видео
- Использование PIM6-SM с статическим RP
- SSM для критичных потоков
Топология:
[Video Server] --- eth1 --- [VyOS RP] --- eth0 --- [Internet/VPC]
2001:db8:100::10 |
ff3e::1234 (SSM) |--- eth2 --- [Office 1]
ff05::5678 (SM) | 2001:db8:1::/64
|--- eth3 --- [Office 2]
| 2001:db8:2::/64
|--- eth4 --- [Office 3]
2001:db8:3::/64VyOS RP конфигурация:
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:10::1/64
set interfaces ethernet eth0 description 'WAN - VPC Interconnect'
set interfaces ethernet eth1 address 2001:db8:100::1/64
set interfaces ethernet eth1 description 'DMZ - Video Servers'
set interfaces ethernet eth2 address 2001:db8:1::1/64
set interfaces ethernet eth2 description 'Office 1'
set interfaces ethernet eth3 address 2001:db8:2::1/64
set interfaces ethernet eth3 description 'Office 2'
set interfaces ethernet eth4 address 2001:db8:3::1/64
set interfaces ethernet eth4 description 'Office 3'
# Loopback для RP
set interfaces loopback lo address 2001:db8:999::1/128
# PIM6 на всех интерфейсах
set protocols pim6 interface eth0
set protocols pim6 interface eth1
set protocols pim6 interface eth2
set protocols pim6 interface eth3
set protocols pim6 interface eth4
# MLD параметры для клиентских интерфейсов
set protocols pim6 interface eth2 mld version 2
set protocols pim6 interface eth2 mld interval 60
set protocols pim6 interface eth3 mld version 2
set protocols pim6 interface eth3 mld interval 60
set protocols pim6 interface eth4 mld version 2
set protocols pim6 interface eth4 mld interval 60
# Отключаем MLD на WAN
set protocols pim6 interface eth0 mld disable
# RP конфигурация
set protocols pim6 rp address 2001:db8:999::1
# SSM диапазон (автоматически для ff3x::/32)
set protocols pim6 ssm-range ff3e::/32
# DR Priority на server сегменте
set protocols pim6 interface eth1 dr-priority 100
# Firewall для IPv6 multicast
set firewall ipv6 input filter rule 100 action accept
set firewall ipv6 input filter rule 100 description 'Allow PIM6'
set firewall ipv6 input filter rule 100 protocol pim
set firewall ipv6 input filter rule 110 action accept
set firewall ipv6 input filter rule 110 description 'Allow MLD'
set firewall ipv6 input filter rule 110 protocol ipv6-icmp
set firewall ipv6 input filter rule 110 icmpv6 type 130-132
set firewall ipv6 input filter rule 120 action accept
set firewall ipv6 input filter rule 120 description 'Allow multicast traffic'
set firewall ipv6 input filter rule 120 destination address ff00::/8
# IPv6 Routing (OSPFv3 или BGP для unicast)
set protocols ospfv3 area 0 interface eth0
set protocols ospfv3 area 0 interface eth1
set protocols ospfv3 area 0 interface eth2
set protocols ospfv3 area 0 interface eth3
set protocols ospfv3 area 0 interface eth4
set protocols ospfv3 parameters router-id 10.0.0.1
commit
saveOffice роутеры (пример для Office 1):
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:1::254/64
set interfaces ethernet eth0 description 'To RP'
set interfaces ethernet eth1 address 2001:db8:10::100/64
set interfaces ethernet eth1 description 'Clients'
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# MLD на клиентском интерфейсе
set protocols pim6 interface eth1 mld version 2
set protocols pim6 interface eth1 mld interval 60
# RP (тот же, что на main роутере)
set protocols pim6 rp address 2001:db8:999::1
# SSM
set protocols pim6 ssm-range ff3e::/32
# OSPFv3 для unicast
set protocols ospfv3 area 0 interface eth0
set protocols ospfv3 area 0 interface eth1
set protocols ospfv3 parameters router-id 10.0.0.2
commit
saveПроверка:
# На RP
show ipv6 pim interface
show ipv6 pim neighbor
show ipv6 pim rp-info
show ipv6 pim state
# На Office роутере
show ipv6 mld groups
show ipv6 pim join
# Мониторинг трафика
tcpdump -i eth1 -n 'ip6 and dst net ff00::/8'Пример 2: PIM6-SSM для IPv6-only сети (VK Cloud)
Сценарий:
- IPv6-only сеть в VK Cloud
- Используется только SSM (ff3e::/32)
- Нет необходимости в RP
- Видео конференции между офисами
- Источники в 2001:db8💯:/64
Топология:
[HQ Router] --- eth0 (2001:db8:10::1/64) --- [VK Cloud VPC]
| |
eth1 (2001:db8:100::1/64) |
| |
[Video Server 2001:db8:100::10] [Branch Router]
|
eth1 (2001:db8:200::1/64)
|
[Users]HQ Router:
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:10::1/64
set interfaces ethernet eth0 description 'VPC Interconnect'
set interfaces ethernet eth1 address 2001:db8:100::1/64
set interfaces ethernet eth1 description 'Video Servers'
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Отключаем MLD на server интерфейсе
set protocols pim6 interface eth1 mld disable
# SSM only (no RP needed)
set protocols pim6 ssm-range ff3e::/32
# DR Priority
set protocols pim6 interface eth1 dr-priority 100
# Firewall
set firewall ipv6 input filter rule 100 action accept
set firewall ipv6 input filter rule 100 protocol pim
set firewall ipv6 input filter rule 110 action accept
set firewall ipv6 input filter rule 110 destination address ff3e::/32
# BGP для unicast routing
set protocols bgp system-as 65001
set protocols bgp neighbor 2001:db8:10::254 address-family ipv6-unicast
set protocols bgp neighbor 2001:db8:10::254 remote-as 65000
commit
saveBranch Router:
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:10::100/64
set interfaces ethernet eth0 description 'VPC Interconnect'
set interfaces ethernet eth1 address 2001:db8:200::1/64
set interfaces ethernet eth1 description 'Users'
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# MLDv2 для клиентов (обязательно для SSM)
set protocols pim6 interface eth1 mld version 2
set protocols pim6 interface eth1 mld interval 60
# SSM only
set protocols pim6 ssm-range ff3e::/32
# Firewall
set firewall ipv6 input filter rule 100 action accept
set firewall ipv6 input filter rule 100 protocol pim
set firewall ipv6 input filter rule 110 action accept
set firewall ipv6 input filter rule 110 destination address ff3e::/32
# BGP
set protocols bgp system-as 65001
set protocols bgp neighbor 2001:db8:10::254 address-family ipv6-unicast
set protocols bgp neighbor 2001:db8:10::254 remote-as 65000
commit
saveКлиент подписка (Linux):
# SSM join: группа ff3e::1234, источник 2001:db8:100::10
smcroute -j eth0 2001:db8:100::10 ff3e::1234
# Или с помощью socat
socat UDP6-RECV:5000,ipv6-join-source-group='[ff3e::1234]:[2001:db8:100::10]:eth0' STDOUTПроверка:
show ipv6 pim state
show ipv6 mld groupsПример 3: Embedded RP
Сценарий:
- Использование Embedded RP для упрощения конфигурации
- RP адрес: 2001:db8:999::1/64
- Группы: ff75:0040:2001:0db8:0999:0000::/96
RP Router:
# Интерфейсы
set interfaces loopback lo address 2001:db8:999::1/128
set interfaces ethernet eth0 address 2001:db8:10::1/64
set interfaces ethernet eth1 address 2001:db8:20::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Embedded RP (автоматически для ff7x::/16)
# Никакой дополнительной конфигурации не требуется
commit
saveClient Router:
# Интерфейсы
set interfaces ethernet eth0 address 2001:db8:10::2/64
set interfaces ethernet eth1 address 2001:db8:100::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Embedded RP - автоматически извлекается из адреса группы
# Никакой ручной конфигурации RP не требуется
commit
saveИспользование Embedded RP группы: Приложение использует группу вида:
ff75:0040:2001:0db8:0999:0000:0000:1234Разбор:
ff75- flags=7 (transient), scope=5 (site-local)0040- Riid=0, Plen=642001:0db8:0999:0000- RP prefix (2001:db8:999::/64)0000:1234- Group ID
Проверка:
show ipv6 pim rp-infoВывод:
RP address Group Source State
2001:db8:999::1 ff75:40:2001:db8:999::/96 Embedded ActiveПример 4: BSR для динамического RP
Сценарий:
- Два Candidate-RP для redundancy
- Один BSR
- Автоматическое распространение RP информации
BSR и Primary RP (Router1):
# Интерфейсы
set interfaces loopback lo address 2001:db8:100::1/128
set interfaces ethernet eth0 address 2001:db8:10::1/64
set interfaces ethernet eth1 address 2001:db8:20::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# BSR конфигурация
set protocols pim6 rp candidate-bsr address 2001:db8:100::1
set protocols pim6 rp candidate-bsr priority 100
# Candidate-RP конфигурация
set protocols pim6 rp candidate-rp address 2001:db8:100::1
set protocols pim6 rp candidate-rp priority 50
set protocols pim6 rp candidate-rp interval 30
commit
saveSecondary RP (Router2):
# Интерфейсы
set interfaces loopback lo address 2001:db8:100::2/128
set interfaces ethernet eth0 address 2001:db8:10::2/64
set interfaces ethernet eth1 address 2001:db8:30::1/64
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Backup BSR (lower priority)
set protocols pim6 rp candidate-bsr address 2001:db8:100::2
set protocols pim6 rp candidate-bsr priority 50
# Candidate-RP (lower priority)
set protocols pim6 rp candidate-rp address 2001:db8:100::2
set protocols pim6 rp candidate-rp priority 100
set protocols pim6 rp candidate-rp interval 30
commit
saveClient Routers:
# PIM6 на интерфейсах
set protocols pim6 interface eth0
set protocols pim6 interface eth1
# Нет статической конфигурации RP!
# RP информация получается через BSR
commit
saveПроверка:
show ipv6 pim bsr
show ipv6 pim rp-infoОперационные команды
Show Commands
PIM6 интерфейсы:
show ipv6 pim interfaceВывод:
Interface State Address PIM Nbrs PIM DR DR Priority
eth0 up 2001:db8:10::1/64 2 2001:db8:10::1 100
eth1 up 2001:db8:20::1/64 0 local 1Детали интерфейса:
show ipv6 pim interface eth0Вывод:
Interface eth0:
State: up
Address: 2001:db8:10::1/64
PIM Neighbors: 2
PIM DR: 2001:db8:10::1
DR Priority: 100
Hello Interval: 30s
Generation ID: 0x12345678PIM6 соседи:
show ipv6 pim neighborВывод:
Interface Neighbor Uptime Holdtime DR Priority Generation ID
eth0 2001:db8:10::2 01:23:45 105 50 0xabcdef12
eth0 2001:db8:10::3 00:45:12 105 1 0x98765432Детали соседа:
show ipv6 pim neighbor detailRP информация:
show ipv6 pim rp-infoВывод:
RP address Group Source State Priority Holdtime
2001:db8:100::1 ff00::/8 Static Active - -
2001:db8:100::1 ff3e::/32 BSR Active 50 150
2001:db8:999::1 ff75::/16 Embedded Active - -PIM6 state (multicast routes):
show ipv6 pim stateВывод:
Installed Source Group IIF OIL
1 2001:db8:100::10 ff3e::1234 eth0 eth1, eth2
1 * ff05::5678 eth0 eth1Детали для группы:
show ipv6 pim state ff3e::1234Join информация:
show ipv6 pim joinВывод:
Interface Source Group State Uptime Expire Prune
eth1 2001:db8:100::10 ff3e::1234 JOIN 00:15:23 00:00:45 -
eth0 * ff05::5678 JOIN 00:10:12 00:00:38 -BSR информация:
show ipv6 pim bsrВывод:
PIM6 Bootstrap Information
Current BSR Address: 2001:db8:100::1
Priority: 100
Hash Mask Length: 126
Expires: 00:01:45
Candidate BSR Address: 2001:db8:100::1
Priority: 100
Hash Mask Length: 126MLD groups:
show ipv6 mld groupsВывод:
Interface Address Group Uptime Expires
eth1 2001:db8:3::1 ff3e::1234 00:05:23 00:04:12
eth1 2001:db8:3::1 ff05::5678 00:03:45 00:04:18MLD интерфейсы:
show ipv6 mld interfaceВывод:
Interface State Address Version Querier Query Timer Uptime
eth0 up fe80::1 2 fe80::1 00:01:15 00:20:34
eth1 up fe80::2 2 fe80::2 00:00:58 00:20:34Детали MLD интерфейса:
show ipv6 mld interface eth1Вывод:
Interface eth1:
State: up
Link-local Address: fe80::2
Version: 2
Querier: fe80::2 (local)
Query Interval: 125s
Query Timer: 00:00:58
Other Querier Present Timer: 00:00:00
Startup Query Interval: 31s
Startup Query Count: 2
Last Member Query Interval: 1000ms
Last Member Query Count: 2
Uptime: 00:20:34MLD sources:
show ipv6 mld sourcesВывод (для MLDv2 SSM):
Interface Group Source Timer Flags
eth1 ff3e::1234 2001:db8:100::10 00:04:15 IIPv6 Multicast Routing Table:
show ipv6 mrouteВывод:
Source Group Proto Input Output Packets Bytes
2001:db8:100::10 ff3e::1234 PIM6 eth0 eth1 15234 45678901
eth2 12456 37890123
* ff05::5678 PIM6 eth0 eth1 5678 12345678Management Commands
Restart PIM6:
restart pim6Clear PIM6 interfaces:
clear ipv6 pim interfacesClear PIM6 oil (Outgoing Interface List):
clear ipv6 pim oilTroubleshooting
Соседи не устанавливаются
Проблема: PIM6 соседи не видны.
Проверка:
PIM6 включен на интерфейсах:
show ipv6 pim interfaceIPv6 connectivity:
ping6 2001:db8:10::2PIM Hello на wire:
tcpdump -i eth0 -vv ip6 proto 103Должны видеть PIM Hello на ff02::d.
Firewall блокирует PIM:
set firewall ipv6 input filter rule 100 action accept set firewall ipv6 input filter rule 100 protocol pim commitРазные Hello intervals: Убедитесь что Hello interval совпадает на обоих концах.
MTU проблемы:
show interfaces ethernet eth0Проверьте что MTU достаточный для IPv6 PIM пакетов.
RP не резолвится
Проблема: RP информация отсутствует.
Проверка:
Статический RP настроен:
show ipv6 pim rp-infoДолжен показывать RP адрес.
RP одинаковый на всех роутерах: Проверьте конфигурацию на всех PIM6 роутерах:
show protocols pim6 rpBSR работает:
show ipv6 pim bsrДолжен показывать текущий BSR.
C-RP Advertisement доходит до BSR:
tcpdump -i eth0 -vv 'ip6 proto 103 and dst ff02::d'Embedded RP формат правильный: Проверьте что группа в формате ff7x::/16 и содержит валидный RP prefix.
Трафик не доходит до получателей
Проблема: Клиенты подписаны, но multicast трафик не получают.
Проверка:
MLD группы активны:
show ipv6 mld groupsPIM Join отправлен:
show ipv6 pim joinДолжны видеть (*,G) или (S,G) Join.
Multicast routing table:
show ipv6 mrouteДолжна быть запись для группы.
PIM state:
show ipv6 pim stateПроверьте IIF и OIL.
Трафик на входном интерфейсе:
tcpdump -i eth0 -n 'ip6 and dst ff3e::1234'RPF check проходит:
show ipv6 route 2001:db8:100::10Unicast route к источнику должен указывать на IIF для multicast.
Firewall разрешает multicast:
set firewall ipv6 input filter rule 120 action accept set firewall ipv6 input filter rule 120 destination address ff00::/8 commit
SSM не работает
Проблема: SSM группы не получают трафик.
Проверка:
Группа в SSM диапазоне: Должна быть ff3x::/32 (например ff3e::1234).
MLDv2 включен:
show ipv6 mld interfaceVersion должна быть 2.
Если нет:
set protocols pim6 interface eth1 mld version 2 commitКлиент использует source-specific join: На Linux:
smcroute -j eth0 2001:db8:100::10 ff3e::1234(S,G) state существует:
show ipv6 pim state ff3e::1234Должна быть (S,G) запись, не (*,G).
RP не настроен для SSM: SSM не требует RP. Если есть RP конфигурация для ff3x::/32, удалите:
delete protocols pim6 rp address <ipv6> group ff3e::/32 commit
Register пакеты не доходят до RP
Проблема: Источник активен, но RP не получает Register.
Проверка:
DR определен правильно:
show ipv6 pim interface eth1PIM DR должен быть роутер, подключенный к источнику.
RP адрес правильный:
show ipv6 pim rp-infoUnicast route к RP:
show ipv6 route 2001:db8:100::1Должен быть маршрут к RP.
Register на wire:
tcpdump -i eth0 -vv 'ip6 proto 103 and dst 2001:db8:100::1'Должны видеть Register пакеты.
Firewall на RP:
set firewall ipv6 input filter rule 100 action accept set firewall ipv6 input filter rule 100 protocol pim set firewall ipv6 input filter rule 100 source address 2001:db8::/16 commit
High CPU от PIM6
Проблема: Высокая загрузка CPU на роутере.
Причины и решения:
Слишком много (S,G) entries:
show ipv6 pim state | wc -lРассмотрите переход на SSM или увеличение ресурсов.
Частые Join/Prune: Увеличьте Join/Prune interval:
set protocols pim6 join-prune-interval 120 commitСлишком частые Hello: Увеличьте Hello interval:
set protocols pim6 interface eth0 hello 60 commitМного MLD Query: Увеличьте MLD interval:
set protocols pim6 interface eth1 mld interval 125 commitMulticast трафик обрабатывается CPU: Проверьте hardware offloading:
ethtool -k eth0 | grep offload
Мониторинг и логирование
Continuous Monitoring
Мониторинг PIM6 neighbors:
watch -n 5 'show ipv6 pim neighbor'Мониторинг multicast routes:
watch -n 10 'show ipv6 mroute'Мониторинг MLD groups:
watch -n 5 'show ipv6 mld groups'Packet capture для PIM6:
tcpdump -i eth0 -vv ip6 proto 103Packet capture для MLD:
tcpdump -i eth1 -vv 'icmp6 and (ip6[40] == 130 or ip6[40] == 131 or ip6[40] == 132 or ip6[40] == 143)'Packet capture для multicast трафика:
tcpdump -i eth1 -n 'ip6 and dst net ff00::/8'Конкретная группа:
tcpdump -i eth1 -n 'ip6 and dst ff3e::1234'Логирование
Системные логи:
show log tail 100 | match pim6Syslog для протоколов:
set system syslog global facility protocols level info
commitExternal syslog:
set system syslog host 2001:db8:100::100 facility protocols level info
set system syslog host 2001:db8:100::100 port 514
commitDebug logging (для troubleshooting):
set system syslog global facility protocols level debug
commitОсторожно: Debug может генерировать много логов.
После troubleshooting вернуть:
set system syslog global facility protocols level info
commitЛучшие практики
Дизайн сети
RP размещение:
- RP в центре сети для минимизации задержки
- Используйте loopback для RP адреса (стабильность)
- Рассмотрите redundancy с BSR + несколько C-RP
SSM vs SM:
- Используйте SSM (ff3x::/32) где возможно
- SM только для Any-Source Multicast
- SSM не требует RP и более эффективен
Embedded RP vs Static RP:
- Embedded RP для упрощения конфигурации
- Static RP для полного контроля
- BSR для динамического RP в крупных сетях
Scope selection:
- ff02::/16 - Link-local (только один hop)
- ff05::/16 - Site-local (в пределах site)
- ff08::/16 - Organization-local (вся организация)
- ff0e::/16 - Global (весь Internet)
Конфигурация
DR Priority:
- Устанавливайте высокий DR priority на роутере ближайшем к источнику
- Контролирует кто отправляет Register на RP
Hello Interval:
- По умолчанию 30 секунд подходит для большинства сетей
- Уменьшайте для быстрой сходимости (нагрузка на CPU)
- Увеличивайте для стабильных сетей с медленными links
MLD Version:
- Используйте MLDv2 для SSM support
- MLDv1 только для legacy devices
PIM6 на всех интерфейсах:
- Включайте PIM6 на всех интерфейсах, участвующих в multicast
- Отключайте MLD на transit/upstream интерфейсах
Безопасность
Firewall для PIM6:
set firewall ipv6 input filter rule 100 action accept set firewall ipv6 input filter rule 100 protocol pim set firewall ipv6 input filter rule 100 source address 2001:db8::/16Ограничение multicast групп:
set firewall ipv6 input filter rule 120 action accept set firewall ipv6 input filter rule 120 destination address ff3e::/32 set firewall ipv6 input filter rule 120 description 'Allow only company SSM'Rate limiting для MLD:
set firewall ipv6 input filter rule 110 action accept set firewall ipv6 input filter rule 110 protocol ipv6-icmp set firewall ipv6 input filter rule 110 icmpv6 type 130-132 set firewall ipv6 input filter rule 110 limit rate 10/secondDrop неизвестный multicast:
set firewall ipv6 input filter rule 999 action drop set firewall ipv6 input filter rule 999 destination address ff00::/8 set firewall ipv6 input filter rule 999 description 'Drop unknown multicast'
Производительность
SPT Switchover:
- По умолчанию VyOS переключается на SPT сразу
- Для load на RP можно оставить на shared tree:
set protocols pim6 spt-switchover infinity-and-beyondRegister Suppression:
- Увеличьте для снижения нагрузки на DR:
set protocols pim6 register-suppress-time 120Hardware Offloading:
- Включайте где доступно для multicast forwarding
- Проверка:
ethtool -k eth0 | grep offloadМониторинг ресурсов:
show system resources show ipv6 pim state | wc -l
Интеграция с другими протоколами
PIM6 + OSPFv3
Сценарий: OSPFv3 для unicast, PIM6 для multicast.
# OSPFv3
set protocols ospfv3 area 0 interface eth0
set protocols ospfv3 area 0 interface eth1
set protocols ospfv3 parameters router-id 10.0.0.1
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
set protocols pim6 rp address 2001:db8:100::1
commitВажно: PIM6 использует OSPFv3 unicast routes для RPF check.
PIM6 + BGP
Сценарий: BGP для IPv6 unicast, PIM6 для multicast.
# BGP
set protocols bgp system-as 65001
set protocols bgp neighbor 2001:db8:10::254 address-family ipv6-unicast
set protocols bgp neighbor 2001:db8:10::254 remote-as 65000
# PIM6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
set protocols pim6 rp address 2001:db8:100::1
commitВажно: BGP routes используются для RPF check в PIM6.
PIM6 + VPN (IPsec/WireGuard)
Сценарий: Multicast через VPN туннель.
IPsec с VTI:
# VTI интерфейс
set interfaces vti vti0 address 2001:db8:999::1/64
# PIM6 на VTI
set protocols pim6 interface vti0
# RP
set protocols pim6 rp address 2001:db8:100::1
commitWireGuard:
# WireGuard интерфейс
set interfaces wireguard wg0 address 2001:db8:888::1/64
# PIM6 на WireGuard
set protocols pim6 interface wg0
commitВажно: Multicast через VPN может иметь performance impact.
PIM6 + IPv4 (Dual Stack)
Сценарий: Одновременно PIM для IPv4 и PIM6 для IPv6.
# PIM для IPv4
set protocols pim interface eth0
set protocols pim interface eth1
set protocols pim rp address 10.0.0.1
# PIM6 для IPv6
set protocols pim6 interface eth0
set protocols pim6 interface eth1
set protocols pim6 rp address 2001:db8:100::1
commitПрименение:
- Dual-stack multicast
- Миграция с IPv4 на IPv6
- Legacy applications (IPv4) + новые (IPv6)
Сравнение PIM6 с другими решениями
PIM6 vs IGMP Proxy для IPv6
| Характеристика | PIM6 | IGMP/MLD Proxy |
|---|---|---|
| Сложность | Высокая | Низкая |
| Топология | Любая | Простая (дерево) |
| Масштабируемость | Высокая | Ограниченная |
| RP требуется | Да (SM) | Нет |
| Redundancy | Полная | Ограниченная |
| Применение | Core/Data center | Edge/Branch |
Когда использовать PIM6:
- Сложная топология
- Множество источников
- Data center multicast
- Требуется redundancy
Когда использовать MLD Proxy:
- Простая топология (один источник)
- Branch office
- IPTV от провайдера
- Ограниченные ресурсы
PIM6-SM vs PIM6-SSM
| Характеристика | PIM6-SM | PIM6-SSM |
|---|---|---|
| RP требуется | Да | Нет |
| Группы | ff00::/8 (кроме ff3x::/32) | ff3x::/32 |
| (*,G) tree | Да | Нет |
| (S,G) tree | Да | Да |
| Сложность | Высокая | Низкая |
| Безопасность | Средняя | Высокая |
| MLD Version | MLDv1/v2 | MLDv2 |
Когда использовать PIM6-SM:
- Any-Source Multicast
- Множество динамических источников
- Legacy applications
Когда использовать PIM6-SSM:
- Известные источники
- Видео distribution
- IPTV, streaming
- Улучшенная безопасность
Автоматизация и скрипты
Мониторинг скрипт
Bash скрипт для проверки PIM6 neighbors:
#!/bin/bash
# pim6-monitor.sh
# Мониторинг PIM6 соседей
LOG_FILE="/var/log/pim6-monitor.log"
EXPECTED_NEIGHBORS=2
check_neighbors() {
local neighbor_count=$(vtysh -c "show ipv6 pim neighbor" | grep -c "eth0")
if [ "$neighbor_count" -lt "$EXPECTED_NEIGHBORS" ]; then
echo "$(date): WARNING - Only $neighbor_count neighbors, expected $EXPECTED_NEIGHBORS" >> "$LOG_FILE"
return 1
else
echo "$(date): OK - $neighbor_count neighbors present" >> "$LOG_FILE"
return 0
fi
}
check_neighbors
vtysh -c "show ipv6 pim neighbor"
vtysh -c "show ipv6 pim interface"Установка в cron:
*/5 * * * * /usr/local/bin/pim6-monitor.shRP failover скрипт
Скрипт для проверки RP доступности:
#!/bin/bash
# rp-watchdog.sh
# Проверка RP и переключение на backup
PRIMARY_RP="2001:db8:100::1"
BACKUP_RP="2001:db8:100::2"
LOG_FILE="/var/log/rp-watchdog.log"
check_rp() {
if ping6 -c 3 -W 2 "$PRIMARY_RP" > /dev/null 2>&1; then
return 0
else
return 1
fi
}
if ! check_rp; then
echo "$(date): Primary RP $PRIMARY_RP unreachable, switching to backup" >> "$LOG_FILE"
vtysh << EOF
configure terminal
protocols pim6 rp address $BACKUP_RP
commit
save
exit
EOF
echo "$(date): Switched to backup RP $BACKUP_RP" >> "$LOG_FILE"
else
echo "$(date): Primary RP $PRIMARY_RP is reachable" >> "$LOG_FILE"
fiСсылки и ресурсы
RFC Documents
- RFC 4601 - Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification
- RFC 7761 - Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (обновление)
- RFC 3810 - Multicast Listener Discovery Version 2 (MLDv2) for IPv6
- RFC 2710 - Multicast Listener Discovery (MLD) for IPv6
- RFC 3956 - Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast Address
- RFC 4607 - Source-Specific Multicast for IP
- RFC 5059 - Bootstrap Router (BSR) Mechanism for Protocol Independent Multicast (PIM)
- RFC 4291 - IP Version 6 Addressing Architecture
VyOS Documentation
Полезные инструменты
- FRRouting (FRR) - Routing suite используемый VyOS для PIM6
- smcroute - Static multicast routing tool
- iperf3 - Network performance testing (multicast режим)
- tcpdump - Packet capture
- Wireshark - Packet analyzer
- VLC - Media player с multicast поддержкой
Community
Следующие шаги
После настройки PIM6 рекомендуется изучить:
- PIM (IPv4) - для IPv4 multicast
- IGMP Proxy - для простых IPv4 multicast сценариев
- OSPFv3 - для IPv6 unicast routing
- BGP - для IPv6 BGP routing
- Firewall - для защиты multicast сетей
- QoS - для приоритизации multicast трафика
Заключение
PIM6 обеспечивает эффективную multicast маршрутизацию в IPv6 сетях. Правильная конфигурация RP, использование SSM для известных источников и интеграция с MLD обеспечивают стабильную работу современных multicast приложений в Yandex Cloud и VK Cloud.
Ключевые моменты:
- PIM6 работает с MLD вместо IGMP
- RP требуется для PIM6-SM, но не для SSM
- SSM (ff3x::/32) рекомендуется для большинства сценариев
- Embedded RP упрощает конфигурацию
- BSR обеспечивает динамическое распространение RP
- Firewall и security критичны для production
- Мониторинг neighbors, RP и multicast routes обязателен