Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

IS-IS (intermediate system to intermediate system) — протокол динамической маршрутизации, любимый в операторах и незаслуженно забытый в Enterprise сегменте, относится к типу IGP (interior gateway protocol) и используется для передачи маршрутной информации внутри автономных систем. Наряду со своим главным конкурентом, OSPF, представляет класс Link-State протоколов, позволяющих маршрутизаторам иметь представление обо всей топологии домена маршрутизации и использующий тот же алгоритм Дейкстры для поиска кратчайшего пути.

Изначально разработанный отважными инженерами в темных кабинетах DEC для маршрутизации в стеке OSI (rfc1142), впоследствии был расширен и интегрирован в TCP/IP получив название Integrated IS-IS (rfc1195)

Из модели OSI протокол наследовал формат адресации и некоторую терминологию:

CLNP (Connectionless-mode Network Protocol) - протокол сетевого уровня OSI, описывающий услуги предоставляемые транспортному уровню, имеет функционал схожий с IP из стека TCP/IP.

NSAP (Network service access point) - тип адресации на сетевом уровне OSI.

NET (Network Entity Title) — частный случай NSAP, используется для уникальной идентификации маршрутизатора IS-IS. Чуть позже поговорим о нем подробнее.

IS (Intermediate System) - маршрутизирующие устройства.

ES (End System) — оконечные устройства.

IS-IS поддерживает иерархию домена маршрутизации, предоставляя возможность разделения топологии на отдельные зоны, при этом, в отличии от area 0 в OSPF, нумерация зон в IS-IS не играет никакой роли. Границами зон являются не маршрутизаторы, а линки между ними. Маршрутизаторы IS-IS могут принадлежать только одной зоне.

Роли маршрутизаторов определяются уровнями их взаимодействия и имеют варианты:

L1 - знают маршруты только внутри своей зоны (аналог тупиковой зоны OSPF).

L2 - знают маршруты всего домена (аналог backbone OSPF).

L1/L2 - знают маршруты своей зоны и маршруты между зонами (аналог ABR в OSPF)

L1 и L2 оперируют разными базами данных и не могут устанавливать соседства, L1 знает только о маршрутах в своей зоне, чтобы попасть в другую зону трафик направляется к L1/L2, который имеет обе базы.

В зависимости от роли, маршрутизаторы действуют следующим образом:

L1-маршрутизатор:

-пакеты для других зон отправляются ближайшему L1/L2 маршрутизатору. (по аналогии с default route, ближайший сосед выбирается на основе стоимости маршрута до него)

-пакеты для своей зоны отправляются согласно маршрутам в L1-базе

L1/L2-маршрутизатор:

-пакеты для других зон отправляются согласно маршрутам в L2-базе

-пакеты для собственной зоны отправляются согласно L1-базе

-приоритет маршрутов в L1-базе выше, чем в L2

Еще немного про дизайн

Говоря об уровнях взаимодействия, мы подразумеваем базы данных, которыми оперируют маршрутизаторы, в том числе для установления соседства между собой. Другими словами L1 маршрутизатор не сможет установить соседство с L2-only маршрутизатором по причине отсутствия «точек соприкосновения» в виде баз одного уровня.

Возьмем такую топологию:


Конфиги коммутаторов:

 sw1

sw1#sh run

vlan database

vlan 10,30

exit

!

hostname sw1

!

interface gigabitethernet1/0/1

switchport mode trunk

switchport trunk allowed vlan add 10

exit

!

interface gigabitethernet1/0/2

switchport mode trunk

switchport trunk allowed vlan add 30

exit

!

interface vlan 10

ip address 10.0.0.1 255.255.255.252

ip router isis

exit

!

interface vlan 30

ip address 10.0.0.9 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 1.1.1.1 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

is-type level-2-only

address-family ipv4 unicast

redistribute connected

exit

net 49.0002.0010.0100.1001.00

exit

!

!

end

 sw2

sw2#sh run


vlan database


vlan 10,20


exit


!


hostname sw2


!


interface gigabitethernet1/0/1


switchport mode trunk


switchport trunk allowed vlan add 20


exit


!


interface gigabitethernet1/0/2


switchport mode trunk


switchport trunk allowed vlan add 10


exit


!


interface vlan 10


ip address 10.0.0.2 255.255.255.252


ip router isis


exit


!


interface vlan 20


ip address 10.0.0.5 255.255.255.252


ip router isis


exit


!


interface loopback 1


ip address 2.2.2.2 255.255.255.255


ip router isis


isis passive-interface


exit


!


!


router isis


address-family ipv4 unicast


redistribute connected


exit


net 49.0001.0020.0200.2002.00


exit


!


!


end

 sw3

sw3#sh run

vlan database

vlan 20

exit

!

hostname sw3

!

interface gigabitethernet1/0/2

switchport mode trunk

switchport trunk allowed vlan add 20

exit

!

interface vlan 20

ip address 10.0.0.6 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 3.3.3.3 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

is-type level-1

address-family ipv4 unicast

redistribute connected

