Segment Routing - Сегментная маршрутизация

Segment Routing - Сегментная маршрутизация

Segment Routing - Сегментная маршрутизация

Обзор

Segment Routing (SR) - это архитектура маршрутизации с использованием исходной маршрутизации (source routing), которая позволяет отправляющему узлу определять путь прохождения пакетов через сеть. SR упрощает управление трафиком и оптимизацию путей без необходимости поддержания состояния на промежуточных маршрутизаторах.

Ключевые характеристики

  • Упрощенная архитектура: Не требуется протокол сигнализации (LDP, RSVP-TE)
  • Масштабируемость: Минимальное состояние на промежуточных узлах
  • Traffic Engineering: Гибкое управление потоками трафика
  • Быстрая конвергенция: Поддержка TI-LFA для мгновенного переключения на резервный путь
  • Совместимость: Работает поверх существующей MPLS-инфраструктуры

Типы Segment Routing

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

  1. SR-MPLS: Использует существующую MPLS data plane
  2. SRv6: Использует IPv6 с расширенными заголовками (в разработке)

В данном руководстве основное внимание уделяется SR-MPLS, который является production-ready решением.

Архитектура Segment Routing

Основные компоненты

Segment (Сегмент)

Сегмент представляет собой инструкцию, которую узел должен выполнить над пакетом. Сегменты идентифицируются с помощью Segment Identifier (SID).

Segment Identifier (SID)

SID - это уникальный идентификатор сегмента. В SR-MPLS реализуется как MPLS метка.

Типы SID:

  • Prefix-SID: Глобальный сегмент, ассоциированный с префиксом IGP
  • Adjacency-SID: Локальный сегмент, представляющий конкретное соседство
  • Node-SID: Специальный случай Prefix-SID для loopback-интерфейса узла
  • Anycast-SID: SID, назначенный нескольким узлам для балансировки нагрузки

Segment Routing Global Block (SRGB)

SRGB - это глобальный диапазон меток MPLS, используемый для Prefix-SID. Все узлы в SR-домене должны использовать один и тот же SRGB для обеспечения корректной работы.

Параметры SRGB:

  • Lower Bound: Начальное значение диапазона (по умолчанию: 16000)
  • Upper Bound: Конечное значение диапазона (по умолчанию: 23999)
  • Range Size: Размер диапазона (максимум: 65535)

Segment Routing Local Block (SRLB)

SRLB - это локальный диапазон меток, используемый для Adjacency-SID и других локальных сегментов.

Принцип работы SR-MPLS

  1. Инициализация: Входной маршрутизатор (ingress) определяет путь и создает стек меток MPLS
  2. Пересылка: Промежуточные маршрутизаторы обрабатывают верхнюю метку в стеке
  3. Завершение: Выходной маршрутизатор (egress) удаляет последнюю метку и доставляет пакет

Операции над метками:

  • PUSH: Добавление метки в стек (на ingress-узле)
  • SWAP: Замена верхней метки (на transit-узлах)
  • POP: Удаление верхней метки
  • CONTINUE: Переход к следующей метке в стеке

PHP (Penultimate Hop Popping)

PHP - это механизм, при котором предпоследний маршрутизатор удаляет верхнюю метку перед пересылкой пакета на egress-узел. Это снижает нагрузку на выходной маршрутизатор.

Режимы:

  • Implicit-null: Метка 3 (по умолчанию с PHP)
  • Explicit-null: Метка 0 для IPv4, метка 2 для IPv6 (с флагом explicit-null)
  • No-PHP: Отключение PHP (с флагом no-php-flag)

Конфигурация SR-MPLS

Системные требования

  • VyOS 1.4 (Sagitta) или новее
  • Поддержка MPLS в ядре Linux
  • Настроенный протокол IGP (IS-IS или OSPF)

Базовая конфигурация SRGB

set protocols segment-routing global-block high-label-value 23999
set protocols segment-routing global-block low-label-value 16000

Параметры:

  • high-label-value: Верхняя граница SRGB (максимум: 1048575)
  • low-label-value: Нижняя граница SRGB (минимум: 0)

Важно:

  • Размер SRGB не должен превышать 65535 меток
  • SRGB должен быть одинаковым на всех узлах SR-домена
  • Рекомендуется использовать диапазон, не конфликтующий с динамическими метками LDP

Maximum Label Stack Depth

set protocols segment-routing maximum-label-stack-depth 10

Определяет максимальное количество меток в стеке (диапазон: 1-16). По умолчанию: 10.

Segment Routing с IS-IS

Включение SR в IS-IS

set protocols isis SR segment-routing enable

Конфигурация SRGB для IS-IS

set protocols isis SR segment-routing global-block high-label-value 23999
set protocols isis SR segment-routing global-block low-label-value 16000

Настройка Prefix-SID

Prefix-SID назначается loopback-интерфейсу для создания Node-SID:

set protocols isis SR segment-routing prefix 10.0.0.1/32 index value 1
set protocols isis SR segment-routing prefix 10.0.0.1/32 index no-php-flag

Параметры Prefix-SID:

  • value: Индекс в SRGB (0-65535)
  • no-php-flag: Отключает PHP для этого префикса
  • explicit-null: Использует explicit-null метку вместо implicit-null
  • n-flag-clear: Очищает N-flag в TLV (для специальных случаев)

Расчет метки: Label = SRGB_Lower_Bound + Index

Пример: Если SRGB = 16000-23999 и Index = 1, то метка = 16001

Полный пример конфигурации IS-IS SR

Узел R1 (10.0.0.1):

# Базовая конфигурация IS-IS
set protocols isis interface eth1
set protocols isis interface lo
set protocols isis net 49.0000.0000.0001.00
set protocols isis level level-2

# Segment Routing
set protocols isis SR segment-routing enable
set protocols isis SR segment-routing global-block low-label-value 16000
set protocols isis SR segment-routing global-block high-label-value 23999
set protocols isis SR segment-routing prefix 10.0.0.1/32 index value 1

