# IS-IS - Intermediate System to Intermediate System

> Настройка IS-IS на VyOS: Level-1, Level-2, NET, аутентификация, redistribution, link-state маршрутизация для Yandex Cloud и VK Cloud datacenter fabric

Source: https://opennix.org/docs/vyos/routing/vyos-isis/


IS-IS - link-state протокол маршрутизации, работающий на Layer 2, широко используемый в datacenter и ISP сетях.

## Обзор

IS-IS (Intermediate System to Intermediate System, ISO 10589) - link-state протокол маршрутизации, изначально разработанный для OSI стека, адаптированный для IP.

**Характеристики**:
- Link-state протокол использующий алгоритм Dijkstra SPF
- Работает напрямую на Layer 2 (не использует IP транспорт)
- Двухуровневая иерархия (Level-1 и Level-2)
- Поддержка IPv4 и IPv6 в одном процессе
- Быстрая конвергенция
- Масштабируемость для больших сетей
- Используется в ISP и datacenter fabric

**Версии**:
- **IS-IS for IP** - поддержка IPv4 и IPv6
- **Integrated IS-IS** - одновременная маршрутизация OSI CLNP и IP

**Применение**:
- ISP backbone networks
- Data center leaf-spine fabric (особенно с CLOS топологией)
- Large enterprise campus
- Service provider MPLS core
- Carrier Ethernet networks

**Преимущества**:
- Работает на Layer 2 (не зависит от IP)
- IPv4 и IPv6 в одном процессе
- Нет необходимости в area 0 как в OSPF
- Более гибкая иерархия
- Меньше overhead на обновления
- Лучшая масштабируемость чем OSPF

**Недостатки**:
- Сложнее в понимании чем OSPF
- Меньшее распространение в enterprise
- Требует понимания OSI терминологии

## Архитектура IS-IS

### Уровни маршрутизации

IS-IS использует двухуровневую иерархию.

**Level-1 (L1)**:
- Маршрутизация внутри area (intra-area)
- L1 роутеры знают топологию только своей area
- Подобно OSPF internal routers
- Используют default route для inter-area трафика

**Level-2 (L2)**:
- Маршрутизация между areas (inter-area)
- L2 роутеры знают все L2 маршруты
- Подобно OSPF backbone (Area 0)
- Формируют backbone топологию

**Level-1-2 (L1/L2)**:
- Работают на обоих уровнях одновременно
- Граница между L1 и L2 domains
- Подобно OSPF ABR (Area Border Router)
- Анонсируют default route в L1 area

### Типы роутеров

**L1 Router**:
- Все интерфейсы в одной area
- Знает только L1 topology
- Использует nearest L1/L2 router как default gateway

**L2 Router**:
- Только inter-area маршрутизация
- Не участвует в L1 routing
- Формирует L2 backbone

**L1/L2 Router**:
- Участвует в L1 и L2 маршрутизации
- Связывает L1 area с L2 backbone
- Анонсирует L1 prefixes в L2
- Анонсирует default route в L1

### Network Entity Title (NET)

NET - адрес IS-IS роутера в формате OSI NSAP.

**Формат**:
```
Area-ID . System-ID . NSEL
```

**Структура**:
- **Area-ID** - идентификатор area (переменной длины, обычно 1-13 bytes)
- **System-ID** - уникальный ID роутера (фиксированная длина 6 bytes)
- **NSEL** - selector (всегда 00 для роутеров)

**Пример**:
```
49.0001.1921.6800.1001.00
```

Разбор:
- **49** - AFI (Authority and Format Identifier) для private addressing
- **0001** - Area ID
- **1921.6800.1001** - System ID (часто из IP: 192.168.0.1 → 1921.6800.1001)
- **00** - NSEL

**Длина**: Обычно 10, 13 или 20 bytes.

**AFI коды**:
- **39** - ISO DCC (Data Country Code)
- **45** - ISO ICD (International Code Designator)
- **47** - ISO 6523-ICD
- **49** - Private (наиболее распространенный)

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

### Минимальная настройка

**Router 1**:
```
set interfaces loopback lo address 192.168.255.1/32

set protocols isis net 49.0001.1921.6825.5001.00

set protocols isis interface eth1
set protocols isis interface lo

commit
save
```

**Router 2**:
```
set interfaces loopback lo address 192.168.255.2/32

set protocols isis net 49.0001.1921.6825.5002.00

set protocols isis interface eth1
set protocols isis interface lo

commit
save
```

**Проверка**:
```
show isis neighbor
show isis database
show ip route isis
```

### NET Configuration

Настройка Network Entity Title:

```
set protocols isis net 49.0001.1921.6800.1001.00
commit
```

**Рекомендации**:
- Используйте AFI 49 для private сетей
- System ID формируйте из loopback IP
- Area ID должен совпадать у L1 neighbors
- Area ID может отличаться у L2 neighbors

**Генерация System ID из IP**:

IP: 192.168.0.1 → System ID: 1921.6800.1001

```python
# Пример конвертации
ip = "192.168.0.1"
octets = ip.split('.')
system_id = f"{int(octets[0]):02d}{int(octets[1]):02d}.{int(octets[2]):02d}{int(octets[3]):02d}.0001"
# Результат: 1921.6800.1001
```

Можно использовать любой уникальный 6-byte идентификатор:
```
49.0001.0000.0000.0001.00
49.0001.0000.0000.0002.00
```

### Hostname Mapping

Сопоставление System ID с hostname для удобства:

```
set protocols isis dynamic-hostname
commit
```

Роутеры будут анонсировать свои hostname в LSP (Link State PDU).

## Interface Configuration

### Включение IS-IS на интерфейсе

Активировать IS-IS:

```
set protocols isis interface eth1
commit
```

Для всех интерфейсов:
```
set protocols isis interface eth0
set protocols isis interface eth1
set protocols isis interface eth2
set protocols isis interface lo
commit
```

### Circuit Type

Тип IS-IS circuit (уровень маршрутизации):

```
set protocols isis interface eth1 circuit-type level-1
commit
```

