/ 11.-mpls-l3vpn / 2.-praktika / 1.-mpls-l3vpn.md
1.-mpls-l3vpn.md
  1  # MPLS L3VPN
  2  
  3  Я предлагаю в этот раз не брать уже готовую сеть, где уже всё преднастроено. Сейчас интереснее будет пройти этот путь с нуля, пусть и только вехами, не вдаваясь в детали.
  4  
  5  Итак, мучаем всё ту же сеть, но упростим её удалением одного филиала:
  6  
  7  ![](https://img-fotki.yandex.ru/get/47606/83739833.55/0_10e8f8_89d2dfab_orig.png)наверх"\)
  8  
  9  Начнём с одного клиента и двух точек подключения.
 10  
 11  Клиентские маршрутизаторы имеют очень простую конфигурацию:
 12  
 13  **C3PO\_1:**
 14  
 15  ```text
 16  C3PO_1(config)# interface Loopback0
 17  C3PO_1(config-if)# ip address 192.168.255.1 255.255.255.255
 18  
 19  C3PO_1(config)# interface FastEthernet0/0
 20  C3PO_1(config-f)# description To Linkmeup
 21  C3PO_1(config-if)# ip address 192.168.0.2 255.255.255.0
 22  
 23  C3PO_1(config)# router ospf 1
 24  C3PO_1(config-router)# network 192.168.0.0 0.0.255.255 area 0
 25  ```
 26  
 27  **C3PO\_2:**
 28  
 29  ```text
 30  C3PO_1(config)# interface Loopback0
 31  C3PO_1(config-if)# ip address 192.168.255.2 255.255.255.255
 32  
 33  C3PO_1(config)# interface FastEthernet0/0
 34  C3PO_1(config-f)# description To Linkmeup
 35  C3PO_1(config-if)# ip address 192.168.1.2 255.255.255.0
 36  
 37  C3PO_1(config)# router ospf 1
 38  C3PO_1(config-router)# network 192.168.0.0 0.0.255.255 area 0
 39  ```
 40  
 41  На клиентских узлах настроены линковые адреса с провайдером и интерфейс Loopback \(как и прежде, мы используем этот интерфейс, чтобы имитировать сеть, дабы не плодить маршрутизаторы\). То есть если на _C3PO\_2_ мы увидим сеть 192.168.255.1/32, это значит, что мы увидели бы и всю сеть полностью.  
 42  В качестве локального протокола динамической маршрутизации используется OSPF. Собственно, именно он позволит сообщить адрес Loopback-интерфейса всем заинтересованным.
 43  
 44  **Что же касается сети провайдера.**
 45  
 46  Вначале мы приведём краткий порядок настройки, а потом покажем на примере.
 47  
 48  * Настройка базовой связности магистральной сети: IP-адреса, IGP.
 49  * Включение MPLS и LDP
 50  * Создание VRF и привязка к интерфейсам.
 51  * Настройка протокола маршрутизации с CE.
 52  * Настройка BGP и MBGP
 53  
 54  **1\)** Настраиваем IP-адреса: линковые и loopback. Клиентские пока не трогаем.
 55  
 56  _**Linkmeup\_R1**_**:**
 57  
 58  ```text
 59  Linkmeup_R1(config)#interface Loopback0
 60  Linkmeup_R1(config-if)#ip address 1.1.1.1 255.255.255.255
 61  
 62  Linkmeup_R1(config)#interface FastEthernet0/1
 63  Linkmeup_R1(config-if)#description To Linkmeup_R2
 64  Linkmeup_R1(config-if)#ip address 10.0.12.1 255.255.255.0
 65  ```
 66  
 67  _**Linkmeup\_R2**_**:**
 68  
 69  ```text
 70  Linkmeup_R2(config)#interface Loopback0
 71  Linkmeup_R2(config-if)#ip address 2.2.2.2 255.255.255.255
 72  
 73  Linkmeup_R2(config)#interface FastEthernet0/0
 74  Linkmeup_R2(config-if)#description To Linkmeup_R1
 75  Linkmeup_R2(config-if)#ip address 10.0.12.2 255.255.255.0
 76  
 77  Linkmeup_R2(config)#interface FastEthernet0/1
 78  Linkmeup_R2(config-if)#description To Linkmeup_R3
 79  Linkmeup_R2(config-if)#ip address 10.0.23.2 255.255.255.0
 80  ```
 81  
 82  _**Linkmeup\_R3**_**:**
 83  
 84  ```text
 85  Linkmeup_R3(config)#interface Loopback0
 86  Linkmeup_R3(config-if)#ip address 3.3.3.3 255.255.255.255
 87  
 88  Linkmeup_R3(config)#interface FastEthernet0/0
 89  Linkmeup_R3(config-if)#description To Linkmeup_R2
 90  Linkmeup_R3(config-if)#ip address 10.0.23.3 255.255.255.0
 91  ```
 92  
 93  [Файл начальной конфигурации.](https://docs.google.com/document/d/1K8rsLsuXT8lJ0g-_BawXojVFmd462ItpovLJLrOvz5Q/pub)
 94  
 95  **2\)** Теперь поднимаем ISIS в качестве IGP — он свяжет всю сеть linkmeup, распространив маршрутную информацию о линковых и Loopback-адресах.  
 96  _**Linkmeup\_R1**_**:**
 97  
 98  ```text
 99  Linkmeup_R1(config)#router isis 1
100  Linkmeup_R1(config-router)#net 10.0000.0000.0001.00
101  
102  Linkmeup_R1(config)#interface FastEthernet 0/1
103  Linkmeup_R1(config-if)#ip router isis 1
104  ```
105  
106  _**Linkmeup\_R2**_**:**
107  
108  ```text
109  Linkmeup_R2(config)#router isis 1
110  Linkmeup_R2(config-router)#net 10.0000.0000.0002.00
111  
112  Linkmeup_R2(config)#interface FastEthernet 0/0
113  Linkmeup_R2(config-if)#ip router isis 1
114  
115  Linkmeup_R2(config)#interface FastEthernet 0/1
116  Linkmeup_R2(config-if)#ip router isis 1
117  ```
118  
119  _**Linkmeup\_R3**_**:**
120  
121  ```text
122  Linkmeup_R3(config)#router isis 1
123  Linkmeup_R3(config-router)#net 10.0000.0000.0002.00
124  
125  Linkmeup_R3(config)#interface FastEthernet 0/0
126  Linkmeup_R3(config-if)#ip router isis 1
127  ```
128  
129  На этом шаге получили глобальную таблицу маршрутизации — необходимая платформа для следующего шага.
130  
131  ![](https://img-fotki.yandex.ru/get/15556/83739833.48/0_103d44_27156c2e_orig.png)
132  
133  **3\)** Включаем MPLS и LDP:
134  
135  _**Linkmeup\_R1**_**:**
136  
137  ```text
138  Linkmeup_R1(config)#mpls ip
139  Linkmeup_R1(config)#interface FastEthernet 0/1
140  Linkmeup_R1(config-if)#mpls ip
141  ```
142  
143  _**Linkmeup\_R2**_**:**
144  
145  ```text
146  Linkmeup_R2(config)#mpls ip
147  Linkmeup_R2(config)#interface FastEthernet 0/0
148  Linkmeup_R2(config-if)#mpls ip
149  Linkmeup_R2(config)#interface FastEthernet 0/1
150  Linkmeup_R2(config-if)#mpls ip
151  ```
152  
153  _**Linkmeup\_R3**_**:**
154  
155  ```text
156  Linkmeup_R3(config)#mpls ip
157  Linkmeup_R3(config)#interface FastEthernet 0/0
158  Linkmeup_R3(config-if)#mpls ip
159  ```
160  
161  На этом шаге у нас построены LSP между всеми парами LSR:  
162  ![](https://img-fotki.yandex.ru/get/4513/83739833.48/0_103d47_22183454_orig.png)  
163  _\*Пример выделения меток на \_Linkmeup\_R1_.\_
164  
165  Это базис для VPN. Эти LSP — это набор транспортных меток.
166  
167  > Мы выбрали здесь LDP, чтобы не усложнять конфигурацию. С RSVP-TE ещё поразбираемся в статье про Traffic Engineering.
168  
169  **4\)** Создаём VRF на двух узлах: _Linkmeup\_R1_ и _Linkmeup\_R3_.
170  
171  _**Linkmeup\_R1**_**:**
172  
173  ```text
174  Linkmeup_R1(config)#ip vrf C3PO
175  Linkmeup_R1(config-vrf)# rd 64500:100
176  Linkmeup_R1(config-vrf)# route-target both 64500:100
177  ```
178  
179  _**Linkmeup\_R3**_**:**
180  
181  ```text
182  Linkmeup_R3(config)#ip vrf C3PO
183  Linkmeup_R3(config-vrf)# rd 64500:100
184  Linkmeup_R3(config-vrf)# route-target both 64500:100
185  ```
186  
187  Это позволяет нам обособить все данные одного клиента от других и от сети самого провайдера.  
188  Здесь же указываем RD и RT. Поскольку задача у нас простая — связать все филиалы C3PO Electronic, то сделаем RD и RT совпадающими. Причём RT на Import и RT на Export тоже будут одинаковыми. Поскольку это обычная практика, существует даже специальная директива — **both** — тогда создаются оба RT сразу одинаковыми.  
189  В 8-м выпуске мы выбрали номер AS для сети linkmeup — 64500. Он и используется в качестве административного поля.  
190  Выделенный номер выбирается произвольно, но отслеживается, чтобы не было совпадения с другим, уже использованным.
191  
192  **5\)** Привязываем интерфейсы к VRF и указываем на них IP-адреса.
193  
194  _**Linkmeup\_R1**_**:**
195  
196  ```text
197  Linkmeup_R1(config)#interface FastEthernet0/0
198  Linkmeup_R1(config-if)# description To C3PO_Electronic_1
199  Linkmeup_R1(config-if)# ip vrf forwarding C3PO
200  Linkmeup_R1(config-if)#ip address 192.168.0.1 255.255.255.0
201  ```
202  
203  _**Linkmeup\_R3**_**:**
204  
205  ```text
206  Linkmeup_R3(config)#interface FastEthernet0/1
207  Linkmeup_R3(config-if)# description To C3PO_Electronic_2
208  Linkmeup_R3(config-if)# ip vrf forwarding C3PO
209  Linkmeup_R3(config-if)#ip address 192.168.1.1 255.255.255.0
210  ```
211  
212  В таблицах маршрутизации VRF C3PO должны появиться настроенные сети, как Directly connected.  
213  ![](https://img-fotki.yandex.ru/get/5816/83739833.49/0_103d48_2c9690f5_orig.png)
214  
215  ![](https://img-fotki.yandex.ru/get/4714/83739833.55/0_10e8f7_58744105_orig.png)
216  
217  **6\)** Нужно поднять протокол маршрутизации с клиентом. В нашем случае это будет OSPF, хотя с равным успехом это мог бы быть и ISIS или EBGP. Данный процесс никак не должен пересекаться с глобальной таблицей маршрутизации, поэтому помещаем его в VRF:
218  
219  _**Linkmeup\_R1**_**:**
220  
221  ```text
222  Linkmeup_R1(config)#router ospf 2 vrf C3PO
223  Linkmeup_R1(config-router)# network 192.168.0.0 0.0.255.255 area 0
224  ```
225  
226  _**Linkmeup\_R3**_**:**
227  
228  ```text
229  Linkmeup_R3(config)#router ospf 2 vrf C3PO
230  Linkmeup_R3(config-router)# network 192.168.0.0 0.0.255.255 area 0
231  ```
232  
233  Учитывая, что у клиента OSPF уже настроен, мы должны увидеть адреса Loopback-интерфейсов в таблице маршрутизации.  
234  ![](https://img-fotki.yandex.ru/get/17840/83739833.49/0_103d4a_8d9d93d7_orig.png)
235  
236  ![](https://img-fotki.yandex.ru/get/5012/83739833.55/0_10e8f6_37925673_orig.png)
237  
238  Как видите, _Linkmeup\_R1_ видит 192.168.255.1, но не видит удалённый Loopback – 192.168.255.2. Аналогично и _Linkmeup\_R3_ видит только маршруты со своей стороны. Это потому, что через сеть провайдера пока не передаются маршруты клиента.
239  
240  **7\)** Вот и пришло время MBGP.  
241  Помните, мы говорили о [BGP Free Core](https://linkmeup.ru/blog/154.html#MPLS-BGP) в прошлом выпуске? Этот приём мы вполне можем использовать и здесь. Нам без надобности BGP на _Linkmeup\_R2_ — там и не будем его поднимать.
242  
243  Первая часть — это базовая настройка соседей iBGP.
244  
245  _**Linkmeup\_R1**_**:**
246  
247  ```text
248  Linkmeup_R1(config)#router bgp 64500
249  Linkmeup_R1(config-router)# neighbor 3.3.3.3 remote-as 64500
250  Linkmeup_R1(config-router)# neighbor 3.3.3.3 update-source Loopback0
251  ```
252  
253  _**Linkmeup\_R3**_**:**
254  
255  ```text
256  Linkmeup_R3(config)#router bgp 64500
257  Linkmeup_R3(config-router)# neighbor 1.1.1.1 remote-as 64500
258  Linkmeup_R3(config-router)# neighbor 1.1.1.1 update-source Loopback0
259  ```
260  
261  Вторая часть — настройка Address Family VPNv4 — это то, что позволит с _Linkmeup\_R1_ на _Linkmeup\_R3_ передать клиентские маршруты. Заметьте, что мы активируем передачу community, потому что этот атрибут используется RT.
262  
263  _**Linkmeup\_R1**_**:**
264  
265  ```text
266  Linkmeup_R1(config-router)# address-family vpnv4
267  Linkmeup_R1(config-router-af)# neighbor 3.3.3.3 activate
268  Linkmeup_R1(config-router-af)# neighbor 3.3.3.3 send-community both
269  ```
270  
271  _**Linkmeup\_R3**_**:**
272  
273  ```text
274  Linkmeup_R3(config-router)# address-family vpnv4
275  Linkmeup_R3(config-router-af)# neighbor 1.1.1.1 activate
276  Linkmeup_R3(config-router-af)# neighbor 1.1.1.1 send-community both
277  ```
278  
279  Третья часть — это Address Family для данного конкретного VRF. Он работает с обычными IPv4 префиксами, но из VRF C3PO Electronic. Он нужен для того, чтобы передавать маршруты между MBGP и OSPF.  
280  _**Linkmeup\_R1**_**:**
281  
282  ```text
283  Linkmeup_R1(config-router)# address-family ipv4 vrf C3PO
284  Linkmeup_R1(config-router-af)# redistribute connected
285  Linkmeup_R1(config-router-af)# redistribute ospf 2 vrf C3PO
286  ```
287  
288  _**Linkmeup\_R3**_**:**
289  
290  ```text
291  Linkmeup_R3(config-router)# address-family ipv4 vrf C3PO
292  Linkmeup_R3(config-router-af)# redistribute connected
293  Linkmeup_R3(config-router-af)# redistribute ospf 2 vrf C3PO
294  ```
295  
296  Как видите, здесь настроен импорт маршрутов из процесса OSPF с номером 2.  
297  Соответственно, нужно настроить и импорт маршрутов в OSPF из BGP:
298  
299  _**Linkmeup\_R1**_**:**
300  
301  ```text
302  Linkmeup_R1(config)#router ospf 2
303  Linkmeup_R1(config-router)# redistribute bgp 64500 subnets
304  ```
305  
306  _**Linkmeup\_R3**_**:**
307  
308  ```text
309  Linkmeup_R3(config)#router ospf 2
310  Linkmeup_R3(config-router)# redistribute bgp 64500 subnets
311  ```
312  
313  И вот теперь всё завертится, закрутится.
314  
315  Маршруты на PE:  
316  ![](https://img-fotki.yandex.ru/get/3214/83739833.49/0_103d4c_ab6e56a5_orig.png)
317  
318  ![](https://img-fotki.yandex.ru/get/5202/83739833.49/0_103d4d_d5f67a14_orig.png)
319  
320  Маршруты на CE:  
321  ![](https://img-fotki.yandex.ru/get/3201/83739833.49/0_103d4e_f4ed70b4_orig.png)
322  
323  Пинг между клиентскими сетями:  
324  ![](https://img-fotki.yandex.ru/get/15587/83739833.49/0_103d4f_3e31deb3_orig.png)
325  
326  Попытка пинга провайдерской сети:  
327  ![](https://img-fotki.yandex.ru/get/15516/83739833.49/0_103d50_8e8e770b_orig.png)
328  
329  Вот и славно.
330  
331  **Подключение клиента по BGP**  
332  Теперь подключим клиента TAR’S Robotics. Маршруты между CE и PE будут передаваться по BGP или, иными словами, поднимаем EBGP с клиентским маршрутизатором.  
333  Шаги 4 и 5 не будут отличаться. Приведём конфигурацию только одной стороны:
334  
335  ```text
336  Linkmeup_R1(config)#ip vrf TARS
337  Linkmeup_R1(config-vrf)#rd 64500:200
338  Linkmeup_R1(config-vrf)#route-target export 64500:200
339  Linkmeup_R1(config-vrf)#route-target import 64500:200
340  
341  Linkmeup_R1(config)#interface FastEthernet1/0
342  Linkmeup_R1(config-if)#description To TARS_1
343  Linkmeup_R1(config-if)#ip vrf forwarding TARS
344  Linkmeup_R1(config-if)#ip address 100.0.0.1 255.255.255.0
345  ```
346  
347  **6\)** На CE EBGP настраивается самым обычным образом.  
348  **TARS\_1:**
349  
350  ```text
351  TARS_1(config)#router bgp 64510
352  TARS_1(config-router)#network 172.16.255.1 mask 255.255.255.255
353  TARS_1(config-router)#neighbor 100.0.0.1 remote-as 64500
354  ```
355  
356  Здесь указано, что TARS’ Robotics будет анонсировать свою сеть 172.16.255.1/32.  
357  OSPF по-прежнему может быть нужен, но он уже будет использоваться для маршрутизации внутри этого филиала и только.
358  
359  На PE всё то же самое, только не будет нового процесс OSPF \(потому что с клиентом теперь EBGP, вместо OSPF\) и меняется address family ipv4 vrf TARS:
360  
361  _**Linkmeup\_R1**_**:**
362  
363  ```text
364  Linkmeup_R1(config-router)#address-family ipv4 vrf TARS
365  Linkmeup_R1(config-router-af)#redistribute connected
366  Linkmeup_R1(config-router-af)#neighbor 100.0.0.2 remote-as 64510
367  Linkmeup_R1(config-router-af)#neighbor 100.0.0.2 activate
368  ```
369  
370  Теперь _Linkmeup\_R1_ является BGP-соседом _TARS\_1_:
371  
372  ![](https://img-fotki.yandex.ru/get/15548/83739833.49/0_103d51_ae35c656_orig.png)
373  
374  Клиентские сети он получит сообщениями Update от CE.
375  
376  **7\)** Всё, что касается MBGP — то же самое. От того, что мы поменяли протокол взаимодействия с клиентом, в нём ничего не перевернётся.  
377  То есть уже сейчас всё должно заработать \(если, конечно, вторая сторона настроена\):
378  
379  ![](https://img-fotki.yandex.ru/get/15535/83739833.49/0_103d52_4353bc32_orig.png)
380  
381  ![](https://img-fotki.yandex.ru/get/4014/83739833.49/0_103d53_4398b9f8_orig.png)
382  
383  ![](https://img-fotki.yandex.ru/get/3009/83739833.49/0_103d54_50819915_orig.png)
384  
385  Полная конфигурация всех узлов [с комментариями](https://docs.google.com/document/d/1KLzGUfB5j-DczWDnUyz_3ql7Zx7KO3pn_IOaxv_FSus/pub) и [без](https://docs.google.com/document/d/1DbvOE2SanX1LPuuQ286jgqcxKCCVW7gxcfRPXJc4jJg/pub).
386  
387  **Что же мы натворили?**
388  
389  Давайте теперь проследим распространение меток.
390  
391  Вот что передал _Linkmeup\_R1_ узлу _Linkmeup\_R3_.  
392  ![](https://img-fotki.yandex.ru/get/9165/83739833.55/0_10e3db_89dede6d_orig.png)
393  
394  Вы видите здесь метку 22 для FEC 192.168.255.1 и адрес Next Hop 1.1.1.1.  
395  Как её понимает маршрутизатор?  
396  В ТМ VRF C3PO он заносит информацию о том, какой Next Hop:  
397  ![](https://img-fotki.yandex.ru/get/4410/83739833.49/0_103d58_1da6a995_orig.png)
398  
399  Рекурсивно вычислить, как доступен 1.1.1.1:  
400  ![](https://img-fotki.yandex.ru/get/15550/83739833.49/0_103d5a_94ab054c_orig.png)
401  
402  Сервисную метку можно увидеть в таблице BGP для VRF C3PO:  
403  ![](https://img-fotki.yandex.ru/get/15549/83739833.49/0_103d56_3035930e_orig.png)  
404  Кстати, здесь же видно и Next Hop.
405  
406  Транспортная метка для FEC 1.1.1.1:  
407  ![](https://img-fotki.yandex.ru/get/6001/83739833.49/0_103d57_797ce063_orig.png)
408  
409  Но, как обычно FIB содержит всю актуальную информацию без многократных обращений к ТМ:  
410  ![](https://img-fotki.yandex.ru/get/15513/83739833.49/0_103d5b_df5eb20d_orig.png)
411  
412  FIB говорит нам: упаковать пакет с [DIP](http://lookmeup.linkmeup.ru/#term53) 192.168.255.1 в стек меток {17, 22} и отправить его в сторону 10.0.23.2 в интерфейс FE0/0.
413  
414  Всё тут предельно ясно и детерминировано.
415  
416  Давайте подытожим шаги настройки L3VPN с нуля в правильном порядке от общего к частному.
417  
418  1. Настроить IP-адреса провайдера: линковые и лупбэк. _Все узлы, настроил и забыл_.
419  2. Настроить IGP в сети провайдера, чтобы обеспечить внутреннюю связность. _Все узлы, настроил и забыл_.
420  3. Настроить MPLS + LDP \(или RSVP TE, если необходимо\). _Все узлы, настроил и забыл_.
421  4. Настроить MBGP внутри сети провайдера. _Только те PE, где есть клиенты, настроил и забыл_.
422  5. Настроить клиентские VRF, назначить RD, RT. _Только те PE, где есть клиенты, настраиватся персонально для каждого_.
423  6. Добавить в VRF клиентские интерфейсы, настроить на них IP-адреса. _Только те PE, где есть клиенты, настраиватся персонально для каждого_.
424  7. При необходимости поднять IGP/BGP с клиентом для обмена маршрутами. _Только те PE, где есть клиенты, настраиватся персонально для каждого_.
425  8. Готово
426  
427  Это были необходимые и достаточные действия для настройки базового L3VPN.  
428  Ну и последний сценарий в рамках практики — это
429