# 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.\
Ну и последний сценарий в рамках практики — это


---

# Agent Instructions: 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://linkmeup.gitbook.io/sdsm/11.-mpls-l3vpn/2.-praktika/1.-mpls-l3vpn.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.
