> For the complete documentation index, see [llms.txt](https://1ops.gitbook.io/learn-vxlan.1ops.uz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://1ops.gitbook.io/learn-vxlan.1ops.uz/postroenie-fabriki-vxlan-evpn-s-ispolzovaniem-infrastructure-as-a-code-podkhoda/chast-8.-vxlan.-routing.md).

# Часть 8. VxLAN. Routing

### Цель

* Реализовать маршрутизацию между "клиентами" (tentant) через EVPN route-type 5

**Ожидаемый результат**

1. Два "клиента" размещены в разных VRF в рамках одной фабрики.
2. Настроена маршрутизацию между клиентами через внешнее устройство (граничный роутер\фаерволл\etc).
3. В документации зафиксированы - план работы, адресное пространство, схему сети, настройки сетевого оборудования.

### Достижение результата

#### Введение

***В этой части не будет ничего про автоматизацию. Нужно глобально переделывать шаблоны для поддержки multitentant'ости ¯\_(ツ)*****/¯\_**

Представим, что у нас есть два тентанта - "red" и "green" (они помечены соответствующими цветами в схеме. Внезапно :xD ). Тентантам принадлежат следующие сети:

| Tenant | Network          |
| ------ | ---------------- |
| red    | 192.168.101.0/24 |
| red    | 192.168.103.0/24 |
| green  | 192.168.102.0/24 |

На leaf'ах настроены anycast gateway на vlan-интерфейсах, а сами интерфейсы определены в соответствующие vrf:

```
interface Vlan101
   vrf red
   ip address virtual 192.168.101.254/24
!
interface Vlan102
   vrf green
   ip address virtual 192.168.102.254/24
!
interface Vlan103
   vrf red
   ip address virtual 192.168.103.254/24
!
```

#### Схема сети

Модернизируем схему и встраиваем в нее NGFW Palo Alto Networks (PAN-OS 11.0.0). ~~FW будет подключен аггрегированным линком в no-osl-dc1-f1-r03k04-lf01 и no-osl-dc1-f1-r03k04-lf02~~ Оказалось, что PA-VM не поддерживает агрегированные интерфейсы.&#x20;

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2FDGsaXijj8XsnmVKPUMNO%2F8-1.png?alt=media&amp;token=3e9fcddb-5f01-4822-a627-c187781deb39" alt=""><figcaption><p>адресация</p></figcaption></figure>

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2FxpeBmBHqYSAsOhCQSL07%2FHW-8-map.png?alt=media&amp;token=b06757af-6394-402d-9ec8-4bc2687fc717" alt=""><figcaption></figcaption></figure>

Согласно схемы имеем следующие подключения:

| Устройство A | Интерфейс    | IP-адрес      | Устройство B              | Интерфейс  | IP-адрес      | VRF   |
| ------------ | ------------ | ------------- | ------------------------- | ---------- | ------------- | ----- |
| NGFW PA-VM   | Ethernet 1/1 | 10.16.2.17/31 | no-osl-dc1-f1-r03k04-lf01 | Ethernet 3 | 10.16.2.16/31 | red   |
| NGFW PA-VM   | Ethernet 1/2 | 10.16.2.19/31 | no-osl-dc1-f1-r03k04-lf01 | Ethernet 4 | 10.16.2.18/31 | green |
| NGFW PA-VM   | Ethernet 1/3 | 10.16.2.21/31 | no-osl-dc1-f1-r03k04-lf02 | Ethernet 3 | 10.16.2.20/31 | red   |
| NGFW PA-VM   | Ethernet 1/4 | 10.16.2.23/31 | no-osl-dc1-f1-r03k04-lf02 | Ethernet 4 | 10.16.2.22/31 | green |

#### Файлы конфигураций устройств

Традиционно не вмешиваемся в настройки spine'ов, а работаем только с leaf'ами. Собственно, бОльшая часть конфигурации приходится на border leaf'ы и сам файрвол.

Ниже ссылки на конфиги leaf'ов

{% file src="/files/nowlqN9OGRCXjr8rhZSb" %}

{% file src="/files/gexI0bbReqLbQ3Ce1iWE" %}

{% file src="/files/tESJuwo8GNAMIx067MIQ" %}

{% file src="/files/LGGvhBzOHF89aTlaNy4G" %}

Файрвол ничего не файрволит, а только маршрутизирует :)

Для простоты созданы 2 зоны - trust и untrust. В trust помещены все интерфейсы, идущие к leaf'ам, в untrust - вымышленный интерфейс в интернет.