exit

net 49.0001.0030.0300.3003.00

exit

!

!

end

 sw4

sw4#sh run

vlan database

vlan 30,40

exit

!

hostname sw4

!

interface gigabitethernet1/0/1

switchport mode trunk

switchport trunk allowed vlan add 30

exit

!

interface gigabitethernet1/0/2

switchport mode trunk

switchport trunk allowed vlan add 40

exit

!

interface vlan 30

ip address 10.0.0.10 255.255.255.252

ip router isis

exit

!

interface vlan 40

ip address 10.0.0.13 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 4.4.4.4 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

address-family ipv4 unicast

redistribute connected

exit

net 49.0003.e0d9.e3e1.3780.00

exit

!

!

end

 sw5

sw5#sh run

vlan database

vlan 40

exit

!

hostname sw5

!

interface gigabitethernet1/0/1

switchport mode trunk

switchport trunk allowed vlan add 40

exit

!

interface vlan 40

ip address 10.0.0.14 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 5.5.5.5 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

is-type level-1

address-family ipv4 unicast

redistribute connected

exit

net 49.0003.0050.0500.5005.00

exit

!

!

end

В выводе команды show isis neighbors коммутатора sw1, имеющего роль L2, мы видим LSDB только L2 уровня:

sw1#sh isis database

IS-IS Level-1 Link State Database:


LSPID LSP Seq Num LSP Checksum LSP Holdtime (s) ATT/P/OL

---------------------- ------------- -------------- ------------------ ----------


IS-IS Level-2 Link State Database:


LSPID LSP Seq Num LSP Checksum LSP Holdtime (s) ATT/P/OL

---------------------- ------------- -------------- ------------------ ----------

sw1.00-00 0x00000008 0x000069d4 1090 0/0/0

sw1.00-01 0x00000009 0x0000ec3b 1088 0/0/0

sw1.00-02 0x00000013 0x0000ce06 1157 0/0/0

sw2.00-00 0x00000007 0x0000f825 456 0/0/0

sw2.00-03 0x00000007 0x000014f1 491 0/0/0

sw2.00-04 0x0000000d 0x0000d814 1195 0/0/0

sw2.01-00 0x00000005 0x0000770d 599 0/0/0

sw4.00-00 0x0000000d 0x00009d84 830 0/0/0

sw4.00-05 0x0000000a 0x000004f6 927 0/0/0

sw4.00-06 0x0000000c 0x0000d6f0 1117 0/0/0

sw4.01-00 0x00000008 0x0000b0f4 618 0/0/0



на sw3, с ролью L1, будет только L1 LSDB:

sw3#sh isis database

IS-IS Level-1 Link State Database:


LSPID LSP Seq Num LSP Checksum LSP Holdtime (s) ATT/P/OL

---------------------- ------------- -------------- ------------------ ----------

sw2.00-00 0x00000008 0x0000fe16 1054 1/0/0

sw2.00-03 0x00000006 0x0000887d 585 0/0/0

sw2.00-04 0x0000000c 0x00001099 432 0/0/0

sw3.00-00 0x0000000a 0x00008c6e 733 0/0/0

sw3.00-03 0x00000005 0x00002abb 876 0/0/0

sw3.00-04 0x00000007 0x000050a7 885 0/0/0

sw3.01-00 0x00000005 0x0000d407 716 0/0/0


IS-IS Level-2 Link State Database:


LSPID LSP Seq Num LSP Checksum LSP Holdtime (s) ATT/P/OL

---------------------- ------------- -------------- ------------------ ----------


ну и логично, что на sw2 будут обе базы.

Посмотрим таблицу маршрутизации на sw2:

sw2#show ip route isis

Maximum Parallel Paths: 1 (1 after reset)

Load balancing: src-dst-mac-ip

IP Forwarding: enabled

Codes: * - failed to install, > - best, C - connected, S - static,

R - RIP,

O - OSPF intra-area, OIA - OSPF inter-area,

OE1 - OSPF external 1, OE2 - OSPF external 2,

B - BGP, i - IS-IS, L1 - IS-IS level-1,

L2 - IS-IS level-2, ia - IS-IS inter area

P - PBR

[d/m]: d - route's distance, m - route's metric


i L2 1.1.1.1/32 [116/20] via 10.0.0.1, 00:04:42, vlan 10

i L1 3.3.3.3/32 [115/20] via 10.0.0.6, 01:37:34, vlan 20

i L2 4.4.4.4/32 [116/30] via 10.0.0.1, 00:01:18, vlan 10

i L2 5.5.5.5/32 [116/40] via 10.0.0.1, 00:01:18, vlan 10

i L2 10.0.0.8/30 [116/20] via 10.0.0.1, 00:01:18, vlan 10

i L2 10.0.0.12/30 [116/30] via 10.0.0.1, 00:01:18, vlan 10


Здесь 10.0.0.1 - это адрес sw1 для линковой сети sw1-sw2.


Теперь соединим sw2 напрямую с sw4.

Вот так:


