IS-IS
Краткое содержание, в пересказе Brad Hedlund
Был разработан для работы с CLNP/CLNS. Потом добавили возможность работать с IP (добавили tlv) - dual IS-IS.
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 - маршрутизация внутри area.
Level 2 - маршрутизация между area и к другим AS.
Level1/Level2 - совмещают 1 и 2 level на разных интерфейсах.
В Level 1/2 системах роутер помечает PDU в сторону Level1 attached bit'ом, который обозначает, что роутер присоединен к Level2 и что его можно использовать для достижения префиксов, находящихся за Level 1 area.
NET
Network entity title (NET) - обозначения роутеров. 49.001.1921.6803.6001.00
49.0001 - area - число 1-13 байт.
1921.6803.6001 - system ID - обычно это просто ip loopback.
00 - selector
ISIS and 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
- Могут сформировать Level 1 adjacency
- Могут сформировать Level 2 adjacency
- Сформируют и Level 1 и Level 2 adjacency по-умолчанию
- Два роутера с разной AREA
- Не могут сформировать Level 1 Adjacency
- Сформируют Level 2 Adjacency
Multilevel operations
1.L1 роутеры используют attached-bit, который передается в L1 PDU от L1/L2 роутера. При этом локальный роутер генерирует default route.
2.L1 роутеры используют кратчайший путь (по метрике) к attached роутеру.
При разделении на роутеров на разные уровни повышается мастабируемость, т.к.: 1. L1 изолированы от общей топологии сети, вне своей aera. 2. Суммирование L1 маршрутов позволяет L2 роутрам производить SPF не всей сети, а исключая L1.
Действия внутри multilevel networks
L1 роутеры имеют только локальную маршрутную информацию, внутри своей area. Чтобы достичь назначения вне своей area, L1 роутеры используют default route. В L1 PDU можно впихнуть и externel routes. Но по умолчанию такие маршруты не будут передаваться L2. Чтобы избежать подобных утечек, потребуется policy.
L2 PDU attached роутров передают внутренние L1 маршруты своим L2 соседям в других area. L2-r не передает от своих L2-r соседей никаких маршрутов в сторону L1, поэтому L1 роутеры и нуждаются в default route.
Использование wide metrics убирает обозначение internal/external routes. Все становятся просто internal. Вследствие чего все L1 перетекают L2.
Можно отключить функцию генерирования default-route на L1 роутрах:
set protocols isis ignore-attached-bit
Использование ignore-attached-bit. Когда применяется:
- Иногда админу требуется, чтобы L2 routes просочились к L1 => L1 больше не нуждается в default-route. Бывает, что появились криво сгенерированные (неподходящие) L1 LSP, L2 роутер будет их упаковывать в L2 LSP, чтобы передать своим L2 соседям. При этом сами L1 LSP, как таковые, флудиться не будут.
- Если сгенерированный def route с next-hop в сторону attached роутера не является оптимальным, то его можно просто отключить.
Policy for leaking routes
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 roite-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->L1, L1->L2), вполне себе может образоваться петля. Чтобы ее избежать, в LSP передается up/down bit. up = можно передавать маршрут. down = уже есть утечка этого маршрута из другого level, поэтому его передача запрещена.
Summarization
На L1/L2 роутреах происходит суммирование маршуртов. Суммируются external L1 routes + L2 routes от других ISIS area (+ можно просуммировать internal L1 routes (хотя они итак по дефолту передаются L2)).
Также суммирование можно произвести с помощью policy:
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
Пример, на роутере L1 есть локальные маршруты, их нужно агрегировать в 1 большой маршрут и переслать в сторону L2. Агрегирование и перенаправление в L2 будем делать на L1/L2 роутере.
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
Можно применять несколько policy. В таком случае они будут обрабатываться слева направо. Пока нужный префикс не поппадет под условие с последующим терминирующим действием (accept, reject). Пометка к конфигу: -по умолчанию на интерфейсе включены оба L1 и L2. В конфиге нужно отключить ненужный level. Также можно глобально отключить работу одного из уровней <set protocols isis level 1 disable>. -советуют все-таки добавлять lo в protocols isis, даже если NET сконфигурирован не на нем. -конфиг lo: isis работает на lo в пассивном режиме: соседства с него не строит, но роутер передает о нем инфо, как о локальном линке. LSP генерируется автоматом и в L1 и в L2. (можно это действо запретить для одного из уровней).
Dejkstra algorithm
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 шага: 1. строится дерево, где указаны все IS сети. 2. нанесение анонсируемых префиксов на tree, и рассчет кратчайших путей до них, на каждом роутере.
Partial route calculation
Если какой-то роутер начинает аннонсить новый префикс или перестает анонсить старый, то нет смысла делать полный пересчет SPF. В таких случаях производится пересчет только ip reachability (только для конкретных префиксов). Каждый роутер сам решает какой пересчет (IS reachability или IP reachability) ему делать, на основании полученного lsp.
Маршруты полученные от ISIS приходят на роутер в виде LSP, потом производится рассчет spf и только после этого заносятся в таблицу маршрутизации. Поэтому, чтобы зафильтровать определенные маршруты с помощью policy, требуется делать это на роутере, генерирующем маршруты, с помощью export-policy. Import-policy - не работает в случае с ISIS.
LSP format
LSP (link-state PDU ) описывает состояния соседства с другими роутерами в сети. Периодически флудится. Содержит 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 headers and TLVs |
ID Length (6 байт), Max area address (3 байт) - иногда = 0х00 - это показывает, использует значения по умолчанию и что LSP совмещен с более старыми версиями протокола.
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 |
PDU type - L1 (18) / L2 (20) PDU
LSP ID - 8 байт: 6 - router's system ID, 1 - circuit ID, 1 - LSP number. Придает уникальность внутри домена.
System ID = NET
LSP number = изначальный PDU имеет значение 0x00, каждый следующий фрагмент + 1.
Circuit ID - 0x01 - for loopback или p2p interface, [0x02 - 0xff] - broadcast segment.
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 для broadcast(LAN) и p2p сетей. LAN делится на L1 и L2, имеют одинаковый формат. Broadcast netw: L1 (01-80-c2-00-00-14) / L2 (01-80-c2-00-00-15)
Передаются с интервалом DIS (designated IS) 3 sec, non-DIS 9 sec.
Суть:
- Идентифицировать устр-во
- Описать его возможности
- Описать параметры интерфейса.
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.
Отправляются в результате изменений в сети, во время формирования соседства и в ответ на порядковый номер PDU.
Отсылаются
- периодически
- когда упал линк к соседу
- когда появляется новый сосед
- изменилась стоимость линка.
Sequence number PDUs
Частичный порядковый номер: Используется для:
- Поддержания LSDB синзронизации - Подтверждения LSPs от соседей на p2p сетях - Запрашивает копию пропущенных LSP в broadcast сетях
Разный для L1 и L2 систем. Содержит спец информацию в заголовке для определенных LSP, кот подтверждены либо запрошены.
Полный порядковый номер 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 протокол. |
Metrics
При расчете spf используется cost на исходящих интерфейсах.
На одном линке разными роутерами могут быть назначены разные метрики. В этом случает ISIS ругаться не будет, но SPF будет рассчитвывать кратчайший путь в разных направлениях с разными стоимостями. Это только может усложнить админам работу, но ISIS будет работать.
Wide metric
Обычно в TLV типов 2, 128, 130 поле под метрику = 6 бит. Напомним, что эти TLV используются, чтобы передавать инфо о своих линках и external routes. Т.е. максимальное значение метрики = 63 (0-63). Любое бОльшее значение метрики, настроенное на интерфейсе передается как 63.
Как я поняла, для рассчета spf это нифига не правильно и он добавляет несколько значений по 64, чтобы достичь нужного значения.
При внедрении функционала TE, появились 22 и 35 TLV, в них стали использовать 24-битные metrics. При этом wide metrics не могут отличать internal маршруты от external.
По умолчанию в ISIS роутер передает и обычные и wide metrics. Можно настроить, чтобы роутер работал только с wide, но тогда это автоматически уберет возможность различать internal/external routes.
Пример 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
DIS
Designated Intermedia System
Выборы DIS в бродкаст сети / multi access сети:
- 1 - приоритет: (0-127) для L1 и L2 назначаются разные, по умолчанию = 64. Передаются в hello PDU. Приоритет = 0 - роутер не участвует в выборах. На не бродкастных линках приоритет = 0.
- 2 - наибольший mac / SNPA.
- Для L1 и L2 DIS выбирается отдельно.
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)
Authentification
Можно настраивать в разных местах: 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. Члены группы не пересылают 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 от соседей.
Default Policies
Как и OSPF, ISIS - link-state протокол. Таблица маршрутизации заполняется префиксами, прошедшими SPF алгоритм.
LSP заполняются не из inet.0, а из того, что сконфигурировано внутри <protocols isis>. В ISIS можно полисить internal subnets и external subnets с помощью export policy. (в ospf можно фильтровать таким образом только external routes).
Redistribution
Чтобы в ISIS передать маршруты, полученные из других протоколов, требуется export-policy.
В policy как действие можно не только делать accept, но и устанавливать метрику и добавлять теги. Теги полезны для выборочной редистрибьюции. На принимающей стороне можно с помощью тегов разруливать маршруты.
Prefix limit (for external routes)
JunOS + ISIS = это достаточно надежная система, которая позволяет стабильно работать и с большим числом префиксов, но лучше этого не допускать.
Желательно выставлять все-таки какое-то ограничение по количеству внешних маршрутов (1-4,294,967,295). При достижении лимита ISIS перестает принимать external routes + обозначает себя (через LSP) как overload. В таких случаях только ручное вмешательство спасает ситуацию.
Troubleshoting ISIS adjacencies
Что проверить:
- физика между роутерами
- несовпадение level
- mtu не должно быть меньше 1492
- отсутствие ip конфига на интерфейсах
- отсутствие/либо неверный конфиг ISO-NET: ошибочно включен iso на loopback
на p2p линках не обязательно использовать адреса из одной сети, линк может быть unnumberd или иметь /32 сеть.
Config
Что обязательно:
- family iso на интерфейсах
- NET на одном из интерфейсов (обычно это lo)
- по умолчанию интерфейсы L1/L2, если интерфейс должен быть только в L2, нужно выключить L1. И наоборот.
Побочное:
- 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
Monitoring
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
© Наталия Бобкова 2014—2022