# MPLS на интерфейсах
set interfaces ethernet eth1 ip address 192.168.1.1/24
set interfaces loopback lo address 10.0.0.1/32
set protocols mpls interface eth1

Узел R2 (10.0.0.2):

# Базовая конфигурация IS-IS
set protocols isis interface eth1
set protocols isis interface eth2
set protocols isis interface lo
set protocols isis net 49.0000.0000.0002.00
set protocols isis level level-2

# Segment Routing
set protocols isis SR segment-routing enable
set protocols isis SR segment-routing global-block low-label-value 16000
set protocols isis SR segment-routing global-block high-label-value 23999
set protocols isis SR segment-routing prefix 10.0.0.2/32 index value 2

# MPLS на интерфейсах
set interfaces ethernet eth1 ip address 192.168.1.2/24
set interfaces ethernet eth2 ip address 192.168.2.1/24
set interfaces loopback lo address 10.0.0.2/32
set protocols mpls interface eth1
set protocols mpls interface eth2

Узел R3 (10.0.0.3):

# Базовая конфигурация IS-IS
set protocols isis interface eth1
set protocols isis interface lo
set protocols isis net 49.0000.0000.0003.00
set protocols isis level level-2

# Segment Routing
set protocols isis SR segment-routing enable
set protocols isis SR segment-routing global-block low-label-value 16000
set protocols isis SR segment-routing global-block high-label-value 23999
set protocols isis SR segment-routing prefix 10.0.0.3/32 index value 3

# MPLS на интерфейсах
set interfaces ethernet eth1 ip address 192.168.2.2/24
set interfaces loopback lo address 10.0.0.3/32
set protocols mpls interface eth1

Segment Routing с OSPF

Включение SR в OSPF

set protocols ospf segment-routing enable

Конфигурация SRGB для OSPF

set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing global-block low-label-value 16000

Настройка Prefix-SID для OSPF

set protocols ospf segment-routing prefix 10.0.0.1/32 index value 1
set protocols ospf segment-routing prefix 10.0.0.1/32 index no-php-flag

Полный пример конфигурации OSPF SR

Узел R1 (10.0.0.1):

# Базовая конфигурация OSPF
set interfaces ethernet eth1 ip address 192.168.1.1/24
set interfaces loopback lo address 10.0.0.1/32

set protocols ospf area 0 network 192.168.1.0/24
set protocols ospf area 0 network 10.0.0.1/32
set protocols ospf parameters router-id 10.0.0.1

# Segment Routing
set protocols ospf segment-routing enable
set protocols ospf segment-routing global-block low-label-value 16000
set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing prefix 10.0.0.1/32 index value 1

# MPLS
set protocols mpls interface eth1

Узел R2 (10.0.0.2):

# Базовая конфигурация OSPF
set interfaces ethernet eth1 ip address 192.168.1.2/24
set interfaces ethernet eth2 ip address 192.168.2.1/24
set interfaces loopback lo address 10.0.0.2/32

set protocols ospf area 0 network 192.168.1.0/24
set protocols ospf area 0 network 192.168.2.0/24
set protocols ospf area 0 network 10.0.0.2/32
set protocols ospf parameters router-id 10.0.0.2

# Segment Routing
set protocols ospf segment-routing enable
set protocols ospf segment-routing global-block low-label-value 16000
set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing prefix 10.0.0.2/32 index value 2

# MPLS
set protocols mpls interface eth1
set protocols mpls interface eth2

Узел R3 (10.0.0.3):

# Базовая конфигурация OSPF
set interfaces ethernet eth1 ip address 192.168.2.2/24
set interfaces loopback lo address 10.0.0.3/32

set protocols ospf area 0 network 192.168.2.0/24
set protocols ospf area 0 network 10.0.0.3/32
set protocols ospf parameters router-id 10.0.0.3

# Segment Routing
set protocols ospf segment-routing enable
set protocols ospf segment-routing global-block low-label-value 16000
set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing prefix 10.0.0.3/32 index value 3

# MPLS
set protocols mpls interface eth1

SR Policies и Explicit Paths

SR Policies позволяют определить явные пути для трафика с использованием списка SID.

Концепция SR Policy

SR Policy состоит из:

  • Endpoint: Целевой узел (IP-адрес)
  • Color: Идентификатор политики для группировки путей
  • Candidate Path: Список возможных путей
  • Segment List: Упорядоченный список SID, определяющих путь

Примеры использования SR Policies

Сценарий 1: Low-latency path

Для критичных к задержкам приложений можно настроить путь через высокоскоростные линки:

# Маркировка трафика VoIP для использования low-latency пути
set policy route LowLatency rule 10 protocol udp
set policy route LowLatency rule 10 destination port 5060
set policy route LowLatency rule 10 set table 100

# Статический маршрут с использованием SR
set protocols static route 10.0.0.10/32 interface eth1 segments 16005 16008 16010

Сценарий 2: Disjoint paths для отказоустойчивости

Создание двух непересекающихся путей для критичного трафика:

# Primary path: R1 -> R2 -> R4 -> R5
# Backup path: R1 -> R3 -> R6 -> R5

# Primary SR policy (color 10)
set policy route PrimaryPath rule 10 destination address 10.10.0.0/16
set policy route PrimaryPath rule 10 set table 10

# Backup SR policy (color 20) - активируется при отказе primary
set policy route BackupPath rule 10 destination address 10.10.0.0/16
set policy route BackupPath rule 10 set table 20

TI-LFA (Topology Independent Loop-Free Alternate)

TI-LFA использует Segment Routing для создания резервных путей без петель, которые не зависят от топологии сети.

Преимущества TI-LFA

  • Мгновенная конвергенция: Переключение на резервный путь за <50ms
  • Топологическая независимость: Работает в любой топологии, включая ring и mesh
  • Отсутствие петель: Гарантированное отсутствие петель маршрутизации
  • Оптимальные пути: Резервный путь близок к оптимальному

Включение TI-LFA в IS-IS

set protocols isis fast-reroute lfa local load-sharing disable
set protocols isis fast-reroute lfa local priority-limit critical
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth1 fast-reroute lfa local tiebreaker downstream index 10