Включаем IS-IS на новом линке, видим установленное соседство:

sw2#sh isis neighbors


System Id Interface Type SNPA State Holdtime (s) Circuit Id

---------------- ------------- ------ ---------------- ------- -------------- -------------------

sw1 vlan 10 L2 e0d9.e3a1.2240 Up 28 sw2.01

sw3 vlan 20 L1 ecb1.e065.ea00 Up 9 sw3.01

sw4 vlan 50 L2 e0d9.e3e1.3780 Up 28 sw2.03


и next-hop в sw4 для маршрутов в area 3:

sw2#sh ip ro is

Maximum Parallel Paths: 1 (1 after reset)

Load balancing: src-dst-mac-ip

IP Forwarding: enabled

Codes: * - failed to install, > - best, C - connected, S - static,

R - RIP,

O - OSPF intra-area, OIA - OSPF inter-area,

OE1 - OSPF external 1, OE2 - OSPF external 2,

B - BGP, i - IS-IS, L1 - IS-IS level-1,

L2 - IS-IS level-2, ia - IS-IS inter area

P - PBR

[d/m]: d - route's distance, m - route's metric


i L2 1.1.1.1/32 [116/20] via 10.0.0.1, 00:12:27, vlan 10

i L1 3.3.3.3/32 [115/20] via 10.0.0.6, 01:45:19, vlan 20

i L2 4.4.4.4/32 [116/20] via 10.0.0.18, 00:02:42, vlan 50

i L2 5.5.5.5/32 [116/30] via 10.0.0.18, 00:02:42, vlan 50

i L2 10.0.0.8/30 [116/20] via 10.0.0.1, 00:02:42, vlan 10

i L2 10.0.0.12/30 [116/20] via 10.0.0.18, 00:02:42, vlan 50


То есть связность между area 1 и area 3 появилась в обход sw1 из area 2, имеющего роль L2-only и выполняющего функционал backbone’а.

Более того, мы можем вообще исключить L2-only из топологии, положив интерфейсы gi1/0/2 sw2 и gi1/0/1 sw4 и для маршрутов между area 1 и area 3 ничего не изменится. Коммутаторы sw3 и sw5 даже пересчитывать SPF не будут, так как имеют роль L1 и кроме дефолта в L1/L2 ничего хорошего в их жизни таблице маршрутизации нет.

Зачем нужен такой backbone?

Поменяем нашу схему, увеличив ее до 10 зон и уберем L2-only. Для передачи маршрутной информации между зонами все пограничные маршрутизаторы имеют роль L1/L2.

не самая красивая топология с точки зрения отказоустойчивости и утилизации линков.

Для решения этих проблем было бы неплохо организовать полносвязную топологию:

Full-Mesh это хорошо, но дорого. И пересчет маршрутов от stub сетей включенных в L1-маршрутизаторы каждой зоны будет сильно нагружать все L1/L2.

Так лучше.

Best practice при разделении домена IS-IS на зоны считается использование backbone в качестве ядра, с минимизацией дорогих и толстых линков и суммаризацией маршрутов от других зон на L2-only роутерах. Для этого backbone и нужен.


Network Entity Title

Он же NET, является уникальным идентификатором маршрутизатора в домене IS-IS.

Имеет следующий формат:

и состоит из нескольких частей:

AFI (Authority and Format Identifier) - определяет класс адреса NET, в современных реализациях IS-IS это поле всегда равно 49.

Area ID - здесь указывается номер зоны.

System ID - идентификатор маршрутизатора, это поле делает NET уникальным.

SEL (Network Selector) - определяет подтип NSAP (Network service access point), поле всегда должно быть равно 00, именно это значение делает NET из NSAP.

Формат записи NET - xx.xxxx.xxxx.xxxx.xxxx.xx. Как стало понятно, вариации NET возможны за счет двух полей Area ID и System ID. И если с первым все понятно, по второму стоит пояснить.

Поле System ID имеет длину в 6 байт и состоит из 12 шестнадцатеричных символов. Прямо как mac-адрес. Иногда его указывают в качестве System ID и тогда адрес NET выглядит примерно так: 49.0001.e0d9.e3e1.3780.00

Но ни кто не любит шестнадцатеричную систему более популярным является использование IP-адреса в качестве System ID. Берется адрес, например, 192.168.1.1, дополняется нулями в каждом октете до полного адреса 192.168.001.001, после чего разделяется точками через каждые четыре символа как требует формат System ID -1921.6800.1001.

К примеру, маршрутизатор с loopback 10.10.10.10/32 работающий в area 1 может иметь NET 49.0001.0100.1001.0010.00. Теперь стало понятнее.

Типы сообщений IS-IS

Маршрутизатор IS-IS может генерировать 9 типов сообщений, которые называются так:

  • Level 1 LAN Hello (тип 15)
  • Level 2 LAN Hello (тип 16)
  • Point-to-point Hello (тип 17)
  • Level 1 LSP (тип 18)
  • Level 2 LSP (тип 20)
  • Level 1 CSNP (тип 24)
  • Level 2 CSNP (тип 25)
  • Level 1 PSNP (тип 26)
  • Level 2 PSNP (тип 27)

