1.-mpls-l3vpn.md
1 # MPLS L3VPN 2 3 Я предлагаю в этот раз не брать уже готовую сеть, где уже всё преднастроено. Сейчас интереснее будет пройти этот путь с нуля, пусть и только вехами, не вдаваясь в детали. 4 5 Итак, мучаем всё ту же сеть, но упростим её удалением одного филиала: 6 7 наверх"\) 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  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  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  214 215  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  235 236  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  317 318  319 320 Маршруты на CE: 321  322 323 Пинг между клиентскими сетями: 324  325 326 Попытка пинга провайдерской сети: 327  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  373 374 Клиентские сети он получит сообщениями Update от CE. 375 376 **7\)** Всё, что касается MBGP — то же самое. От того, что мы поменяли протокол взаимодействия с клиентом, в нём ничего не перевернётся. 377 То есть уже сейчас всё должно заработать \(если, конечно, вторая сторона настроена\): 378 379  380 381  382 383  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  393 394 Вы видите здесь метку 22 для FEC 192.168.255.1 и адрес Next Hop 1.1.1.1. 395 Как её понимает маршрутизатор? 396 В ТМ VRF C3PO он заносит информацию о том, какой Next Hop: 397  398 399 Рекурсивно вычислить, как доступен 1.1.1.1: 400  401 402 Сервисную метку можно увидеть в таблице BGP для VRF C3PO: 403  404 Кстати, здесь же видно и Next Hop. 405 406 Транспортная метка для FEC 1.1.1.1: 407  408 409 Но, как обычно FIB содержит всю актуальную информацию без многократных обращений к ТМ: 410  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