Типы:
- **level-1** - только L1 adjacencies
- **level-1-2** - L1 и L2 adjacencies (по умолчанию)
- **level-2-only** - только L2 adjacencies

**Применение**:

L1 only для internal area роутеров:
```
set protocols isis interface eth1 circuit-type level-1
commit
```

L2 only для backbone роутеров:
```
set protocols isis interface eth1 circuit-type level-2-only
commit
```

L1-2 для border роутеров:
```
set protocols isis interface eth1 circuit-type level-1-2
commit
```

### Network Type

Тип сети IS-IS:

```
set protocols isis interface eth1 network point-to-point
commit
```

Типы:
- **broadcast** - Ethernet, множественный доступ (по умолчанию)
- **point-to-point** - serial links, VPN tunnels

**Point-to-point** рекомендуется для:
- Direct connections между роутерами
- VPN tunnels (VTI, GRE)
- Point-to-point Ethernet links
- Избегание DIS (Designated IS) выборов

### Passive Interface

Интерфейс анонсирует свои сети, но не формирует adjacencies:

```
set protocols isis interface eth2 passive
commit
```

Применение:
- Loopback интерфейсы
- LAN интерфейсы без IS-IS neighbors
- Предотвращение несанкционированных adjacencies

### Metric

IS-IS метрика интерфейса:

```
set protocols isis interface eth1 metric 10
commit
```

Значения: 1-16777215 (по умолчанию 10).

По уровню:
```
set protocols isis interface eth1 metric level-1 20
set protocols isis interface eth1 metric level-2 10
commit
```

**Wide metrics** (расширенные метрики):
```
set protocols isis metric-style wide
commit
```

Стили:
- **narrow** - старый формат (1-63)
- **wide** - расширенный формат (1-16777215), рекомендуется
- **transition** - оба формата

### Priority

Приоритет для выбора DIS (Designated Intermediate System) на broadcast сетях:

```
set protocols isis interface eth1 priority 64
commit
```

Значения: 0-127 (по умолчанию 64).

По уровню:
```
set protocols isis interface eth1 priority level-1 100
set protocols isis interface eth1 priority level-2 50
commit
```

Роутер с наивысшим priority становится DIS.

**Отличия от OSPF DR**:
- DIS не обязателен (preemptive election)
- DIS может быть переизбран
- Priority 0 НЕ предотвращает выбор DIS

### Hello Timers

Hello interval (секунды):

```
set protocols isis interface eth1 hello-interval 3
commit
```

По уровню:
```
set protocols isis interface eth1 hello-interval level-1 3
set protocols isis interface eth1 hello-interval level-2 10
commit
```

Hello multiplier (для dead interval):

```
set protocols isis interface eth1 hello-multiplier 3
commit
```

Dead interval = hello-interval × hello-multiplier.

**По умолчанию**:
- Broadcast: hello 10s, multiplier 3 (dead 30s)
- Point-to-point: hello 3s, multiplier 3 (dead 9s)

**Рекомендации**:
- Должны совпадать между neighbors
- Меньшие значения для быстрой конвергенции
- Используйте BFD для sub-second failover

## Authentication

Защита IS-IS от несанкционированных роутеров.

### Area Authentication (Level-1)

Plaintext (не рекомендуется):
```
set protocols isis area-password plaintext-password 'AreaPassword123'
commit
```

MD5:
```
set protocols isis area-password md5 'AreaSecurePassword!'
commit
```

Применяется к Level-1 LSP, CSNP, PSNP.

### Domain Authentication (Level-2)

Plaintext:
```
set protocols isis domain-password plaintext-password 'DomainPassword123'
commit
```

MD5:
```
set protocols isis domain-password md5 'DomainSecurePassword!'
commit
```

Применяется к Level-2 LSP, CSNP, PSNP.

### Interface Authentication

Plaintext:
```
set protocols isis interface eth1 password plaintext-password 'InterfacePass'
commit
```

Применяется к Hello PDU на конкретном интерфейсе.

**Рекомендации**:
1. Используйте MD5 для area/domain password
2. Используйте interface password для дополнительной защиты
3. Не используйте plaintext в production
4. Passwords должны совпадать между neighbors

### Пример полной аутентификации

```
# Domain (L2) authentication
set protocols isis domain-password md5 'L2-Secure-Domain-Pass!'

# Area (L1) authentication
set protocols isis area-password md5 'L1-Secure-Area-Pass!'

# Interface authentication
set protocols isis interface eth1 password plaintext-password 'Interface-Hello-Pass'
set protocols isis interface eth2 password plaintext-password 'Interface-Hello-Pass'

commit
save
```

## Level Configuration

### Level-1 Only Router

Роутер только для intra-area маршрутизации:

```
set protocols isis net 49.0001.1921.6800.1001.00

set protocols isis level level-1

set protocols isis interface eth1 circuit-type level-1
set protocols isis interface eth2 circuit-type level-1
set protocols isis interface lo

commit
save
```

### Level-2 Only Router

Роутер только для inter-area маршрутизации:

```
set protocols isis net 49.0002.1921.6800.2001.00

set protocols isis level level-2

set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface lo

commit
save
```

### Level-1-2 Router (Border)

Роутер на границе между L1 и L2:

```
set protocols isis net 49.0001.1921.6800.3001.00

# По умолчанию level-1-2, но можно явно указать
set protocols isis level level-1-2

set protocols isis interface eth1 circuit-type level-1
set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface lo

commit
save
```

### Attached Bit

L1/L2 роутер устанавливает attached bit в L1 LSP, указывая L1 роутерам путь к L2 backbone.

По умолчанию enabled. Для отключения:

```
set protocols isis no-attached-bit send
commit
```

## Route Redistribution

Импорт маршрутов из других источников в IS-IS.

### Redistribution Sources

Connected routes:
```
set protocols isis redistribute ipv4 connected
commit
```

Static routes:
```
set protocols isis redistribute ipv4 static
commit
```

OSPF:
```
set protocols isis redistribute ipv4 ospf
commit
```

BGP:
```
set protocols isis redistribute ipv4 bgp
commit
```

Kernel:
```
set protocols isis redistribute ipv4 kernel
commit
```

