Segment Routing - Сегментная маршрутизация
Segment Routing - Сегментная маршрутизация
Обзор
Segment Routing (SR) - это архитектура маршрутизации с использованием исходной маршрутизации (source routing), которая позволяет отправляющему узлу определять путь прохождения пакетов через сеть. SR упрощает управление трафиком и оптимизацию путей без необходимости поддержания состояния на промежуточных маршрутизаторах.
Ключевые характеристики
- Упрощенная архитектура: Не требуется протокол сигнализации (LDP, RSVP-TE)
- Масштабируемость: Минимальное состояние на промежуточных узлах
- Traffic Engineering: Гибкое управление потоками трафика
- Быстрая конвергенция: Поддержка TI-LFA для мгновенного переключения на резервный путь
- Совместимость: Работает поверх существующей MPLS-инфраструктуры
Типы Segment Routing
VyOS поддерживает два типа Segment Routing:
- SR-MPLS: Использует существующую MPLS data plane
- 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
- Инициализация: Входной маршрутизатор (ingress) определяет путь и создает стек меток MPLS
- Пересылка: Промежуточные маршрутизаторы обрабатывают верхнюю метку в стеке
- Завершение: Выходной маршрутизатор (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-nulln-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 eth1Segment 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 eth1SR 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 20TI-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 65001SR 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 vpnTroubleshooting
Проблема 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Решения:
SR не включен:
set protocols isis SR segment-routing enable # или set protocols ospf segment-routing enable commitSRGB не настроен или некорректен:
set protocols segment-routing global-block low-label-value 16000 set protocols segment-routing global-block high-label-value 23999 commitPrefix-SID не назначен:
set protocols isis SR segment-routing prefix 10.0.0.1/32 index value 1 commitMPLS не включен на интерфейсах:
set protocols mpls interface eth1 commitРазные 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Решения:
TI-LFA не включен глобально:
set protocols isis fast-reroute lfa local priority-limit critical # или для OSPF set protocols ospf fast-reroute ti-lfa enable commitTI-LFA не включен на интерфейсах:
set protocols isis interface eth1 fast-reroute lfa local enable # или для OSPF set protocols ospf interface eth1 fast-reroute ti-lfa enable commitНедостаточная связность топологии:
- TI-LFA требует альтернативных путей
- Проверить наличие резервных линков
- В линейной топологии (A-B-C) TI-LFA не может защитить все префиксы
Метрики не позволяют найти 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Решения:
Индекс выходит за пределы 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Конфликт с динамическими метками:
# Проверить диапазоны show mpls table # Убедиться, что SRGB не пересекается с LDP labels (обычно 1024+) # Рекомендуемый SRGB: 16000-23999Дублирующиеся индексы:
# На разных узлах не должно быть одинаковых индексов для разных префиксов # Проверить уникальность на всех узлах 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Решения:
Policy routing не применена на интерфейсе:
set interfaces ethernet eth0 policy route MY_POLICY commitНекорректный список SID:
# Убедиться, что все SID в пути доступны show isis segment-routing prefix-sids # Проверить, что путь действительно существует traceroute 10.0.0.5Static 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Решения:
MTU не учитывает MPLS overhead:
# Каждая MPLS метка добавляет 4 байта # Для стека из 3 меток нужно +12 байт set interfaces ethernet eth1 mtu 1512 commitСлишком большой стек меток:
# Уменьшить количество SID в policy # Или использовать Binding SID (когда будет поддержка) set protocols segment-routing maximum-label-stack-depth 5 commitФрагментация на промежуточных узлах:
# Включить 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Решения:
Рестарт FRR:
restart frrПереприменить конфигурацию:
# Сохранить конфигурацию save /tmp/config.boot # Перезагрузить reboot # Или load /tmp/config.boot commitПроверить совместимость конфигурации:
# Некоторые опции могли измениться # Проверить 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 groups2. 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 # P2SID индексы:
# Привязать индекс к последнему октету loopback
# 10.0.0.1 -> Index 1
# 10.0.0.2 -> Index 2
# 10.0.10.1 -> Index 101
# 10.0.10.2 -> Index 1023. Защита сети с помощью 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
commit4. Мониторинг и логирование
Включить детальное логирование 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 5mSNMP мониторинг:
# Включить SNMP для MPLS MIB
set service snmp community public authorization ro
set service snmp community public network 192.168.100.0/245. Безопасность 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-PREFIXESRate 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/second6. Оптимизация производительности
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 5000MPLS оптимизация:
# Отключить 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 47. Масштабирование
Иерархическая архитектура:
# Использовать разные 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 SUMMARIZEAnycast 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 и PE28. Миграция на 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 convergence9. 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
commit10. Интеграция с внешними системами
Интеграция с 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)
- Binding SID: Не поддерживается
- SRLB (Segment Routing Local Block): Конфигурация не доступна
- Множественные SRGB: Поддерживается только один SRGB
- Flex-Algo: Не реализован (только SPF algorithm)
- Level Redistribution: Не поддерживается для SR в IS-IS
- SR-TE (Traffic Engineering): Ограниченная поддержка, нет динамических SR policies
- SRv6: Не реализовано в VyOS (есть в upstream FRR)
- SR-MPLS с BGP-LS: Не интегрировано
- 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Дополнительные ресурсы
Официальная документация
- VyOS Segment Routing Documentation
- FRRouting Segment Routing
- IETF Segment Routing Architecture (RFC 8402)
- Segment Routing with IS-IS (RFC 8667)
- Segment Routing with OSPF (RFC 8665)
Полезные 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)