Создана одна единственная политика безопасности, которая разрешает все отовсюду.

Настройки интерфейсов:

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2F9HuuRd1ls3vqwEd5pN6g%2Fimage.png?alt=media&amp;token=44736b80-879c-4410-bc49-04e645e82596" alt=""><figcaption></figcaption></figure>

Настройки BGP для PAN-OS:

1. `BGP. General`

Тут нас интересует включение поддержки 4-byte AS

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2Fu9fUi4NpoFNOh8hx6h0p%2Fimage.png?alt=media&amp;token=45c0234a-556b-47f6-bb4d-c2cc090f5613" alt=""><figcaption></figcaption></figure>

2. `BGP. Advanced`

Здесь я отметил `ECMP Multiple AS Support`

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2F8tCJzJ5jNIWDttdcviZU%2Fimage.png?alt=media&amp;token=30b00fa6-3578-40f9-bbc7-5afc1ebec8c9" alt=""><figcaption></figcaption></figure>

3. `BGP. Peer Group`

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2FSvsgMxRsB9rOJehty9Iu%2Fimage.png?alt=media&amp;token=f8cac491-04b8-4f3b-92e8-484bd28a03db" alt=""><figcaption></figcaption></figure>

4. `BGP. Import`

Тут ничего не делал

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2Fe48sOhL8pfH5YVZ6HAkY%2Fimage.png?alt=media&amp;token=9fcffa88-df06-491f-9f1a-8354e94ac199" alt=""><figcaption></figcaption></figure>

5. `BGP. Export`

Вот тут настроена политика экспорта. Не претендую на изящное и правильное решение, но, как-будто, работает как нужно.

1-ая политика явно разрешает экспорт маршрута 0.0.0.0/0.

2-ая политика запрещает экспорт маршрутов, полученных от пиров. ***Надеюсь, я правильно интерпретировал настройку.***

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2Fn69mQpftWUS2r8iXAAIu%2Fimage.png?alt=media&amp;token=20c24bac-c99f-4b6a-981a-c968b42b4161" alt=""><figcaption></figcaption></figure>

#### Таблицы маршрутизации устройств

В итоговом виде таблицы маршрутизации выглядят следующим образом:

**no-osl-dc1-f1-r03k04-lf01**

`sh ip route vrf red`

```
VRF: red
Codes: C - connected, S - static, K - kernel, 
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B - Other BGP Routes,
       B I - iBGP, B E - eBGP, R - RIP, I L1 - IS-IS level 1,
       I L2 - IS-IS level 2, O3 - OSPFv3, A B - BGP Aggregate,
       A O - OSPF Summary, NG - Nexthop Group Static Route,
       V - VXLAN Control Service, M - Martian,
       DH - DHCP client installed default route,
       DP - Dynamic Policy Route, L - VRF Leaked,
       G  - gRIBI, RC - Route Cache Route

Gateway of last resort:
 B E      0.0.0.0/0 [200/0] via 10.16.2.17, Ethernet3

 C        10.16.2.16/31 is directly connected, Ethernet3
 B E      10.16.2.20/31 [200/0] via VTEP 10.16.4.8 VNI 120101 router-mac 50:01:00:a1:60:83 local-interface Vxlan1
 B E      192.168.101.5/32 [200/0] via VTEP 10.16.4.5 VNI 120101 router-mac 50:00:00:15:f4:e8 local-interface Vxlan1
 C        192.168.101.0/24 is directly connected, Vlan101
 B E      192.168.103.6/32 [200/0] via VTEP 10.16.4.6 VNI 120101 router-mac 50:00:00:88:fe:27 local-interface Vxlan1
 C        192.168.103.0/24 is directly connected, Vlan103
```

`sh ip route vrf green`

```
VRF: green
Codes: C - connected, S - static, K - kernel, 
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B - Other BGP Routes,
       B I - iBGP, B E - eBGP, R - RIP, I L1 - IS-IS level 1,
       I L2 - IS-IS level 2, O3 - OSPFv3, A B - BGP Aggregate,
       A O - OSPF Summary, NG - Nexthop Group Static Route,
       V - VXLAN Control Service, M - Martian,
       DH - DHCP client installed default route,
       DP - Dynamic Policy Route, L - VRF Leaked,
       G  - gRIBI, RC - Route Cache Route

Gateway of last resort:
 B E      0.0.0.0/0 [200/0] via 10.16.2.19, Ethernet4

 C        10.16.2.18/31 is directly connected, Ethernet4
 B E      10.16.2.22/31 [200/0] via VTEP 10.16.4.8 VNI 12010 router-mac 50:01:00:a1:60:83 local-interface Vxlan1
 C        192.168.102.0/24 is directly connected, Vlan102
```

