# Static LSP

![Схема сети](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MYyY3V0aGMTpW1TGN76%2F-MYyYMgGVZY5Xksd_daB%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=69044547-098c-4de9-b97a-e1e316543061)

Прежде всего можно настроить Static LSP. Это позволит понят как работает коммутация по меткам. Метод похож на статическую маршрутизацию. Мы просто указываем что нам нужно сделать с меткой (Push/Pop/Swap) и куда направить трафик.

Как пример, свяжем роутер RT.MSK.M34 и RT.SPB.LNX. Стоит помнить, что маршрут в данном случае придётся строить и в одну и в другую сторону. Минусы данного способа ясны. Из плюсов: Можно строить путь по любому пути.

Ради примера построим следующий путь:

```
RT.MSK.M34 <-> RT.SPB.STL <-> RT.SPB.LNX
RT.SPB.LNX <-> RT.SPB.OBV <-> RT.MSK.M8 <-> RT.MSK.M34
```

Путь RT.MSK.M34 <-> RT.SPB.LNX будет выглядеть так:

{% tabs %}
{% tab title="RT.MSK.M34" %}
```
root@RT.MSK.M34# show | compare 
[edit interfaces ge-0/0/0 unit 0] ##Включаем обработку MPLS-трафика на интерфейсах
+      family mpls;
[edit interfaces ge-0/0/3 unit 0]
+      family mpls;
[edit interfaces lo0 unit 0]
+      family mpls;
[edit protocols]
+   mpls {
+       static-label-switched-path M34-LNX { ##Указываем имя для статического LSR
+           ingress { ##Говорим, что это Ingress-LSR
+               next-hop 10.0.0.1; ##Указываем Next-Hop
+               to 192.168.0.8; ##Указываем FEC
+               push 1000001; ##Указываем, что для этого FEC мы добавляем метку
+           }                 ##с номером 1000001
+       }
+       interface all; ##Разрешаем работу протокола на всех интерфейсах
+   }
```
{% endtab %}

{% tab title="RT.SPB.STL" %}
```
root@RT.SPB.STL# show | compare 
[edit interfaces ge-0/0/3 unit 0]
+      family mpls;
[edit interfaces ge-0/0/4 unit 0]
+      family mpls;
[edit protocols]
+   mpls {
+       static-label-switched-path M34-LNX {
+           transit 1000001 {
+               next-hop 10.0.0.9;
+               pop;
+           }
+       }
+       interface all;
+   }
```
{% endtab %}

{% tab title="RT.SPB.LNX" %}
```
+  protocols {
+      mpls {
+          interface all;
+      }
+  }
+  interfaces {
+      ge-0/0/2 {
+          unit 0 {    
+              family mpls;                
+          }
+      }
+      ge-0/0/4 {
+          unit 0 {    
+              family mpls;
+          }
+      }
+      lo0 {
+          unit 0 {
+              family mpls;
+          }
+      }
+  }
```
{% endtab %}
{% endtabs %}

Тут мы навешиваем метку, передаём на RT.SPB.STL пакет, но на нём уже можно снимать метку, так как нет смысла её обрабатывать на Eggress Router.

Теперь отключим на M34 и посмотрим таблицу inet.3:

```
root@RT.MSK.M34# show | compare 
[edit protocols]
!    inactive: isis { ... }

root@RT.MSK.M34# run show route table inet.3             

inet.3: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.8/32     *[MPLS/6/1] 00:15:53, metric 0
                    > to 10.0.0.1 via ge-0/0/3.0, Push 1000001
```

Как видим, у нас есть маршрут через MPLS. Однако, чтобы пустить трафик по статическому пути, нам нужно либо устроить Route-Leaking из таблицы inet.3 в inet.0, либо прописать на Ingress-роутере статический маршрут:

```
root@RT.MSK.M34# show | compare 
[edit routing-options]
+   static {
+       route 192.168.0.8/32 {
+           static-lsp-next-hop M34-LNX;
+       }
+   }

root@RT.MSK.M34# run show route 192.168.0.8/32 

inet.0: 28 destinations, 29 routes (28 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.8/32     *[Static/5] 00:00:20
                    > to 10.0.0.1 via ge-0/0/3.0, Push 1000001
                    [IS-IS/18] 01:12:06, metric 20
                    > to 10.0.0.1 via ge-0/0/3.0
```