Параметры:

  • local enable: Включает LFA на интерфейсе
  • load-sharing: Балансировка между несколькими LFA путями
  • priority-limit: Защита только критичных префиксов
  • tiebreaker: Критерии выбора LFA при наличии нескольких вариантов

Включение TI-LFA в OSPF

set protocols ospf fast-reroute ti-lfa enable
set protocols ospf fast-reroute ti-lfa load-sharing disable
set protocols ospf interface eth1 fast-reroute ti-lfa enable

Пример конфигурации TI-LFA

Топология: R1 — R2 — R4 \ / R3

# R1 Configuration
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable
set protocols isis fast-reroute lfa local priority-limit critical

# R2 Configuration
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable
set protocols isis interface eth3 fast-reroute lfa local enable

# R3 Configuration
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable

При отказе линка R1-R2, трафик мгновенно переключается через R3 с использованием заранее вычисленного SR-пути.

Примеры для облачных провайдеров

Пример 1: Yandex Cloud - SR для Traffic Engineering в ЦОД

Сценарий: Оператор хочет управлять трафиком между зонами доступности в Yandex Cloud с использованием SR для оптимизации пропускной способности.

Топология:

  • DC1 (ru-central1-a): R1, R2
  • DC2 (ru-central1-b): R3, R4
  • Core: R5, R6 (backbone между ЦОД)

Требования:

  • Критичный трафик БД идет через выделенный high-bandwidth путь
  • Web-трафик использует shortest path
  • Резервирование через TI-LFA

Конфигурация R1 (DC1):

# Базовые интерфейсы
set interfaces ethernet eth0 address 10.128.0.10/24
set interfaces ethernet eth1 address 172.16.1.1/30
set interfaces ethernet eth2 address 172.16.2.1/30
set interfaces loopback lo address 10.0.1.1/32

# IS-IS + SR
set protocols isis interface eth0
set protocols isis interface eth1
set protocols isis interface eth2
set protocols isis interface lo
set protocols isis net 49.0001.0000.0001.00
set protocols isis level level-2

set protocols isis SR segment-routing enable
set protocols isis SR segment-routing global-block low-label-value 20000
set protocols isis SR segment-routing global-block high-label-value 29999
set protocols isis SR segment-routing prefix 10.0.1.1/32 index value 1

# MPLS
set protocols mpls interface eth1
set protocols mpls interface eth2

# TI-LFA для быстрой конвергенции
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable

# Traffic Engineering для БД
set policy route DB_TRAFFIC rule 10 source address 10.128.0.0/16
set policy route DB_TRAFFIC rule 10 destination port 5432
set policy route DB_TRAFFIC rule 10 protocol tcp
set policy route DB_TRAFFIC rule 10 set table 100

# Явный путь для БД: R1 -> R5 -> R4 (через high-bandwidth core)
set protocols static table 100 route 10.129.0.0/16 segments 20005 20004

Конфигурация R5 (Core Backbone):

# Интерфейсы
set interfaces ethernet eth0 address 172.16.1.2/30
set interfaces ethernet eth1 address 172.16.3.1/30
set interfaces ethernet eth2 address 172.16.5.1/30
set interfaces loopback lo address 10.0.5.5/32

# IS-IS + SR
set protocols isis interface eth0
set protocols isis interface eth1
set protocols isis interface eth2
set protocols isis interface lo
set protocols isis net 49.0001.0000.0005.00
set protocols isis level level-2

set protocols isis SR segment-routing enable
set protocols isis SR segment-routing global-block low-label-value 20000
set protocols isis SR segment-routing global-block high-label-value 29999
set protocols isis SR segment-routing prefix 10.0.5.5/32 index value 5

# MPLS на всех интерфейсах
set protocols mpls interface eth0
set protocols mpls interface eth1
set protocols mpls interface eth2

# TI-LFA
set protocols isis interface eth0 fast-reroute lfa local enable
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable

# QoS для приоритизации DB трафика
set traffic-policy shaper DB_SHAPER bandwidth 1gbit
set traffic-policy shaper DB_SHAPER default bandwidth 900mbit
set traffic-policy shaper DB_SHAPER class 10 bandwidth 100mbit
set traffic-policy shaper DB_SHAPER class 10 match DB_MATCH ip dscp ef
set interfaces ethernet eth1 traffic-policy out DB_SHAPER

Конфигурация R4 (DC2):

# Интерфейсы
set interfaces ethernet eth0 address 10.129.0.10/24
set interfaces ethernet eth1 address 172.16.3.2/30
set interfaces ethernet eth2 address 172.16.4.2/30
set interfaces loopback lo address 10.0.4.4/32

# IS-IS + SR
set protocols isis interface eth0
set protocols isis interface eth1
set protocols isis interface eth2
set protocols isis interface lo
set protocols isis net 49.0001.0000.0004.00
set protocols isis level level-2

set protocols isis SR segment-routing enable
set protocols isis SR segment-routing global-block low-label-value 20000
set protocols isis SR segment-routing global-block high-label-value 29999
set protocols isis SR segment-routing prefix 10.0.4.4/32 index value 4

# MPLS
set protocols mpls interface eth1
set protocols mpls interface eth2

# TI-LFA
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable

Результат:

  • Трафик PostgreSQL (порт 5432) от DC1 к DC2 идет через выделенный путь R1->R5->R4
  • Остальной трафик использует shortest path (может быть через R6)
  • При отказе любого линка TI-LFA обеспечивает мгновенное переключение

Пример 2: VK Cloud - SR-MPLS Backbone

Сценарий: Построение MPLS-backbone для VK Cloud с использованием SR вместо LDP для упрощения управления.

Топология:

  • Region Moscow: PE1, PE2
  • Region SPb: PE3, PE4
  • Core: P1, P2, P3 (mesh топология)

Особенности:

  • Anycast SID для балансировки к группе PE
  • SR Policies для разных классов трафика
  • OSPF как IGP
  • TI-LFA для sub-50ms failover