Первые три требуются для установления и поддержания соседства. Level 1 LAN Hello и Level 2 LAN Hello нужны для соседства разного уровня и используются на широковещательных линках. Point-to-point Hello, как понятно из названия, на p2p линках. Hello пакеты отправляются на мультикастовые mac-адреса, для Level 1 LAN Hello это 01:80:c2:00:00:14, для Level 2 LAN Hello — 01:80:c2:00:00:15, и P2P Hello — 09:00:2b:00:00:05 для поиска маршрутизаторов обоих уровней, аналог 224.0.0.2 в IP.

Level 1 LSP и Level 2 LSP пакеты описывают топологию сети, содержат информацию о самих маршрутизаторах, их соседях, префиксах и метриках. Генерируются маршрутизаторами в зависимости от уровня соседства.

CSNP (Complete Sequence Number PDU) - содержит описание всех LSP маршрутизатора, периодически отправляется всеми маршрутизаторами и используется для синхронизации LSDB.

PSNP (Partial Sequence Number PDU) - аналог Link State Request в OSPF, является запросом к соседям на получение LSP о неизвестных префиксах, так же используется для подтверждения их получения.

Как и другие пакеты IS-IS, CSNP и PSNP генерируются маршрутизаторами на разных уровнях, в зависимости от установленного соседства.

Формат заголовка



Заголовок сообщений IS-IS выглядит следующим образом:

Состоит из нескольких частей. Синим цветом выделена фиксированная часть, она одинакова для всех типов сообщений. Часть PDU Specific fields содержит специфичные для каждого типа сообщения поля и определяется в поле PDU Type.

TLV section - здесь содержатся те самые Type/Length/Value, делающие IS-IS таким гибким. Каждый TLV представляет собой объект с атрибутами: Type - определяющей тип данных передаваемых PDU, Length - размер данных, Value - сами данные. Фактически для расширения протокола требуется только стандартизация нового типа TLV (угадайте, какой протокол первым получил поддержку IPv6?). В одном LSP могут передаваться несколько TLV различных типов.

Типы TLV поддерживаемые IS-IS:

  • TLV1 - Area address.
  • TLV2 - IS reachability.
  • TLV6 - IS neighbors.
  • TLV8 - Padding TLV.
  • TLV9 - LSP entries
  • TLV10 - Authentication.
  • TLV22 - Extented IS reachability.
  • TLV128 - IP internal reachability.
  • TLV129 - Protocols supported.
  • TLV130 - IP external reachability.
  • TLV132 - IP interface addresses.
  • TLV134 - TE IP router ID.
  • TLV135 - Extended IP reachability.
  • TLV137 - Dynamic hostname resolution.
  • TLV222 - Multiple topology IS reachability.
  • TLV229 - Multiple topologies supported.
  • TLV232 - IPv6 interface address.
  • TLV235 - Multiple topology IP reachability.
  • TLV236 - IPv6 reachability.
  • TLV237 - Multiple topology Reachable IPv6 TLV.
поднимите руки, кто не помнит типы LSA OSPF.


Давайте попробуем это все настроить.

Для начала настроем IS-IS на двух коммутаторах и посмотрим на установление соседства.

Схема будет такой:


Коммутаторы имеют роль L2-only, анонсировать будут адреса loopback’ов.

Настроем базовую IP связность:

sw1:

console#conf

console(config)#host sw1

sw1(config)#int vl10

sw1(config-if)#ip add 10.0.0.1 /30

sw1(config-if)#int lo1

sw1(config-if)#ip add 1.1.1.1 /32

sw1(config-if)#int gi1/0/1

sw1(config-if)#sw m t

sw1(config-if)#sw t al vl ad 10


sw2:

console#conf

console(config)#host sw2

sw2(config)#int vl10

sw2(config-if)#ip add 10.0.0.2 /30

sw2(config-if)#int lo1

sw2(config-if)#ip add 2.2.2.2 /32

sw2(config-if)#int gi1/0/1

sw2(config-if)#sw m t

sw2(config-if)#sw t al vl ad 10


Теперь IS-IS:

sw1:

sw1(config)#ip prefix-list dc-to-isis permit 1.1.1.1/32 <---для примера создадим префикс лист, фильтрующий адреса loopback интерфейса.

sw1(config)#router isis <---включаем процесс IS-IS

sw1(router-isis)#net 49.0000.0010.0100.1001.00 <---настраиваем адрес net

sw1(router-isis)#is-type level-2-only <---устанавливаем роль, по умолчанию коммутатор имеет роль L1/L2 и пытается установить соседство на обоих уровнях, при изменении роли все IS-IS сессии сбрасываются.

This action will reset all neighbor connections and clear IS-IS routing table.

Would you like to continue? (Y/N)[N] Y

sw1(router-isis)#shutdown <--- и пока выключим процесс

sw1(router-isis)#address-family ipv4 unicast <---указываем тип address family и переходим к ее конфигурации

sw1(router-isis-af)#redistribute connected filter-list dc-to-isis <---включаем редистрибьюцию connected сетей в IS-IS, попадающих под указанный префикс-лист

sw1(router-isis-af)#exit

sw1(router-isis)#interface Loopback 1

sw1(config-if)#ip router isis <---включаем IS-IS на интерфейсе.

sw1(config-if)#isis passive-interface <---указываем режим passive, чтобы с этого интерфейса IS-IS не пытался устанавливать соседство.

sw1(config)#interface vlan 10

sw1(config-if)#ip router isis

на sw2 аналогичная конфигурация:

sw2(config)#ip prefix-list dc-to-isis permit 2.2.2.2/32

sw2(config)#router isis

sw2(router-isis)#net 49.0000.0020.0200.2002.00

sw2(router-isis)#is-type level-2-only

This action will reset all neighbor connections and clear IS-IS routing table.

Would you like to continue? (Y/N)[N] Y

sw2(router-isis)#shut

sw2(router-isis)#address-family ipv4 unicast

sw2(router-isis-af)#redistribute connected filter-list dc-to-isis

sw2(router-isis-af)#ex

sw2(router-isis)#interface lo1

sw2(config-if)#ip router isis

sw2(config-if)#isis passive-interface

sw2(config-if)#interface vl10

sw2(config-if)#ip router isis


На этом базовая настройка завершена. Поднимаем процессы IS-IS и готовим wireshark.

После включения процесса коммутатор начинает отправлять Hello сообщения:


в которых, помимо прочего, мы видим поля:

PDU Type: L2 HELLO - тип сообщения

Circuit type: Level 2 only - устанавливаемый уровень соседства

System ID: 0010.0100.1001 - идентификатор отправителя сообщения

NLPID: IP - поддерживаемый протокол

Area address: 49.0000 - номер зоны

IPv4 interface address: 10.0.0.1 — адрес интерфейса, с которого устанавливается соседство

Здесь заметно еще одно наследие модели OSI - IS-IS не использует транспорт IP, инкапсулируется сразу в Ethernet.

Коммутатор, получив сообщение Hello, добавляет mac-адрес его отправителя в поле IS Neighbor и направляет Hello в ответ:

Тоже самое делает и второй коммутатор:

Получив сообщение Hello, IS-IS переводит соседство из состояния Down в Initializing, означающее, что он "знает" о наличии сеседа, но не уверен, что сосед "знает" о нем. А после получения Hello со своим mac-адресом в поле IS Neighbor, IS-IS считает двусторонее взаимодействие между коммутаторами установленным и переводит соседство в состояние Up.

Да, так просто, всего три состояния:

Об установлении соседства свидетельствует сообщение в логах :%ISIS-I-ADJCHANGE: Adjacency to 0020.0200.2002 (vlan 10) (level-2) up


После чего в таблице маршрутизации sw1 мы увидим маршрут к loopback sw2, полученный по IS-IS:

sw1#sh ip route

Maximum Parallel Paths: 1 (1 after reset)

Load balancing: src-dst-mac-ip

IP Forwarding: enabled

Codes: * - failed to install, > - best, C - connected, S - static,

R - RIP,

O - OSPF intra-area, OIA - OSPF inter-area,

OE1 - OSPF external 1, OE2 - OSPF external 2,

B - BGP, i - IS-IS, L1 - IS-IS level-1,

L2 - IS-IS level-2, ia - IS-IS inter area

P - PBR

[d/m]: d - route's distance, m - route's metric


C 1.1.1.1/32 is directly connected, loopback 1

i L2 2.2.2.2/32 [116/20] via 10.0.0.2, 00:58:25, vlan 10

C 10.0.0.0/30 is directly connected, vlan 10



Добавим в нашу топологию еще несколько коммутаторов с разными ролями и вынесем L2 в отдельную зону:

Конфиги коммутаторов:

 sw1

sw1#sh run

vlan database

vlan 10

exit

!

hostname sw1

!

interface gigabitethernet1/0/1

description to-sw2

switchport mode trunk

switchport trunk allowed vlan add 10

exit

!

interface vlan 10

ip address 10.0.0.1 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 1.1.1.1 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

is-type level-1

address-family ipv4 unicast

redistribute connected

exit

net 49.0000.0010.0100.1001.00

exit

!

!

end

 sw2

sw2#sh run

vlan database

vlan 10,20

exit

!

hostname sw2

!

interface gigabitethernet1/0/1

description to-sw3

switchport mode trunk

switchport trunk allowed vlan add 20

exit

!

interface gigabitethernet1/0/2

description to-sw1

switchport mode trunk

switchport trunk allowed vlan add 10

exit

!

interface vlan 10

ip address 10.0.0.2 255.255.255.252

ip router isis

exit

!

interface vlan 20

ip address 10.0.0.5 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 2.2.2.2 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

address-family ipv4 unicast

redistribute connected

exit

net 49.0000.0020.0200.2002.00