### Redistribution с метрикой

Установить метрику:
```
set protocols isis redistribute ipv4 connected metric 100
commit
```

По уровням:
```
set protocols isis redistribute ipv4 static level-1 metric 50
set protocols isis redistribute ipv4 static level-2 metric 100
commit
```

### Route-map для selective redistribution

```
set protocols isis redistribute ipv4 static route-map STATIC-TO-ISIS
commit
```

Пример route-map:
```
set policy route-map STATIC-TO-ISIS rule 10 action permit
set policy route-map STATIC-TO-ISIS rule 10 match ip address prefix-list ALLOW-NETWORKS

set policy prefix-list ALLOW-NETWORKS rule 10 action permit
set policy prefix-list ALLOW-NETWORKS rule 10 prefix 10.0.0.0/8 le 24

commit
```

### IPv6 Redistribution

IS-IS поддерживает IPv6 в том же процессе:

```
set protocols isis redistribute ipv6 connected
set protocols isis redistribute ipv6 static
commit
```

## Default Route

Анонс default route в IS-IS.

### Default Information Originate

IPv4 default:
```
set protocols isis default-information originate ipv4
commit
```

IPv6 default:
```
set protocols isis default-information originate ipv6
commit
```

По уровням:

IPv4 в Level-1:
```
set protocols isis default-information originate ipv4 level-1
commit
```

IPv4 в Level-2:
```
set protocols isis default-information originate ipv4 level-2
commit
```

С метрикой:
```
set protocols isis default-information originate ipv4 level-1 metric 10
commit
```

С route-map:
```
set protocols isis default-information originate ipv4 route-map DEFAULT-IPV4
commit
```

## Summarization

Суммирование IP префиксов в IS-IS.

### IPv4 Summary

```
set protocols isis summary-address ipv4 192.168.0.0/16
commit
```

По уровням:
```
set protocols isis summary-address ipv4 192.168.0.0/16 level-1
commit
```

```
set protocols isis summary-address ipv4 10.0.0.0/8 level-2
commit
```

### IPv6 Summary

```
set protocols isis summary-address ipv6 2001:db8::/32
commit
```

По уровням:
```
set protocols isis summary-address ipv6 2001:db8::/32 level-2
commit
```

## Advanced Parameters

### SPF Timers

Управление частотой SPF calculation:

```
set protocols isis spf-interval level-1 5
set protocols isis spf-interval level-2 5
commit
```

Значения в секундах (1-120, по умолчанию 5).

SPF delay:
```
set protocols isis spf-delay-ietf init-delay 50
set protocols isis spf-delay-ietf short-delay 200
set protocols isis spf-delay-ietf long-delay 5000
set protocols isis spf-delay-ietf holddown 10000
set protocols isis spf-delay-ietf time-to-learn 20000
commit
```

Все значения в миллисекундах.

**IETF SPF delay** - adaptive алгоритм для оптимизации SPF calculation.

### LSP Timers

LSP generation interval:
```
set protocols isis lsp-gen-interval level-1 5
set protocols isis lsp-gen-interval level-2 5
commit
```

Значения в секундах (1-120).

LSP refresh interval:
```
set protocols isis lsp-refresh-interval level-1 900
set protocols isis lsp-refresh-interval level-2 900
commit
```

Значения в секундах (1-65535, по умолчанию 900).

LSP lifetime:
```
set protocols isis max-lsp-lifetime level-1 1200
set protocols isis max-lsp-lifetime level-2 1200
commit
```

Значения в секундах (360-65535, по умолчанию 1200).

### Overload Bit

Установить overload bit (роутер не используется для транзита):

```
set protocols isis overload-bit
commit
```

На время (секунды):
```
set protocols isis overload-bit on-startup 300
commit
```

Роутер будет в overload state 300 секунд после загрузки.

### Purge Originator

Идентификация роутера, который purged LSP:

```
set protocols isis purge-originator
commit
```

Полезно для troubleshooting.

### Log Adjacency Changes

Логирование изменений в adjacencies:

```
set protocols isis log-adjacency-changes
commit
```

## IPv6 Support

IS-IS нативно поддерживает IPv4 и IPv6 в одном процессе.

### IPv6 Configuration

Включить IPv6:
```
set protocols isis address-family ipv6
commit
```

IPv6 на интерфейсе включается автоматически при наличии IPv6 адреса.

### Multi-Topology IS-IS

Разделение IPv4 и IPv6 топологий:

```
set protocols isis topology ipv6-unicast
commit
```

По умолчанию IS-IS использует single topology для IPv4 и IPv6.

### Пример IPv4 и IPv6

```
set interfaces loopback lo address 192.168.255.1/32
set interfaces loopback lo address 2001:db8::1/128

set protocols isis net 49.0001.1921.6825.5001.00

# IPv4
set protocols isis redistribute ipv4 connected

# IPv6
set protocols isis address-family ipv6
set protocols isis redistribute ipv6 connected

set protocols isis interface eth1
set protocols isis interface lo

commit
save
```

Проверка:
```
show isis neighbor
show ipv6 route isis
show ip route isis
```

## BFD Integration

Bidirectional Forwarding Detection для быстрого обнаружения отказов.

```
set protocols isis interface eth1 bfd
commit
```

Настройка BFD профиля:
```
set protocols bfd profile isis-peers interval transmit 300
set protocols bfd profile isis-peers interval receive 300
set protocols bfd profile isis-peers interval multiplier 3

set protocols isis interface eth1 bfd profile isis-peers

commit
```

BFD обнаруживает отказ link за sub-second время vs десятки секунд с IS-IS hello.

## MPLS и Segment Routing

IS-IS широко используется в MPLS и Segment Routing сетях.

### LDP Synchronization

Синхронизация IS-IS и LDP:

```
set protocols isis interface eth1 ldp-sync
commit
```

IS-IS не использует link пока LDP session не установлен.

Holddown time:
```
set protocols isis ldp-sync holddown 300
commit
```

### Segment Routing (Experimental)

Segment Routing в IS-IS (требует FRR 7.5+):

