> For the complete documentation index, see [llms.txt](https://adavyshin.gitbook.io/networks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adavyshin.gitbook.io/networks/network/laboratornaya-rabota-mpls.md).

# Лабораторная работа: MPLS

## Предисловие

На лабораторном полигоне для отработки навыков по настройке MPLS L3VPN используется топология с 3-мя компаниями, которые расположены в двух бизнес-центрах, также отработаем и за провайдера, перед которым стоит задача по построению каналов между клиентами (3-мя компаниями).

Сеть провайдера состоит из 6 маршрутизаторов. В backbone-mpls-инфре используется CG-NAT сеть 100.64.0.0/16 и для связи двух роутеров Х и Y будет использоваться 100.64.XY.0/24 подсеть.

## Часть 1. Настраиваем PE-маршрутизаторы

Маршрутизаторы с именами <kbd>PE\*</kbd> в сторону клиентов пока не настроены.&#x20;

{% hint style="info" %}
При настройке VRF вручную (а не copy+paste) будьте внимательны, так как имена чувствительны к регистру
{% endhint %}

🔧 Конфигурация маршрутизатора <kbd>PE1</kbd>:

```
configure terminal
!
vrf definition COMPANY1
  rd 801:1001
  route-target import 1:100
  route-target export 1:100
  address-family ipv4 unicast
  exit
!
interface GigabitEthernet0/0
  vrf forwarding COMPANY1
  ip address 198.18.100.1 255.255.255.0
  no shutdown
!
vrf definition COMPANY2
  rd 801:1002
  route-target import 1:200
  route-target export 1:200
  address-family ipv4 unicast
  exit
!
interface GigabitEthernet0/1
  vrf forwarding COMPANY2
  ip address 10.111.111.1 255.255.255.0
  no shutdown
!
vrf definition COMPANY3
  rd 801:1003
  route-target import 1:300
  route-target export 1:300
  address-family ipv4 unicast
  exit
!
interface GigabitEthernet0/2
  vrf forwarding COMPANY3
  ip address 198.18.100.1 255.255.255.0
  no shutdown
```

🔍 Проверяем доступность наших клиентских CE-устройств на <kbd>PE1</kbd>.

<figure><img src="/files/eqLGZ7AOq6rGMcyNUJ6z" alt=""><figcaption></figcaption></figure>

🔧 Производим настройку маршрутизатора <kbd>PE6</kbd> по аналогии:

```
configure terminal
!
vrf definition COMPANY1
  rd 801:1001
  route-target import 1:100
  route-target export 1:100
  address-family ipv4 unicast
  exit
!
interface GigabitEthernet0/0
  vrf forwarding COMPANY1
  ip address 198.18.200.1 255.255.255.0
  no shutdown
!
vrf definition COMPANY2
  rd 801:1002
  route-target import 1:200
  route-target export 1:200
  address-family ipv4 unicast
  exit
!
interface GigabitEthernet0/1
  vrf forwarding COMPANY2
  ip address 10.222.222.1 255.255.255.0
  no shutdown
!
vrf definition COMPANY3
  rd 801:1003
  route-target import 1:300
  route-target export 1:300
  address-family ipv4 unicast
  exit
!
interface GigabitEthernet0/2
  vrf forwarding COMPANY3
  ip address 198.18.200.1 255.255.255.0
  no shutdown
```

🔍 Проверяем доступность наших клиентских CE-устройств на <kbd>PE6</kbd>.

<figure><img src="/files/qeBk91LtCLAq157ODQqr" alt=""><figcaption></figcaption></figure>

## Часть 2. Настройка сети провайдера

В сети провайдера у нас нас настроены только IP-адреса для вашего удобства и понимания топологии. Но у нас ядре провайдера должен работать MPLS. Технология MPLS использует под капотом протокол `LDP`, который в свою очередь протокол динамической маршрутизации, как правило Link-State типа.

💡Давайте для построения опорной сети мы будем использовать протокол IS-IS

🔧 Настройка маршрутизатора <kbd>PE1</kbd>: &#x20;

```
configure terminal
!
ip cef
!
mpls ip
mpls ldp router-id Loopback0 force
!
interface range GigabitEthernet0/3-5
  mpls ip
  ip router isis
exit
!
interface Loopback0
  ip router isis
exit
!
router isis
  net 49.0000.0000.0001.00
```

🔧 Настройка маршрутизатора <kbd>P2</kbd>:

```
configure terminal
!
ip cef
!
mpls ip
mpls ldp router-id Loopback0 force
!
interface range GigabitEthernet0/0-1
  mpls ip
  ip router isis
exit
!
interface Loopback0
  ip router isis
!
router isis
  net 49.0000.0000.0002.00
```

🔧 Настройка маршрутизатора <kbd>P3</kbd>:

```
configure terminal
!
ip cef
!
mpls ip
mpls ldp router-id Loopback0 force
!
interface range GigabitEthernet0/0-1
  mpls ip
  ip router isis
exit
!
interface Loopback0
  ip router isis
!
router isis
  net 49.0000.0000.0003.00
```

🔧 Настройка маршрутизатора <kbd>P4</kbd>:

```
configure terminal
!
ip cef
!
mpls ip
mpls ldp router-id Loopback0 force
!
interface range GigabitEthernet0/0-1
  mpls ip
  ip router isis
exit
!
interface Loopback0
  ip router isis
!
router isis
  net 49.0000.0000.0004.00
```

🔧 Настройка маршрутизатора <kbd>P5</kbd>:

```
configure terminal
!
ip cef
!
mpls ip
mpls ldp router-id Loopback0 force
!
interface range GigabitEthernet0/0-1
  mpls ip
  ip router isis
exit
!
interface Loopback0
  ip router isis
!
router isis
  net 49.0000.0000.0005.00
```

🔧 Настройка маршрутизатора <kbd>PE6</kbd>:

```
configure terminal
!
ip cef
!
mpls ip
mpls ldp router-id Loopback0 force
!
interface range GigabitEthernet0/3-5
  mpls ip
  ip router isis
exit
!
interface Loopback0
  ip router isis
exit
!
router isis
  net 49.0000.0000.0006.00
```

В результате заливки данной конфигурации на маршрутизаторы провайдера мы должны увидеть syslog-сообщения по установки соседств по `Label Distribution Protocol`.

> \*Oct 19 14:55:51.074: %LDP-5-NBRCHG: LDP Neighbor 100.64.2.2:0 (1) is UP> \
> \*Oct 19 14:58:03.569: %LDP-5-NBRCHG: LDP Neighbor 100.64.5.5:0 (2) is UP> \
> \*Oct 19 14:58:11.459: %LDP-5-NBRCHG: LDP Neighbor 100.64.4.4:0 (3) is UP

💡 Посмотреть LDP-соседей можно посмотреть с помощью команды:&#x20;

`show mpls ldp neighbor`

💡Посмотреть таблицу Label Switching Path (LSP)

`show mpls forwarding-table`

Пример таблицы LSP на маршрутизаторе <kbd>PE1</kbd> представлены на скриншоте ниже:

<figure><img src="/files/Wd5EiwXnlzat0DQRjQ6e" alt=""><figcaption></figcaption></figure>

## Часть 3. Настройка MP-BGP между PE-устройствами

Передача маршрутов клиентов от одного site до другого site осуществляется внутри Multiprotocol Border Gateway Protocol (MP-BGP) внутри Address-Family VPNv4. Напомню, что VPNv4-маршруты это склейка   `Route Distinguisher` и IPv4-адреса сети&#x20;

<figure><img src="/files/bbCC1ofnqFXcNZUvg0Un" alt=""><figcaption></figcaption></figure>

🔧 Настройка маршрутизатора <kbd>PE1</kbd>:

```
configure terminal
!
router bgp 801
  bgp log-neighbor-changes
  bgp router-id 100.64.1.1
  neighbor 100.64.6.6 remote-as 801
  neighbor 100.64.6.6 update-source Lo0
  address-family vpnv4
    neighbor 100.64.6.6 activate
    neighbor 100.64.6.6 send-community both
```

🔧 Настройка маршрутизатора <kbd>PE6</kbd>:

```
configure terminal
!
router bgp 801
  bgp log-neighbor-changes
  bgp router-id 100.64.6.6
  neighbor 100.64.1.1 remote-as 801
  neighbor 100.64.1.1 update-source Lo0
  address-family vpnv4
    neighbor 100.64.1.1 activate
    neighbor 100.64.1.1 send-community both
```

Получаем заветное сообщение о том, что у вас установилось соседство.

> \*Oct 19 15:26:01.297: %BGP-5-ADJCHANGE: neighbor 100.64.6.6 Up

## Часть 4.1. Канал связи для "COMPANY1"

Для предоставления услуги L3VPN для "Компании 1" необходимо настроить BGP-связность между парами маршрутизаторов <kbd>COMPANY1-CE1</kbd> и <kbd>PE1</kbd>, <kbd>COMPANY1-CE2</kbd> и <kbd>PE6</kbd>.&#x20;

🔧 Конфигурация <kbd>PE1</kbd>:

```
configure terminal
!
router bgp 801
address-family ipv4 vrf COMPANY1
  neighbor 198.18.100.100 remote-as 19818
  neighbor 198.18.100.100 activate
  redistribute connected
```

🔧 Конфигурация <kbd>PE6</kbd>:

```
configure terminal
!
router bgp 801
address-family ipv4 vrf COMPANY1
  neighbor 198.18.200.200 remote-as 19818
  neighbor 198.18.200.200 activate
  redistribute connected
```

🔧 Конфигурация `COMPANY1-CE1`:

```
configure terminal
!
router bgp 19818
  address-family ipv4
  neighbor 198.18.100.1 remote-as 801
  network 192.168.1.0 mask 255.255.255.0
```

🔧 Конфигурация `COMPANY1-CE2`:

```
configure terminal
!
router bgp 19818
  address-family ipv4
  neighbor 198.18.200.1 remote-as 801
  network 192.168.2.0 mask 255.255.255.0
```

🔍 Смотрим BGP RIB на маршрутизаторе `COMPANY1-CE1`, она представлена на скриншоте ниже. Тут видно, что CE1 получил префикс подсети `198.18.200.0/24`, но мы там не видим префикса подсети `192.168.2.0/24`.&#x20;

<figure><img src="/files/bGyqmSlwudovQEW27Yb1" alt=""><figcaption></figcaption></figure>

🔍 А вот на маршрутизаторе провайдера <kbd>PE1</kbd> этот префикс присутствует:

<figure><img src="/files/1l3fB8CuMCPHab6Y9DkM" alt=""><figcaption></figcaption></figure>

А это связано с тем, что у обоих CE-устройств одинаковая BGP AS, эта особенность начинает подтягивать правило Split-Horizon, которое говорит нам, о том, что при eBGP с соседом мы не примем NLRI, у которого AS\_PATH содержит собственную AS. А так оно и получается, и для того, чтобы решить данную задачу, мы можем воспользоваться функцией, которое отключает данное правило.&#x20;

🔧 Шаманим маршрутизатор  <kbd>COMPANY1-CE1</kbd>:

```
configure terminal
!
router bgp 19818
  address-family ipv4
  neighbor 198.18.100.1 allowas-in
```

🔧 Шаманим маршрутизатор  <kbd>COMPANY1-CE2</kbd>:

```
configure terminal
!
router bgp 19818
  address-family ipv4
  neighbor 198.18.200.1 allowas-in
```

🔍 А теперь проверяем BGP RIB  маршрутизатора <kbd>COMPANY1-CE1</kbd>:

<figure><img src="/files/LsUKnCEsdlURHgCms8zi" alt=""><figcaption></figcaption></figure>

Теперь всё окей с полученным префиксом до `192.168.2.0/24`, где в `AS_PATH` у нас фигурирует собственная AS. Чтобы быть до конца уверенными давайте с <kbd>COMPANY1-CE1</kbd> пропингуем адрес на роутере <kbd>COMPANY1-CE2</kbd>

<figure><img src="/files/RG632y61YR0j0IECRIgq" alt=""><figcaption></figcaption></figure>

🎉 Считаем часть 4.1 выполненной и двигаемся дальше...

## Часть 4.2. Канал связи для "COMPANY2"

Здесь идентичная ситуация как в ч 4.1, но здесь нет сложности с одинаковыми AS с обоих сторон. Настраиваем eBGP между CE и PE устройствами и проверяем, что префиксы распространяются от одного CE до второго СE и наоборот.

🔧 Конфигурация <kbd>PE1</kbd>:

```
configure terminal
!
router bgp 801
address-family ipv4 vrf COMPANY2
  neighbor 10.111.111.111 remote-as 111
  neighbor 10.111.111.111 activate
  redistribute connected
```

🔧 Конфигурация <kbd>PE6</kbd>:

```
configure terminal
!
router bgp 801
address-family ipv4 vrf COMPANY2
  neighbor 10.222.222.222 remote-as 222
  neighbor 10.222.222.222 activate
  redistribute connected
```

🔧 Конфигурация <kbd>COMPANY2-CE1</kbd>:

```
configure terminal
!
router bgp 111
  address-family ipv4
  neighbor 10.111.111.1 remote-as 801
  network 10.11.0.0 mask 255.255.0.0
```

🔧 Конфигурация <kbd>COMPANY2-CE2</kbd>:

```
configure terminal
!
router bgp 222
  address-family ipv4
  neighbor 10.222.222.1 remote-as 801
  network 10.22.0.0 mask 255.255.0.0
```

<figure><img src="/files/Mkz6Z2UQXkcN4PlqNv9G" alt=""><figcaption></figcaption></figure>

🎉 Считаем часть 4.2 выполненной и двигаемся дальше...

## Часть 4.3. Канал связи для "COMPANY3"

Теперь приступим с настройкой "`COMPANY3`", здесь пиринг между заказчиком и провайдером осуществляется по OSPF.&#x20;

🔧  Конфигурация маршрутизатора <kbd>PE1</kbd>:

```
configure terminal
!
router ospf 1 vrf COMPANY3
  network 198.18.100.0 0.0.0.255 area 0 
  redistribute bgp 801 subnets
!
router bgp 801
  address-family ipv4 vrf COMPANY3
  redistribute connected
  redistribute ospf 1 vrf COMPANY3
```

🔧  Конфигурация маршрутизатора <kbd>PE6</kbd>:

```
configure terminal
!
router ospf 1 vrf COMPANY3
  network 198.18.200.0 0.0.0.255 area 0 
  redistribute bgp 801 subnets
!
router bgp 801
  address-family ipv4 vrf COMPANY3
  redistribute connected
  redistribute ospf 1 vrf COMPANY3
```

🔧  Конфигурация маршрутизатора <kbd>COMPANY3-CE1</kbd>:

```
configure terminal
!
router ospf 1
  network 192.168.1.0 0.0.0.255 area 0
  network 198.18.100.0 0.0.0.255 area 0
```

🔧  Конфигурация маршрутизатора <kbd>COMPANY3-CE2</kbd>:

```
configure terminal
!
router ospf 1
  network 192.168.2.0 0.0.0.255 area 0
  network 198.18.200.0 0.0.0.255 area 0
```

🔍 Проверяем маршруты на маршрутизаторе <kbd>COMPANY3-CE2</kbd>:

<figure><img src="/files/pa32SYrqnTEy4eQb63jF" alt=""><figcaption></figcaption></figure>

## Ч5.  Импорты маршрутов между VRF

Давайте представим такую картину, что COMPANY1 и COMPANY2 объединились в единую группу компаний, и теперь консолидируют IT-ресурсы. То есть у них должна быть прямая видимость друг друга, \
что они сделали? Правильно, пошли к провайдеру и попросили сделать дополнительные связи.

Провайдер конечно может "втупую" протянуть провода провода, но может воспользоваться всеми благами технологии L3VPN.

Смотрите, когда говорят, что VRF изолирует таблицы маршрутизации, это отчасти правда. Так как за изоляцию отвечает метка Route Target, то два VRF смогут общаться, если `export`-метка в одном VRF будет соответствовать import-метке в другом VRF и наоборот.&#x20;

🔧  Конфигурация маршрутизатора <kbd>PE1</kbd>:

```
vrf definition COMPANY1
 route-target import 1:200
!
vrf definition COMPANY2
 route-target import 1:100
```

🔧  Конфигурация маршрутизатора <kbd>PE6</kbd>:

```
vrf definition COMPANY1
 route-target import 1:200
!
vrf definition COMPANY2
 route-target import 1:100
```

Проверяем табличку маршрутизации на <kbd>COMPANY1-CE1</kbd> и видим, что маршруты от `COMPANY2` у нас в FIB.

<figure><img src="/files/OPBWBkOTtiaPVDg2r75A" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://adavyshin.gitbook.io/networks/network/laboratornaya-rabota-mpls.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