Конфигурация PE1 (Moscow):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.0.1/32
set interfaces ethernet eth1 address 192.168.1.1/30
set interfaces ethernet eth2 address 192.168.2.1/30
set interfaces loopback lo address 10.0.0.1/32

# OSPF + SR
set protocols ospf area 0 network 192.168.1.0/30
set protocols ospf area 0 network 192.168.2.0/30
set protocols ospf area 0 network 10.0.0.1/32
set protocols ospf parameters router-id 10.0.0.1

set protocols ospf segment-routing enable
set protocols ospf segment-routing global-block low-label-value 16000
set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing prefix 10.0.0.1/32 index value 1

# Anycast SID для группы Moscow PE
set protocols ospf segment-routing prefix 10.100.1.0/32 index value 101

# MPLS
set protocols mpls interface eth1
set protocols mpls interface eth2

# TI-LFA
set protocols ospf fast-reroute ti-lfa enable
set protocols ospf interface eth1 fast-reroute ti-lfa enable
set protocols ospf interface eth2 fast-reroute ti-lfa enable

# L3VPN для клиентов
set protocols bgp system-as 65000
set protocols bgp neighbor 10.0.0.3 remote-as 65000
set protocols bgp neighbor 10.0.0.3 update-source lo
set protocols bgp neighbor 10.0.0.3 address-family ipv4-vpn

set vrf name CUSTOMER_A table 1000
set vrf name CUSTOMER_A protocols bgp system-as 65000
set vrf name CUSTOMER_A protocols bgp neighbor 172.16.1.2 remote-as 65001

Конфигурация P1 (Core):

# Интерфейсы (только transit)
set interfaces ethernet eth0 address 192.168.1.2/30
set interfaces ethernet eth1 address 192.168.10.1/30
set interfaces ethernet eth2 address 192.168.11.1/30
set interfaces ethernet eth3 address 192.168.12.1/30
set interfaces loopback lo address 10.0.10.1/32

# OSPF + SR
set protocols ospf area 0 network 192.168.1.0/30
set protocols ospf area 0 network 192.168.10.0/30
set protocols ospf area 0 network 192.168.11.0/30
set protocols ospf area 0 network 192.168.12.0/30
set protocols ospf area 0 network 10.0.10.1/32
set protocols ospf parameters router-id 10.0.10.1

set protocols ospf segment-routing enable
set protocols ospf segment-routing global-block low-label-value 16000
set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing prefix 10.0.10.1/32 index value 10

# MPLS на всех интерфейсах
set protocols mpls interface eth0
set protocols mpls interface eth1
set protocols mpls interface eth2
set protocols mpls interface eth3

# TI-LFA на всех интерфейсах
set protocols ospf fast-reroute ti-lfa enable
set protocols ospf interface eth0 fast-reroute ti-lfa enable
set protocols ospf interface eth1 fast-reroute ti-lfa enable
set protocols ospf interface eth2 fast-reroute ti-lfa enable
set protocols ospf interface eth3 fast-reroute ti-lfa enable

# MPLS TTL propagation
set protocols mpls no-propagate-ttl

Конфигурация PE3 (SPb):

# Интерфейсы
set interfaces ethernet eth0 address 10.0.0.3/32
set interfaces ethernet eth1 address 192.168.20.1/30
set interfaces ethernet eth2 address 192.168.21.1/30
set interfaces loopback lo address 10.0.0.3/32

# OSPF + SR
set protocols ospf area 0 network 192.168.20.0/30
set protocols ospf area 0 network 192.168.21.0/30
set protocols ospf area 0 network 10.0.0.3/32
set protocols ospf parameters router-id 10.0.0.3

set protocols ospf segment-routing enable
set protocols ospf segment-routing global-block low-label-value 16000
set protocols ospf segment-routing global-block high-label-value 23999
set protocols ospf segment-routing prefix 10.0.0.3/32 index value 3

# Anycast SID для группы SPb PE
set protocols ospf segment-routing prefix 10.100.2.0/32 index value 102

# MPLS
set protocols mpls interface eth1
set protocols mpls interface eth2

# TI-LFA
set protocols ospf fast-reroute ti-lfa enable
set protocols ospf interface eth1 fast-reroute ti-lfa enable
set protocols ospf interface eth2 fast-reroute ti-lfa enable

# L3VPN для клиентов
set protocols bgp system-as 65000
set protocols bgp neighbor 10.0.0.1 remote-as 65000
set protocols bgp neighbor 10.0.0.1 update-source lo
set protocols bgp neighbor 10.0.0.1 address-family ipv4-vpn

set vrf name CUSTOMER_A table 1000
set vrf name CUSTOMER_A protocols bgp system-as 65000
set vrf name CUSTOMER_A protocols bgp neighbor 172.16.2.2 remote-as 65001

SR Policies для разных классов трафика:

На PE1 настроим разные пути для разных типов трафика:

# Real-time трафик (VoIP, video) - shortest path
set policy route REALTIME rule 10 protocol udp
set policy route REALTIME rule 10 destination port 5060-5080
set policy route REALTIME rule 10 set dscp ef

# Bulk data - через менее загруженный путь
set policy route BULK rule 10 protocol tcp
set policy route BULK rule 10 destination port 873
set policy route BULK rule 10 set table 200

# Статический маршрут с SR для bulk: PE1 -> P2 -> P3 -> PE3
set protocols static table 200 route 10.0.0.3/32 segments 16012 16013 16003

Результат:

  • Упрощенная конфигурация без LDP
  • Anycast SID позволяет балансировать трафик между PE в одном регионе
  • TI-LFA обеспечивает быструю конвергенцию
  • SR Policies оптимизируют использование пропускной способности

Команды проверки и мониторинга

Проверка конфигурации SR

# Показать конфигурацию SRGB
show running-config protocols segment-routing

# Вывод:
# protocols {
#     segment-routing {
#         global-block {
#             high-label-value 23999
#             low-label-value 16000
#         }
#         maximum-label-stack-depth 10
#     }
# }

Проверка SR в IS-IS

# Общая информация о SR в IS-IS
show isis segment-routing