```
set protocols isis segment-routing enable
set protocols isis segment-routing global-block low-label-value 16000
set protocols isis segment-routing global-block high-label-value 23999
commit
```

Prefix SID:
```
set protocols isis segment-routing prefix 192.168.255.1/32 index 1
commit
```

**Note**: Segment Routing support в VyOS может быть ограничен в зависимости от версии FRR.

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

### Простая двухточечная сеть

**Router A** (L1/L2):
```
set interfaces loopback lo address 192.168.255.1/32

set protocols isis net 49.0001.1921.6825.5001.00
set protocols isis dynamic-hostname

set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 password plaintext-password 'HelloSecret'

set protocols isis interface lo passive

set protocols isis area-password md5 'AreaPass!'
set protocols isis domain-password md5 'DomainPass!'

commit
save
```

**Router B** (L1/L2):
```
set interfaces loopback lo address 192.168.255.2/32

set protocols isis net 49.0001.1921.6825.5002.00
set protocols isis dynamic-hostname

set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 password plaintext-password 'HelloSecret'

set protocols isis interface lo passive

set protocols isis area-password md5 'AreaPass!'
set protocols isis domain-password md5 'DomainPass!'

commit
save
```

### Multi-area с L1 и L2

**L1 Router** (Area 0001):
```
set interfaces loopback lo address 192.168.255.10/32

set protocols isis net 49.0001.1921.6825.5010.00
set protocols isis level level-1

set protocols isis interface eth1 circuit-type level-1
set protocols isis interface eth2 circuit-type level-1
set protocols isis interface lo

set protocols isis area-password md5 'Area0001Pass!'

commit
save
```

**L1/L2 Border Router** (между Area 0001 и L2):
```
set interfaces loopback lo address 192.168.255.100/32

set protocols isis net 49.0001.1921.6825.5100.00
set protocols isis level level-1-2

# L1 interface
set protocols isis interface eth1 circuit-type level-1

# L2 interface
set protocols isis interface eth2 circuit-type level-2-only

set protocols isis interface lo

set protocols isis area-password md5 'Area0001Pass!'
set protocols isis domain-password md5 'DomainL2Pass!'

commit
save
```

**L2 Router**:
```
set interfaces loopback lo address 192.168.255.200/32

set protocols isis net 49.0002.1921.6825.5200.00
set protocols isis level level-2

set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface lo

set protocols isis domain-password md5 'DomainL2Pass!'

commit
save
```

### IS-IS с route redistribution

**Edge Router**:
```
set interfaces loopback lo address 192.168.255.1/32

set protocols isis net 49.0001.1921.6825.5001.00

# Внутренние интерфейсы
set protocols isis interface eth1
set protocols isis interface lo

# LAN интерфейсы
set protocols isis interface eth2 passive

# Static routes для external
set protocols static route 203.0.113.0/24 next-hop 198.51.100.1

# Redistribute static в IS-IS
set protocols isis redistribute ipv4 static level-2 metric 100

# Redistribute connected
set protocols isis redistribute ipv4 connected level-1 metric 10

commit
save
```

### IS-IS через VPN (VTI)

**Site A**:
```
set interfaces loopback lo address 192.168.255.1/32
set interfaces vti vti0 address 172.16.0.1/30

set protocols isis net 49.0001.1921.6825.5001.00

set protocols isis interface vti0 network point-to-point
set protocols isis interface vti0 password plaintext-password 'VPN-ISIS!'

set protocols isis interface eth1 passive
set protocols isis interface lo passive

# Redistribute connected
set protocols isis redistribute ipv4 connected

commit
save
```

**Site B**:
```
set interfaces loopback lo address 192.168.255.2/32
set interfaces vti vti0 address 172.16.0.2/30

set protocols isis net 49.0001.1921.6825.5002.00

set protocols isis interface vti0 network point-to-point
set protocols isis interface vti0 password plaintext-password 'VPN-ISIS!'

set protocols isis interface eth1 passive
set protocols isis interface lo passive

# Redistribute connected
set protocols isis redistribute ipv4 connected

commit
save
```

### IS-IS с BGP (Service Provider)

**PE Router**:
```
set interfaces loopback lo address 192.168.255.1/32

# IS-IS для IGP
set protocols isis net 49.0001.1921.6825.5001.00
set protocols isis interface eth1
set protocols isis interface lo passive

# BGP для customer routes
set protocols bgp system-as 65000
set protocols bgp neighbor 192.168.255.2 remote-as 65000
set protocols bgp neighbor 192.168.255.2 update-source lo
set protocols bgp neighbor 192.168.255.2 address-family ipv4-unicast

# Customer BGP
set protocols bgp neighbor 203.0.113.1 remote-as 65001
set protocols bgp neighbor 203.0.113.1 address-family ipv4-unicast

# Redistribute connected в IS-IS (infrastructure)
set protocols isis redistribute ipv4 connected metric 10

# Не редистрибутим BGP в IS-IS (используем BGP для customer routes)

commit
save
```

### Datacenter Leaf-Spine Fabric

**Spine Router**:
```
set interfaces loopback lo address 10.255.255.1/32

set protocols isis net 49.0001.1025.5255.5001.00
set protocols isis level level-2
set protocols isis metric-style wide

# Все интерфейсы к Leaf роутерам
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point

set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface eth2 network point-to-point

set protocols isis interface eth3 circuit-type level-2-only
set protocols isis interface eth3 network point-to-point

set protocols isis interface eth4 circuit-type level-2-only
set protocols isis interface eth4 network point-to-point

set protocols isis interface lo passive

commit
save
```

**Leaf Router**:
```
set interfaces loopback lo address 10.255.255.101/32

set protocols isis net 49.0001.1025.5255.5101.00
set protocols isis level level-2
set protocols isis metric-style wide

# Uplinks к Spine
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point

set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface eth2 network point-to-point

# Server-facing интерфейсы
set protocols isis interface eth3 passive
set protocols isis interface eth4 passive

set protocols isis interface lo passive

# Redistribute connected (server networks)
set protocols isis redistribute ipv4 connected level-2 metric 10

commit
save
```

