Практическая часть
1. Схема сети

IS
LoopBack IP/NET
MX1-L1
25.0.0.254/49.0001.0250.0000.0254.00
MX2-L1
25.0.0.253/49.0001.0250.0000.0253.00
MX3-L1-L2
25.0.0.252/49.0001.0250.0000.0252.00
MX4-L2
2.2.2.2/49.0002.0020.0200.2002.00
MX5-L2
3.3.3.3/49.0003.0030.0300.3003.00
MX6-L2
3.3.3.4/49.0003.0030.0300.3004.00
MX7-L1-L2
50.0.0.254/49.0004.0500.0000.0254.00
MX8-L1
50.0.0.253/49.0004.0500.0000.0253.00
MX9-L1-L2
75.0.0.254/49.0005.0750.0000.0254.00
MX10-L1
75.0.0.253/49.0005.0750.0000.0253.00
MX11-L1-L2
100.0.0.254/49.0006.1000.0000.0254.00
MX12-L1
100.0.0.253/49.0006.1000.0000.0253.00
На схеме сети изображены промежуточные системы. Из названия промежуточных систем видно какие LSDB они будут содержать. Например, MX11-L1-L2 будет содержать как Level 1 LSDB, так и Level 2 LSDB.
2. Конфигурирование NET-адресов
Тут всё довольно стандартно. Единственное правило - NET-адреса нужно прописывать только на lo0.0 адресах. Family следует указывать - iso. Ну и заодно стоит указать LoopBack IP-адреса.
set interfaces lo0.0 family iso address 49.0001.0250.0000.0254.00
3. Формирование Level 1 смежности
Для формирования смежности необходимо:
Иметь iso-адрес на lo0.0 интерфейсе (Сделано в предыдущем пункте)
Указать family iso на интерфейсах, на которых будет формироваться смежность. Это необходимо, чтобы мы могли принимать PDU от IS-IS
Добавить соостветствующие интерфейсы в протокол
Выглядит это так:
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 в широковещательном домене:
root@MX1-L1# run show isis interface extensive
IS-IS interface database:
ge-0/0/0.0
Index: 330, State: 0x6, Circuit id: 0x1, Circuit type: 1
LSP interval: 100 ms, CSNP interval: 5 s, Loose Hello padding
Adjacency advertisement: Advertise
Level 1
Adjacencies: 1, Priority: 64, Metric: 10
Hello Interval: 9.000 s, Hold Time: 27 s
ge-0/0/1.0
Index: 331, State: 0x6, Circuit id: 0x1, Circuit type: 1
LSP interval: 100 ms, CSNP interval: 10 s, Loose Hello padding
Adjacency advertisement: Advertise
Level 1
Adjacencies: 2, Priority: 64, Metric: 10
Hello Interval: 9.000 s, Hold Time: 27 s
Designated Router: MX3-L1-L2.02 (not us)
Level 2
Adjacencies: 0, Priority: 64, Metric: 10
Disabled
Тут сразу видно, что DIS - это MX3-L1-L2 (и это не мы). Приоритет по умолчанию равен 64, а метрика для интерфейса 10. Сделаем MX1-L1 - DIS:
root@MX1-L1# set protocols isis interface ge-0/0/1.0 level 1 priority 77
После принятия изменений:
root@MX1-L1# run show isis interface extensive | find ge-0/0/1.0
ge-0/0/1.0
Index: 331, State: 0x6, Circuit id: 0x2, Circuit type: 1
LSP interval: 100 ms, CSNP interval: 10 s, Loose Hello padding
Adjacency advertisement: Advertise
Level 1
Adjacencies: 2, Priority: 77, Metric: 10
Hello Interval: 3.000 s, Hold Time: 9 s
Designated Router: MX1-L1.02 (us)
Level 2
Adjacencies: 0, Priority: 64, Metric: 10
Disabled
Т.е. тут без перезагрузки произошёл мгновенный перевыбор 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 рассылаются лавинно в самом начале и при обновлениях топологии.
3. Формирование Level 2 смежности
Тут всё аналогично формированию L1-смежности:
root@MX5-L2# show protocols isis
interface ge-0/0/0.0 {
point-to-point;
level 1 disable;
}
interface ge-0/0/3.0 {
point-to-point;
level 1 disable;
}
interface lo0.0 {
level 1 disable;
}
Можно отключить формирование смежности на уровне L1 и глобально для всего протокола, если хочется, как это сделано в предыдущем пункте.
4. Формирование L1/L2 смежности
Тут всё аналогично. На интерфейсах, где планируется принимать только L1 отключаем L2, а где планируется принимать только L2 отключаем L1
root@MX7-L1-L2# show protocols isis
interface ge-0/0/0.0 {
point-to-point;
level 2 disable;
}
interface ge-0/0/1.0 {
point-to-point;
level 1 disable;
}
interface ge-0/0/2.0 {
point-to-point;
level 1 disable;
}
interface ge-0/0/3.0 {
point-to-point;
level 1 disable;
}
interface lo0.0 {
level 2 disable;
}
5. Проверка работы протокола
Посмотрим как выглядит таблица маршрутизации на 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 роутерах:
root@MX6-L2# run show route protocol isis | match 25.0.0
25.0.0.0/29 *[IS-IS/18] 00:11:20, metric 30
25.0.0.8/31 *[IS-IS/18] 00:11:14, metric 40
25.0.0.252/32 *[IS-IS/18] 00:11:20, metric 20
25.0.0.253/32 *[IS-IS/18] 00:11:14, metric 30
25.0.0.254/32 *[IS-IS/18] 00:11:14, metric 30
Т.е. L1/L2 роутер просто передаёт внутренние сети в L2. Вот так выглядит база данных на L1/L2 роутере:
root@MX3-L1-L2# run show isis database
IS-IS level 1 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
MX3-L1-L2.00-00 0x5 0x5c3a 1184 L1 L2 Attached
MX2-L1.00-00 0x4 0x44d8 413 L1
MX1-L1.00-00 0x5 0x23f7 1178 L1
MX1-L1.02-00 0x2 0xa9da 1178 L1
4 LSPs
IS-IS level 2 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
MX4-L2.00-00 0x4 0xace0 430 L1 L2
MX5-L2.00-00 0x4 0x7bc4 409 L1 L2
MX6-L2.00-00 0x5 0xcaee 1105 L1 L2
MX3-L1-L2.00-00 0x6 0x9c60 1184 L1 L2
MX7-L1-L2.00-00 0x6 0x1e41 428 L1 L2
MX9-L1-L2.00-00 0x5 0x439f 429 L1 L2
MX11-L1-L2.00-00 0x4 0xae8 427 L1 L2
7 LSPs
При этом сама еденица 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
Проверка связности:
My traceroute [v0.69]
MX12-L1 (0.0.0.0)(tos=0x0 psize=64 bitpattern=0x00) Mon Apr 19 14:34:54 2021
Keys: Help Display mode Restart statistics Order of fields quit
Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 100.0.0.0 0.0% 4 1.5 1.7 1.2 2.2 0.5
2. 1.1.1.12 0.0% 4 1.7 1.7 1.6 1.8 0.1
3. 1.1.1.10 0.0% 4 2.1 2.4 2.1 3.0 0.4
4. 1.1.1.6 0.0% 4 2.8 2.9 2.7 3.1 0.2
5. 1.1.1.0 0.0% 4 3.5 3.8 3.2 5.3 1.0
6. 25.0.0.254 0.0% 3 104.3 147.4 104.3 169.1 37.3
7. Overload Bit
Позволяет отказать в перенаправлении транзитного трафика во время пересчётся 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:
root@MX4-L2> clear isis overload
Last updated
Was this helpful?