> For the complete documentation index, see [llms.txt](https://linkmeup.gitbook.io/sdsm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://linkmeup.gitbook.io/sdsm/11.-mpls-l3vpn/2.-praktika/1.-mpls-l3vpn.md).

# MPLS L3VPN

Я предлагаю в этот раз не брать уже готовую сеть, где уже всё преднастроено. Сейчас интереснее будет пройти этот путь с нуля, пусть и только вехами, не вдаваясь в детали.

Итак, мучаем всё ту же сеть, но упростим её удалением одного филиала:

![](https://img-fotki.yandex.ru/get/47606/83739833.55/0_10e8f8_89d2dfab_orig.png)наверх")

Начнём с одного клиента и двух точек подключения.

Клиентские маршрутизаторы имеют очень простую конфигурацию:

**C3PO\_1:**

```
C3PO_1(config)# interface Loopback0
C3PO_1(config-if)# ip address 192.168.255.1 255.255.255.255

C3PO_1(config)# interface FastEthernet0/0
C3PO_1(config-f)# description To Linkmeup
C3PO_1(config-if)# ip address 192.168.0.2 255.255.255.0

C3PO_1(config)# router ospf 1
C3PO_1(config-router)# network 192.168.0.0 0.0.255.255 area 0
```

**C3PO\_2:**

```
C3PO_1(config)# interface Loopback0
C3PO_1(config-if)# ip address 192.168.255.2 255.255.255.255

C3PO_1(config)# interface FastEthernet0/0
C3PO_1(config-f)# description To Linkmeup
C3PO_1(config-if)# ip address 192.168.1.2 255.255.255.0

C3PO_1(config)# router ospf 1
C3PO_1(config-router)# network 192.168.0.0 0.0.255.255 area 0
```

На клиентских узлах настроены линковые адреса с провайдером и интерфейс Loopback (как и прежде, мы используем этот интерфейс, чтобы имитировать сеть, дабы не плодить маршрутизаторы). То есть если на *C3PO\_2* мы увидим сеть 192.168.255.1/32, это значит, что мы увидели бы и всю сеть полностью.\
В качестве локального протокола динамической маршрутизации используется OSPF. Собственно, именно он позволит сообщить адрес Loopback-интерфейса всем заинтересованным.

**Что же касается сети провайдера.**

Вначале мы приведём краткий порядок настройки, а потом покажем на примере.

* Настройка базовой связности магистральной сети: IP-адреса, IGP.
* Включение MPLS и LDP
* Создание VRF и привязка к интерфейсам.
* Настройка протокола маршрутизации с CE.
* Настройка BGP и MBGP

**1)** Настраиваем IP-адреса: линковые и loopback. Клиентские пока не трогаем.

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#interface Loopback0
Linkmeup_R1(config-if)#ip address 1.1.1.1 255.255.255.255

Linkmeup_R1(config)#interface FastEthernet0/1
Linkmeup_R1(config-if)#description To Linkmeup_R2
Linkmeup_R1(config-if)#ip address 10.0.12.1 255.255.255.0
```

***Linkmeup\_R2*****:**

```
Linkmeup_R2(config)#interface Loopback0
Linkmeup_R2(config-if)#ip address 2.2.2.2 255.255.255.255

Linkmeup_R2(config)#interface FastEthernet0/0
Linkmeup_R2(config-if)#description To Linkmeup_R1
Linkmeup_R2(config-if)#ip address 10.0.12.2 255.255.255.0

Linkmeup_R2(config)#interface FastEthernet0/1
Linkmeup_R2(config-if)#description To Linkmeup_R3
Linkmeup_R2(config-if)#ip address 10.0.23.2 255.255.255.0
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#interface Loopback0
Linkmeup_R3(config-if)#ip address 3.3.3.3 255.255.255.255

Linkmeup_R3(config)#interface FastEthernet0/0
Linkmeup_R3(config-if)#description To Linkmeup_R2
Linkmeup_R3(config-if)#ip address 10.0.23.3 255.255.255.0
```

[Файл начальной конфигурации.](https://docs.google.com/document/d/1K8rsLsuXT8lJ0g-_BawXojVFmd462ItpovLJLrOvz5Q/pub)

**2)** Теперь поднимаем ISIS в качестве IGP — он свяжет всю сеть linkmeup, распространив маршрутную информацию о линковых и Loopback-адресах.\
\&#xNAN;***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#router isis 1
Linkmeup_R1(config-router)#net 10.0000.0000.0001.00

Linkmeup_R1(config)#interface FastEthernet 0/1
Linkmeup_R1(config-if)#ip router isis 1
```

***Linkmeup\_R2*****:**

```
Linkmeup_R2(config)#router isis 1
Linkmeup_R2(config-router)#net 10.0000.0000.0002.00

Linkmeup_R2(config)#interface FastEthernet 0/0
Linkmeup_R2(config-if)#ip router isis 1

Linkmeup_R2(config)#interface FastEthernet 0/1
Linkmeup_R2(config-if)#ip router isis 1
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#router isis 1
Linkmeup_R3(config-router)#net 10.0000.0000.0002.00

Linkmeup_R3(config)#interface FastEthernet 0/0
Linkmeup_R3(config-if)#ip router isis 1
```

На этом шаге получили глобальную таблицу маршрутизации — необходимая платформа для следующего шага.

![](https://img-fotki.yandex.ru/get/15556/83739833.48/0_103d44_27156c2e_orig.png)

**3)** Включаем MPLS и LDP:

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#mpls ip
Linkmeup_R1(config)#interface FastEthernet 0/1
Linkmeup_R1(config-if)#mpls ip
```

***Linkmeup\_R2*****:**

```
Linkmeup_R2(config)#mpls ip
Linkmeup_R2(config)#interface FastEthernet 0/0
Linkmeup_R2(config-if)#mpls ip
Linkmeup_R2(config)#interface FastEthernet 0/1
Linkmeup_R2(config-if)#mpls ip
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#mpls ip
Linkmeup_R3(config)#interface FastEthernet 0/0
Linkmeup_R3(config-if)#mpls ip
```

На этом шаге у нас построены LSP между всеми парами LSR:\
![](https://img-fotki.yandex.ru/get/4513/83739833.48/0_103d47_22183454_orig.png)\
\&#xNAN;*\*Пример выделения меток на \_Linkmeup\_R1*.\_

Это базис для VPN. Эти LSP — это набор транспортных меток.

> Мы выбрали здесь LDP, чтобы не усложнять конфигурацию. С RSVP-TE ещё поразбираемся в статье про Traffic Engineering.

**4)** Создаём VRF на двух узлах: *Linkmeup\_R1* и *Linkmeup\_R3*.

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#ip vrf C3PO
Linkmeup_R1(config-vrf)# rd 64500:100
Linkmeup_R1(config-vrf)# route-target both 64500:100
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#ip vrf C3PO
Linkmeup_R3(config-vrf)# rd 64500:100
Linkmeup_R3(config-vrf)# route-target both 64500:100
```

Это позволяет нам обособить все данные одного клиента от других и от сети самого провайдера.\
Здесь же указываем RD и RT. Поскольку задача у нас простая — связать все филиалы C3PO Electronic, то сделаем RD и RT совпадающими. Причём RT на Import и RT на Export тоже будут одинаковыми. Поскольку это обычная практика, существует даже специальная директива — **both** — тогда создаются оба RT сразу одинаковыми.\
В 8-м выпуске мы выбрали номер AS для сети linkmeup — 64500. Он и используется в качестве административного поля.\
Выделенный номер выбирается произвольно, но отслеживается, чтобы не было совпадения с другим, уже использованным.

**5)** Привязываем интерфейсы к VRF и указываем на них IP-адреса.

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#interface FastEthernet0/0
Linkmeup_R1(config-if)# description To C3PO_Electronic_1
Linkmeup_R1(config-if)# ip vrf forwarding C3PO
Linkmeup_R1(config-if)#ip address 192.168.0.1 255.255.255.0
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#interface FastEthernet0/1
Linkmeup_R3(config-if)# description To C3PO_Electronic_2
Linkmeup_R3(config-if)# ip vrf forwarding C3PO
Linkmeup_R3(config-if)#ip address 192.168.1.1 255.255.255.0
```

В таблицах маршрутизации VRF C3PO должны появиться настроенные сети, как Directly connected.\
![](https://img-fotki.yandex.ru/get/5816/83739833.49/0_103d48_2c9690f5_orig.png)

![](https://img-fotki.yandex.ru/get/4714/83739833.55/0_10e8f7_58744105_orig.png)

**6)** Нужно поднять протокол маршрутизации с клиентом. В нашем случае это будет OSPF, хотя с равным успехом это мог бы быть и ISIS или EBGP. Данный процесс никак не должен пересекаться с глобальной таблицей маршрутизации, поэтому помещаем его в VRF:

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#router ospf 2 vrf C3PO
Linkmeup_R1(config-router)# network 192.168.0.0 0.0.255.255 area 0
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#router ospf 2 vrf C3PO
Linkmeup_R3(config-router)# network 192.168.0.0 0.0.255.255 area 0
```