### IS-IS с IPv4 и IPv6

```
set interfaces loopback lo address 192.168.255.1/32
set interfaces loopback lo address 2001:db8:255::1/128

set interfaces ethernet eth1 address 10.0.0.1/30
set interfaces ethernet eth1 address 2001:db8:1::1/64

set protocols isis net 49.0001.1921.6825.5001.00
set protocols isis dynamic-hostname

# IPv6 support
set protocols isis address-family ipv6

# Interfaces
set protocols isis interface eth1 network point-to-point
set protocols isis interface lo passive

# Redistribute IPv4
set protocols isis redistribute ipv4 connected

# Redistribute IPv6
set protocols isis redistribute ipv6 connected

commit
save
```

## Yandex Cloud: IS-IS для datacenter fabric

Пример использования IS-IS в Yandex Cloud для datacenter Leaf-Spine fabric.

### Топология

```
                    Spine-1 (10.255.0.1)
                    /                  \
                   /                    \
    Leaf-1 (10.255.1.1)          Leaf-2 (10.255.1.2)
         |                              |
    Servers 10.10.1.0/24          Servers 10.10.2.0/24
```

### Spine-1 Configuration

```
# Loopback для Spine
set interfaces loopback lo address 10.255.0.1/32

# Uplinks к Leafs
set interfaces ethernet eth1 address 10.0.0.0/31
set interfaces ethernet eth1 description 'Link to Leaf-1'

set interfaces ethernet eth2 address 10.0.0.2/31
set interfaces ethernet eth2 description 'Link to Leaf-2'

# IS-IS Process
set protocols isis net 49.0001.1025.5000.1001.00
set protocols isis level level-2
set protocols isis metric-style wide
set protocols isis dynamic-hostname

# Spine interfaces - L2 only, point-to-point
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 metric 10

set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface eth2 network point-to-point
set protocols isis interface eth2 metric 10

set protocols isis interface lo passive

# Authentication
set protocols isis domain-password md5 'YandexCloud-DC-Fabric-2025!'

# BFD для fast convergence
set protocols bfd profile dc-fabric interval transmit 300
set protocols bfd profile dc-fabric interval receive 300
set protocols bfd profile dc-fabric interval multiplier 3

set protocols isis interface eth1 bfd profile dc-fabric
set protocols isis interface eth2 bfd profile dc-fabric

commit
save
```

### Leaf-1 Configuration

```
# Loopback для Leaf
set interfaces loopback lo address 10.255.1.1/32

# Uplink к Spine
set interfaces ethernet eth1 address 10.0.0.1/31
set interfaces ethernet eth1 description 'Uplink to Spine-1'

# Server-facing интерфейсы
set interfaces ethernet eth2 address 10.10.1.1/24
set interfaces ethernet eth2 description 'Servers VLAN 10'

# IS-IS Process
set protocols isis net 49.0001.1025.5001.1001.00
set protocols isis level level-2
set protocols isis metric-style wide
set protocols isis dynamic-hostname

# Uplink interface
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 metric 10

# Server interfaces - passive
set protocols isis interface eth2 passive
set protocols isis interface lo passive

# Redistribute connected (server networks)
set protocols isis redistribute ipv4 connected level-2 metric 10

# Authentication
set protocols isis domain-password md5 'YandexCloud-DC-Fabric-2025!'

# BFD для fast convergence
set protocols isis interface eth1 bfd profile dc-fabric

commit
save
```

### Leaf-2 Configuration

```
# Loopback для Leaf
set interfaces loopback lo address 10.255.1.2/32

# Uplink к Spine
set interfaces ethernet eth1 address 10.0.0.3/31
set interfaces ethernet eth1 description 'Uplink to Spine-1'

# Server-facing интерфейсы
set interfaces ethernet eth2 address 10.10.2.1/24
set interfaces ethernet eth2 description 'Servers VLAN 20'

# IS-IS Process
set protocols isis net 49.0001.1025.5001.1002.00
set protocols isis level level-2
set protocols isis metric-style wide
set protocols isis dynamic-hostname

# Uplink interface
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 metric 10

# Server interfaces - passive
set protocols isis interface eth2 passive
set protocols isis interface lo passive

# Redistribute connected (server networks)
set protocols isis redistribute ipv4 connected level-2 metric 10

# Authentication
set protocols isis domain-password md5 'YandexCloud-DC-Fabric-2025!'

# BFD для fast convergence
set protocols isis interface eth1 bfd profile dc-fabric

commit
save
```

### Проверка Yandex Cloud Fabric

**На Spine-1**:
```
show isis neighbor
show isis database
show ip route isis

# Должны видеть 10.10.1.0/24 и 10.10.2.0/24 от Leafs
```

**На Leaf-1**:
```
show isis neighbor
show isis route

# Должны видеть 10.255.0.1 (Spine), 10.255.1.2 (Leaf-2), 10.10.2.0/24
```

**Тестирование**:
```
# С Leaf-1 до Leaf-2 loopback
ping 10.255.1.2 source-address 10.255.1.1

# С Leaf-1 до Leaf-2 server network
ping 10.10.2.1 source-address 10.10.1.1
```

**Мониторинг BFD**:
```
show bfd peers
```

## VK Cloud: IS-IS с MPLS backbone

Пример использования IS-IS в VK Cloud для MPLS Service Provider backbone.

### Топология

```
PE1 (10.255.255.1) --- P1 (10.255.255.10) --- PE2 (10.255.255.2)
         |                                           |
    Customer A                                  Customer B
    AS 65001                                    AS 65002
```

### P1 Router (Core)