Вывод указывает на то, что для vrf 'red' маршрут по умолчанию получен через интерфейс Ethernet 3 и следует через FW и его интерфейс Ethernet 1/1, а для vrf 'green' маршрут по умолчанию получен через интерфейс Ethernet 4 и пойдет через FW и интерфейс Ethernet 1/2.

`sh ip bgp summary vrf red`

```
BGP summary information for VRF red
Router identifier 10.16.1.7, local AS number 4200131337
Neighbor Status Codes: m - Under maintenance
  Neighbor   V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  10.16.2.17 4 4200131350      3497      4118    0    0 19:28:26 Estab   1      1
```

`sh ip bgp summary vrf green`

```
BGP summary information for VRF green
Router identifier 10.16.1.7, local AS number 4200131337
Neighbor Status Codes: m - Under maintenance
  Neighbor   V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  10.16.2.19 4 4200131350      2957      3318    0    0 19:28:31 Estab   1      1
```

**no-osl-dc1-f1-r03k04-lf02**

`ip route vrf red`

```
VRF: red
Codes: C - connected, S - static, K - kernel, 
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B - Other BGP Routes,
       B I - iBGP, B E - eBGP, R - RIP, I L1 - IS-IS level 1,
       I L2 - IS-IS level 2, O3 - OSPFv3, A B - BGP Aggregate,
       A O - OSPF Summary, NG - Nexthop Group Static Route,
       V - VXLAN Control Service, M - Martian,
       DH - DHCP client installed default route,
       DP - Dynamic Policy Route, L - VRF Leaked,
       G  - gRIBI, RC - Route Cache Route

Gateway of last resort:
 B E      0.0.0.0/0 [200/0] via 10.16.2.21, Ethernet3

 B E      10.16.2.16/31 [200/0] via VTEP 10.16.4.7 VNI 120101 router-mac 50:01:00:02:f6:c5 local-interface Vxlan1
 C        10.16.2.20/31 is directly connected, Ethernet3
 B E      192.168.101.5/32 [200/0] via VTEP 10.16.4.5 VNI 120101 router-mac 50:00:00:15:f4:e8 local-interface Vxlan1
 C        192.168.101.0/24 is directly connected, Vlan101
 B E      192.168.103.6/32 [200/0] via VTEP 10.16.4.6 VNI 120101 router-mac 50:00:00:88:fe:27 local-interface Vxlan1
 C        192.168.103.0/24 is directly connected, Vlan103
```

`sh ip route vrf green`

```
VRF: green
Codes: C - connected, S - static, K - kernel, 
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B - Other BGP Routes,
       B I - iBGP, B E - eBGP, R - RIP, I L1 - IS-IS level 1,
       I L2 - IS-IS level 2, O3 - OSPFv3, A B - BGP Aggregate,
       A O - OSPF Summary, NG - Nexthop Group Static Route,
       V - VXLAN Control Service, M - Martian,
       DH - DHCP client installed default route,
       DP - Dynamic Policy Route, L - VRF Leaked,
       G  - gRIBI, RC - Route Cache Route

Gateway of last resort:
 B E      0.0.0.0/0 [200/0] via 10.16.2.23, Ethernet4

 B E      10.16.2.18/31 [200/0] via VTEP 10.16.4.7 VNI 12010 router-mac 50:01:00:02:f6:c5 local-interface Vxlan1
 C        10.16.2.22/31 is directly connected, Ethernet4
 C        192.168.102.0/24 is directly connected, Vlan102
```

`sh ip bgp summary vrf red`

```
BGP summary information for VRF red
Router identifier 10.16.1.8, local AS number 4200131338
Neighbor Status Codes: m - Under maintenance
  Neighbor   V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  10.16.2.21 4 4200131350      2807      3392    0    0 19:42:36 Estab   1      1
```

`sh ip bgp summary vrf green`

```
BGP summary information for VRF green
Router identifier 10.16.1.8, local AS number 4200131338
Neighbor Status Codes: m - Under maintenance
  Neighbor   V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  10.16.2.23 4 4200131350      2798      3146    0    0 19:42:39 Estab   1      1
```

**NGFW PA-VM**

`show routing route`

