На схеме сети изображены промежуточные системы. Из названия промежуточных систем видно какие LSDB они будут содержать. Например, MX11-L1-L2 будет содержать как Level 1 LSDB, так и Level 2 LSDB.
2. Конфигурирование NET-адресов
Тут всё довольно стандартно. Единственное правило - NET-адреса нужно прописывать только на lo0.0 адресах. Family следует указывать - iso. Ну и заодно стоит указать LoopBack IP-адреса.
root@MX1-L1#
set interfaces lo0.0 family iso address 49.0001.0250.0000.0254.00
3. Формирование Level 1 смежности
Для формирования смежности необходимо:
Иметь iso-адрес на lo0.0 интерфейсе (Сделано в предыдущем пункте)
Указать family iso на интерфейсах, на которых будет формироваться смежность. Это необходимо, чтобы мы могли принимать PDU от IS-IS
Добавить соостветствующие интерфейсы в протокол
Выглядит это так:
root@MX1-L1#
set interfaces ge-0/0/0.0 family iso
set protocols isis interface ge-0/0/0.0 point-to-point
set protocols isis level 2 disable
Дополнительно стоит отметить, что мы отключаем формирование Level 2 смежностей, так как в этом нет необходимости.
Далее проводим аналогичную настройку на MX2-L1 и посмотрим как формируется смежность на p2p-интерфейсах. А формируется она без IP-адресов на интерфейсках:
root@MX1-L1# run show interfaces terse | match ge*
ge-0/0/0 up up
ge-0/0/0.0 up up iso
ge-0/0/1 up up
ge-0/0/2 up up
ge-0/0/3 up up
ge-0/0/4 up up
ge-0/0/5 up up
ge-0/0/6 up up
ge-0/0/7 up up
ge-0/0/8 up up
ge-0/0/9 up up
gre up up
[edit]
root@MX1-L1# run show isis adjacency
Interface System L State Hold (secs) SNPA
ge-0/0/0.0 MX2-L1 1 Up 22
[edit]
root@MX1-L1# run show isis interface
IS-IS interface database:
Interface L CirID Level 1 DR Level 2 DR L1/L2 Metric
ge-0/0/0.0 1 0x1 Point to Point Disabled 10/10
Тут видно и имя соседнего хоста, которое передаётся в TLV.
3.1. Выбор DIS
Донастроим IP-адреса и включим оставшиеся интерфейсы в IS-IS для установления Level 1 смежности и посмотрим как происходит выбор DIS в широковещательном домене:
Т.е. тут без перезагрузки произошёл мгновенный перевыбор DIS. А теперь погасим какой-нибудь линк и посмотрим появившийся IS-IS-маршрут:
root@MX1-L1# deactivate interfaces ge-0/0/1
root@MX1-L1# run show route
inet.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
25.0.0.0/29 *[IS-IS/15] 00:00:02, metric 20
> to 25.0.0.9 via ge-0/0/0.0
25.0.0.8/31 *[Direct/0] 00:39:04
> via ge-0/0/0.0
25.0.0.8/32 *[Local/0] 00:39:04
Local via ge-0/0/0.0
25.0.0.254/32 *[Direct/0] 01:57:36
> via lo0.0
iso.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
49.0001.0250.0000.0254/72
*[Direct/0] 02:19:54
> via lo0.0
Тут видно, что IS-IS имеет Preference (Административную дистанцию в Cisco) по умолчанию 15, что ниже, чем у OSPF.
Ещё одно замечание: можно не включать lo0.0 интерфейсы как passive, так как эта настройка для LoopBack-интерфейсов включена по умолчанию:
root@MX1-L1# run show isis interface
IS-IS interface database:
Interface L CirID Level 1 DR Level 2 DR L1/L2 Metric
ge-0/0/0.0 1 0x1 Point to Point Disabled 10/10
ge-0/0/1.0 1 0x2 MX1-L1.02 Disabled 10/10
lo0.0 1 0x1 Passive Passive 0/0
Вернём всё как было, перезагрузим устройства и запишем на широковещательном линке дамп, чтобы увидеть PDU IS-IS.
3.2. Запись дампа
Сначала посылается IIH по протоколу ES-IS:
Далее происходит рассылка IIH PDU с некоторой полезной нам информацией:
Тут видно, что изначально DIS себя считает совершенно другой роутер. Также видны поля TLV.
Далее начинают поступать IIH немного другого формата:
Чтобы проверить MTU, IIH нагружается всяким мусором. Также тут видно, что идёт процесс установления соседства.
Далее видно, что мы сначала обмениваемся LSP и адресацией на текущем линке
А потом обмениваемся LSP с PseudoNode (судя по метрике = 0):
Тут, в HII виден приоритет роутера MX1-L1:
Далее происходит обмен CSNP:
По чексуммам роутеры понимают есть ли у них эти LSP в базе данных или нет. По Sequence Number определяется актуальность LSP. Если Sequence Number в полученном CSNP для LSP больше, чем у нас или LSP отсутствует, то посылается PSNP (чтобы его увидеть, нужно либо иметь в цепочке более 3 роутеров и снимать дамп с крайнего (иначе все обновления о сетях придут от роутера в середине), либо иметь p2p линк):
В p2p линках PSNP посылается ещё и как подтверждение о получении LSP:
По чексумме можно определить на какой LSP мы ответили:
Т.е. MX-L1 подтвердил получение LSP от L2. PSNP на запрос информации поймать довольно сложно, так как LSP рассылаются лавинно в самом начале и при обновлениях топологии.
Посмотрим как выглядит таблица маршрутизации на L1-роутере:
root@MX1-L1# run show route protocol isis
inet.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[IS-IS/15] 00:01:52, metric 10
> to 25.0.0.3 via ge-0/0/1.0
25.0.0.252/32 *[IS-IS/15] 00:01:52, metric 10
> to 25.0.0.3 via ge-0/0/1.0
25.0.0.253/32 *[IS-IS/15] 00:01:52, metric 10
to 25.0.0.9 via ge-0/0/0.0
> to 25.0.0.2 via ge-0/0/1.0
Тут мы получам по IS-IS маршруты о LoopBack-адресах и маршрут по умолчанию в ядро сети (в Level 2 сеть). Это говорит нам о том, что маршрутизация для L1-роутеров похожа на маршрутизацию внутри Stub-Area OSPF. L1/L2 роутеры имеют полную топологию своей Area и маршруты, пришедшие от Level 2 роутеров. При этом Preference у маршрутов, полученных по L2 равен 18 против 15 у маршрутов полученных от L1 роутеров:
root@MX3-L1-L2# run show route protocol isis
inet.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
1.1.1.4/31 *[IS-IS/18] 00:06:22, metric 20
> to 1.1.1.3 via ge-0/0/3.0
1.1.1.6/31 *[IS-IS/18] 00:06:01, metric 20
> to 1.1.1.1 via ge-0/0/0.0
1.1.1.8/31 *[IS-IS/18] 00:06:01, metric 30
> to 1.1.1.1 via ge-0/0/0.0
to 1.1.1.3 via ge-0/0/3.0
1.1.1.10/31 *[IS-IS/18] 00:06:01, metric 30
> to 1.1.1.1 via ge-0/0/0.0
1.1.1.12/31 *[IS-IS/18] 00:06:01, metric 40
> to 1.1.1.1 via ge-0/0/0.0
2.2.2.2/32 *[IS-IS/18] 00:06:01, metric 10
> to 1.1.1.1 via ge-0/0/0.0
3.3.3.3/32 *[IS-IS/18] 00:06:22, metric 10
> to 1.1.1.3 via ge-0/0/3.0
3.3.3.4/32 *[IS-IS/18] 00:06:12, metric 20
> to 1.1.1.3 via ge-0/0/3.0
25.0.0.8/31 *[IS-IS/15] 00:06:18, metric 20
to 25.0.0.1 via ge-0/0/2.0
> to 25.0.0.2 via ge-0/0/2.0
25.0.0.253/32 *[IS-IS/15] 00:06:18, metric 10
> to 25.0.0.2 via ge-0/0/2.0
25.0.0.254/32 *[IS-IS/15] 00:06:18, metric 10
> to 25.0.0.1 via ge-0/0/2.0
50.0.0.0/31 *[IS-IS/18] 00:06:01, metric 30
> to 1.1.1.1 via ge-0/0/0.0
50.0.0.253/32 *[IS-IS/18] 00:06:01, metric 30
> to 1.1.1.1 via ge-0/0/0.0
50.0.0.254/32 *[IS-IS/18] 00:06:01, metric 20
> to 1.1.1.1 via ge-0/0/0.0
75.0.0.0/31 *[IS-IS/18] 00:06:01, metric 40
> to 1.1.1.1 via ge-0/0/0.0
75.0.0.253/32 *[IS-IS/18] 00:06:01, metric 40
> to 1.1.1.1 via ge-0/0/0.0
75.0.0.254/32 *[IS-IS/18] 00:06:01, metric 30
> to 1.1.1.1 via ge-0/0/0.0
100.0.0.0/31 *[IS-IS/18] 00:05:56, metric 50
> to 1.1.1.1 via ge-0/0/0.0
100.0.0.253/32 *[IS-IS/18] 00:05:56, metric 50
> to 1.1.1.1 via ge-0/0/0.0
100.0.0.254/32 *[IS-IS/18] 00:05:56, metric 40
> to 1.1.1.1 via ge-0/0/0.0
А вот как выглядят маршруты в Area 1 на Level 2 роутерах:
При этом сама еденица LSDB несёт в себе гораздо больше информации, чем она же в OSPF за счёт гибкого поля TLV, которое позволяет передавать любую информацию.
root@MX3-L1-L2# run show isis database extensive
IS-IS level 1 link-state database:
MX3-L1-L2.00-00 Sequence: 0x5, Checksum: 0x5c3a, Lifetime: 895 secs
IS neighbor: MX1-L1.02 Metric: 10
Two-way fragment: MX1-L1.02-00, Two-way first fragment: MX1-L1.02-00
IP prefix: 25.0.0.0/29 Metric: 10 Internal Up
IP prefix: 25.0.0.252/32 Metric: 0 Internal Up
Header: LSP ID: MX3-L1-L2.00-00, Length: 153 bytes
Allocated length: 1492 bytes, Router ID: 25.0.0.252
Remaining lifetime: 895 secs, Level: 1, Interface: 0
Estimated free bytes: 1289, Actual free bytes: 1339
Aging timer expires in: 895 secs
Protocols: IP, IPv6
Packet: LSP ID: MX3-L1-L2.00-00, Length: 153 bytes, Lifetime : 1198 secs
Checksum: 0x5c3a, Sequence: 0x5, 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.0001 (3)
LSP Buffer Size: 1492
Speaks: IP
Speaks: IPV6
IP router id: 25.0.0.252
IP address: 25.0.0.252
Hostname: MX3-L1-L2
IP prefix: 25.0.0.252/32, Internal, Metric: default 0, Up
IP prefix: 25.0.0.0/29, Internal, Metric: default 10, Up
IP extended prefix: 25.0.0.252/32 metric 0 up
IP extended prefix: 25.0.0.0/29 metric 10 up
IS neighbor: MX1-L1.02, Internal, Metric: default 10
IS extended neighbor: MX1-L1.02, Metric: default 10
IP address: 25.0.0.3
Local interface index: 331, Remote interface index: 0
No queued transmissions
6. Суммаризация маршрутов и Route Leaking
Route Leaking - это передача маршрутов из L1 LSDB в L2. По умолчанию Route Leaking включен для передачи маршрутов из L1 в L2 LSDB на L1/L2 IS. Чтобы сделать суммаризацию, мы должны сагрегировать пул адресов нашей зоны и запретить Route Leaking, утсановленный по умолчанию. Делается это при помощи аггрегированных маршрутов и policy-option:
root@MX3-L1-L2# show | compare
[edit]
+ routing-options {
+ aggregate {
+ route 25.0.0.0/24;
+ }
+ }
[edit protocols isis]
+ export Summarization;
[edit]
+ policy-options {
+ policy-statement Summarization {
+ term 2 {
+ from protocol aggregate;
+ to level 2;
+ then accept;
+ }
+ term 1 {
+ from {
+ route-filter 25.0.0.0/24 orlonger;
+ }
+ then reject;
+ }
+ }
+ }
В данном случае мы убрали Route Leaking из L1 в L2 LSDB и добавили редистрибуцию Aggregte маршрута в Level 2 IS-IS. Резултьтат:
root@MX6-L2# run show route protocol isis | match 25.0.0.0
25.0.0.0/24 *[IS-IS/165] 00:04:56, metric 30
Позволяет отказать в перенаправлении транзитного трафика во время пересчётся SPF. Если трафик идёт к напрямую подключенным сетям, то мы его принимаем. Зачем это нужно? Если роутер пересчитывает SPF, то могут возникнуть проблемы с переправкой трафика, который отправлен не к напрямую подключенным сетям (Directly Connected Links и Passive Interfaces).
Для этого можно включить возможность установки Overload Bit'а. Как видно из пршлой трассировки, трафик идёт через MX4-L2 (1.1.1.6). На MX4-L2 можно будет как раз поставить возможность установки Overload Bit'а:
root@MX4-L2# set protocols isis overload timeout 500
Обязательно стоит указывать Timeout, иначе после перерасчёта SFP, Overload Bit придётся снимать вручную.
Теперь запустим перерасчёт алгоритма SFP. У меня во время коммита произошло падение виртуальной машины с MX4-L2 и в это время удачно был запущен Wireshark, поэтому удалось поймать LSP:
Ещё раз перезагрузим MX4-L2, дождёмся перезагрузки роутера и установления смежности по IS-IS, после чего запустим трассировку и зафиксируем результат:
Не смотря на то, что у нас давно установилась смежность, транзитный трафик ходит в обход ещё несколько минут. Также может быть полезно, если какой-то интерфейс флапает и из-за постоянных пересчётов, трафик будет ходит в обход, что снизит влияние флапов на стабильность сети.
Если есть желание или необходимость, то можно вручную очистить Overload Bit: