IS-IS: различия между версиями
м |
|||
(не показано 50 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{#description2:Отличия ISIS и OSPF. ISIS Areas. NET. L2 network. L1 network. Leaking routes. Summarization. TLV. Выборы DIS в бродкаст сети. Аутентификация. Mesh-groups. Распространение маршрутов. Wide metric. Формат LSP. Hello PDU. Информация для подготовки к экзаменам Juniper.}} | |||
=Основы= | |||
'''[http://bradhedlund.com/notes/is-is/ Краткое содержание, в пересказе Brad Hedlund]''' | '''[http://bradhedlund.com/notes/is-is/ Краткое содержание, в пересказе Brad Hedlund]''' | ||
Строка 9: | Строка 12: | ||
dual IS-IS поддерживают M, MX, T series. Чистый ISIS работает только на J, SRX series. | dual IS-IS поддерживают M, MX, T series. Чистый ISIS работает только на J, SRX series. | ||
Основные термины: | |||
*ESs - end system = hosts. | |||
ESs - end system = hosts. | *ISs - intermediate systems = routers. | ||
*PDU - protocol data unit = packet. | |||
ISs - intermediate systems = routers. | *Level 1 (L1) - маршрутизация внутри area. | ||
*Level 2 (L2)- маршрутизация между area и к другим AS. | |||
PDU - protocol data unit = packet. | *L1/L2 - совмещают 1 и 2 level на разных интерфейсах. | ||
Level 1 - маршрутизация внутри area. | |||
Level 2 - маршрутизация между area и к другим AS. | |||
В | В L1/L2 системах роутер помечает PDU в сторону Level1 attached bit'ом, который обозначает, что роутер присоединен к L2 и что его можно использовать для достижения префиксов, находящихся за L1 area. | ||
=NET= | =Network entity title (NET)= | ||
Network entity title (NET) - обозначения роутеров. | Network entity title (NET) - обозначения роутеров. | ||
49.0001.1921.6803.6001.00 | 49.0001.1921.6803.6001.00 | ||
Строка 31: | Строка 28: | ||
49.0001 - area - число 1-13 байт. | 49.0001 - area - число 1-13 байт. | ||
1921.6803.6001 - | 1921.6803.6001 - SYSTEM ID - обычно это просто ip loopback. | ||
00 - selector | 00 - selector | ||
=ISIS | NET - можно назначить на любой интерфейс, на lo назначают для удобства. | ||
SYSTEM ID должен быть уникален в рамках AREA. | |||
=Отличия ISIS и OSPF= | |||
В чем одинаковы: | В чем одинаковы: | ||
*Поддерживают link-state database и находят кратчайший путь, используя алгоритм [https://youtu.be/0ZPuGE0aNKU Дейкстры] | *Поддерживают link-state database и находят кратчайший путь, используя алгоритм [https://youtu.be/0ZPuGE0aNKU Дейкстры] | ||
Строка 41: | Строка 42: | ||
*Имеют функцию аутентификации | *Имеют функцию аутентификации | ||
*Выбирают designated router | *Выбирают designated router | ||
* | *Производят address summarization между area | ||
*Используют двухуровневую иерархию | *Используют двухуровневую иерархию | ||
Строка 56: | Строка 57: | ||
; Два роутера с '''одинаковой''' AREA: | ; Два роутера с '''одинаковой''' AREA: | ||
: Могут сформировать ''' | : Могут сформировать '''L1''' adjacency | ||
: Могут сформировать ''' | : Могут сформировать '''L2''' adjacency | ||
; Два роутера с '''разной''' AREA: | ; Два роутера с '''разной''' AREA: | ||
: Не могут сформировать ''' | : Не могут сформировать '''L1''' Adjacency | ||
: Сформируют ''' | : Сформируют '''L2''' Adjacency | ||
=Multilevel operations= | =Multilevel operations= | ||
== | ==L2 network== | ||
[[Файл:Isis_l2_network.jpg]] | [[Файл:Isis_l2_network.jpg]] | ||
Строка 73: | Строка 73: | ||
L2 флудятся между всеми area. | L2 флудятся между всеми area. | ||
== | ==L1 network== | ||
[[Файл:Isis_l1_network.jpg]] | [[Файл:Isis_l1_network.jpg]] | ||
Строка 88: | Строка 88: | ||
'''macduff.00-00''' 0xc 0xfc02 859 L1 L2 '''Attached''' | '''macduff.00-00''' 0xc 0xfc02 859 L1 L2 '''Attached''' | ||
macduff.02-00 0x5 0xa7cc 859 L1 L2 | macduff.02-00 0x5 0xa7cc 859 L1 L2 | ||
В таблице появляется маршрут: | В таблице появляется маршрут (0/0 генерируется L1 роутером, а не анонсируется с L2): | ||
talisker> show route protocol isis | talisker> show route protocol isis | ||
inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden) | inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden) | ||
Строка 95: | Строка 95: | ||
> to 192.168.86.14 via ge-0/0/0.70 | > to 192.168.86.14 via ge-0/0/0.70 | ||
Attached-bit можно отключить следующим образом: | Attached-bit можно отключить на L1 роутере следующим образом: | ||
[edit protocols isis] | [edit protocols isis] | ||
+ ignore-attached-bit; | + ignore-attached-bit; | ||
Строка 104: | Строка 104: | ||
L1/L2 сеть работает как NSSA в OSPF. | L1/L2 сеть работает как NSSA в OSPF. | ||
На L1/L2 роутерах происходит суммирование маршрутов L1 и суммированный маршрут флудится внутри L2 area. | На L1/L2 роутерах происходит "суммирование" маршрутов L1 и "суммированный" маршрут флудится внутри L2 area. (по факту суммирования не происходит, просто передаются префиксы L1 в L2. Про суммирование/аггрегирование будет ниже). Почему это везде называется суммирование - не ясно. | ||
Внутри каждой L1 area у всех L1 роутеров содержится одинаковая LSDB. | Внутри каждой L1 area у всех L1 роутеров содержится одинаковая LSDB. | ||
L2 маршруты не передаются в L1 | L2 маршруты не передаются в L1. | ||
External L1 по дефолту не передаются в L2, можно разрешить с помощью policy. | External L1 по дефолту не передаются в L2, можно разрешить с помощью policy. | ||
Строка 114: | Строка 114: | ||
L1 роутеры изолированы от изменений топологии в других area. | L1 роутеры изолированы от изменений топологии в других area. | ||
#L1 роутеры используют attached-bit, который | #L1 роутеры используют attached-bit, который генерируется L1/L2 роутером. Default route генерируется на L1 роутере в сторону L1/L2 роутера (который подсунул attached-bit). | ||
#L1 роутеры используют кратчайший путь (по метрике) к attached роутеру. | #L1 роутеры используют кратчайший путь (по метрике) к attached роутеру. | ||
При разделении роутеров на разные уровни повышается мастабируемость, т.к.: | При разделении роутеров на разные уровни повышается мастабируемость, т.к.: | ||
#L1 изолированы от общей топологии сети, вне своей | #L1 изолированы от общей топологии сети, вне своей area. | ||
#Суммирование L1 маршрутов позволяет L2 | #Суммирование L1 маршрутов позволяет L2 роутерам производить SPF не всей сети, а исключая L1. | ||
=Действия внутри multilevel networks= | =Действия внутри multilevel networks= | ||
*L1 internal в L2 уходит без ограничений. | |||
*L1 external в L2 уходит только через export-policy. | |||
*L2 в L1 по умолчанию не уходит, только через export-policy. | |||
L1 роутеры имеют только локальную маршрутную информацию, внутри своей area. Чтобы достичь назначения вне своей area, L1 роутеры используют default route. | L1 роутеры имеют только локальную маршрутную информацию, внутри своей area. Чтобы достичь назначения вне своей area, L1 роутеры используют default route. | ||
В L1 PDU можно впихнуть и external routes (потребуется export policy). Но по умолчанию такие маршруты не будут передаваться L2. | |||
Использование wide metrics убирает обозначение internal/external routes. Все становятся просто internal | Использование wide metrics убирает обозначение internal/external routes. Все становятся просто internal => все ext-L1 перетекают L2. | ||
L2 PDU attached роутеров передают внутренние L1 маршруты своим L2 соседям в других area. L2-r не передает от своих L2-r соседей никаких маршрутов в сторону L1, поэтому L1 роутеры и нуждаются в default route. | |||
Можно отключить функцию генерирования default-route на L1 роутрах: | Можно отключить функцию генерирования default-route на L1 роутрах: | ||
set protocols isis ignore-attached-bit | set protocols isis ignore-attached-bit | ||
'''БОЛЬШОЕ НО''': если у L1/L2 роутера есть соседство L2 в ДРУГОЙ area, то он будет вставлять attcahed-bit. Если такого соседства нет, то ему и не за чем добавлять attached к L1 link-state PDU. | |||
Использование '''ignore-attached-bit'''. Когда применяется: | Использование '''ignore-attached-bit'''. Когда применяется: | ||
Строка 136: | Строка 143: | ||
*Если сгенерированный def route с next-hop в сторону attached роутера не является оптимальным, то его можно просто отключить. | *Если сгенерированный def route с next-hop в сторону attached роутера не является оптимальным, то его можно просто отключить. | ||
= | =Leaking routes= | ||
Настраивается на L1/L2 роутере: | |||
set policy-options policy-statement route-leak term L2-to-L1 from protocol isis | |||
set policy-options policy-statement route-leak term L2-to-L1 from level 2 | |||
set policy-options policy-statement route-leak term L2-to-L1 from route-filter 192.168.16.0/20 orlonger | |||
set policy-options policy-statement route-leak term L2-to-L1 to level 1 | |||
set policy-options policy-statement route-leak term L2-to-L1 then accept | |||
При настройке подобного policy в 2 стороны (L2-to-L1, L1-to-L2), вполне себе может образоваться петля. Чтобы ее избежать, в LSP передается up/down bit. | |||
На границе L2-to-L1 up/down bit = down, чтобы он точно не утек обратно/ниже из L1. | |||
:- up = можно передавать маршрут. | |||
:- down = уже есть утечка этого маршрута из другого level, поэтому его передача запрещена. | |||
IIH = ISIS Hello packet. | =ISIS соседство= | ||
IIH = ISIS Hello packet. Используются для установления соседства. | |||
Hold timer тоже передается в IIH. | Hold timer тоже передается в IIH. | ||
*'''для non-DIS''': hello = 9 sec, hold = 3*9 = 27 sec. | |||
*'''для DIS''': hello = 3sec, hold = 3*3 sec = 9 sec | |||
Что проверяется при установление соседства: | Что проверяется при установление соседства: | ||
Строка 155: | Строка 171: | ||
Состояния соседства: | Состояния соседства: | ||
[[Файл:Isis-adjacency.png]] | [[Файл:Isis-adjacency.png]] | ||
*New - момент загрузки или при настройке начальной конфигурации IS-IS. | |||
*One-Way - после Hello PDU. Роутер ждет Hello PDU пакет, содержащий свой адрес в качестве соседа. | |||
*Initializing - Роутер получил Hello PDU со своим локальным адресом в качестве соседа. | |||
*Up - соседство установлено, LSDB синхронизированы. | |||
*Down - неверная area, истек таймаут или ошибка аутентификации. | |||
*Reject - состояние маршрутизатора после сбоя проверки подлинности. IS-IS маршрутизатор будет постоянно менять свое состояние между этим и состоянием Down. | |||
Для более быстрого распознавания потери соседа настраивается BFD. Например, для времени детектирования менее 450 мс | Для более быстрого распознавания потери соседа настраивается BFD. Например, для времени детектирования менее 450 мс | ||
Строка 161: | Строка 185: | ||
set groups isis protocols isis interface <ge-*> bfd-liveness-detection multiplier 3 | set groups isis protocols isis interface <ge-*> bfd-liveness-detection multiplier 3 | ||
= | =Cуммирование маршрутов (Summarization)= | ||
На L1/L2 роутерах настраивается суммирование/агрегирование маршрутов. Суммируются external L1 routes + L2 routes от других ISIS area (+ можно просуммировать internal L1 routes (хотя они итак по дефолту передаются L2)). | |||
Пример, на роутере L1 есть локальные маршруты, их нужно агрегировать в 1 большой маршрут и переслать в сторону L2. Агрегирование и перенаправление в L2 будем делать на L1/L2 роутере. | |||
Настраиваем policy: | |||
set routing-options aggregate route 172.16.20.0/22 | |||
set policy-options policy-statement term on-the-L1L2 from protocol aggregate | set policy-options policy-statement term on-the-L1L2 from protocol aggregate | ||
set policy-options policy-statement term on-the-L1L2 from route-filter 172.16.20.0/22 exact | set policy-options policy-statement term on-the-L1L2 from route-filter 172.16.20.0/22 exact | ||
Строка 182: | Строка 197: | ||
set policy-options policy-statement term on-the-L1L2 then accept | set policy-options policy-statement term on-the-L1L2 then accept | ||
set protocols isis level 1 export on-the-L1L2 | set protocols isis level 1 export on-the-L1L2 | ||
Можно применять несколько policy. В таком случае они будут обрабатываться слева направо. Пока нужный префикс не поппадет под условие с последующим терминирующим действием (accept, reject). | |||
set routing-options aggregate route 10.0.4.0/22 | |||
set policy-options policy-statement internal-L1-summary term local-summary from protocols aggregate | set policy-options policy-statement internal-L1-summary term local-summary from protocols aggregate | ||
set policy-options policy-statement internal-L1-summary term local-summary from route-filter 10.0.4.0/22 exact | set policy-options policy-statement internal-L1-summary term local-summary from route-filter 10.0.4.0/22 exact | ||
Строка 192: | Строка 207: | ||
set policy-options policy-statement internal-L1-summary term suppress-specifics then reject | set policy-options policy-statement internal-L1-summary term suppress-specifics then reject | ||
set protocols isis export internal-L1-summary | set protocols isis export internal-L1-summary | ||
= | =Алгоритм Дейкстры= | ||
Shortest-path-first (SPF) рассчитывается отдельно для разных уровней, т.к. LSDB тоже заводятся для разных уровней. | Shortest-path-first (SPF) рассчитывается отдельно для разных уровней, т.к. LSDB тоже заводятся для разных уровней. | ||
Строка 219: | Строка 228: | ||
SPF делается в 2 шага: | SPF делается в 2 шага: | ||
#строится | #строится DB, где указаны все IS сети. | ||
#нанесение анонсируемых префиксов на tree, и рассчет кратчайших путей до них, на каждом роутере. | #нанесение анонсируемых префиксов на tree, и рассчет кратчайших путей до них, на каждом роутере. | ||
Строка 226: | Строка 235: | ||
Если какой-то роутер начинает аннонсить новый префикс или перестает анонсить старый, то нет смысла делать полный пересчет SPF. В таких случаях производится пересчет только ip reachability (только для конкретных префиксов). Каждый роутер сам решает какой пересчет (IS reachability или IP reachability) ему делать, на основании полученного lsp. | Если какой-то роутер начинает аннонсить новый префикс или перестает анонсить старый, то нет смысла делать полный пересчет SPF. В таких случаях производится пересчет только ip reachability (только для конкретных префиксов). Каждый роутер сам решает какой пересчет (IS reachability или IP reachability) ему делать, на основании полученного lsp. | ||
Маршруты | Маршруты приходят на роутер в виде LSP, потом производится расчет SPF и только после этого заносятся в таблицу маршрутизации. Поэтому, чтобы зафильтровать определенные маршруты с помощью policy, требуется делать это на роутере, генерирующем маршруты, с помощью export-policy. Import-policy - не работает в случае с ISIS. | ||
=Метрики= | |||
При расчете SPF используется cost на исходящих интерфейсах. | |||
На одном линке разными роутерами могут быть назначены разные метрики. В этом случает ISIS ругаться не будет, но SPF будет рассчитвывать кратчайший путь в разных направлениях с разными стоимостями. Это только может усложнить админам работу, но ISIS будет работать. | |||
Также в отличие от ospf, в isis по умолчанию используются только static metrics. Нет метрик, рассчитанных от interface bandwidth rate. | |||
Но это дефолтное поведение можно поправить. | |||
set protocols isis reference-bandwidth 10g | |||
Для протоколов: direct, BGP, aggregate, generate метрика = '''10'''. | |||
На passive интерфейсах metric = '''0'''. | |||
Для static, OSFP и RIP маршрутов метрика = стоимости маршрута протокола. | |||
==Wide metric== | |||
Обычно в TLV типов 2, 128, 130 поле под метрику = 6 бит. Напомним, что эти TLV используются, чтобы передавать инфо о своих линках и external routes. | |||
Т.е. максимальное значение метрики = '''63''' (0-63). Любое бОльшее значение метрики, настроенное на интерфейсе передается как 63. | |||
Как я поняла, для рассчета spf это нифига не правильно и он добавляет несколько значений по 64, чтобы достичь нужного значения. | |||
При внедрении функционала TE, появились 22 и 35 TLV, в них стали использовать 24-битные metrics (то есть значение метрики '''16,777,215''') и поле под total cost было расширено до 32 бит. При этом wide metrics не могут отличать internal маршруты от external. | |||
По умолчанию в ISIS роутер передает и small и wide metrics. Так что значения метрик можно задавать в диапазоне: [0-16,777,215]. | |||
Можно настроить, чтобы роутер работал только с wide (рекомендуется), но стоит учесть, что тогда это автоматически уберет возможность различать internal/external routes. И в сети будут просачиваться external маршруты Level 1 в Level 2. | |||
set protocols isis level 1 wide-metrics-only | |||
set protocols isis level 2 wide-metrics-only | |||
=Формат LSP= | |||
LSP (link-state PDU ) описывает состояния соседства с другими роутерами в сети. Периодически флудится в рамках Level. Не пересекает границы уровня. Содержит TLV сегменты. | |||
LSP флудится при изменениях в сети или по таймеру, чтобы содержать обновленную информацию. | |||
PDU имеет поле remaining lifetime (2 байт), при создании PDU по дефолту таймер = 1200 sec = '''20 min'''. | |||
Роутер, который получил PDU, начинает отсчет до 0. До того как таймер истечет (~ 317 sec), исходная система (роутер) пересоздает PDU и флудит его. | |||
| Protocol ID | Header length | Version | ID Length | PDU Type | Version | Reserved | Max area address | PDU | {| class="wikitable" | ||
|- | |||
| Protocol ID || Header length || Version || ID Length || PDU Type || Version || Reserved || Max area address || PDU | |||
|} | |||
''ID Length (6 байт), Max area address (3 байт)'' - иногда = 0х00 - это показывает, использует значения по умолчанию и что LSP совмещен с более старыми версиями протокола. | ''ID Length (6 байт), Max area address (3 байт)'' - иногда = 0х00 - это показывает, использует значения по умолчанию и что LSP совмещен с более старыми версиями протокола. | ||
''PDU type'' - L1 (18) / L2 (20) PDU | |||
''Version (1)'' - ранее использовалось как расширение под protocol ID, но в сейчас не используется вообще и значение = 0х01 (реально версия протокола). | ''Version (1)'' - ранее использовалось как расширение под protocol ID, но в сейчас не используется вообще и значение = 0х01 (реально версия протокола). | ||
Строка 243: | Строка 291: | ||
'''Формат PDU headers and TLVs''' | '''Формат PDU headers and TLVs''' | ||
{| class="wikitable" | |||
| PDU length | Remaining lifetime | LSP ID | Sequence number | Checksum | ATT, OL, IS Type bits | TLVs | | |- | ||
| PDU length || Remaining lifetime || LSP ID || Sequence number || Checksum || ATT, OL, IS Type bits || TLVs | |||
|} | |||
''LSP ID'' - 8 байт: 6 - router's system ID, 1 - circuit ID, 1 - LSP number. Придает уникальность внутри домена. | ''LSP ID'' - 8 байт: 6 - router's system ID, 1 - circuit ID, 1 - LSP number. Придает уникальность внутри домена. | ||
Circuit ID - 0x01 - for loopback или p2p interface, [0x02 - 0xff] - broadcast segment. | |||
Sequence number = изначальный PDU имеет значение 0x01, каждый следующий фрагмент + 1. | |||
''Attached bit (ATT)'' - ставится в L1 PDU, ISIS роутером, кот имеет соседство с L2. L1 роутер после этого передает пакеты к этому attached роутеру, если нужно выйти за пределы area. | ''Attached bit (ATT)'' - ставится в L1 PDU, ISIS роутером, кот имеет соседство с L2. L1 роутер после этого передает пакеты к этому attached роутеру, если нужно выйти за пределы area. | ||
Строка 267: | Строка 313: | ||
Используется для поиска, установления и поддержания соседства. | Используется для поиска, установления и поддержания соседства. | ||
Разные hello для broadcast | Разные hello для LAN (broadcast) и p2p сетей. | ||
*P2P Hello для L1 и L2 имеют одинаковый формат [PDU17] | |||
*LAN (broadcast) Hello | |||
:*L1 (01-80-c2-00-00-14) [PDU15] | |||
:*L2 (01-80-c2-00-00-15) [PDU16] | |||
Передаются с интервалом DIS (designated IS) | Передаются с интервалом 3 sec = DIS (designated IS), 9 sec = non-DIS . | ||
Суть: | Суть: | ||
Строка 279: | Строка 328: | ||
PDU filelds: | PDU filelds: | ||
- circuit type: L1, L2, L1/L2 router. | :- circuit type: L1, L2, L1/L2 router. | ||
:- source ID: system ID of originated router. | |||
- source ID: system ID of originated router. | :- hold timer: сколько ждать hello от соседа. | ||
:- PDU length: в октетах (байтах). | |||
- hold timer: сколько ждать hello от соседа. | :- Priority: 0-127 для DIS роутеров. | ||
:- LAN ID: system ID или DIS + 1 октет. | |||
- PDU length: в октетах (байтах). | |||
- Priority: 0-127 для DIS роутеров. | |||
- LAN ID: system ID или DIS + 1 октет. | |||
=Link-state PDU= | =Link-state PDU= | ||
Строка 383: | Строка 427: | ||
| 236 || IPv6 reachability: инфо о линке, где работает IPv6 протокол. | | 236 || IPv6 reachability: инфо о линке, где работает IPv6 протокол. | ||
|} | |} | ||
=Пример LSP на роутере= | =Пример LSP на роутере= | ||
Строка 470: | Строка 484: | ||
</tt> | </tt> | ||
= | =Designated Intermedia System (DIS)= | ||
Designated Intermedia System | |||
Не выбирается на p2p линках. Выборы производятся только между роутрерами, подключенными через один ethernet сегмент. | Не выбирается на p2p линках. Выборы производятся только между роутрерами, подключенными через один ethernet сегмент. | ||
Строка 488: | Строка 500: | ||
00-00 - первая пара 00 - это как раз pseudonode-id. Раз он равен 0, то DIS в данном сегменте нет. Если значение первой пары отличается (03-00, 05-00), значит выбран DIS. | 00-00 - первая пара 00 - это как раз pseudonode-id. Раз он равен 0, то DIS в данном сегменте нет. Если значение первой пары отличается (03-00, 05-00), значит выбран DIS. | ||
Выборы DIS в бродкаст сети / multi access сети | ==Выборы DIS в бродкаст сети / multi-access сети== | ||
#приоритет: (0-127) для L1 и L2 назначаются разные, по умолчанию = 64. Передаются в hello PDU. Приоритет = 0 - роутер не участвует в выборах. На не бродкастных линках приоритет = 0. | #приоритет: (0-127) для L1 и L2 назначаются разные, по умолчанию = 64. Передаются в hello PDU. Приоритет = 0 - роутер не участвует в выборах. На не бродкастных линках приоритет = 0. | ||
#наибольший mac / SNPA. | #наибольший mac / SNPA. | ||
# | #для L1 и L2 DIS выбирается отдельно. | ||
set protocols isis interface ge-0/0/1.212 level 1 priority 105 | set protocols isis interface ge-0/0/1.212 level 1 priority 105 | ||
Строка 499: | Строка 511: | ||
*Каждый роутер формирует соседство с каждым роутером в бродкаст/мультиакцесс сети (в отличие от OSPF). | *Каждый роутер формирует соседство с каждым роутером в бродкаст/мультиакцесс сети (в отличие от OSPF). | ||
Поведение DIS | ==Поведение DIS== | ||
*Каждый роутер флудит свои link-state PDU каждому соседу, а не только DIS. DIS таким образом использует систему из PDU (sequence number PDU). | *Каждый роутер флудит свои link-state PDU каждому соседу, а не только DIS. DIS таким образом использует систему из PDU (sequence number PDU). | ||
*DIS является представителем pseudo-node и пересылает pseudo-node всем присоединенным роутерам. | *DIS является представителем pseudo-node и пересылает pseudo-node всем присоединенным роутерам. | ||
Строка 572: | Строка 584: | ||
IS neighbor: arcturus-r4.00 Metric: 0 | IS neighbor: arcturus-r4.00 Metric: 0 | ||
= | = Аутентификация= | ||
Можно настраивать в разных местах: L1, L2, на интерфейсах. | Можно настраивать в разных местах: L1, L2, на интерфейсах. | ||
Строка 591: | Строка 603: | ||
Все роутеры флудят LSP всем своим соседям. В итоге один роутер может получать несколько одинаковых копий LSP. | Все роутеры флудят LSP всем своим соседям. В итоге один роутер может получать несколько одинаковых копий LSP. | ||
Чтобы этого избежать, можно использовать mesh-groups. Члены группы не пересылают LSP внутри группы. Пересылаются только LSP, | Mesh-groups вводятся, чтобы в full-mesh сети сократить чрезмерный и избыточный флуд LSP. | ||
Чтобы этого избежать, можно использовать mesh-groups. Члены группы не пересылают LSP внутри группы. Пересылаются только LSP, полученные извне группы. | |||
set protocols isis interface ge-0/0/0.0 mesh-group 1 | set protocols isis interface ge-0/0/0.0 mesh-group 1 | ||
Строка 597: | Строка 611: | ||
set protocols isis interface ge-0/0/2.0 mesh-group blocked | икслючает флуд любых LSP от себя, но принимает LSP от соседей. | set protocols isis interface ge-0/0/2.0 mesh-group blocked | икслючает флуд любых LSP от себя, но принимает LSP от соседей. | ||
= | =Политики распространения маршрутов по умолчанию= | ||
Как и OSPF, ISIS - link-state протокол. Таблица маршрутизации заполняется префиксами, прошедшими SPF алгоритм. | Как и OSPF, ISIS - link-state протокол. Таблица маршрутизации заполняется префиксами, прошедшими SPF алгоритм. | ||
LSP заполняются не из inet.0, а из того, что сконфигурировано внутри <protocols isis>. В ISIS можно | LSP заполняются не из inet.0, а из того, что сконфигурировано внутри <protocols isis>. В ISIS можно ограничивать internal routes и external routes с помощью export policy. | ||
= | (в ospf можно фильтровать таким образом только external routes). | ||
=Распространение маршрутов = | |||
Чтобы в ISIS передать маршруты, полученные из других протоколов, требуется export-policy. | Чтобы в ISIS передать маршруты, полученные из других протоколов, требуется export-policy. | ||
Также export работает и для ISIS маршрутов. | |||
В policy как действие можно не только делать accept, но и устанавливать метрику и добавлять теги. Теги полезны для выборочной редистрибьюции. На принимающей стороне можно с помощью тегов разруливать маршруты. | В policy как действие можно не только делать accept, но и устанавливать метрику и добавлять теги. Теги полезны для выборочной редистрибьюции. На принимающей стороне можно с помощью тегов разруливать маршруты. | ||
=Prefix limit ( | Работает и import-policy на ISIS маршруты. | ||
=Prefix limit (для external routes)= | |||
JunOS + ISIS = это достаточно надежная система, которая позволяет стабильно работать и с большим числом префиксов, но лучше этого не допускать. | JunOS + ISIS = это достаточно надежная система, которая позволяет стабильно работать и с большим числом префиксов, но лучше этого не допускать. | ||
Желательно выставлять все-таки какое-то ограничение по количеству внешних маршрутов (1-4,294,967,295). При достижении лимита ISIS перестает принимать external routes + обозначает себя (через LSP) как overload. В таких случаях только ручное вмешательство спасает ситуацию. | Желательно выставлять все-таки какое-то ограничение по количеству внешних маршрутов (1-4,294,967,295). При достижении лимита ISIS перестает принимать external routes + обозначает себя (через LSP) как overload. В таких случаях только ручное вмешательство спасает ситуацию. | ||
То есть настраивается на ASBR, вероятно: | |||
set protocols isis level 2 prefix-export-limit 2000 | |||
или | |||
set protocols isis level 1 prefix-export-limit 2000 | |||
=Overload= | |||
Настраиваем, если нужно вывести ненадолго роутер из эксплуатации. | |||
timeout = (60..1800 seconds). | |||
Если на роутере настроили overload, то при запуске протокола (rpd), overload bit = установленному интервалу. | |||
НЕ с момента установления сосества, а именно со времени запуска протокола. | |||
Механизм взаимодействия с другими роутерами отличается от OSPF. | |||
*другие роутеры игнорят PDU от роутера в расчете SPF и через роутер никакой трафик не пойдет. | |||
*если роутер является border router (L1/L2), то он перестает слать attached-bit к L1. | |||
=Стоимость маршрутов (Junos Preference)= | |||
*L1 internal = 15 | |||
*L2 internal = 18 | |||
*L1 external = 160 | |||
*L2 external = 165 | |||
т.к. best-practice - использовать wide-metrics, то в обычной жизни будем оперировать только internal preference. external - для старого формата метрик. | |||
Preference можно менять внутри isis level: | |||
set protocols isis level 1 preference 13 [internal] | |||
set protocols isis level 1 external-preference 16 [external] | |||
=IPv6= | = Таймеры = | ||
Соберем все цифры в кучу: | |||
*hello: DIS = 3 sec, non-DIS = 9 sec | |||
*hold (dead) = DIS = 9sec, non-DIS = 27 sec | |||
*retransmit LSP = 5 sec (роутер ждет LSP ACK от роутера, которому отправлен LSP) | |||
*DIS отправляет CSNP message каждые 10 sec в LAN сегмент. [Complete Sequence Number PDU] | |||
*LSP Lifetime = 20 min (1200 sec) (maximum). Запускается обратный отсчет для чистки. Если lifetime = 0, то LSP удаляется. | |||
*LSP refresh = ~317 sec | |||
*ISIS database purge: R1 имеет LSP c lifetime = 0, удаляет из LSDB у себя и отправляет соседям эту LSP с lifetime = 0. Сосед получил. Сразу из LSDB не удалил, подождал 60 sec обновлений для LSP. Если обновление не пришло - удалил из LSDB. | |||
=Использование IPv6= | |||
Если в ISIS используются разные топологии для IPv4 и IPv6, то следует указать в конфиге, чтобы для ipv6 строилась своя топология: | Если в ISIS используются разные топологии для IPv4 и IPv6, то следует указать в конфиге, чтобы для ipv6 строилась своя топология: | ||
set protocols isis topologies ipv6-unicast | set protocols isis topologies ipv6-unicast | ||
= | =Конфигурация ISIS протокола= | ||
Что обязательно: | Что обязательно: | ||
*family iso на интерфейсах | *family iso на интерфейсах | ||
*NET на одном из интерфейсов (обычно это lo) | *NET на одном из интерфейсов (обычно это lo). best practice: добавлять lo в protocols isis, даже если NET сконфигурирован не на нем. Конфиг Lo: isis работает на Lo в пассивном режиме: соседства с него не поднимает, но роутер передает о нём инфо, как о локальном линке. LSP генерируется автоматом и в L1 и в L2. (можно это действо запретить для одного из уровней). | ||
*по умолчанию интерфейсы L1/L2, если интерфейс должен быть только в L2, нужно выключить L1. И наоборот. | *по умолчанию интерфейсы работают как L1/L2, если интерфейс должен быть только в L2, нужно выключить L1. И наоборот. Также можно глобально отключить работу одного из уровней <set protocols isis level 1 disable>. | ||
Побочное: | Побочное: | ||
Строка 636: | Строка 684: | ||
set protocols isis interface ge-0/0/0.10 level 1 metric 50 | set protocols isis interface ge-0/0/0.10 level 1 metric 50 | ||
set protocols isis interface ge-0/0/0.10 level 2 metric 20 | set protocols isis interface ge-0/0/0.10 level 2 metric 20 | ||
*reference bandwidth: автоматический расчет cost. cost = reference bandwidth / bandwidth. При этом на | *reference bandwidth: автоматический расчет cost. cost = reference bandwidth / bandwidth. При этом на всём роутере для разных линков остаётся одинаковый коэффициент. Говорят, в больших сетях помогает инженерам, вместо ручного метода. | ||
set protocols isis reference-bandwidth | set protocols isis reference-bandwidth | ||
*остальные фичи, которые описаны в главе ISIS... | |||
L1/L2 router: | L1/L2 router: | ||
set protocols isis traceoptions file isis-log size 10m files 10 world-readable | |||
set protocols isis traceoptions flag state detail | |||
set protocols isis traceoptions flag error detail | |||
set protocols isis export L2-to-L1 | |||
set protocols isis export export-external | |||
set protocols isis interface ge-0/0/0.110 level 1 disable | |||
set protocols isis interface ge-0/0/0.130 level 2 disable | |||
set protocols isis interface lo0.0 passive | |||
set interfaces ge-0/0/0.110 family iso | |||
set interfaces ge-0/0/0.130 family iso | |||
set interfaces lo0.0 family inet address 192.168.13.4/32 | |||
set interfaces lo0.0 family iso address 49.0001.1921.6801.3004.00 | |||
L1 router: | L1 router: | ||
isis | set protocols isis traceoptions file isis-log size 10m files 10 world-readable | ||
set protocols isis traceoptions flag state detail | |||
set protocols isis traceoptions flag error detail | |||
set protocols isis export export-to-L2 | |||
set protocols isis level 2 disable | |||
set protocols isis interface ge-0/0/0.130 | |||
set protocols isis interface lo0.0 passive | |||
set interfaces ge-0/0/0.130 family iso | |||
set interfaces lo0 unit 0 family inet address 192.168.15.5/32 | |||
set interfaces lo0 unit 0 family iso address 49.0002.1921.6801.5005.00 | |||
=Траблшутинг соседства ISIS= | |||
Что проверить: | |||
*физика между роутерами | |||
*несовпадение level | |||
*mtu не должно быть меньше 1492 | |||
*отсутствие ip конфига на интерфейсах | |||
*отсутствие/либо неверный конфиг ISO-NET: ошибочно включен iso на loopback | |||
= | на p2p линках не обязательно использовать адреса из одной сети, линк может быть unnumberd или иметь /32 сеть. | ||
=Мониторинг ISIS= | |||
show isis interface | L = 3 = L1 / L2 router | show isis interface | L = 3 = L1 / L2 router | ||
show isis adjacency | show isis adjacency | ||
Строка 673: | Строка 733: | ||
show isis route | show isis route | ||
show isis database extensive | show isis database extensive | ||
=Дополнительная информация= | |||
*[[OSPF]] | |||
*[[BGP]] |
Текущая версия на 18:44, 15 июля 2021
Основы
Краткое содержание, в пересказе Brad Hedlund
Был разработан для работы с CLNP/CLNS. Потом добавили возможность работать с IP (добавили tlv) - dual IS-IS.
CLNS (Connectionless network service).
CLNP (Connectionless network protocol).
dual IS-IS поддерживают M, MX, T series. Чистый ISIS работает только на J, SRX series.
Основные термины:
- ESs - end system = hosts.
- ISs - intermediate systems = routers.
- PDU - protocol data unit = packet.
- Level 1 (L1) - маршрутизация внутри area.
- Level 2 (L2)- маршрутизация между area и к другим AS.
- L1/L2 - совмещают 1 и 2 level на разных интерфейсах.
В L1/L2 системах роутер помечает PDU в сторону Level1 attached bit'ом, который обозначает, что роутер присоединен к L2 и что его можно использовать для достижения префиксов, находящихся за L1 area.
Network entity title (NET)
Network entity title (NET) - обозначения роутеров. 49.0001.1921.6803.6001.00
49.0001 - area - число 1-13 байт.
1921.6803.6001 - SYSTEM ID - обычно это просто ip loopback.
00 - selector
NET - можно назначить на любой интерфейс, на lo назначают для удобства.
SYSTEM ID должен быть уникален в рамках AREA.
Отличия ISIS и OSPF
В чем одинаковы:
- Поддерживают link-state database и находят кратчайший путь, используя алгоритм Дейкстры
- Используют hello пакеты для поддержания соседства
- Имеют функцию аутентификации
- Выбирают designated router
- Производят address summarization между area
- Используют двухуровневую иерархию
Areas
В ISIS линки делят сеть на area, а не роутеры, как в ospf.
По аналогии с OSPF есть backbone area: в ISIS это кучка роутеров L2. L2 роутеры могут соединять разные area.
Ротуеры, которые не имеют соединений с другими area - L1.
В area, которая не backbone и имеет связь с другой area - будет находиться роутер, имеющий линки, смотрящие в разные area, поэтому он будет называться L1/L2 роутером (как ABR в OSPF).
И еще:
- Два роутера с одинаковой AREA
- Могут сформировать L1 adjacency
- Могут сформировать L2 adjacency
- Два роутера с разной AREA
- Не могут сформировать L1 Adjacency
- Сформируют L2 Adjacency
Multilevel operations
L2 network
При использовании L2 на всех роутерах будет сеть, аналогичная OSPF area 0. То есть все роутеры будут получать полные сведения о всей сети.
Тип LSP будет напрямую зависеть от Level соседства. Если установлено L1 соседство, то передаются LSP level1, если соседство L2, то и LSP будут L2.
L2 флудятся между всеми area.
L1 network
Между всеми роутерами установлено соседство L1 и между собой роутеры обмениваются только LSP L1. Также все роутеры имеют одинаковую LSDB.
Выход во внешнюю сеть в подобных сетях обеспечивается засчет предоставления 0/0 маршрута Attached роутером.
Пример вывода с роутера, имеющего только L1 соседство:
talisker> show isis database IS-IS level 1 link-state database: LSP ID Sequence Checksum Lifetime Attributes talisker.00-00 0xe 0x85d1 861 L1 L2 macduff.00-00 0xc 0xfc02 859 L1 L2 Attached macduff.02-00 0x5 0xa7cc 859 L1 L2
В таблице появляется маршрут (0/0 генерируется L1 роутером, а не анонсируется с L2):
talisker> show route protocol isis inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[IS-IS/15] 00:08:07, metric 10 > to 192.168.86.14 via ge-0/0/0.70
Attached-bit можно отключить на L1 роутере следующим образом:
[edit protocols isis] + ignore-attached-bit;
L1/L2 network
L1/L2 сеть работает как NSSA в OSPF.
На L1/L2 роутерах происходит "суммирование" маршрутов L1 и "суммированный" маршрут флудится внутри L2 area. (по факту суммирования не происходит, просто передаются префиксы L1 в L2. Про суммирование/аггрегирование будет ниже). Почему это везде называется суммирование - не ясно.
Внутри каждой L1 area у всех L1 роутеров содержится одинаковая LSDB.
L2 маршруты не передаются в L1.
External L1 по дефолту не передаются в L2, можно разрешить с помощью policy.
L1 роутеры изолированы от изменений топологии в других area.
- L1 роутеры используют attached-bit, который генерируется L1/L2 роутером. Default route генерируется на L1 роутере в сторону L1/L2 роутера (который подсунул attached-bit).
- L1 роутеры используют кратчайший путь (по метрике) к attached роутеру.
При разделении роутеров на разные уровни повышается мастабируемость, т.к.:
- L1 изолированы от общей топологии сети, вне своей area.
- Суммирование L1 маршрутов позволяет L2 роутерам производить SPF не всей сети, а исключая L1.
Действия внутри multilevel networks
- L1 internal в L2 уходит без ограничений.
- L1 external в L2 уходит только через export-policy.
- L2 в L1 по умолчанию не уходит, только через export-policy.
L1 роутеры имеют только локальную маршрутную информацию, внутри своей area. Чтобы достичь назначения вне своей area, L1 роутеры используют default route.
В L1 PDU можно впихнуть и external routes (потребуется export policy). Но по умолчанию такие маршруты не будут передаваться L2.
Использование wide metrics убирает обозначение internal/external routes. Все становятся просто internal => все ext-L1 перетекают L2.
L2 PDU attached роутеров передают внутренние L1 маршруты своим L2 соседям в других area. L2-r не передает от своих L2-r соседей никаких маршрутов в сторону L1, поэтому L1 роутеры и нуждаются в default route.
Можно отключить функцию генерирования default-route на L1 роутрах:
set protocols isis ignore-attached-bit
БОЛЬШОЕ НО: если у L1/L2 роутера есть соседство L2 в ДРУГОЙ area, то он будет вставлять attcahed-bit. Если такого соседства нет, то ему и не за чем добавлять attached к L1 link-state PDU.
Использование ignore-attached-bit. Когда применяется:
- Иногда админу требуется, чтобы L2 routes просочились к L1 => L1 больше не нуждается в default-route. Бывает, что появились криво сгенерированные (неподходящие) L1 LSP, L2 роутер будет их упаковывать в L2 LSP, чтобы передать своим L2 соседям. При этом сами L1 LSP, как таковые, флудиться не будут.
- Если сгенерированный def route с next-hop в сторону attached роутера не является оптимальным, то его можно просто отключить.
Leaking routes
Настраивается на L1/L2 роутере:
set policy-options policy-statement route-leak term L2-to-L1 from protocol isis set policy-options policy-statement route-leak term L2-to-L1 from level 2 set policy-options policy-statement route-leak term L2-to-L1 from route-filter 192.168.16.0/20 orlonger set policy-options policy-statement route-leak term L2-to-L1 to level 1 set policy-options policy-statement route-leak term L2-to-L1 then accept
При настройке подобного policy в 2 стороны (L2-to-L1, L1-to-L2), вполне себе может образоваться петля. Чтобы ее избежать, в LSP передается up/down bit.
На границе L2-to-L1 up/down bit = down, чтобы он точно не утек обратно/ниже из L1.
- - up = можно передавать маршрут.
- - down = уже есть утечка этого маршрута из другого level, поэтому его передача запрещена.
ISIS соседство
IIH = ISIS Hello packet. Используются для установления соседства.
Hold timer тоже передается в IIH.
- для non-DIS: hello = 9 sec, hold = 3*9 = 27 sec.
- для DIS: hello = 3sec, hold = 3*3 sec = 9 sec
Что проверяется при установление соседства:
- MTU checking = TLV 8. ISIS max mtg = 1492 bytes. Поэтому линка должен быть с mtu никак не меньше!
- The subnet checking = TLV 132. На p2p линке должны быть адреса из одной подсети.
- Protocol checking = TLV 129. CLNP ; IPv4 ; IPv6 … Тоже должны совпадать.
- Area checking = TLV 1. Area num используется только для L1 роутеров. Должна совпадать.
Состояния соседства:
- New - момент загрузки или при настройке начальной конфигурации IS-IS.
- One-Way - после Hello PDU. Роутер ждет Hello PDU пакет, содержащий свой адрес в качестве соседа.
- Initializing - Роутер получил Hello PDU со своим локальным адресом в качестве соседа.
- Up - соседство установлено, LSDB синхронизированы.
- Down - неверная area, истек таймаут или ошибка аутентификации.
- Reject - состояние маршрутизатора после сбоя проверки подлинности. IS-IS маршрутизатор будет постоянно менять свое состояние между этим и состоянием Down.
Для более быстрого распознавания потери соседа настраивается BFD. Например, для времени детектирования менее 450 мс
set groups isis protocols isis interface <ge-*> bfd-liveness-detection minimum-interval 150 set groups isis protocols isis interface <ge-*> bfd-liveness-detection multiplier 3
Cуммирование маршрутов (Summarization)
На L1/L2 роутерах настраивается суммирование/агрегирование маршрутов. Суммируются external L1 routes + L2 routes от других ISIS area (+ можно просуммировать internal L1 routes (хотя они итак по дефолту передаются L2)).
Пример, на роутере L1 есть локальные маршруты, их нужно агрегировать в 1 большой маршрут и переслать в сторону L2. Агрегирование и перенаправление в L2 будем делать на L1/L2 роутере.
Настраиваем policy:
set routing-options aggregate route 172.16.20.0/22 set policy-options policy-statement term on-the-L1L2 from protocol aggregate set policy-options policy-statement term on-the-L1L2 from route-filter 172.16.20.0/22 exact set policy-options policy-statement term on-the-L1L2 to level 2 set policy-options policy-statement term on-the-L1L2 then accept set protocols isis level 1 export on-the-L1L2
Можно применять несколько policy. В таком случае они будут обрабатываться слева направо. Пока нужный префикс не поппадет под условие с последующим терминирующим действием (accept, reject).
set routing-options aggregate route 10.0.4.0/22 set policy-options policy-statement internal-L1-summary term local-summary from protocols aggregate set policy-options policy-statement internal-L1-summary term local-summary from route-filter 10.0.4.0/22 exact set policy-options policy-statement internal-L1-summary term local-summary to level 2 set policy-options policy-statement internal-L1-summary term local-summary then accept set policy-options policy-statement internal-L1-summary term suppress-specifics from route-filter 10.0.4.0/22 longer set policy-options policy-statement internal-L1-summary term suppress-specifics to level 2 set policy-options policy-statement internal-L1-summary term suppress-specifics then reject set protocols isis export internal-L1-summary
Алгоритм Дейкстры
Shortest-path-first (SPF) рассчитывается отдельно для разных уровней, т.к. LSDB тоже заводятся для разных уровней.
Существуют:
- link-state database
- candidate database
- tree database.
LSDB - это данные на основании которых рассчитывается sortest-path-first. LSDB = router ID + neighbor ID + cost.
Движение по таблицам: lsdb -> candidate > tree.
Чтобы повысить сходимость, JunOS делает рассчет spf 3 раза, до того, как истечет hold-timer в 5 сек. Этот тамймер установлен железно в JunOS и не конфигурируется.
Таймер гарантирует, что во время изменения топологии пакеты будут маршрутизироваться (несмотря не неправильность маршрутной информации).
Таймер spf-delay - конфигурируемый таймер, немного откладывает процесс spf. По дефолту 200 мс. Может быть от 50мс, до 1000 мс. Рекомендуется устанавливать чуть больше, чем самое высокое время прохождения пакета в сети, чтобы до роутеров успевали доходить lsp.
SPF делается в 2 шага:
- строится DB, где указаны все IS сети.
- нанесение анонсируемых префиксов на tree, и рассчет кратчайших путей до них, на каждом роутере.
Partial route calculation
Если какой-то роутер начинает аннонсить новый префикс или перестает анонсить старый, то нет смысла делать полный пересчет SPF. В таких случаях производится пересчет только ip reachability (только для конкретных префиксов). Каждый роутер сам решает какой пересчет (IS reachability или IP reachability) ему делать, на основании полученного lsp.
Маршруты приходят на роутер в виде LSP, потом производится расчет SPF и только после этого заносятся в таблицу маршрутизации. Поэтому, чтобы зафильтровать определенные маршруты с помощью policy, требуется делать это на роутере, генерирующем маршруты, с помощью export-policy. Import-policy - не работает в случае с ISIS.
Метрики
При расчете SPF используется cost на исходящих интерфейсах.
На одном линке разными роутерами могут быть назначены разные метрики. В этом случает ISIS ругаться не будет, но SPF будет рассчитвывать кратчайший путь в разных направлениях с разными стоимостями. Это только может усложнить админам работу, но ISIS будет работать.
Также в отличие от ospf, в isis по умолчанию используются только static metrics. Нет метрик, рассчитанных от interface bandwidth rate.
Но это дефолтное поведение можно поправить.
set protocols isis reference-bandwidth 10g
Для протоколов: direct, BGP, aggregate, generate метрика = 10.
На passive интерфейсах metric = 0.
Для static, OSFP и RIP маршрутов метрика = стоимости маршрута протокола.
Wide metric
Обычно в TLV типов 2, 128, 130 поле под метрику = 6 бит. Напомним, что эти TLV используются, чтобы передавать инфо о своих линках и external routes. Т.е. максимальное значение метрики = 63 (0-63). Любое бОльшее значение метрики, настроенное на интерфейсе передается как 63.
Как я поняла, для рассчета spf это нифига не правильно и он добавляет несколько значений по 64, чтобы достичь нужного значения.
При внедрении функционала TE, появились 22 и 35 TLV, в них стали использовать 24-битные metrics (то есть значение метрики 16,777,215) и поле под total cost было расширено до 32 бит. При этом wide metrics не могут отличать internal маршруты от external.
По умолчанию в ISIS роутер передает и small и wide metrics. Так что значения метрик можно задавать в диапазоне: [0-16,777,215].
Можно настроить, чтобы роутер работал только с wide (рекомендуется), но стоит учесть, что тогда это автоматически уберет возможность различать internal/external routes. И в сети будут просачиваться external маршруты Level 1 в Level 2.
set protocols isis level 1 wide-metrics-only set protocols isis level 2 wide-metrics-only
Формат LSP
LSP (link-state PDU ) описывает состояния соседства с другими роутерами в сети. Периодически флудится в рамках Level. Не пересекает границы уровня. Содержит TLV сегменты.
LSP флудится при изменениях в сети или по таймеру, чтобы содержать обновленную информацию.
PDU имеет поле remaining lifetime (2 байт), при создании PDU по дефолту таймер = 1200 sec = 20 min.
Роутер, который получил PDU, начинает отсчет до 0. До того как таймер истечет (~ 317 sec), исходная система (роутер) пересоздает PDU и флудит его.
Protocol ID | Header length | Version | ID Length | PDU Type | Version | Reserved | Max area address | PDU |
ID Length (6 байт), Max area address (3 байт) - иногда = 0х00 - это показывает, использует значения по умолчанию и что LSP совмещен с более старыми версиями протокола.
PDU type - L1 (18) / L2 (20) PDU
Version (1) - ранее использовалось как расширение под protocol ID, но в сейчас не используется вообще и значение = 0х01 (реально версия протокола).
Version (2) - текущая версия протокола = 0х01.
Формат PDU headers and TLVs
PDU length | Remaining lifetime | LSP ID | Sequence number | Checksum | ATT, OL, IS Type bits | TLVs |
LSP ID - 8 байт: 6 - router's system ID, 1 - circuit ID, 1 - LSP number. Придает уникальность внутри домена.
Circuit ID - 0x01 - for loopback или p2p interface, [0x02 - 0xff] - broadcast segment.
Sequence number = изначальный PDU имеет значение 0x01, каждый следующий фрагмент + 1.
Attached bit (ATT) - ставится в L1 PDU, ISIS роутером, кот имеет соседство с L2. L1 роутер после этого передает пакеты к этому attached роутеру, если нужно выйти за пределы area.
Overload (OL) - ставится, когда роутер хочет оповестить остальных, что он перегружен (скорее не хватает памяти) и не сможет надежно передать transit пакет. Сейчас крайне редко используется, так как роутеры мощные. При этом роутер будет продолжать генерировать LSP от себя, но транзитный трафик через него не должен проходить. Можно использовать, когда: 1. роутер должен быть выведен из сети на время работ. 2. роутер имеет большое кол-во bgp peers.
Можно включить или выключить overload bit на постоянной основе, а можно включить для него таймер (60-1800 сек). Таймер начинает тикать, когда ты закоммитишь конфиг + условие: должен работать rpd.
IS type - определяет уровень роутера (L1 (0x01)/ L1 + L2(0x03))
Hello PDU
Используется для поиска, установления и поддержания соседства.
Разные hello для LAN (broadcast) и p2p сетей.
- P2P Hello для L1 и L2 имеют одинаковый формат [PDU17]
- LAN (broadcast) Hello
- L1 (01-80-c2-00-00-14) [PDU15]
- L2 (01-80-c2-00-00-15) [PDU16]
Передаются с интервалом 3 sec = DIS (designated IS), 9 sec = non-DIS .
Суть:
- Идентифицировать устр-во
- Описать его возможности
- Описать параметры интерфейса.
PDU filelds:
- - circuit type: L1, L2, L1/L2 router.
- - source ID: system ID of originated router.
- - hold timer: сколько ждать hello от соседа.
- - PDU length: в октетах (байтах).
- - Priority: 0-127 для DIS роутеров.
- - LAN ID: system ID или DIS + 1 октет.
Link-state PDU
Служат для:
- Идентификации IS соседств
- Описывает состояния своих соседств
- Описывает достижимые через него адреса.
Для построения LSDB.
Разные LSP для L1 и L2.
Отправляются в результате изменений в сети, во время формирования соседства и в ответ на sequence number PDU.
Отсылаются
- периодически
- когда упал линк к соседу
- когда появляется новый сосед
- изменилась стоимость линка.
Sequence number PDUs
Partial sequence number PDU: Используется для:
- Поддержания LSDB синзронизации
- Подтверждения LSPs от соседей на p2p сетях
- Запрашивает копию пропущенных LSP в broadcast сетях
Разный для L1 и L2 систем. Содержит спец информацию в заголовке для определенных LSP, кот подтверждены либо запрошены.
Complete sequence number PDU:
Используется для поддержания LSDB синхронизации. Отправляется периодически всеми IS на p2p сетях, только DIS на broadcast сетях.
Разные типы для L2 и L1 систем.
Содержат инфо заголовка со всех LSP.
TLV
Type/Length/Value
Каждый кусочек информации в ISIS определяется как объект с атрибутами:
- Type: предопределенный код для типа информации, кот содержит объект.
- Length: размер информации
- Value: информация определенного типа
TLV это блоки для ISIS PDU, кот используются для обмена информации. Некоторые TLV могут быть использованы несколькими PDU, некоторые только конкретным PDU.
ISIS использует только известные TLV.
TLV Number | Описание |
---|---|
1 | Area address: area address, закодированный внутри ISIS NET на loopback. |
2 | IS neighbor metrics: соседи локального роутера + метрики для достижения этих соседей (0-64). |
6 | Neighbor LAN ID |
8 | Padding |
9 | LSP entries |
10 | Authentication: содержит тип аутентификации и пароль. |
22 | Extended IS reachability:
|
128 | IP internal reachability, prefix, mask, metrics: ip и mask для каждого интерфейса маршрутизатора, кот поддерживает IPv4. |
129 | Protocols supported: какие L3 протоколы поддерживает локальный роутер (IPv4, IPv6, CLNS - для SRX, J-series). |
130 | IP external information: netw+mask всех маршрутов, присланных в ISIS, используя policy. |
132 | IP interface addresses: host ip address для всех интерфейсов роутера. |
134 | TE IP router ID: router-ID локального роутера. |
135 | Extended IP reachability: ip+mask всех интерфейсов, пожжерживающих TE. |
137 | dynamic hostname resolution: ASCII hostname локального роутера. |
222 | Multiple topologies IS reachability: соседи локального роутера + роутеры, поддерживающие несколько топологий ISIS. |
229 | Multiple topologies supported: какие топологии ISIS поддерживает роутер. Каждая топология определена 12-битным полем с ID. |
232 | IPv6 interface address: IPv6 интерфейсов. |
235 | Multiple topologies (rout instances) IP reachability: ip интерфейсов, кот поддерживает несколько топологий. |
236 | IPv6 reachability: инфо о линке, где работает IPv6 протокол. |
Пример LSP на роутере
vSRX2> show isis database extensive IS-IS level 1 link-state database: vSRX2.00-00 Sequence: 0x11f, Checksum: 0xb7a0, Lifetime: 1169 secs IS neighbor: vSRX3.02 Metric: 10 Two-way fragment: vSRX3.02-00, Two-way first fragment: vSRX3.02-00 IP prefix: 2.2.2.2/32 Metric: 0 Internal Up IP prefix: 10.0.0.0/30 Metric: 10 Internal Up IP prefix: 10.0.0.4/30 Metric: 10 Internal Up Header: LSP ID: vSRX2.00-00, Length: 218 bytes Allocated length: 1492 bytes, Router ID: 2.2.2.2 Remaining lifetime: 1169 secs, Level: 1, Interface: 0 Estimated free bytes: 1187, Actual free bytes: 1274 Aging timer expires in: 1169 secs Protocols: IP, IPv6 Packet: LSP ID: vSRX2.00-00, Length: 218 bytes, Lifetime : 1198 secs Checksum: 0xb7a0, Sequence: 0x11f, Attributes: 0xb <L1 L2 Attached> NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes Packet type: 18, Packet version: 1, Max area: 0 TLVs: Area address: 49.1111 (3) Speaks: IP Speaks: IPV6 IP router id: 2.2.2.2 IP address: 2.2.2.2 Hostname: vSRX2 IS neighbor: vSRX3.02, Internal, Metric: default 10 IS extended neighbor: vSRX3.02, Metric: default 10 IP address: 10.0.0.5 Local interface index: 74, Remote interface index: 0 Current reservable bandwidth: Priority 0 : 980Mbps Priority 1 : 980Mbps Priority 2 : 980Mbps Priority 3 : 980Mbps Priority 4 : 980Mbps Priority 5 : 980Mbps Priority 6 : 980Mbps Priority 7 : 980Mbps Maximum reservable bandwidth: 1000Mbps Maximum bandwidth: 1000Mbps Administrative groups: 0 <none> IP prefix: 10.0.0.0/30, Internal, Metric: default 10, Up IP prefix: 10.0.0.4/30, Internal, Metric: default 10, Up IP prefix: 2.2.2.2/32, Internal, Metric: default 0, Up IP extended prefix: 10.0.0.0/30 metric 10 up IP extended prefix: 10.0.0.4/30 metric 10 up IP extended prefix: 2.2.2.2/32 metric 0 up No queued transmissions
Designated Intermedia System (DIS)
Не выбирается на p2p линках. Выборы производятся только между роутрерами, подключенными через один ethernet сегмент.
DIS отвечает за передачу link-state сообщений.
Как проверить, что на нашей сети не появился DIS:
show isis database LSP ID Sequence Checksum Lifetime Attributes sun-r1.00-00 0x81 0x7a6e 1153 L1 sirius-r2.00-00 0xd 0x292 616 L1 canopus-r3.00-00 0xa4 0x16cf 699 L1 arcturus-r4.00-00 0xc0 0xbe94 773 L1 ... и т.д.
00-00 - первая пара 00 - это как раз pseudonode-id. Раз он равен 0, то DIS в данном сегменте нет. Если значение первой пары отличается (03-00, 05-00), значит выбран DIS.
Выборы DIS в бродкаст сети / multi-access сети
- приоритет: (0-127) для L1 и L2 назначаются разные, по умолчанию = 64. Передаются в hello PDU. Приоритет = 0 - роутер не участвует в выборах. На не бродкастных линках приоритет = 0.
- наибольший mac / SNPA.
- для L1 и L2 DIS выбирается отдельно.
set protocols isis interface ge-0/0/1.212 level 1 priority 105
ISIS сеть считается роутером, называемым pseudo-node: по факту просто создается некая сущность, типа виртуального роутрера, с которым все роутеры в бродкаст сети устанавливают соседство (в том числе и сам DIS).
- Каждый роутер анонсирует линк к pseudo-node, включая DIS.
- Каждый роутер формирует соседство с каждым роутером в бродкаст/мультиакцесс сети (в отличие от OSPF).
Поведение DIS
- Каждый роутер флудит свои link-state PDU каждому соседу, а не только DIS. DIS таким образом использует систему из PDU (sequence number PDU).
- DIS является представителем pseudo-node и пересылает pseudo-node всем присоединенным роутерам.
- Не существует backup DIS. при падении существующего DIS просто производятся новые выборы, и новый флуд link-state PDU.
Каждый DIS по дефолту каждые 10 сек отправляет CSNP (complete sequence number PDU) в LAN интерфейс. Также эти CSNP позволяют другим роутерам знать, когда DIS становится недоступным. Можно настроить таймер csnp (csnp-interval). Обычно для broadcast линка, где подключены только 2 роутера, этот интервал делают не очень коротким, т.к. в этом нет необходимости.
set protocols isis interface ge-0/0/0.0 csnp-interval (1-65535)
Пример Isis database с DIS на сети (вывод с canopus-r3, DIS=arcturus-r4):
IS-IS level 1 link-state database: sun-r1.00-00 Sequence: 0x81, Checksum: 0x7a6e, Lifetime: 120 secs IS neighbor: sirius-r2.00 Metric: 10 IS neighbor: procyon-r8.00 Metric: 10 IP prefix: 172.30.0.0/30 Metric: 10 Internal Up IP prefix: 172.30.0.8/30 Metric: 10 Internal Up IP prefix: 172.30.5.1/32 Metric: 0 Internal Up sirius-r2.00-00 Sequence: 0xf, Checksum: 0x8b15, Lifetime: 808 secs IS neighbor: sun-r1.00 Metric: 10 IS neighbor: rigel-r7.00 Metric: 10 IP prefix: 172.30.0.0/30 Metric: 10 Internal Up IP prefix: 172.30.0.12/30 Metric: 10 Internal Up IP prefix: 172.30.0.16/30 Metric: 10 Internal Up IP prefix: 172.30.5.2/32 Metric: 0 Internal Up canopus-r3.00-00 Sequence: 0xa9, Checksum: 0x8a8c, Lifetime: 1155 secs IS neighbor: arcturus-r4.02 Metric: 10 IP prefix: 172.30.0.12/30 Metric: 10 Internal Up IP prefix: 172.30.0.20/30 Metric: 10 Internal Up IP prefix: 172.30.0.24/30 Metric: 10 Internal Up IP prefix: 172.30.1.0/24 Metric: 10 Internal Up IP prefix: 172.30.2.0/24 Metric: 10 Internal Up IP prefix: 172.30.5.3/32 Metric: 0 Internal Up a-centauri-r5.00-00 Sequence: 0x96, Checksum: 0x7374, Lifetime: 1161 secs IS neighbor: arcturus-r4.03 Metric: 10 IP prefix: 172.30.0.28/30 Metric: 10 Internal Up IP prefix: 172.30.0.32/30 Metric: 10 Internal Up IP prefix: 172.30.5.5/32 Metric: 0 Internal Up vegan-r6.00-00 Sequence: 0x92, Checksum: 0x7aca, Lifetime: 813 secs IS neighbor: a-centauri-r5.00 Metric: 10 IS neighbor: rigel-r7.00 Metric: 10 IP prefix: 172.30.0.24/30 Metric: 10 Internal Up IP prefix: 172.30.0.32/30 Metric: 10 Internal Up IP prefix: 172.30.0.40/30 Metric: 10 Internal Up IP prefix: 172.30.5.6/32 Metric: 0 Internal Up rigel-r7.00-00 Sequence: 0x9, Checksum: 0x82f5, Lifetime: 275 secs IS neighbor: sirius-r2.00 Metric: 10 IS neighbor: vegan-r6.00 Metric: 10 IS neighbor: procyon-r8.00 Metric: 10 IP prefix: 172.30.0.16/30 Metric: 10 Internal Up IP prefix: 172.30.0.40/30 Metric: 10 Internal Up IP prefix: 172.30.0.44/30 Metric: 10 Internal Up IP prefix: 172.30.5.7/32 Metric: 0 Internal Up procyon-r8.00-00 Sequence: 0x81, Checksum: 0xd174, Lifetime: 817 secs IS neighbor: sun-r1.00 Metric: 10 IS neighbor: rigel-r7.00 Metric: 10 IP prefix: 172.30.0.8/30 Metric: 10 Internal Up IP prefix: 172.30.0.44/30 Metric: 10 Internal Up IP prefix: 172.30.5.8/32 Metric: 0 Internal Up arcturus-r4.00-00 Sequence: 0x4, Checksum: 0xb668, Lifetime: 1157 secs IS neighbor: arcturus-r4.02 Metric: 10 IS neighbor: arcturus-r4.03 Metric: 10 IP prefix: 172.30.0.20/30 Metric: 10 Internal Up IP prefix: 172.30.0.28/30 Metric: 10 Internal Up IP prefix: 172.30.1.0/24 Metric: 10 Internal Up IP prefix: 172.30.2.0/24 Metric: 10 Internal Up IP prefix: 172.30.5.90/32 Metric: 0 Internal Up arcturus-r4.02-00 Sequence: 0x3, Checksum: 0xf44, Lifetime: 1158 secs IS neighbor: canopus-r3.00 Metric: 0 IS neighbor: arcturus-r4.00 Metric: 0 arcturus-r4.03-00 Sequence: 0x1, Checksum: 0x1495, Lifetime: 1157 secs IS neighbor: a-centauri-r5.00 Metric: 0 IS neighbor: arcturus-r4.00 Metric: 0
Аутентификация
Можно настраивать в разных местах: L1, L2, на интерфейсах.
L1, L2 защищает hello PDU, LSP, порядковый номер pdu, отправленных в рамках определнного уровня.
Auth на интерфейсах шифрует только hello PDUs.
Типы:
- MD5 (включает checksumm ко всем пакетам)
- plain-text
- none
Можно выборочно отключить authen для конкретных типов PDU. Опция позволяет как не защищать конкретные PDU, так и не проверять пришедшие конкретные PDU.
no authentification-check | позволяет защищать исходящие пакеты, PDU, но при получении принимать все PDU, вне зависимости от того подходят ли они или нет.
Mesh-groups
Все роутеры флудят LSP всем своим соседям. В итоге один роутер может получать несколько одинаковых копий LSP.
Mesh-groups вводятся, чтобы в full-mesh сети сократить чрезмерный и избыточный флуд LSP.
Чтобы этого избежать, можно использовать mesh-groups. Члены группы не пересылают LSP внутри группы. Пересылаются только LSP, полученные извне группы.
set protocols isis interface ge-0/0/0.0 mesh-group 1 set protocols isis interface ge-0/0/1.0 mesh-group 2 set protocols isis interface ge-0/0/2.0 mesh-group blocked | икслючает флуд любых LSP от себя, но принимает LSP от соседей.
Политики распространения маршрутов по умолчанию
Как и OSPF, ISIS - link-state протокол. Таблица маршрутизации заполняется префиксами, прошедшими SPF алгоритм.
LSP заполняются не из inet.0, а из того, что сконфигурировано внутри <protocols isis>. В ISIS можно ограничивать internal routes и external routes с помощью export policy.
(в ospf можно фильтровать таким образом только external routes).
Распространение маршрутов
Чтобы в ISIS передать маршруты, полученные из других протоколов, требуется export-policy.
Также export работает и для ISIS маршрутов.
В policy как действие можно не только делать accept, но и устанавливать метрику и добавлять теги. Теги полезны для выборочной редистрибьюции. На принимающей стороне можно с помощью тегов разруливать маршруты.
Работает и import-policy на ISIS маршруты.
Prefix limit (для external routes)
JunOS + ISIS = это достаточно надежная система, которая позволяет стабильно работать и с большим числом префиксов, но лучше этого не допускать.
Желательно выставлять все-таки какое-то ограничение по количеству внешних маршрутов (1-4,294,967,295). При достижении лимита ISIS перестает принимать external routes + обозначает себя (через LSP) как overload. В таких случаях только ручное вмешательство спасает ситуацию.
То есть настраивается на ASBR, вероятно:
set protocols isis level 2 prefix-export-limit 2000 или set protocols isis level 1 prefix-export-limit 2000
Overload
Настраиваем, если нужно вывести ненадолго роутер из эксплуатации.
timeout = (60..1800 seconds).
Если на роутере настроили overload, то при запуске протокола (rpd), overload bit = установленному интервалу. НЕ с момента установления сосества, а именно со времени запуска протокола.
Механизм взаимодействия с другими роутерами отличается от OSPF.
- другие роутеры игнорят PDU от роутера в расчете SPF и через роутер никакой трафик не пойдет.
- если роутер является border router (L1/L2), то он перестает слать attached-bit к L1.
Стоимость маршрутов (Junos Preference)
- L1 internal = 15
- L2 internal = 18
- L1 external = 160
- L2 external = 165
т.к. best-practice - использовать wide-metrics, то в обычной жизни будем оперировать только internal preference. external - для старого формата метрик.
Preference можно менять внутри isis level:
set protocols isis level 1 preference 13 [internal] set protocols isis level 1 external-preference 16 [external]
Таймеры
Соберем все цифры в кучу:
- hello: DIS = 3 sec, non-DIS = 9 sec
- hold (dead) = DIS = 9sec, non-DIS = 27 sec
- retransmit LSP = 5 sec (роутер ждет LSP ACK от роутера, которому отправлен LSP)
- DIS отправляет CSNP message каждые 10 sec в LAN сегмент. [Complete Sequence Number PDU]
- LSP Lifetime = 20 min (1200 sec) (maximum). Запускается обратный отсчет для чистки. Если lifetime = 0, то LSP удаляется.
- LSP refresh = ~317 sec
- ISIS database purge: R1 имеет LSP c lifetime = 0, удаляет из LSDB у себя и отправляет соседям эту LSP с lifetime = 0. Сосед получил. Сразу из LSDB не удалил, подождал 60 sec обновлений для LSP. Если обновление не пришло - удалил из LSDB.
Использование IPv6
Если в ISIS используются разные топологии для IPv4 и IPv6, то следует указать в конфиге, чтобы для ipv6 строилась своя топология:
set protocols isis topologies ipv6-unicast
Конфигурация ISIS протокола
Что обязательно:
- family iso на интерфейсах
- NET на одном из интерфейсов (обычно это lo). best practice: добавлять lo в protocols isis, даже если NET сконфигурирован не на нем. Конфиг Lo: isis работает на Lo в пассивном режиме: соседства с него не поднимает, но роутер передает о нём инфо, как о локальном линке. LSP генерируется автоматом и в L1 и в L2. (можно это действо запретить для одного из уровней).
- по умолчанию интерфейсы работают как L1/L2, если интерфейс должен быть только в L2, нужно выключить L1. И наоборот. Также можно глобально отключить работу одного из уровней <set protocols isis level 1 disable>.
Побочное:
- metric/cost: по дефолту = 10 (даже для passive), для loopback = 0. Каждый level на интерфейсе может иметь свою метрику.
set protocols isis interface ge-0/0/0.10 level 1 metric 50 set protocols isis interface ge-0/0/0.10 level 2 metric 20
- reference bandwidth: автоматический расчет cost. cost = reference bandwidth / bandwidth. При этом на всём роутере для разных линков остаётся одинаковый коэффициент. Говорят, в больших сетях помогает инженерам, вместо ручного метода.
set protocols isis reference-bandwidth
- остальные фичи, которые описаны в главе ISIS...
L1/L2 router:
set protocols isis traceoptions file isis-log size 10m files 10 world-readable set protocols isis traceoptions flag state detail set protocols isis traceoptions flag error detail set protocols isis export L2-to-L1 set protocols isis export export-external set protocols isis interface ge-0/0/0.110 level 1 disable set protocols isis interface ge-0/0/0.130 level 2 disable set protocols isis interface lo0.0 passive
set interfaces ge-0/0/0.110 family iso set interfaces ge-0/0/0.130 family iso set interfaces lo0.0 family inet address 192.168.13.4/32 set interfaces lo0.0 family iso address 49.0001.1921.6801.3004.00
L1 router:
set protocols isis traceoptions file isis-log size 10m files 10 world-readable set protocols isis traceoptions flag state detail set protocols isis traceoptions flag error detail set protocols isis export export-to-L2 set protocols isis level 2 disable set protocols isis interface ge-0/0/0.130 set protocols isis interface lo0.0 passive
set interfaces ge-0/0/0.130 family iso set interfaces lo0 unit 0 family inet address 192.168.15.5/32 set interfaces lo0 unit 0 family iso address 49.0002.1921.6801.5005.00
Траблшутинг соседства ISIS
Что проверить:
- физика между роутерами
- несовпадение level
- mtu не должно быть меньше 1492
- отсутствие ip конфига на интерфейсах
- отсутствие/либо неверный конфиг ISO-NET: ошибочно включен iso на loopback
на p2p линках не обязательно использовать адреса из одной сети, линк может быть unnumberd или иметь /32 сеть.
Мониторинг ISIS
show isis interface | L = 3 = L1 / L2 router show isis adjacency show isis spf log show isis statistics show isis route show isis database extensive