flags: A:active, ?:loose, C:connect, H:host, S:static, \~:internal, R:rip, O:ospf, B:bgp, Oi:ospf intra-area, Oo:ospf inter-area, O1:ospf ext-type-1, O2:ospf ext-type-2, E:ecmp, M:multicast

```
VIRTUAL ROUTER: default (id 1)
  ==========
destination                                 nexthop                                 metric flags      age   interface          next-AS    
0.0.0.0/0                                   0.0.0.0                                 1      A ~                                            
10.16.1.50/32                               0.0.0.0                                 0      A H                                            
10.16.2.16/31                               10.16.2.16                                      ?B        65336                    4200131337 
10.16.2.16/31                               10.16.2.17                              0      A C              ethernet1/1                   
10.16.2.17/32                               0.0.0.0                                 0      A H                                            
10.16.2.18/31                               10.16.2.18                                      ?B        65336                    4200131337 
10.16.2.18/31                               10.16.2.19                              0      A C              ethernet1/2                   
10.16.2.19/32                               0.0.0.0                                 0      A H                                            
10.16.2.20/31                               10.16.2.20                                      ?B        65336                    4200131338 
10.16.2.20/31                               10.16.2.21                              0      A C              ethernet1/3                   
10.16.2.21/32                               0.0.0.0                                 0      A H                                            
10.16.2.22/31                               10.16.2.22                                      ?B        65336                    4200131338 
10.16.2.22/31                               10.16.2.23                              0      A C              ethernet1/4                   
10.16.2.23/32                               0.0.0.0                                 0      A H                                            
192.168.101.0/24                            10.16.2.16                                     A?B E      65336                    4200131337 
192.168.101.0/24                            10.16.2.20                                     A?B E      65336                    4200131338 
192.168.101.5/32                            10.16.2.16                                     A?B E      3988                     4200131337 
192.168.101.5/32                            10.16.2.20                                     A?B E      3988                     4200131338 
192.168.102.0/24                            10.16.2.18                                     A?B E      65336                    4200131337 
192.168.102.0/24                            10.16.2.22                                     A?B E      65336                    4200131338 
192.168.103.0/24                            10.16.2.16                                     A?B E      65336                    4200131337 
192.168.103.0/24                            10.16.2.20                                     A?B E      65336                    4200131338 
192.168.103.6/32                            10.16.2.16                                     A?B E      3988                     4200131337 
192.168.103.6/32                            10.16.2.20                                     A?B E      3988                     4200131338 
total routes shown: 24
```

Тут можно проследить, что для префиксов tentant'ов 'red' и 'green' (192.168.101.0/24, 192.168.102.0/24, 192.168.103.0/24) работает ECMP.

#### Тестирование на отключение одного leaf'а

Тестировать будем пингами с 192.168.103.6 до 192.168.102.5

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2F6MBVSrqhJpUeQrC6l6ms%2Fimage.png?alt=media&amp;token=38abbb45-c7bc-4698-8fd8-28c80cd8b9d7" alt=""><figcaption></figcaption></figure>

Смотрим в логи NGFW и отмечаем Ingress и Egress интерфейсы. Видим, что трафик обрабатывается на no-osl-dc1-f1-r03k04-lf02

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2Ft6tdFbACeTH6JNwQocD2%2Fimage.png?alt=media&amp;token=6b73dff3-d9c9-4235-a676-4f8a34985d96" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2FNfv3mDA9iGKqoquarCL2%2Fimage.png?alt=media&amp;token=5eeefb08-e17a-424e-b29a-6e02215c7443" alt=""><figcaption></figcaption></figure>

Отключаем leaf! (/) (°,,°) (/)

После перестроения маршрутов видим, что трафик пошел через leaf no-osl-dc1-f1-r03k04-lf01

Это видно по Ingress и Egress интерфейсам. Теперь это ethernet1/1 и ethernet1/2, соотвественно:

<figure><img src="https://2583098987-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvdcVCWSiIRM9xAgAyMA%2Fuploads%2FNZFneSxh2BM01mhb1vct%2Fimage.png?alt=media&amp;token=58362b0f-7b95-4358-a296-7346cd8cad68" alt=""><figcaption></figcaption></figure>

### Выводы

Таким образом можно сделать следующие выводы:

* маршрутизация между сетями внутри одного tentant'а отработает внутри EVPN фабрики
* маршрутизация между сетями разным tentent'ов отработает через NGFW PA-VM за пределами EVPN фабрики за счет анонса префикса 0.0.0.0/0 со стороны NGFW.
* удалось добиться какой-то отказоустойчивости по линкам и border leaf'ам.