# Информация о Node-SID
show isis segment-routing node

# Префиксы с SID
show isis segment-routing prefix-sids

Пример вывода:

 Area  Prefix                 SID Type       Flags  Algorithm
 ------------------------------------------------------------------
 Level-2 10.0.0.1/32          1   Node       R:0 N:1 P:0 E:0 V:0 L:0  SPF
 Level-2 10.0.0.2/32          2   Node       R:0 N:1 P:0 E:0 V:0 L:0  SPF
 Level-2 10.0.0.3/32          3   Node       R:0 N:1 P:0 E:0 V:0 L:0  SPF

Флаги:

  • R: Re-advertisement flag
  • N: Node-SID flag (этот SID представляет узел)
  • P: no-PHP flag
  • E: Explicit-null flag
  • V: Value flag (SID является абсолютной меткой, а не индексом)
  • L: Local flag

Проверка SR в OSPF

# Общая информация о SR в OSPF
show ip ospf segment-routing

# Детали по префиксам
show ip ospf segment-routing prefix-sids

Пример вывода:

OSPF Segment Routing:
  SR Enabled: True
  SRGB Range: [16000:23999]
  Algorithm: SPF
  MSD: 10

Prefix-SIDs:
  10.0.0.1/32 - Index 1 (Label 16001) Flags: N
  10.0.0.2/32 - Index 2 (Label 16002) Flags: N
  10.0.0.3/32 - Index 3 (Label 16003) Flags: N

Проверка MPLS таблицы

# Показать локальные метки MPLS
show mpls table

# Показать forwarding таблицу MPLS
show mpls fib

Пример вывода show mpls table:

 Inbound Label  Type       Nexthop               Outbound Label
 ----------------------------------------------------------------
 16001          SR (IS-IS) local                 -
 16002          SR (IS-IS) 192.168.1.2 via eth1  implicit-null
 16003          SR (IS-IS) 192.168.1.2 via eth1  16003
 16003          SR (IS-IS) 192.168.2.2 via eth2  16003

Проверка путей с SR

# Трассировка с отображением MPLS меток
traceroute mpls 10.0.0.3

# IP трассировка
traceroute 10.0.0.3

Пример вывода:

traceroute to 10.0.0.3 (10.0.0.3), 30 hops max, 60 byte packets
 1  192.168.1.2 (192.168.1.2) [MPLS: Label 16003]  0.521 ms  0.489 ms  0.467 ms
 2  192.168.2.2 (192.168.2.2) [MPLS: Label-switched]  0.891 ms  0.854 ms  0.812 ms
 3  10.0.0.3 (10.0.0.3)  1.123 ms  1.089 ms  1.056 ms

Проверка TI-LFA

# Показать вычисленные LFA для IS-IS
show isis fast-reroute summary

# Детальная информация по LFA
show isis fast-reroute detail

Пример вывода:

IS-IS Fast-Reroute Summary:
  Enabled: True
  Type: TI-LFA

Prefix             Primary-NH      Backup-NH       Backup-Label
------------------------------------------------------------------
10.0.0.3/32        192.168.1.2     192.168.2.2     16002,16003
10.0.0.4/32        192.168.1.2     192.168.2.2     16002,16004

Проверка ISIS/OSPF базы данных

# ISIS LSDB с SR информацией
show isis database detail

# OSPF LSDB с SR расширениями
show ip ospf database opaque-area

Мониторинг производительности SR

# Статистика MPLS
show mpls statistics

# Интерфейсная статистика с MPLS
show interfaces ethernet eth1 mpls

Проверка BGP с SR (для L3VPN)

# BGP маршруты с MPLS метками
show bgp ipv4 vpn summary

# Детальная информация по VPNv4 маршрутам
show bgp ipv4 vpn

Troubleshooting

Проблема 1: SR не работает в IS-IS/OSPF

Симптомы:

  • Команда show isis segment-routing не показывает префиксы с SID
  • MPLS таблица пуста
  • Нет SR меток в трассировке

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

# Проверить, включен ли SR
show running-config protocols isis | match segment-routing
show running-config protocols ospf | match segment-routing

# Проверить SRGB
show running-config protocols segment-routing

# Проверить, настроены ли Prefix-SID
show running-config protocols isis | match "prefix.*index"
show running-config protocols ospf | match "prefix.*index"

# Проверить MPLS на интерфейсах
show mpls interface

# Проверить соседства IGP
show isis neighbors
show ip ospf neighbor

Решения:

  1. SR не включен:

    set protocols isis SR segment-routing enable
    # или
    set protocols ospf segment-routing enable
    commit
  2. SRGB не настроен или некорректен:

    set protocols segment-routing global-block low-label-value 16000
    set protocols segment-routing global-block high-label-value 23999
    commit
  3. Prefix-SID не назначен:

    set protocols isis SR segment-routing prefix 10.0.0.1/32 index value 1
    commit
  4. MPLS не включен на интерфейсах:

    set protocols mpls interface eth1
    commit
  5. Разные SRGB на узлах (критическая ошибка):

    # Проверить на всех узлах
    show running-config protocols segment-routing global-block
    # Привести к единому значению

Проблема 2: TI-LFA не защищает маршруты

Симптомы:

  • show isis fast-reroute summary показывает “No backup available”
  • При отказе линка происходит долгая конвергенция
  • Пакеты теряются при failover

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

# Проверить, включен ли TI-LFA
show running-config protocols isis | match fast-reroute
show running-config protocols ospf | match ti-lfa

# Проверить топологию
show isis topology
show ip ospf database

# Проверить вычисленные пути
show isis fast-reroute detail

Решения:

  1. TI-LFA не включен глобально:

    set protocols isis fast-reroute lfa local priority-limit critical
    # или для OSPF
    set protocols ospf fast-reroute ti-lfa enable
    commit
  2. TI-LFA не включен на интерфейсах:

    set protocols isis interface eth1 fast-reroute lfa local enable
    # или для OSPF
    set protocols ospf interface eth1 fast-reroute ti-lfa enable
    commit
  3. Недостаточная связность топологии:

    • TI-LFA требует альтернативных путей
    • Проверить наличие резервных линков
    • В линейной топологии (A-B-C) TI-LFA не может защитить все префиксы
  4. Метрики не позволяют найти LFA:

    # Проверить метрики интерфейсов
    show isis interface detail
    # Настроить метрики для лучшей балансировки
    set protocols isis interface eth2 metric 20
    commit

