Практическая часть

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-адреса.

root@MX1-L1#
set interfaces lo0.0 family iso address 49.0001.0250.0000.0254.00

3. Формирование Level 1 смежности

Для формирования смежности необходимо:

  1. Иметь iso-адрес на lo0.0 интерфейсе (Сделано в предыдущем пункте)

  2. Указать family iso на интерфейсах, на которых будет формироваться смежность. Это необходимо, чтобы мы могли принимать PDU от IS-IS

  3. Добавить соостветствующие интерфейсы в протокол

Выглядит это так:

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 в широковещательном домене:

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?