```
# Loopback
set interfaces loopback lo address 10.255.255.10/32

# Core links
set interfaces ethernet eth1 address 10.0.1.1/30
set interfaces ethernet eth1 description 'Link to PE1'

set interfaces ethernet eth2 address 10.0.2.1/30
set interfaces ethernet eth2 description 'Link to PE2'

# IS-IS для IGP
set protocols isis net 49.0001.1025.5255.5010.00
set protocols isis level level-2
set protocols isis metric-style wide
set protocols isis dynamic-hostname

# Core interfaces
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 metric 10

set protocols isis interface eth2 circuit-type level-2-only
set protocols isis interface eth2 network point-to-point
set protocols isis interface eth2 metric 10

set protocols isis interface lo passive

# Authentication
set protocols isis domain-password md5 'VKCloud-MPLS-Backbone-2025!'

# LDP-ISIS synchronization
set protocols isis ldp-sync holddown 300
set protocols isis interface eth1 ldp-sync
set protocols isis interface eth2 ldp-sync

# BFD
set protocols bfd profile mpls-core interval transmit 300
set protocols bfd profile mpls-core interval receive 300
set protocols bfd profile mpls-core interval multiplier 3

set protocols isis interface eth1 bfd profile mpls-core
set protocols isis interface eth2 bfd profile mpls-core

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

set protocols mpls ldp interface eth1
set protocols mpls ldp interface eth2
set protocols mpls ldp router-id 10.255.255.10

commit
save
```

### PE1 Router (Provider Edge)

```
# Loopback
set interfaces loopback lo address 10.255.255.1/32

# Core link
set interfaces ethernet eth1 address 10.0.1.2/30
set interfaces ethernet eth1 description 'Link to P1'

# Customer link
set interfaces ethernet eth2 address 192.168.1.1/30
set interfaces ethernet eth2 description 'Customer A CE'

# IS-IS для IGP
set protocols isis net 49.0001.1025.5255.5001.00
set protocols isis level level-2
set protocols isis metric-style wide
set protocols isis dynamic-hostname

# Core interface
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 metric 10

set protocols isis interface lo passive

# Redistribute connected (только loopback, не customer links)
set protocols isis redistribute ipv4 connected route-map LOOPBACK-ONLY

# Route-map для selective redistribution
set policy route-map LOOPBACK-ONLY rule 10 action permit
set policy route-map LOOPBACK-ONLY rule 10 match ip address prefix-list LOOPBACKS

set policy prefix-list LOOPBACKS rule 10 action permit
set policy prefix-list LOOPBACKS rule 10 prefix 10.255.255.0/24 le 32

# Authentication
set protocols isis domain-password md5 'VKCloud-MPLS-Backbone-2025!'

# LDP-ISIS sync
set protocols isis interface eth1 ldp-sync

# BFD
set protocols isis interface eth1 bfd profile mpls-core

# MPLS
set protocols mpls interface eth1
set protocols mpls ldp interface eth1
set protocols mpls ldp router-id 10.255.255.1

# BGP для customer routes (MPLS VPN)
set protocols bgp system-as 65000
set protocols bgp neighbor 10.255.255.2 remote-as 65000
set protocols bgp neighbor 10.255.255.2 update-source lo
set protocols bgp neighbor 10.255.255.2 address-family ipv4-unicast

# Customer A BGP
set protocols bgp neighbor 192.168.1.2 remote-as 65001
set protocols bgp neighbor 192.168.1.2 address-family ipv4-unicast

commit
save
```

### PE2 Router (Provider Edge)

```
# Loopback
set interfaces loopback lo address 10.255.255.2/32

# Core link
set interfaces ethernet eth1 address 10.0.2.2/30
set interfaces ethernet eth1 description 'Link to P1'

# Customer link
set interfaces ethernet eth2 address 192.168.2.1/30
set interfaces ethernet eth2 description 'Customer B CE'

# IS-IS для IGP
set protocols isis net 49.0001.1025.5255.5002.00
set protocols isis level level-2
set protocols isis metric-style wide
set protocols isis dynamic-hostname

# Core interface
set protocols isis interface eth1 circuit-type level-2-only
set protocols isis interface eth1 network point-to-point
set protocols isis interface eth1 metric 10

set protocols isis interface lo passive

# Redistribute connected (только loopback)
set protocols isis redistribute ipv4 connected route-map LOOPBACK-ONLY

# Route-map для selective redistribution
set policy route-map LOOPBACK-ONLY rule 10 action permit
set policy route-map LOOPBACK-ONLY rule 10 match ip address prefix-list LOOPBACKS

set policy prefix-list LOOPBACKS rule 10 action permit
set policy prefix-list LOOPBACKS rule 10 prefix 10.255.255.0/24 le 32

# Authentication
set protocols isis domain-password md5 'VKCloud-MPLS-Backbone-2025!'

# LDP-ISIS sync
set protocols isis interface eth1 ldp-sync

# BFD
set protocols isis interface eth1 bfd profile mpls-core

# MPLS
set protocols mpls interface eth1
set protocols mpls ldp interface eth1
set protocols mpls ldp router-id 10.255.255.2

# BGP для customer routes (MPLS VPN)
set protocols bgp system-as 65000
set protocols bgp neighbor 10.255.255.1 remote-as 65000
set protocols bgp neighbor 10.255.255.1 update-source lo
set protocols bgp neighbor 10.255.255.1 address-family ipv4-unicast

# Customer B BGP
set protocols bgp neighbor 192.168.2.2 remote-as 65002
set protocols bgp neighbor 192.168.2.2 address-family ipv4-unicast

commit
save
```

### Проверка VK Cloud MPLS Backbone

**IS-IS Neighbors**:
```
show isis neighbor
```

**IS-IS Database**:
```
show isis database detail
```

**MPLS LDP**:
```
show mpls ldp neighbor
show mpls ldp binding
```

**LDP-ISIS Sync Status**:
```
show isis mpls ldp-sync
```

**BGP Sessions**:
```
show bgp summary
```

**Трассировка MPLS**:
```
traceroute mpls ipv4 10.255.255.2/32
```

## Операционные команды

### IS-IS Neighbors

Показать IS-IS adjacencies:
```
show isis neighbor
```

Вывод:
```
Area Circinus:
 System Id           Interface   L  State        Holdtime SNPA
 spine-1             eth1        2  Up            27       2020.2020.2020
```

Детали:
```
show isis neighbor detail
```

### IS-IS Database

Link State Database:
```
show isis database
```