Проблема 3: MPLS метки не назначаются корректно

Симптомы:

  • Метки выходят за пределы SRGB
  • Конфликты меток
  • show mpls table показывает неожиданные значения

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

# Проверить назначенные индексы
show isis segment-routing prefix-sids
show ip ospf segment-routing prefix-sids

# Проверить SRGB
show running-config protocols segment-routing global-block

# Проверить MPLS таблицу
show mpls table

# Проверить динамические метки LDP (если используется)
show mpls ldp binding

Решения:

  1. Индекс выходит за пределы SRGB:

    # Если SRGB = 16000-23999 (размер 8000), индекс не может быть > 7999
    # Исправить индекс
    delete protocols isis SR segment-routing prefix 10.0.0.1/32 index value 10000
    set protocols isis SR segment-routing prefix 10.0.0.1/32 index value 1
    commit
  2. Конфликт с динамическими метками:

    # Проверить диапазоны
    show mpls table
    # Убедиться, что SRGB не пересекается с LDP labels (обычно 1024+)
    # Рекомендуемый SRGB: 16000-23999
  3. Дублирующиеся индексы:

    # На разных узлах не должно быть одинаковых индексов для разных префиксов
    # Проверить уникальность на всех узлах
    show isis segment-routing prefix-sids

Проблема 4: SR Policies не работают

Симптомы:

  • Трафик не следует по явно заданному пути
  • Пакеты идут по shortest path вместо SR policy
  • Ошибки при установке SR policy

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

# Проверить routing tables
show ip route table all

# Проверить policy routing
show policy route

# Трассировка с MPLS
traceroute mpls <destination>

# Проверить MPLS forwarding
show mpls fib

Решения:

  1. Policy routing не применена на интерфейсе:

    set interfaces ethernet eth0 policy route MY_POLICY
    commit
  2. Некорректный список SID:

    # Убедиться, что все SID в пути доступны
    show isis segment-routing prefix-sids
    # Проверить, что путь действительно существует
    traceroute 10.0.0.5
  3. Static route с segments не установлен:

    # Проверить наличие маршрута
    show ip route table 100
    # Установить, если отсутствует
    set protocols static table 100 route 10.0.0.5/32 segments 16002 16005
    commit

Проблема 5: Высокая задержка или потеря пакетов при SR

Симптомы:

  • Увеличенная задержка на SR paths
  • Потеря пакетов при использовании SR
  • Проблемы с MTU

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

# Проверить MTU на интерфейсах
show interfaces ethernet eth1

# Проверить размер стека меток
show running-config protocols segment-routing maximum-label-stack-depth

# Тестирование MTU
ping 10.0.0.3 size 1500 do-not-fragment

# Проверить статистику MPLS
show mpls statistics

Решения:

  1. MTU не учитывает MPLS overhead:

    # Каждая MPLS метка добавляет 4 байта
    # Для стека из 3 меток нужно +12 байт
    set interfaces ethernet eth1 mtu 1512
    commit
  2. Слишком большой стек меток:

    # Уменьшить количество SID в policy
    # Или использовать Binding SID (когда будет поддержка)
    set protocols segment-routing maximum-label-stack-depth 5
    commit
  3. Фрагментация на промежуточных узлах:

    # Включить MPLS MTU на всех транзитных узлах
    set protocols mpls mtu 1500
    commit

Проблема 6: SR не работает после обновления FRR

Симптомы:

  • После обновления VyOS/FRR SR перестал работать
  • Конфигурация на месте, но функционал не работает

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

# Проверить версию FRR
show version

# Проверить логи FRR
show log
run show log | match -i "segment"

# Проверить состояние ISIS/OSPF daemon
show log | match -i isis
show log | match -i ospf

Решения:

  1. Рестарт FRR:

    restart frr
  2. Переприменить конфигурацию:

    # Сохранить конфигурацию
    save /tmp/config.boot
    # Перезагрузить
    reboot
    # Или
    load /tmp/config.boot
    commit
  3. Проверить совместимость конфигурации:

    # Некоторые опции могли измениться
    # Проверить changelog VyOS
    # Обновить синтаксис при необходимости

Best Practices

1. Планирование SRGB

Рекомендации:

  • Единый SRGB: Используйте одинаковый SRGB на всех узлах в SR-домене
  • Резервирование диапазона: Не используйте весь SRGB, оставьте резерв для расширения
  • Избегайте конфликтов: SRGB не должен пересекаться с динамическими метками (LDP: 1024+)
  • Документация: Ведите таблицу распределения индексов SID

Рекомендуемые диапазоны:

Small networks (<100 nodes):  SRGB 16000-17999 (2000 labels)
Medium networks (<1000 nodes): SRGB 16000-23999 (8000 labels)
Large networks (>1000 nodes):  SRGB 16000-80999 (65000 labels)

Пример документации SID:

Node-SID Allocation Table:
--------------------------
Index    Node         Loopback      Location
-----    ----         --------      --------
1        R1-MSK-PE1   10.0.0.1      Moscow DC1
2        R2-MSK-PE2   10.0.0.2      Moscow DC1
3        R3-SPB-PE1   10.0.0.3      SPb DC2
10-19    Core P       10.0.10.x     Core network
100-199  Anycast      10.100.x.x    Service groups

2. Naming и нумерация

Loopback адресация:

# Использовать согласованную схему для loopback
# Пример: 10.0.<POD>.<NODE>

# Moscow Pod 0
set interfaces loopback lo address 10.0.0.1/32  # PE1
set interfaces loopback lo address 10.0.0.2/32  # PE2

# SPb Pod 1
set interfaces loopback lo address 10.0.1.1/32  # PE1
set interfaces loopback lo address 10.0.1.2/32  # PE2

