Route Reflector
Route Reflector (RR, RFC 4456) — способ масштабировать iBGP без full-mesh. RR "отражает" маршруты между клиентами.
Проблема без RR
iBGP требует full-mesh — каждый роутер BGP-сессия с каждым. Для N роутеров = N(N-1)/2 сессий. При 100 роутерах — 4950 сессий. Не масштабируется.
Решение
Все клиенты подключаются только к RR. RR распространяет маршруты между клиентами. N сессий вместо N².
┌────┐
┌───┤ RR ├───┐
│ └─┬──┘ │
│ │ │
R1 ─── R2 ─── R3 (без full-mesh между R1-R3)
Split-horizon правила RR
- Маршрут от eBGP → всем клиентам и не-клиентам
- Маршрут от client → всем клиентам и не-клиентам
- Маршрут от не-клиента → только клиентам
Атрибуты для петель
- ORIGINATOR_ID — router-id того кто ввёл маршрут в iBGP. Если получил свой ORIGINATOR_ID — дроп.
- CLUSTER_LIST — список RR-кластеров через которые прошёл маршрут. Loop detection.
Дизайн
- 2 RR для redundancy (не один — SPOF)
- Отдельные RR для разных AFI (v4, v6, VPNv4)
- Иерархия RR (RR-of-RRs) для очень больших сетей
Alternative — BGP Confederations
Другой способ — разбить AS на sub-AS. Внутри sub-AS full-mesh или RR, между sub-AS — как будто eBGP. Практически никто не использует, все на RR.
Add-Path
По умолчанию RR отправляет только лучший путь. С RFC 7911 (Add-Path) может передавать несколько → лучше конвергенция при отказах.