```
root@RT.SPB.LNX# show | compare 
[edit routing-options]
+   static {
+       route 192.168.0.1/32 {
+           static-lsp-next-hop LNX-M34;
+       }
+   }

root@RT.SPB.LNX# run show route 192.168.0.1/32 

inet.0: 28 destinations, 29 routes (28 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.1/32     *[Static/5] 00:00:09
                    > to 10.0.0.22 via ge-0/0/2.0, Push 1000005
                    [IS-IS/18] 00:00:09, metric 20
                    > to 10.0.0.8 via ge-0/0/4.0
```

Проверка прохождения трафика от LNX к M34:

```
root@RT.SPB.LNX# run traceroute 192.168.0.1 
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 40 byte packets
 1  10.0.0.22 (10.0.0.22)  3.588 ms  0.948 ms  0.650 ms
     MPLS Label=1000005 CoS=0 TTL=1 S=1
 2  10.0.0.20 (10.0.0.20)  4.459 ms  1.301 ms  1.192 ms
     MPLS Label=1000006 CoS=0 TTL=1 S=1
 3  192.168.0.1 (192.168.0.1)  5.360 ms  1.843 ms  2.219 ms
```

Т.е. видно, что трафик ходит именно по тому пути, который мы для него установили.

Проверка LSP:

```
root@RT.SPB.LNX# run show mpls static-lsp extensive 
Ingress LSPs:
LSPname: LNX-M34, To: 192.168.0.1
  State: Up
  Nexthop: 10.0.0.22 Via ge-0/0/2.0
  LabelOperation: Push, Outgoing-label: 1000005
  Created: Fri Apr 23 13:40:53 2021
  Bandwidth: 0 bps
  Statistics: Packets 293, Bytes 17531
Total 1, displayed 1, Up 1, Down 0

root@RT.SPB.OBV# run show mpls static-lsp extensive 
Ingress LSPs:
Total 0, displayed 0, Up 0, Down 0

Transit LSPs:
LSPname: LNX-M34, Incoming-label: 1000005
  State: Up, Sub State: Traffic via primary but unprotected
  Nexthop: 10.0.0.20 Via ge-0/0/4.0
  LabelOperation: Swap, Outgoing-label: 1000006
  Created: Fri Apr 23 13:45:37 2021
  Bandwidth: 0 bps
  Statistics: Packets 256, Bytes 16662
Total 1, displayed 1, Up 1, Down 0
```

Также стоит обратить внимание на таблицы inet.3 и mpls.0:

```
root@RT.SPB.LNX# run show route table inet.3  

inet.3: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.1/32     *[MPLS/6/1] 01:33:45, metric 0
                    > to 10.0.0.22 via ge-0/0/2.0, Push 1000005

[edit]
root@RT.SPB.LNX# run show route table mpls.0    

mpls.0: 6 destinations, 6 routes (6 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

0                  *[MPLS/0] 01:44:56, metric 1
                      to table inet.0
0(S=0)             *[MPLS/0] 01:44:56, metric 1
                      to table mpls.0
1                  *[MPLS/0] 01:44:56, metric 1
                      Receive
2                  *[MPLS/0] 01:44:56, metric 1
                      to table inet6.0
2(S=0)             *[MPLS/0] 01:44:56, metric 1
                      to table mpls.0
13                 *[MPLS/0] 01:44:56, metric 1
                      Receive

root@RT.SPB.OBV# run show route table mpls.0 

mpls.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

0                  *[MPLS/0] 01:40:44, metric 1
                      to table inet.0
0(S=0)             *[MPLS/0] 01:40:44, metric 1
                      to table mpls.0
1                  *[MPLS/0] 01:40:44, metric 1
                      Receive
2                  *[MPLS/0] 01:40:44, metric 1
                      to table inet6.0
2(S=0)             *[MPLS/0] 01:40:44, metric 1
                      to table mpls.0
13                 *[MPLS/0] 01:40:44, metric 1
                      Receive
1000005            *[MPLS/6] 01:40:44, metric 1
                    > to 10.0.0.20 via ge-0/0/4.0, Swap 1000006
```

Тут видно, что если таблица inet.3 хранится на Ingress-Router'ах, то mpls.0 заполнена чем-то помимо служебных меток только на транзитных. Логично, что роутер может быть Ingress/Egress/Transit для разных LSP одновременно.

Из вывода таблиц можно сделать вывод, что inet.3 нужна для определения FEC и, в основном, для операции Push, а mpls.0 уже для коммутации по меткам, не оглядываясь на таблицу маршрутизации. Т.е. на сетевой уровень мы смотрим только в начале пути.

Приводить конфигурацию настройки статического LSP не имеет смысла, так как тут всё довольно очевидно.