# Core
set interfaces loopback lo address 10.0.10.1/32  # P1
set interfaces loopback lo address 10.0.10.2/32  # P2

SID индексы:

# Привязать индекс к последнему октету loopback
# 10.0.0.1 -> Index 1
# 10.0.0.2 -> Index 2
# 10.0.10.1 -> Index 101
# 10.0.10.2 -> Index 102

3. Защита сети с помощью TI-LFA

Включать TI-LFA везде:

# На всех узлах и интерфейсах
set protocols isis fast-reroute lfa local priority-limit critical
set protocols isis interface eth1 fast-reroute lfa local enable
set protocols isis interface eth2 fast-reroute lfa local enable

Приоритизация критичных префиксов:

# Использовать priority-limit для защиты только важных маршрутов
set protocols isis fast-reroute lfa local priority-limit high

Тестирование failover:

# Регулярно тестировать отказоустойчивость
# Выключить интерфейс и проверить время конвергенции
set interfaces ethernet eth1 disable
commit
# Проверить routing table и MPLS FIB
show ip route
show mpls table
# Включить обратно
delete interfaces ethernet eth1 disable
commit

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

Включить детальное логирование SR:

# Логирование IS-IS с SR
set system syslog global facility local7 level debug

# Логирование в отдельный файл
set system syslog file isis facility local7 level info

Мониторинг ключевых метрик:

# Создать скрипт мониторинга
cat > /config/scripts/sr-monitor.sh << 'EOF'
#!/bin/bash
# SR Monitoring Script

echo "=== SR Status ==="
date

echo "=== SRGB ==="
cli-shell-api showConfig protocols segment-routing

echo "=== SR Prefix-SIDs ==="
vtysh -c "show isis segment-routing prefix-sids"

echo "=== MPLS Table ==="
vtysh -c "show mpls table"

echo "=== TI-LFA Summary ==="
vtysh -c "show isis fast-reroute summary"

echo "=== MPLS Statistics ==="
ip -s -s link show | grep -A 10 eth
EOF

chmod +x /config/scripts/sr-monitor.sh

# Запуск по cron каждые 5 минут
set system task-scheduler task sr-monitor executable path /config/scripts/sr-monitor.sh
set system task-scheduler task sr-monitor interval 5m

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

# Включить SNMP для MPLS MIB
set service snmp community public authorization ro
set service snmp community public network 192.168.100.0/24

5. Безопасность SR

Аутентификация IGP:

# IS-IS аутентификация
set protocols isis area-password plaintext-password 'SECRET_AREA_PWD'
set protocols isis domain-password plaintext-password 'SECRET_DOMAIN_PWD'

# OSPF аутентификация
set protocols ospf area 0 authentication md5
set protocols ospf area 0 area-type stub
set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'SECRET_KEY'

Filtering и Protection:

# Ограничить максимальную глубину стека меток
set protocols segment-routing maximum-label-stack-depth 5

# Фильтрация BGP маршрутов с метками (для VPN)
set policy route-map VPN-IMPORT rule 10 match ip address prefix-list ALLOWED-PREFIXES

Rate Limiting для Control Plane:

# Защита CPU от MPLS flood
set firewall group network-group MPLS-SOURCES network 10.0.0.0/8
set firewall name PROTECT_CP rule 10 source group network-group MPLS-SOURCES
set firewall name PROTECT_CP rule 10 protocol 89
set firewall name PROTECT_CP rule 10 action accept
set firewall name PROTECT_CP rule 10 limit rate 100/second

6. Оптимизация производительности

Tuning IGP таймеров:

# IS-IS fast convergence
set protocols isis fast-reroute lfa local load-sharing disable
set protocols isis spf-interval 1

# OSPF fast convergence
set protocols ospf parameters spf throttle delay 50
set protocols ospf parameters spf throttle initial-holdtime 50
set protocols ospf parameters spf throttle max-holdtime 5000

MPLS оптимизация:

# Отключить TTL propagation для безопасности
set protocols mpls no-propagate-ttl

# Использовать hardware offload (если поддерживается)
# Зависит от платформы

Балансировка нагрузки:

# ECMP для SR paths
set protocols isis max-paths 4

# OSPF ECMP
set protocols ospf parameters ecmp 4

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

Иерархическая архитектура:

# Использовать разные area/level для масштабирования
# IS-IS: Level-1 для access, Level-2 для core
set protocols isis level level-1-2
set protocols isis interface eth0 level level-1
set protocols isis interface eth1 level level-2

# OSPF: Multiple areas
set protocols ospf area 0 network 10.0.0.0/24
set protocols ospf area 1 network 10.1.0.0/16

Суммаризация маршрутов:

# OSPF summary в ABR
set protocols ospf area 1 range 10.1.0.0/16

# IS-IS summary на границе level
set protocols isis redistribute ipv4 level-2 route-map SUMMARIZE

Anycast SID для балансировки:

# На нескольких PE назначить один и тот же Anycast SID
# PE1:
set protocols ospf segment-routing prefix 10.100.1.0/32 index value 101

# PE2:
set protocols ospf segment-routing prefix 10.100.1.0/32 index value 101

# Трафик будет балансироваться между PE1 и PE2

8. Миграция на SR

Постепенная миграция с LDP:

# Этап 1: Включить SR параллельно с LDP
set protocols segment-routing ...
set protocols mpls ldp ...

# Этап 2: Проверить, что SR paths работают
show mpls table

# Этап 3: Перенести критичные сервисы на SR
# (переконфигурация BGP VPN, L2VPN и т.д.)

# Этап 4: Отключить LDP
delete protocols mpls ldp
commit

Тестирование перед production:

# Создать тестовую среду (GNS3, EVE-NG)
# Протестировать все сценарии:
# - Normal operation
# - Link failure
# - Node failure
# - SR policy application
# - TI-LFA convergence

9. Backup и восстановление

Регулярный backup конфигурации:

# Автоматический backup
cat > /config/scripts/backup-config.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/config/backups"
DATE=$(date +%Y%m%d-%H%M%S)
FILENAME="config-${DATE}.boot"