exit

!

!

end

 sw3

sw3#sh run

vlan database

vlan 20,30

exit

!

hostname sw3

!

interface gigabitethernet1/0/1

description to-sw4

switchport mode trunk

switchport trunk allowed vlan add 30

exit

!

interface gigabitethernet1/0/2

description to-sw2

switchport mode trunk

switchport trunk allowed vlan add 20

exit

!

interface vlan 20

ip address 10.0.0.6 255.255.255.252

ip router isis

exit

!

interface vlan 30

ip address 10.0.0.9 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 3.3.3.3 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

address-family ipv4 unicast

redistribute connected

exit

net 49.0000.0030.0300.3003.00

exit

!

!

end

 sw4

sw4#sh run

vlan database

vlan 30

exit

!

hostname sw4

!

interface gigabitethernet1/0/2

description to-sw3

switchport mode trunk

switchport trunk allowed vlan add 30

exit

!

interface vlan 30

ip address 10.0.0.10 255.255.255.252

ip router isis

exit

!

interface loopback 1

ip address 4.4.4.4 255.255.255.255

ip router isis

isis passive-interface

exit

!

!

router isis

is-type level-2-only

address-family ipv4 unicast

redistribute connected

exit

net 49.0001.0040.0400.4004.00

exit

!

!

end

Коммутатор sw4, имея роль L2-only, устанавливает соседство с sw3 с ролью L1/L2 на втором уровне:

sw4#sh is nei


System Id         Interface     Type       SNPA        State     Holdtime (s)    Circuit Id

---------------- ------------- ------ ---------------- ------- -------------- -------------------

sw3               vlan 30        L2    e0d9.e3a1.2240    Up        29              sw4.01




Соответственно sw1 с ролью L1 устанавливает соседство с sw2 на первом уровне:

sw1#sh is nei


System Id         Interface     Type       SNPA        State     Holdtime (s)    Circuit Id

---------------- ------------- ------ ---------------- ------- -------------- -------------------

sw2               vlan 10        L1    e0d9.e3e1.3780    Up        9              sw2.01


При этом между sw2 и sw3 устанавливаются два соседства, так как оба коммутатора имеют роли L1/L2 и держат LSDB обоих уровней:

sw2#sh is nei

System Id         Interface     Type       SNPA         State    Holdtime (s)    Circuit Id
---------------- ------------- ------ ---------------- ------- -------------- -------------------
sw1               vlan 10        L1    6813.e289.7500    Up        28              sw2.01
sw3               vlan 20        L1    e0d9.e3a1.2240    Up        28              sw2.02
sw3               vlan 20        L2    e0d9.e3a1.2240    Up        28              sw2.02

Мы можем явно задать уровень соседства между L1/L2 коммутаторами опцией circuit-type в режиме конфигурации интерфейса:

sw2(config)#interface vlan 20

sw2(config-if)#isis circuit-type

  level-1 Level-1 only adjacencies are formed

  level-2-only Level-2 only adjacencies are formed

  level-1-2 Level-1-2 adjacencies are formed


Посмотрим таблицы маршрутизации sw4 и sw1.

sw4#sh ip ro is

Maximum Parallel Paths: 1 (1 after reset)

Load balancing: src-dst-mac-ip

IP Forwarding: enabled

Codes: * - failed to install, > - best, C - connected, S - static,

R - RIP,

O - OSPF intra-area, OIA - OSPF inter-area,

OE1 - OSPF external 1, OE2 - OSPF external 2,

B - BGP, i - IS-IS, L1 - IS-IS level-1,

L2 - IS-IS level-2, ia - IS-IS inter area

P - PBR

[d/m]: d - route's distance, m - route's metric


i L2 1.1.1.1/32 [116/40] via 10.0.0.9, 00:04:40, vlan 30

i L2 2.2.2.2/32 [116/30] via 10.0.0.9, 00:04:40, vlan 30

i L2 3.3.3.3/32 [116/20] via 10.0.0.9, 00:04:40, vlan 30

i L2 10.0.0.0/30 [116/30] via 10.0.0.9, 00:04:40, vlan 30

i L2 10.0.0.4/30 [116/20] via 10.0.0.9, 00:04:40, vlan 30


sw4 получает все префиксы, так как, имеет роль L2.

А вот sw1, с ролью L1, кроме connected сетей своей зоны ничего не знает:

sw1#sh ip route i

Maximum Parallel Paths: 1 (1 after reset)

Load balancing: src-dst-mac-ip

IP Forwarding: enabled

Codes: * - failed to install, > - best, C - connected, S - static,

R - RIP,

O - OSPF intra-area, OIA - OSPF inter-area,

OE1 - OSPF external 1, OE2 - OSPF external 2,

B - BGP, i - IS-IS, L1 - IS-IS level-1,

L2 - IS-IS level-2, ia - IS-IS inter area

P - PBR

[d/m]: d - route's distance, m - route's metric


i L1 0.0.0.0/0 [115/10] via 10.0.0.2, 00:16:57, vlan 10