Вывод:
```
Area Circinus:
IS-IS Level-1 Link State Database:
LSP ID                  PduLen  SeqNumber   Chksum  Holdtime  ATT/P/OL
router-1.00-00            142   0x00000005  0x1234    1195    0/0/0
router-2.00-00            156   0x00000003  0x5678    1189    0/0/0

IS-IS Level-2 Link State Database:
LSP ID                  PduLen  SeqNumber   Chksum  Holdtime  ATT/P/OL
router-1.00-00            178   0x00000008  0xabcd    1195    0/0/0
```

Детали конкретного LSP:
```
show isis database detail router-1.00-00
```

Level-specific:
```
show isis database level-1
show isis database level-2
```

### IS-IS Routes

IS-IS routing table:
```
show isis route
```

Вывод:
```
Area Circinus:
IS-IS paths to level-1 routers that speak IP
Vertex               Type         Metric Next-Hop             Interface Parent
192.168.255.2        IP internal  10     10.0.0.2             eth1      (null)
```

IPv4 routes:
```
show ip route isis
```

IPv6 routes:
```
show ipv6 route isis
```

### IS-IS Interface

Показать IS-IS интерфейсы:
```
show isis interface
```

Вывод:
```
Interface   Circuit  Type    Level   Metric
eth1        0x1      p2p     L1L2    10
lo          0x0      loopback L1L2   0
```

Детали интерфейса:
```
show isis interface detail
```

Конкретный интерфейс:
```
show isis interface eth1
```

### IS-IS Topology

Показать топологию:
```
show isis topology
```

Level-specific:
```
show isis topology level-1
show isis topology level-2
```

### IS-IS Summary

Общая информация:
```
show isis summary
```

Вывод:
```
VRF : default
Process Id      : 1
System Id       : 1921.6825.5001
Instance        : 0
IS-IS VRF       : default
Router ID       : 192.168.255.1
Hostname        : router-1
  Level-1-2 LSP MTU               : 1497 bytes
  Area address(es) :
          49.0001
```

### Clear ISIS

Restart IS-IS процесс:
```
restart isis
```

Clear neighbor adjacency (для re-forming):
```
clear isis neighbor
```

## Troubleshooting

### Neighbor не формируется

Проверьте:

1. **Layer 2 connectivity**:
   ```
   ping <neighbor-ip>
   ```

2. **NET configuration**:
   ```
   show isis summary
   ```

   Area ID должен совпадать для L1 neighbors.

3. **Circuit type** совпадает:
   ```
   show isis interface eth1
   ```

   L1 router не формирует adjacency с L2-only router.

4. **Authentication** совпадает:
   ```
   show isis interface detail
   ```

   Area password для L1, domain password для L2.

5. **Network type** совпадает:
   ```
   show isis interface
   ```

   Broadcast vs point-to-point.

6. **MTU** совпадает:
   ```
   show interfaces ethernet eth1
   ```

   IS-IS проверяет MTU в Hello PDU.

7. **Hello interval и multiplier**:
   ```
   show isis interface detail
   ```

### Neighbor в состоянии Init

**Init** означает роутер получает Hello, но не видит свой System ID в Hello от neighbor.

Проверьте:
- Двусторонняя Layer 2 connectivity
- Authentication правильная
- IS-IS enabled на интерфейсе neighbor

Debug:
```
monitor log
# Затем на другой сессии:
configure
set protocols isis log-adjacency-changes
commit
```

### Routes не появляются

Проверьте:

1. **Adjacency в состоянии Up**:
   ```
   show isis neighbor
   ```

2. **LSP в database**:
   ```
   show isis database
   ```

3. **Route в IS-IS RIB**:
   ```
   show isis route
   ```

4. **Route в IP routing table**:
   ```
   show ip route isis
   ```

5. **Level configuration**:

   L1 router не видит routes из L2.
   Убедитесь что есть L1/L2 router анонсирующий default в L1.

6. **Overload bit** не установлен:
   ```
   show isis database detail
   ```

   OL bit = 1 означает router в overload.

### High CPU usage

IS-IS SPF calculation частая.

1. **Проверьте флapping** интерфейсов:
   ```
   show interfaces
   ```

2. **Tune SPF timers**:
   ```
   set protocols isis spf-delay-ietf init-delay 100
   set protocols isis spf-delay-ietf short-delay 500
   set protocols isis spf-delay-ietf long-delay 5000
   set protocols isis spf-delay-ietf holddown 10000
   commit
   ```

3. **Используйте BFD** для fast failover вместо коротких hello intervals.

4. **Проверьте LSP flooding**:
   ```
   show isis database
   ```

   Высокие sequence numbers указывают на частые LSP updates.

### LSP Database не синхронизирован

1. **Проверьте MTU**:
   ```
   show interfaces ethernet eth1
   ```

   Если MTU не совпадает, large LSP могут не передаваться.

2. **Проверьте timers**:
   ```
   show isis summary
   ```

   LSP lifetime и refresh interval.

3. **Clear database** и подождите re-sync:
   ```
   restart isis
   ```

### Authentication errors

Log покажет authentication failures:
```
monitor log
```

Проверьте:
- Area password для L1 (на всех L1 neighbors)
- Domain password для L2 (на всех L2 neighbors)
- Interface password (на обоих ends link)
- Plaintext vs MD5 совпадает

### Routing loops

1. **Проверьте attached bit**:
   ```
   show isis database detail
   ```

   L1/L2 routers должны устанавливать ATT bit в L1 LSP.

2. **Проверьте metric** configuration:
   ```
   show isis interface
   ```

   Asymmetric metrics могут вызвать suboptimal routing.

3. **Проверьте redistribution**:
   ```
   show running-config protocols isis
   ```

   Mutual redistribution между IS-IS и другими протоколами может вызвать loops.

## Лучшие практики

### NET Design

1. **AFI 49** для private addressing
2. **System ID из loopback IP** для простоты
3. **Уникальный System ID** в пределах домена
4. **Area ID совпадает** для L1 neighbors в одной area

### Level Hierarchy

1. **L2 для backbone** (core routers)
2. **L1 для access/distribution** (edge routers)
3. **L1/L2 для boundaries** (border routers)
4. **Minimize L1/L2 routers** для упрощения