mkdir -p $BACKUP_DIR
cli-shell-api showConfig > $BACKUP_DIR/$FILENAME

# Хранить только последние 10 backup
ls -t $BACKUP_DIR/config-*.boot | tail -n +11 | xargs rm -f
EOF

chmod +x /config/scripts/backup-config.sh

# Ежедневный backup в 02:00
set system task-scheduler task backup-config executable path /config/scripts/backup-config.sh
set system task-scheduler task backup-config interval 1d

Документирование изменений:

# Commit с комментарием
commit comment "Added SR for new DC2 PE nodes"

# Просмотр истории
show system commit

# Откат к предыдущей конфигурации
rollback 1
commit

10. Интеграция с внешними системами

Интеграция с NetBox/IPAM:

# Скрипт для синхронизации SID из NetBox
import pynetbox
import paramiko

nb = pynetbox.api('https://netbox.example.com', token='TOKEN')
devices = nb.dcim.devices.filter(role='router', site='moscow')

for device in devices:
    loopback_ip = device.primary_ip4.address.split('/')[0]
    sid_index = int(loopback_ip.split('.')[-1])

    # Генерация конфигурации SR
    config = f"""
    set protocols ospf segment-routing prefix {loopback_ip}/32 index value {sid_index}
    """

    # Применение через SSH (используйте с осторожностью!)
    # ... SSH подключение и конфигурация ...

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

# Экспорт метрик MPLS через node_exporter textfile collector
cat > /config/scripts/mpls-metrics.sh << 'EOF'
#!/bin/bash
METRICS_FILE="/var/lib/node_exporter/textfile_collector/mpls.prom"

# MPLS table size
MPLS_TABLE_SIZE=$(vtysh -c "show mpls table" | grep -c "^[0-9]")
echo "vyos_mpls_table_size $MPLS_TABLE_SIZE" > $METRICS_FILE

# SR Prefix-SID count
SR_PREFIX_COUNT=$(vtysh -c "show isis segment-routing prefix-sids" | grep -c "^  ")
echo "vyos_sr_prefix_sid_count $SR_PREFIX_COUNT" >> $METRICS_FILE

# TI-LFA protected routes
TILFA_PROTECTED=$(vtysh -c "show isis fast-reroute summary" | grep -oP '\d+(?= prefixes protected)')
echo "vyos_tilfa_protected_prefixes ${TILFA_PROTECTED:-0}" >> $METRICS_FILE
EOF

chmod +x /config/scripts/mpls-metrics.sh

# Каждую минуту
set system task-scheduler task mpls-metrics executable path /config/scripts/mpls-metrics.sh
set system task-scheduler task mpls-metrics interval 1m

Ограничения текущей реализации

VyOS реализует Segment Routing на базе FRRouting, который имеет следующие ограничения:

Текущие ограничения (VyOS 1.4/1.5)

  1. Binding SID: Не поддерживается
  2. SRLB (Segment Routing Local Block): Конфигурация не доступна
  3. Множественные SRGB: Поддерживается только один SRGB
  4. Flex-Algo: Не реализован (только SPF algorithm)
  5. Level Redistribution: Не поддерживается для SR в IS-IS
  6. SR-TE (Traffic Engineering): Ограниченная поддержка, нет динамических SR policies
  7. SRv6: Не реализовано в VyOS (есть в upstream FRR)
  8. SR-MPLS с BGP-LS: Не интегрировано
  9. PCE (Path Computation Element): Нет поддержки внешнего PCE

Workarounds

Для SR-TE политик:

# Использовать статические маршруты с явным списком SID
set protocols static route 10.5.0.0/16 segments 16002 16005 16008

Для Anycast (вместо Binding SID):

# Назначить одинаковый Prefix-SID на нескольких узлах
# Узел 1:
set protocols ospf segment-routing prefix 10.100.1.1/32 index value 100
# Узел 2:
set protocols ospf segment-routing prefix 10.100.1.1/32 index value 100

Дополнительные ресурсы

Официальная документация

Полезные RFC

  • RFC 8402: Segment Routing Architecture
  • RFC 8660: Segment Routing with MPLS data plane
  • RFC 8665: OSPF Extensions for Segment Routing
  • RFC 8666: OSPFv3 Extensions for Segment Routing
  • RFC 8667: IS-IS Extensions for Segment Routing
  • RFC 8919: IS-IS Application-Specific Link Attributes
  • RFC 9256: Segment Routing Policy Architecture

Инструменты и утилиты

# VyOS CLI
show segment-routing
show isis segment-routing
show ip ospf segment-routing
show mpls table
show mpls fib

# FRRouting vtysh
vtysh -c "show segment-routing srv6 locator"
vtysh -c "show isis segment-routing node"
vtysh -c "show mpls table"

# Linux kernel MPLS
ip -M route show
ip -M route show table all

# MPLS трассировка
traceroute -m 30 -M mpls <destination>

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

Полные рабочие примеры доступны в:

Заключение

Segment Routing представляет собой современный подход к управлению трафиком в MPLS-сетях, обеспечивающий:

  • Упрощение операционного управления (без LDP, RSVP-TE)
  • Гибкое traffic engineering с помощью SR policies
  • Быструю конвергенцию с TI-LFA (<50ms failover)
  • Масштабируемость для крупных сетей
  • Совместимость с существующей MPLS инфраструктурой

VyOS с поддержкой SR-MPLS через FRRouting позволяет строить современные сетевые решения для облачных провайдеров, ISP и enterprise-сетей. При правильном планировании SRGB, грамотной архитектуре и следовании best practices, Segment Routing обеспечивает надежную и гибкую платформу для критичных сетевых сервисов.

Регулярный мониторинг, тестирование failover сценариев и документирование конфигурации являются ключевыми факторами успешной эксплуатации SR-based сетей.


Дата последнего обновления: 2025-10-15 Версия документа: 1.0 Применимо к: VyOS 1.4 (Sagitta), VyOS 1.5 (Circinus)