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

> Segment Routing SR-MPLS и SRv6 в VyOS - конфигурация с IS-IS и OSPF, SR policies, TI-LFA и примеры для облачных развертываний.

Source: https://opennix.org/docs/vyos/routing/vyos-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

```bash
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

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

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

## Segment Routing с IS-IS

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

```bash
set protocols isis SR segment-routing enable
```

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

```bash
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:

```bash
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)**:

```bash
# Базовая конфигурация 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)**:

```bash
# Базовая конфигурация 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)**:

```bash
# Базовая конфигурация 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

```bash
set protocols ospf segment-routing enable
```

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

```bash
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

```bash
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)**:

```bash
# Базовая конфигурация 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)**:

```bash
# Базовая конфигурация 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)**:

```bash
# Базовая конфигурация 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**

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

```bash
# Маркировка трафика 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 для отказоустойчивости**

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

```bash
# 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

```bash
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

```bash
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

```bash
# 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)**:

```bash
# Базовые интерфейсы
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)**:

```bash
# Интерфейсы
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)**:

```bash
# Интерфейсы
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)**:

```bash
# Интерфейсы
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)**:

```bash
# Интерфейсы (только 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)**:

```bash
# Интерфейсы
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 настроим разные пути для разных типов трафика:

```bash
# 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

```bash
# Показать конфигурацию 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

```bash
# Общая информация о 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

```bash
# Общая информация о 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 таблицы

```bash
# Показать локальные метки 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

```bash
# Трассировка с отображением 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

```bash
# Показать вычисленные 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 базы данных

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

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

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

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

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

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

```bash
# 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 меток в трассировке

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

```bash
# Проверить, включен ли 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 не включен**:
   ```bash
   set protocols isis SR segment-routing enable
   # или
   set protocols ospf segment-routing enable
   commit
   ```

2. **SRGB не настроен или некорректен**:
   ```bash
   set protocols segment-routing global-block low-label-value 16000
   set protocols segment-routing global-block high-label-value 23999
   commit
   ```

3. **Prefix-SID не назначен**:
   ```bash
   set protocols isis SR segment-routing prefix 10.0.0.1/32 index value 1
   commit
   ```

4. **MPLS не включен на интерфейсах**:
   ```bash
   set protocols mpls interface eth1
   commit
   ```

5. **Разные SRGB на узлах** (критическая ошибка):
   ```bash
   # Проверить на всех узлах
   show running-config protocols segment-routing global-block
   # Привести к единому значению
   ```

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

**Симптомы**:
- `show isis fast-reroute summary` показывает "No backup available"
- При отказе линка происходит долгая конвергенция
- Пакеты теряются при failover

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

```bash
# Проверить, включен ли 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 не включен глобально**:
   ```bash
   set protocols isis fast-reroute lfa local priority-limit critical
   # или для OSPF
   set protocols ospf fast-reroute ti-lfa enable
   commit
   ```

2. **TI-LFA не включен на интерфейсах**:
   ```bash
   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**:
   ```bash
   # Проверить метрики интерфейсов
   show isis interface detail
   # Настроить метрики для лучшей балансировки
   set protocols isis interface eth2 metric 20
   commit
   ```

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

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

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

```bash
# Проверить назначенные индексы
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**:
   ```bash
   # Если 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. **Конфликт с динамическими метками**:
   ```bash
   # Проверить диапазоны
   show mpls table
   # Убедиться, что SRGB не пересекается с LDP labels (обычно 1024+)
   # Рекомендуемый SRGB: 16000-23999
   ```

3. **Дублирующиеся индексы**:
   ```bash
   # На разных узлах не должно быть одинаковых индексов для разных префиксов
   # Проверить уникальность на всех узлах
   show isis segment-routing prefix-sids
   ```

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

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

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

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

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

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

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

**Решения**:

1. **Policy routing не применена на интерфейсе**:
   ```bash
   set interfaces ethernet eth0 policy route MY_POLICY
   commit
   ```

2. **Некорректный список SID**:
   ```bash
   # Убедиться, что все SID в пути доступны
   show isis segment-routing prefix-sids
   # Проверить, что путь действительно существует
   traceroute 10.0.0.5
   ```

3. **Static route с segments не установлен**:
   ```bash
   # Проверить наличие маршрута
   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

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

```bash
# Проверить 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**:
   ```bash
   # Каждая MPLS метка добавляет 4 байта
   # Для стека из 3 меток нужно +12 байт
   set interfaces ethernet eth1 mtu 1512
   commit
   ```

2. **Слишком большой стек меток**:
   ```bash
   # Уменьшить количество SID в policy
   # Или использовать Binding SID (когда будет поддержка)
   set protocols segment-routing maximum-label-stack-depth 5
   commit
   ```

3. **Фрагментация на промежуточных узлах**:
   ```bash
   # Включить MPLS MTU на всех транзитных узлах
   set protocols mpls mtu 1500
   commit
   ```

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

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

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

```bash
# Проверить версию 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**:
   ```bash
   restart frr
   ```

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

3. **Проверить совместимость конфигурации**:
   ```bash
   # Некоторые опции могли измениться
   # Проверить 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 адресация**:

```bash
# Использовать согласованную схему для 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 индексы**:

```bash
# Привязать индекс к последнему октету 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 везде**:

```bash
# На всех узлах и интерфейсах
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
```

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

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

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

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

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

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

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

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

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

```bash
# Создать скрипт мониторинга
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 мониторинг**:

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

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

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

```bash
# 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**:

```bash
# Ограничить максимальную глубину стека меток
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**:

```bash
# Защита 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 таймеров**:

```bash
# 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 оптимизация**:

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

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

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

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

# OSPF ECMP
set protocols ospf parameters ecmp 4
```

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

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

```bash
# Использовать разные 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
```

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

```bash
# 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 для балансировки**:

```bash
# На нескольких 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**:

```bash
# Этап 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**:

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

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

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

```bash
# Автоматический 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
```

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

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

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

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

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

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

```python
# Скрипт для синхронизации 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 мониторинг**:

```bash
# Экспорт метрик 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 политик**:

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

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

```bash
# Назначить одинаковый 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](https://docs.vyos.io/en/latest/configuration/protocols/segment-routing.html)
- [FRRouting Segment Routing](http://docs.frrouting.org/en/latest/segment-routing.html)
- [IETF Segment Routing Architecture (RFC 8402)](https://datatracker.ietf.org/doc/html/rfc8402)
- [Segment Routing with IS-IS (RFC 8667)](https://datatracker.ietf.org/doc/html/rfc8667)
- [Segment Routing with OSPF (RFC 8665)](https://datatracker.ietf.org/doc/html/rfc8665)

### Полезные 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

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

```bash
# 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>
```

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

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

- [VyOS Examples Repository](https://github.com/vyos/vyos-documentation/tree/current/docs/configuration/protocols/examples)
- [FRR SR Examples](https://github.com/FRRouting/frr/tree/master/tests/topotests/isis_sr_topo1)

## Заключение

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)