Учитывая, что у клиента OSPF уже настроен, мы должны увидеть адреса Loopback-интерфейсов в таблице маршрутизации.\
![](https://img-fotki.yandex.ru/get/17840/83739833.49/0_103d4a_8d9d93d7_orig.png)

![](https://img-fotki.yandex.ru/get/5012/83739833.55/0_10e8f6_37925673_orig.png)

Как видите, *Linkmeup\_R1* видит 192.168.255.1, но не видит удалённый Loopback – 192.168.255.2. Аналогично и *Linkmeup\_R3* видит только маршруты со своей стороны. Это потому, что через сеть провайдера пока не передаются маршруты клиента.

**7)** Вот и пришло время MBGP.\
Помните, мы говорили о [BGP Free Core](https://linkmeup.ru/blog/154.html#MPLS-BGP) в прошлом выпуске? Этот приём мы вполне можем использовать и здесь. Нам без надобности BGP на *Linkmeup\_R2* — там и не будем его поднимать.

Первая часть — это базовая настройка соседей iBGP.

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#router bgp 64500
Linkmeup_R1(config-router)# neighbor 3.3.3.3 remote-as 64500
Linkmeup_R1(config-router)# neighbor 3.3.3.3 update-source Loopback0
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#router bgp 64500
Linkmeup_R3(config-router)# neighbor 1.1.1.1 remote-as 64500
Linkmeup_R3(config-router)# neighbor 1.1.1.1 update-source Loopback0
```

Вторая часть — настройка Address Family VPNv4 — это то, что позволит с *Linkmeup\_R1* на *Linkmeup\_R3* передать клиентские маршруты. Заметьте, что мы активируем передачу community, потому что этот атрибут используется RT.

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config-router)# address-family vpnv4
Linkmeup_R1(config-router-af)# neighbor 3.3.3.3 activate
Linkmeup_R1(config-router-af)# neighbor 3.3.3.3 send-community both
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config-router)# address-family vpnv4
Linkmeup_R3(config-router-af)# neighbor 1.1.1.1 activate
Linkmeup_R3(config-router-af)# neighbor 1.1.1.1 send-community both
```

Третья часть — это Address Family для данного конкретного VRF. Он работает с обычными IPv4 префиксами, но из VRF C3PO Electronic. Он нужен для того, чтобы передавать маршруты между MBGP и OSPF.\
\&#xNAN;***Linkmeup\_R1*****:**

```
Linkmeup_R1(config-router)# address-family ipv4 vrf C3PO
Linkmeup_R1(config-router-af)# redistribute connected
Linkmeup_R1(config-router-af)# redistribute ospf 2 vrf C3PO
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config-router)# address-family ipv4 vrf C3PO
Linkmeup_R3(config-router-af)# redistribute connected
Linkmeup_R3(config-router-af)# redistribute ospf 2 vrf C3PO
```

Как видите, здесь настроен импорт маршрутов из процесса OSPF с номером 2.\
Соответственно, нужно настроить и импорт маршрутов в OSPF из BGP:

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config)#router ospf 2
Linkmeup_R1(config-router)# redistribute bgp 64500 subnets
```

***Linkmeup\_R3*****:**

```
Linkmeup_R3(config)#router ospf 2
Linkmeup_R3(config-router)# redistribute bgp 64500 subnets
```

И вот теперь всё завертится, закрутится.

Маршруты на PE:\
![](https://img-fotki.yandex.ru/get/3214/83739833.49/0_103d4c_ab6e56a5_orig.png)

![](https://img-fotki.yandex.ru/get/5202/83739833.49/0_103d4d_d5f67a14_orig.png)

Маршруты на CE:\
![](https://img-fotki.yandex.ru/get/3201/83739833.49/0_103d4e_f4ed70b4_orig.png)

Пинг между клиентскими сетями:\
![](https://img-fotki.yandex.ru/get/15587/83739833.49/0_103d4f_3e31deb3_orig.png)

Попытка пинга провайдерской сети:\
![](https://img-fotki.yandex.ru/get/15516/83739833.49/0_103d50_8e8e770b_orig.png)

Вот и славно.

**Подключение клиента по BGP**\
Теперь подключим клиента TAR’S Robotics. Маршруты между CE и PE будут передаваться по BGP или, иными словами, поднимаем EBGP с клиентским маршрутизатором.\
Шаги 4 и 5 не будут отличаться. Приведём конфигурацию только одной стороны:

```
Linkmeup_R1(config)#ip vrf TARS
Linkmeup_R1(config-vrf)#rd 64500:200
Linkmeup_R1(config-vrf)#route-target export 64500:200
Linkmeup_R1(config-vrf)#route-target import 64500:200

Linkmeup_R1(config)#interface FastEthernet1/0
Linkmeup_R1(config-if)#description To TARS_1
Linkmeup_R1(config-if)#ip vrf forwarding TARS
Linkmeup_R1(config-if)#ip address 100.0.0.1 255.255.255.0
```

**6)** На CE EBGP настраивается самым обычным образом.\
**TARS\_1:**

```
TARS_1(config)#router bgp 64510
TARS_1(config-router)#network 172.16.255.1 mask 255.255.255.255
TARS_1(config-router)#neighbor 100.0.0.1 remote-as 64500
```

Здесь указано, что TARS’ Robotics будет анонсировать свою сеть 172.16.255.1/32.\
OSPF по-прежнему может быть нужен, но он уже будет использоваться для маршрутизации внутри этого филиала и только.

На PE всё то же самое, только не будет нового процесс OSPF (потому что с клиентом теперь EBGP, вместо OSPF) и меняется address family ipv4 vrf TARS:

***Linkmeup\_R1*****:**

```
Linkmeup_R1(config-router)#address-family ipv4 vrf TARS
Linkmeup_R1(config-router-af)#redistribute connected
Linkmeup_R1(config-router-af)#neighbor 100.0.0.2 remote-as 64510
Linkmeup_R1(config-router-af)#neighbor 100.0.0.2 activate
```

Теперь *Linkmeup\_R1* является BGP-соседом *TARS\_1*:

![](https://img-fotki.yandex.ru/get/15548/83739833.49/0_103d51_ae35c656_orig.png)

Клиентские сети он получит сообщениями Update от CE.

**7)** Всё, что касается MBGP — то же самое. От того, что мы поменяли протокол взаимодействия с клиентом, в нём ничего не перевернётся.\
То есть уже сейчас всё должно заработать (если, конечно, вторая сторона настроена):

![](https://img-fotki.yandex.ru/get/15535/83739833.49/0_103d52_4353bc32_orig.png)

![](https://img-fotki.yandex.ru/get/4014/83739833.49/0_103d53_4398b9f8_orig.png)

![](https://img-fotki.yandex.ru/get/3009/83739833.49/0_103d54_50819915_orig.png)

Полная конфигурация всех узлов [с комментариями](https://docs.google.com/document/d/1KLzGUfB5j-DczWDnUyz_3ql7Zx7KO3pn_IOaxv_FSus/pub) и [без](https://docs.google.com/document/d/1DbvOE2SanX1LPuuQ286jgqcxKCCVW7gxcfRPXJc4jJg/pub).

**Что же мы натворили?**

Давайте теперь проследим распространение меток.

Вот что передал *Linkmeup\_R1* узлу *Linkmeup\_R3*.\
![](https://img-fotki.yandex.ru/get/9165/83739833.55/0_10e3db_89dede6d_orig.png)

Вы видите здесь метку 22 для FEC 192.168.255.1 и адрес Next Hop 1.1.1.1.\
Как её понимает маршрутизатор?\
В ТМ VRF C3PO он заносит информацию о том, какой Next Hop:\
![](https://img-fotki.yandex.ru/get/4410/83739833.49/0_103d58_1da6a995_orig.png)

Рекурсивно вычислить, как доступен 1.1.1.1:\
![](https://img-fotki.yandex.ru/get/15550/83739833.49/0_103d5a_94ab054c_orig.png)

Сервисную метку можно увидеть в таблице BGP для VRF C3PO:\
![](https://img-fotki.yandex.ru/get/15549/83739833.49/0_103d56_3035930e_orig.png)\
Кстати, здесь же видно и Next Hop.

Транспортная метка для FEC 1.1.1.1:\
![](https://img-fotki.yandex.ru/get/6001/83739833.49/0_103d57_797ce063_orig.png)

Но, как обычно FIB содержит всю актуальную информацию без многократных обращений к ТМ:\
![](https://img-fotki.yandex.ru/get/15513/83739833.49/0_103d5b_df5eb20d_orig.png)

FIB говорит нам: упаковать пакет с [DIP](http://lookmeup.linkmeup.ru/#term53) 192.168.255.1 в стек меток {17, 22} и отправить его в сторону 10.0.23.2 в интерфейс FE0/0.

Всё тут предельно ясно и детерминировано.

Давайте подытожим шаги настройки L3VPN с нуля в правильном порядке от общего к частному.

1. Настроить IP-адреса провайдера: линковые и лупбэк. *Все узлы, настроил и забыл*.
2. Настроить IGP в сети провайдера, чтобы обеспечить внутреннюю связность. *Все узлы, настроил и забыл*.
3. Настроить MPLS + LDP (или RSVP TE, если необходимо). *Все узлы, настроил и забыл*.
4. Настроить MBGP внутри сети провайдера. *Только те PE, где есть клиенты, настроил и забыл*.
5. Настроить клиентские VRF, назначить RD, RT. *Только те PE, где есть клиенты, настраиватся персонально для каждого*.
6. Добавить в VRF клиентские интерфейсы, настроить на них IP-адреса. *Только те PE, где есть клиенты, настраиватся персонально для каждого*.
7. При необходимости поднять IGP/BGP с клиентом для обмена маршрутами. *Только те PE, где есть клиенты, настраиватся персонально для каждого*.
8. Готово

Это были необходимые и достаточные действия для настройки базового L3VPN.\
Ну и последний сценарий в рамках практики — это