### Area Design

1. **Одна area** для small deployments (все L2)
2. **Multiple areas** для large deployments:
   - Core = L2 only
   - Distribution = L1/L2
   - Access = L1 only
3. **Area 49.0001** для datacenter fabric (один L2 domain)

### Interface Configuration

1. **Point-to-point** для direct links и VPN
2. **Passive** для loopback и server-facing интерфейсы
3. **Authentication** на всех production интерфейсах
4. **Metric** настраивать для traffic engineering

### Timers

1. **Default timers** достаточны для большинства deployments
2. **BFD** для sub-second failover вместо aggressive hello timers
3. **SPF timers** tune только при необходимости

### Authentication

1. **MD5 для area и domain passwords**
2. **Уникальные passwords** для разных areas/domains
3. **Regular password rotation**
4. **Interface passwords** для дополнительной защиты

### Scalability

1. **Metric style wide** для modern deployments
2. **Summarization** на L1/L2 boundaries
3. **Passive интерфейсы** для non-transit networks
4. **Minimal redistribution** - используйте BGP для external routes

### Monitoring

1. **Log adjacency changes**:
   ```
   set protocols isis log-adjacency-changes
   ```

2. **Monitor neighbors**:
   ```
   show isis neighbor
   ```

3. **Monitor database size**:
   ```
   show isis database
   ```

4. **Monitor BFD sessions**:
   ```
   show bfd peers
   ```

### Datacenter Fabric

1. **L2 only** (single area)
2. **Point-to-point** все links
3. **BFD enabled** для fast failover
4. **ECMP** для load balancing (автоматически с equal cost paths)
5. **Metric** одинаковые на всех links для symmetric ECMP

## Безопасность

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

1. **MD5 Authentication**:
   ```
   set protocols isis domain-password md5 'SecurePassword123!'
   set protocols isis area-password md5 'AreaPassword123!'
   ```

2. **Interface passwords**:
   ```
   set protocols isis interface eth1 password plaintext-password 'HelloSecret'
   ```

3. **Passive интерфейсы**:
   ```
   set protocols isis interface eth2 passive
   ```

4. **Firewall для IS-IS** (multicast 01:80:C2:00:00:14, 01:80:C2:00:00:15):

   IS-IS работает на Layer 2, firewall должен разрешить:
   - All-IS multicast (L1): 01:80:C2:00:00:14
   - All-L2-IS multicast (L2): 01:80:C2:00:00:15

5. **Limit IS-IS interfaces** к trusted links only:

   Не включайте IS-IS на untrusted/external интерфейсах.

6. **Log adjacency changes**:
   ```
   set protocols isis log-adjacency-changes
   ```

7. **Overload bit** при maintenance:
   ```
   set protocols isis overload-bit
   commit
   ```

## Производительность

### Optimization

1. **Metric style wide**:
   ```
   set protocols isis metric-style wide
   commit
   ```

2. **SPF optimization** для нестабильных сетей:
   ```
   set protocols isis spf-delay-ietf init-delay 100
   set protocols isis spf-delay-ietf short-delay 500
   set protocols isis spf-delay-ietf long-delay 5000
   commit
   ```

3. **BFD** для fast failover:
   ```
   set protocols isis interface eth1 bfd
   commit
   ```

4. **Passive interfaces** для уменьшения overhead:
   ```
   set protocols isis interface lo passive
   set protocols isis interface eth2 passive
   commit
   ```

5. **LSP refresh optimization**:
   ```
   set protocols isis lsp-refresh-interval level-2 900
   commit
   ```

## Сравнение с другими протоколами

### IS-IS vs OSPF

| Характеристика | IS-IS | OSPF |
|---------------|-------|------|
| Уровень работы | Layer 2 | Layer 3 (IP) |
| Иерархия | L1/L2 (flexible) | Areas + mandatory Area 0 |
| IPv4 и IPv6 | Один процесс | Отдельные процессы (OSPFv2/v3) |
| Метрика | Arbitrary (default 10) | Cost (bandwidth-based) |
| Конвергенция | Быстрая | Быстрая |
| Масштабируемость | Лучше | Хорошая |
| Сложность | Выше (OSI терминология) | Средняя |
| Распространение | ISP, DC | Enterprise |
| Address overhead | Меньше | Больше |

### IS-IS vs EIGRP

**IS-IS** - открытый стандарт, link-state.
**EIGRP** - Cisco proprietary (теперь открыт), advanced distance-vector.

IS-IS предпочтительнее в multi-vendor средах.

### Когда использовать IS-IS

**Используйте IS-IS**:
- ISP backbone
- Datacenter leaf-spine fabric
- MPLS core
- Large-scale networks
- Dual-stack IPv4/IPv6
- Multi-vendor environment

**Используйте OSPF**:
- Enterprise campus
- Small to medium networks
- Legacy integrations
- Проще для администраторов

**Используйте BGP**:
- External routing (Internet)
- Multi-homing
- Policy-based routing

Часто IS-IS и BGP используются вместе: IS-IS для IGP, BGP для external/customer routes.

## Следующие шаги

- [BGP](/docs/vyos/routing/vyos-bgp/) - для external routing и customer routes
- [OSPF](/docs/vyos/routing/vyos-ospf/) - альтернативный IGP
- [Static Routes](/docs/vyos/routing/vyos-static/) - backup для IGP
- [MPLS](/docs/vyos/routing/vyos-mpls/) - для MPLS VPN
- [BFD](/docs/vyos/routing/vyos-bfd/) - быстрое обнаружение отказов

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

- [VyOS IS-IS Documentation](https://docs.vyos.io/en/latest/configuration/protocols/isis.html)
- [ISO 10589 Standard](https://www.iso.org/standard/30932.html)
- [RFC 1142 - OSI IS-IS Intra-domain Routing Protocol](https://tools.ietf.org/html/rfc1142)
- [RFC 5308 - Routing IPv6 with IS-IS](https://tools.ietf.org/html/rfc5308)
- [FRRouting IS-IS](https://docs.frrouting.org/en/latest/isisd.html)