i L1 2.2.2.2/32 [115/20] via 10.0.0.2, 00:16:57, vlan 10

i L1 3.3.3.3/32 [115/30] via 10.0.0.2, 00:16:45, vlan 10

i L1 10.0.0.4/30 [115/20] via 10.0.0.2, 00:16:57, vlan 10

i L1 10.0.0.8/30 [115/30] via 10.0.0.2, 00:16:45, vlan 10


и чтобы попасть в другую зону из stub сети включенной в sw1, пакет будет отправлен по дефолтному маршруту на L1/L2. То есть в этом случае логика IS-IS перестает быть Link-State и становится Distance-Vector.


Стоит пояснить некоторые моменты касаемо LSDB IS-IS.

В первом примере с двумя коммутаторами мы видим LSDB только Level-2, так как в конфигурации IS-IS задана роль is-type level-2-only. Выше обсуждалось, что по умолчанию коммутаторы имеют роль L1/L2 и хранят базы обоих уровней:

при этом если задать уровень соседства на линке между коммутаторами опцией isis circuit-type в режиме конфигурации интерфейса, коммутатор будет хранить базы уровней определяемые его ролью, но наполнять их в соответствии с установленным уровнем соседства.

К примеру коммутатор с ролью L1/L2 и настроенным на линке isis circuit-type level-2-only имеет LSDB такого вида:

как можно заметить в LSDB L1, находятся только LSP генерируемые самим коммутатором.

Отдельно остановимся на LSPID. Состоит он из трех частей:

1. Source ID — в это поле подставляется идентификатор маршрутизатора, сгенерировавшего LSP.

2. Pseudonode ID — определяет тип LSP, относительно маршрутизатора его сгенерировавшего.

3. LSP number — номер LSP, используется если топология передается в нескольких фрагментах LSP.

Теперь чуть подробнее.

В поле source id мы видим hostname маршрутизатора, а не его system id. Это возможно благодаря наличию TLV Type 137, в котором маршрутизатор и передает свой hostname:

В нашем примере поле pseudonode ID принимает значения 00 и 01.

LSP с pseudonode ID 00 содержат TLV, которые мы обсуждали ранее, они описывают топологию домена с точки зрения каждого конкретного маршрутизатора.

Отличные от 00 pseudonode ID генерируются маршрутизаторами являющимися DIS (Designated Intermediate System), это что-то вроде аналога DR в OSPF, специального маршрутизатора выбирающегося в широковещательных сегментах и используемого для оптимизации соседств. Такие LSP используются только в широковещательных сегментах и описывают подключенные к этому сегменту маршрутизаторы.

DIS является sw2, который сгенерировал один LSP sw2.01-00, так как включен только в один широковещательный сегмент.

Поменяем тип интерфейсов, с которых коммутаторы устанавливают соседства, на p2p. Для этого включим опцию isis network point-to-point в режиме конфигурации интерфейса:

Как видим сбрасываются все, установленные с этого интерфейса, соседства, а коммутатор выставляет Holdtime равный 0 для этой LSP. При этом содержимое LSP удаляется сразу, однако ее заголовок будет еще храниться в течение некоторого периода. Этот период называется Zero Age Lifetime и равен 60 секундам.


Так же в каждом LSP присутствуют флаги ATT/P/OL.

ATT - attached bit, выставляется в LSP, генерируемые L1/L2 роутерами и означает, что роутер имеет соседство уровня L2. Используется для обозначения «точки выхода» из зоны для stub-сетей за L1 роутерами.

P — не используется, всегда равен 0.

OL — overload, используется для обозначения невозможности передачи транзитного трафика для префиксов в LSP, в этих случаях выставляется в 1.

Тюнинг протокола.

В отличии от OSPF, метрика IS-IS не рассчитывается на основании пропускной способности интерфейса и по умолчанию для всех интерфейсов равна 10.

К примеру в таблице маршрутизации мы видим, полученный по IS-IS, маршрут к адресу loopback интерфейса соседа с суммарной метрикой — 20:

Установим на интерфейсе vlan 10 метрику 1000 и еще раз посмотрим таблицу маршрутизации:

метрика увеличилась на 53, хотя должны была на 990, так как мы настроили на этом линке 1000 вместо дефолтных 10.

Так получилось по причине наличия в IS-IS нескольких типов метрик: narrow и wide.

Узкая (narrow) метрика имеет диапазон от 1 до 63, и даже если мы зададим метрику линка 1000, в действительности больше 63 она не увеличится, что мы и увидели в таблице маршрутизации.

Но стоит только включить поддержку расширенной (wide) метрики, маршрут посчитается в соответствии с настроенным значение:

Можно включить поддержку обоих типов метрик:

sw1(router-isis)#metric-style

  narrow Use old style of TLVs with narrow metric

  wide Use new style of TLVs to carry wider metric

  both Send and accept both styles of TLVs during transition

и указать на каком уровне соседства они будут использоваться:

sw1(router-isis)#metric-style both

  level-1 Set for level 1 only

  level-2 Set for level 2 only

  <CR>


