IS-IS
Краткое содержание, в пересказе 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.
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 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
- Могут сформировать 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 роутера не является оптимальным, то его можно просто отключить.
Policy for 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 в L1 up/down bit = down, чтобы он точно не утек обратно/ниже из L1.
- - up = можно передавать маршрут.
- - down = уже есть утечка этого маршрута из другого level, поэтому его передача запрещена.
ISIS adjacency
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
Summarization
На L1/L2 роутерах настраивается суммирование/агрегирование маршрутов. Суммируются external L1 routes + L2 routes от других ISIS area (+ можно просуммировать internal L1 routes (хотя они итак по дефолту передаются 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
Пример, на роутере L1 есть локальные маршруты, их нужно агрегировать в 1 большой маршрут и переслать в сторону L2. Агрегирование и перенаправление в L2 будем делать на L1/L2 роутере.
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
Можно применять несколько policy. В таком случае они будут обрабатываться слева направо. Пока нужный префикс не поппадет под условие с последующим терминирующим действием (accept, reject).
Config tips
- по умолчанию на интерфейсе включены оба L1 и L2. В конфиге нужно отключить ненужный level. Также можно глобально отключить работу одного из уровней <set protocols isis level 1 disable>.
- best practice: добавлять lo в protocols isis, даже если NET сконфигурирован не на нем.
- конфиг lo: isis работает на lo в пассивном режиме: соседства с него не строит, но роутер передает о нем инфо, как о локальном линке. LSP генерируется автоматом и в L1 и в L2. (можно это действо запретить для одного из уровней).
Dijkstra 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 шага:
- строится DB, где указаны все IS сети.
- нанесение анонсируемых префиксов на tree, и рассчет кратчайших путей до них, на каждом роутере.
Partial route calculation
Если какой-то роутер начинает аннонсить новый префикс или перестает анонсить старый, то нет смысла делать полный пересчет SPF. В таких случаях производится пересчет только ip reachability (только для конкретных префиксов). Каждый роутер сам решает какой пересчет (IS reachability или IP reachability) ему делать, на основании полученного lsp.
Маршруты приходят на роутер в виде LSP, потом производится расчет SPF и только после этого заносятся в таблицу маршрутизации. Поэтому, чтобы зафильтровать определенные маршруты с помощью policy, требуется делать это на роутере, генерирующем маршруты, с помощью export-policy. Import-policy - не работает в случае с ISIS.
LSP format
LSP (link-state PDU ) описывает состояния соседства с другими роутерами в сети. Периодически флудится в рамках Level. Не пересекает границы уровня. Содержит TLV сегменты.
Timer
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 протокол. |
Metrics
При расчете spf используется cost на исходящих интерфейсах.
На одном линке разными роутерами могут быть назначены разные метрики. В этом случает ISIS ругаться не будет, но SPF будет рассчитвывать кратчайший путь в разных направлениях с разными стоимостями. Это только может усложнить админам работу, но ISIS будет работать.
Также в отличие от ospf, в isis по умолчанию используются только static metrics. Нет метрик, рассчитанных от interface bandwidth rate. Но это дефолтное поведение можно поправить.
set protocols isis reference-bandwidth 10g
Для протоколов: Direct, BGP, aggregate, generate метрика = 10.
На passive interfaces 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.
[edit protocols isis level 1] wide-metrics-only; [edit protocols isis level 2] wide-metrics-only;
Пример 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
Не выбирается на 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
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 вводятся, чтобы в 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 от соседей.
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.
Также export работает и для ISIS маршрутов.
В policy как действие можно не только делать accept, но и устанавливать метрику и добавлять теги. Теги полезны для выборочной редистрибьюции. На принимающей стороне можно с помощью тегов разруливать маршруты.
Работает и import-policy на ISIS маршруты.
Overload
Настраиваем, если нужно вывести ненадолго роутер из эксплуатации.
timeout = (60..1800 seconds).
Если на роутере настроили overload, то при запуске протокола (rpd), overload bit = установленному интервалу. НЕ с момента установления сосества, а именно со времени запуска протокола.
Механизм взаимодействия с другими роутерами отличается от OSPF.
- другие роутеры игнорят PDU от роутера в расчете SPF и через роутер никакой трафик не пойдет.
- если роутер является border router (L1/L2), то он перестает слать attached-bit к L1.
Prefix limit (for 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
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]
Timers
Соберем все цифры в кучу:
- 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
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
L1/L2 router:
oban# show protocols isis { traceoptions { file isis-log size 10m files 10 world-readable; flag state detail; flag error detail;} export [ L2-to-L1 export-external ]; interface ge-0/0/0.110 { level 1 disable;} interface ge-0/0/0.130 { level 2 disable;} interface lo0.0 { passive;}}
L1 router:
isis { traceoptions { file isis-log size 10m files 10 world-readable; flag state detail; flag error detail;} export export-to-L2; level 2 disable; interface ge-0/0/0.130; interface lo0.0 { passive;}}
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