IS-IS достаточно гибкий протокол, позволяет тонко настраивать логику его работы и параметры сигнальных сообщений. В сетях с большим количеством IS-IS пиров, в целях увеличения конвергенции и минимизации служебного трафика, best practices считаются следующие рекомендации:

1. Отключение отправки Hello пакетов с интерфейсов, на которых не планируется установление соседства. Команда isis passive-interface в режиме конфигурации интерфейса.

2. Установка типа интерфейса point-to-point в широковещательных сегментах, состоящих только из двух соседей. Команда isis network point-to-point в режиме конфигурации интерфейса.

3. Отключение hello padding’а на интерфейсах, с которых IS-IS устанавливает соседство. Настраивается включением опции isis hello-padding disable в режиме конфигурации интерфейса.

4. Включение расширенного типа метрики. Команда metric-style wide в ветке конфигурации router-isis.

5. Установка времени жизни LSP. Команда max-lsp-lifetime 65535 в ветке конфигурации router-isis. Поддерживаемый диапазон значений от 350 до 65535 секунд.

6. Установка максимального интервала генерации LSP. Команда lsp-refresh-interval 65235 в ветке конфигурации router-isis. Поддерживаемый диапазон значений от 350 до 65235 секунд.

7. Установка минимального интервала генерации LSP. Команда lsp-gen-interval 20000 в ветке конфигурации router-isis

8. Установка интервала между последовательными пересчетами SPF в 5 секунд. Команда spf interval maximum-wait 5000 в ветке конфигурации router-isis. На коммутаторах MES интервал в 5 секунд является значением по умолчанию.


Под занавес прикрутим аутентификацию к IS-IS.

Делается это в ветке конфигурации router isis двумя командами:

sw1(router-isis)#authentication mode — включаем аутентификацию и определяем ее тип: cleartext или md5

sw1(router-isis)#authentication key — указываем ключ для аутентификации

При этом аутентификация действует именно на анонсы префиксов, то есть соседство установится даже если коммутаторы ее не пройдут. Соответственно в сообщениях Hello аутентификацию мы не увидим, а вот в LSP эти поля есть:



Полезные команды.

Посмотреть список всех соседей можно командой show isis neighbors

sw1#show isis neighbors

System Id         Interface     Type       SNPA         State    Holdtime (s)    Circuit Id
---------------- ------------- ------ ---------------- ------- -------------- -------------------
sw2               vlan 10        L2    e0d9.e3e1.3780    Up        9              sw2.01


Интерфейсы, участвующие в процессе IS-IS:

sw1#show isis interfaces

loopback1

Administrative state is UP

Operational state is UP

Circuit type is Level-1-2

Network type is broadcast

It is a passive interface

PDU buffer size is 1500

Hello PDU padding is enabled


Level-1:

Circuit metric is 10

Level-2:

Circuit metric is 10


vlan 10

Administrative state is UP

Operational state is UP

Circuit type is Level-1-2

Network type is broadcast

PDU buffer size is 1500

Hello PDU padding is enabled


Level-1:

Circuit metric is 10

Level-2:

Circuit metric is 10


Содержание LSDB IS-IS:

sw1#show isis database

IS-IS Level-1 Link State Database:


       LSPID            LSP Seq Num   LSP Checksum   LSP Holdtime (s)  ATT/P/OL

---------------------- ------------- -------------- ------------------ ----------


IS-IS Level-2 Link State Database:


       LSPID            LSP Seq Num   LSP Checksum   LSP Holdtime (s)  ATT/P/OL

---------------------- ------------- -------------- ------------------ ----------

     sw1.00-00          0x00000007     0x00004ff1         647            0/0/0

     sw1.00-03          0x00000006     0x0000e642         955           0/0/0

     sw1.00-04          0x00000009     0x0000fda3         934           0/0/0

     sw2.00-00          0x00000006     0x0000ec33         856           0/0/0

     sw2.00-03          0x00000005     0x00008a7c         687           0/0/0

     sw2.00-04          0x00000007     0x000092e1         819           0/0/0

     sw2.01-00          0x00000005     0x0000770d         699           0/0/0


И конфигурация самого процесса:

sw1#show isis

IS-IS Router:

IS Level is Level-2

System ID is 0010.0100.1001

Area address(es):

49.0000


Dynamic hostname is configured

Packet Lifetime is 1200 seconds

Refresh Interval is 900 seconds

Maximum wait time between two consecutive SPFs is 5000 ms

Threshold number of updates to start SPF is infinite

Threshold number of updates to restart running SPF is infinite

Maximum number of consecutive SPF restarts is 10


System Level-1:

Metric style is both (narrow and wide)

LSP generation interval is 30000 ms

LSP buffer size is 1500


System Level-2:

Metric style is both (narrow and wide)

LSP generation interval is 30000 ms

LSP buffer size is 1500


Configured IS-IS circuits:

loopback1 is UP (admin UP)

vlan 10 is UP (admin UP)






  • Нет меток