Найти в Дзене
Кадр за кадром

Построение VXLAN лабы с Nexus9000v

По мере того как я погружаюсь в мир VXLAN , мне понадобится лабораторная среда, так как это лучший способ углубить процесс обучения и получить практический опыт работы с протоколом. Я собираюсь создать лабораторию на базе Cisco Nexus9000v в EveNG, но те же образы можно использовать и другие среды. Лабораторная среда будет иметь следующие характеристики: Интерфейсы подключены в соответствии с нашей физической топологией. Далее мы преобразуем порты в маршрутизируемые (routed ports) и включим поддержку jumbo-фреймов: Spine1(config)# int eth1/1-4 Spine1(config-if-range)# mtu 9216 Spine1(config-if-range)# no switchport Leaf1(config)# int eth1/1-2 Leaf1(config-if-range)# mtu 9216 Leaf1(config-if-range)# no switchport Аналогично сделать остальные spine и leaf Далее андерлей будет настроен с использованием OSPF на ненумерованных связях в соответствии с этой топологией: Для этого необходимо выполнить следующие шаги: Кроме того, мы также настроим разрешение имен (name lookup) в OSPF, чтобы пр
Оглавление

По мере того как я погружаюсь в мир VXLAN , мне понадобится лабораторная среда, так как это лучший способ углубить процесс обучения и получить практический опыт работы с протоколом. Я собираюсь создать лабораторию на базе Cisco Nexus9000v в EveNG, но те же образы можно использовать и другие среды.

Лабораторная среда будет иметь следующие характеристики:

  • Все связи используют ненумерованные интерфейсы с Loopback.
  • Выделенный Loopback используется для VXLAN.
  • Используется Flood and Learn с PIM ASM и Anycast RP (без EVPN).
  • OSPF в качестве IGP в андерлее.
-2
-3

Интерфейсы подключены в соответствии с нашей физической топологией.

Далее мы преобразуем порты в маршрутизируемые (routed ports) и включим поддержку jumbo-фреймов:

Spine1(config)# int eth1/1-4
Spine1(config-if-range)# mtu 9216
Spine1(config-if-range)# no switchport
Leaf1(config)# int eth1/1-2
Leaf1(config-if-range)# mtu 9216
Leaf1(config-if-range)# no switchport

Аналогично сделать остальные spine и leaf

Далее андерлей будет настроен с использованием OSPF на ненумерованных связях в соответствии с этой топологией:

Для этого необходимо выполнить следующие шаги:

  • Включить функцию OSPF.
  • Добавить loopback-интерфейсы на все устройства.
  • Настроить Ethernet-интерфейсы как point-to-point (точка-точка).
  • Настроить Ethernet-интерфейсы как ненумерованные (unnumbered) относительно loopback0.
  • Включить OSPF на Ethernet-интерфейсах и loopback-интерфейсах.

Кроме того, мы также настроим разрешение имен (name lookup) в OSPF, чтобы при проверке смежностей (adjacencies) отображались имена наших OSPF-соседей.

Spine1(config)# feature ospf
Spine1(config)# ip host Leaf1 192.0.2.3
Spine1(config)# ip host Leaf2 192.0.2.4
Spine1(config)# ip host Leaf3 192.0.2.5
Spine1(config)# ip host Leaf4 192.0.2.6
Spine1(config)# int lo0
Spine1(config-if)# ip add 192.0.2.1/32
Spine1(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Spine1(config-if)# int eth1/1-4
Spine1(config-if-range)# medium p2p
Spine1(config-if-range)# ip unnumbered lo0
Spine1(config-if-range)# ip ospf network point-to-point
Spine1(config-if-range)# ip router ospf UNDERLAY area 0.0.0.0
Spine1(config-if-range)# router ospf UNDERLAY
Spine1(config-router)# log-adjacency-changes detail
Spine1(config-router)# name-lookup
Spine2(config)# feature ospf
Spine2(config)# ip host Leaf1 192.0.2.3
Spine2(config)# ip host Leaf2 192.0.2.4
Spine2(config)# ip host Leaf3 192.0.2.5
Spine2(config)# ip host Leaf4 192.0.2.6
Spine2(config)# int lo0
Spine2(config-if)# ip add 192.0.2.2/32
Spine2(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Spine2(config-if)# int eth1/1-4
Spine2(config-if-range)# medium p2p
Spine2(config-if-range)# ip unnumbered lo0
Spine2(config-if-range)# ip ospf network point-to-point
Spine2(config-if-range)# ip router ospf UNDERLAY area 0.0.0.0
Spine2(config-if-range)# router ospf UNDERLAY
Spine2(config-router)# log-adjacency-changes detail
Spine2(config-router)# name-lookup
Leaf1(config)# feature ospf
Leaf1(config)# ip host Spine1 192.0.2.1
Leaf1(config)# ip host Spine2 192.0.2.2
Leaf1(config)# int lo0
Leaf1(config-if)# ip add 192.0.2.3/32
Leaf1(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf1(config-if)# int eth1/1-2
Leaf1(config-if-range)# medium p2p
Leaf1(config-if-range)# ip unnumbered lo0
Leaf1(config-if-range)# ip ospf network point-to-point
Leaf1(config-if-range)# ip router ospf UNDERLAY area 0.0.0.0
Leaf1(config-if-range)# router ospf UNDERLAY
Leaf1(config-router)# log-adjacency-changes detail
Leaf1(config-router)# name-lookup
Leaf2(config)# feature ospf
Leaf2(config)# ip host Spine1 192.0.2.1
Leaf2(config)# ip host Spine2 192.0.2.2
Leaf2(config)# int lo0
Leaf2(config-if)# ip add 192.0.2.4/32
Leaf2(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf2(config-if)# int eth1/1-2
Leaf2(config-if-range)# medium p2p
Leaf2(config-if-range)# ip unnumbered lo0
Leaf2(config-if-range)# ip ospf network point-to-point
Leaf2(config-if-range)# ip router ospf UNDERLAY area 0.0.0.0
Leaf2(config-if-range)# router ospf UNDERLAY
Leaf2(config-router)# log-adjacency-changes detail
Leaf2(config-router)# name-lookup
Leaf3(config)# feature ospf
Leaf3(config)# ip host Spine1 192.0.2.1
Leaf3(config)# ip host Spine2 192.0.2.2
Leaf3(config)# int lo0
Leaf3(config-if)# ip add 192.0.2.5/32
Leaf3(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf3(config-if)# int eth1/1-2
Leaf3(config-if-range)# medium p2p
Leaf3(config-if-range)# ip unnumbered lo0
Leaf3(config-if-range)# ip ospf network point-to-point
Leaf3(config-if-range)# ip router ospf UNDERLAY area 0.0.0.0
Leaf3(config-if-range)# router ospf UNDERLAY
Leaf3(config-router)# log-adjacency-changes detail
Leaf3(config-router)# name-lookup
Leaf4(config)# feature ospf
Leaf4(config)# ip host Spine1 192.0.2.1
Leaf4(config)# ip host Spine2 192.0.2.2
Leaf4(config)# int lo0
Leaf4(config-if)# ip add 192.0.2.6/32
Leaf4(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf4(config-if)# int eth1/1-2
Leaf4(config-if-range)# medium p2p
Leaf4(config-if-range)# ip unnumbered lo0
Leaf4(config-if-range)# ip ospf network point-to-point
Leaf4(config-if-range)# ip router ospf UNDERLAY area 0.0.0.0
Leaf4(config-if-range)# router ospf UNDERLAY
Leaf4(config-router)# log-adjacency-changes detail
Leaf4(config-router)# name-lookup

На этом этапе я собирался начать проверку OSPF, но заметил, что интерфейсы были отключены после того, как их преобразовали в маршрутизируемые порты (routed ports). Давайте снова активируем их:

Spine1(config)# int eth1/1-4
Spine1(config-if-range)# no shut
Spine2(config)# int eth1/1-4
Spine2(config-if-range)# no shut
Leaf1(config)# int eth1/1-2
Leaf1(config-if-range)# no shut
Leaf2(config)# int eth1/1-2
Leaf2(config-if-range)# no shut
Leaf3(config)# int eth1/1-2
Leaf3(config-if-range)# no shut
Leaf4(config)# int eth1/1-2
Leaf4(config-if-range)# no shut

Давайте проверим смежности OSPF на спайнах:

-4
-5

Благодаря разрешению имен (name lookup) мы теперь получаем удобное представление смежностей OSPF, включая имена устройств. Давайте проверим, как выглядит LSA типа 1 (Type 1 LSA), учитывая, что мы используем ненумерованные связи (unnumbered links):

-6

Из-за использования ненумерованных связей (unnumbered links), адрес интерфейса маршрутизатора выглядит немного странно в LSA типа 1. Что такое 0.0.0.2 и 0.0.0.3 ? Если возникают сомнения, обратимся к тому, что говорится в RFC для OSPF (RFC 2328):

Кроме того, для каждой связи указывается поле Link Data . Это поле предоставляет 32 дополнительных бита информации о связи. Для связей с транзитными сетями, нумерованными point-to-point связями и виртуальными связями это поле определяет IP-адрес интерфейса связанного маршрутизатора (это необходимо для расчета таблицы маршрутизации, см. Раздел 16.1.1). Для связей со stub-сетями это поле определяет маску IP-адреса stub-сети. Для ненумерованных point-to-point связей поле Link Data должно быть установлено в значение ifIndexненумерованного интерфейса из MIB-II [Ref8].

Странный IP-адрес, который мы видим, — это просто индекс интерфейса. Это можно подтвердить на Leaf1:

-7

Давайте проверим, есть ли у нас какие-либо маршруты в OSPF:

-8

Обратите внимание на ECMP-пути (равноценные многопутевые маршруты) к другим leafs. Давайте проверим, можем ли мы выполнить ping:

-9

Андерлей теперь работает. Давайте добавим дополнительный loopback-интерфейс, который будет использоваться для VXLAN

Leaf1(config)# int lo1
Leaf1(config-if)# ip add 203.0.113.1/32
Leaf1(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf2(config)# int lo1
Leaf2(config-if)# ip add 203.0.113.2/32
Leaf2(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf3(config)# int lo1
Leaf3(config-if)# ip add 203.0.113.3/32
Leaf3(config-if)# ip router ospf UNDERLAY area 0.0.0.0
Leaf4(config)# int lo1
Leaf4(config-if)# ip add 203.0.113.4/32
Leaf4(config-if)# ip router ospf UNDERLAY area 0.0.0.0

Теперь давайте проверим, доступны ли loopback-интерфейсы:

-10

Давайте разберем настройку PIM (Protocol Independent Multicast) и Anycast RP, чтобы вы могли понять, как это работает и зачем нужно далее будет больше теории.

Что такое PIM?

PIM (Protocol Independent Multicast) — это протокол маршрутизации, который используется для передачи многоадресного трафика (multicast). Он не зависит от конкретного протокола одноадресной маршрутизации (например, OSPF или BGP), но использует таблицу маршрутизации, созданную этими протоколами.

В данном случае мы настраиваем PIM Sparse Mode (PIM-SM) , который является одним из режимов работы PIM. Этот режим используется для эффективной передачи многоадресного трафика в больших сетях. Он предполагает использование RP (Rendezvous Point) — центральной точки, через которую проходит весь многоадресный трафик.

Что такое Anycast RP?

Anycast RP — это механизм, при котором несколько маршрутизаторов (в данном случае Spine1 и Spine2) используют одинаковый IP-адрес для роли RP. Это обеспечивает:

  1. Высокую доступность : Если один из маршрутизаторов выходит из строя, другой продолжает работать.
  2. Оптимизацию трафика : Трафик направляется к ближайшему RP (по метрике IGP).

Цель настройки

Мы хотим:

  1. Включить PIM на всех устройствах (Spine и Leaf).
  2. Настроить Anycast RP на Spine-маршрутизаторах.
  3. Обеспечить возможность передачи многоадресного трафика через андерлей (underlay).

Шаг 1: Включение PIM

Первым делом нужно включить функцию PIM на всех устройствах:

Spine1(config)# feature pim
Spine2(config)# feature pim
Leaf1(config)# feature pim
Leaf2(config)# feature pim
Leaf3(config)# feature pim
Leaf4(config)# feature pim

Команда feature pim активирует поддержку PIM на устройстве.

Шаг 2: Создание Loopback для Anycast RP

На Spine-маршрутизаторах создается новый интерфейс Loopback, который будет использоваться для Anycast RP. Например:

Spine1(config)# interface loopback1
Spine1(config-if)# ip add 192.0.2.255/32
Spine1(config-if)# ip pim sparse-mode
Spine1(config-if)# ip router ospf UNDERLAY area 0.0.0.0
  • ip add 192.0.2.255/32: Назначаем IP-адрес для Anycast RP.
  • ip pim sparse-mode: Включаем PIM Sparse Mode на этом интерфейсе.
  • ip router ospf UNDERLAY area 0.0.0.0: Адvertise этот интерфейс в OSPF, чтобы он был доступен для других устройств.

Аналогично настраиваем Spine2:

Spine2(config)# interface loopback1
Spine2(config-if)# ip add 192.0.2.255/32
Spine2(config-if)# ip pim sparse-mode
Spine2(config-if)# ip router ospf UNDERLAY area 0.0.0.0

Заметьте, что оба Spine имеют одинаковый IP-адрес (192.0.2.255) для Anycast RP.

Шаг 3: Включение PIM на интерфейсах

PIM должен быть включен на всех интерфейсах, которые участвуют в передаче многоадресного трафика. Это включает:

  1. Интерфейсы, соединяющие Spine и Leaf.
  2. Loopback-интерфейсы.

Пример для Spine1:

Spine1(config)# int lo0
Spine1(config-if)# ip pim sparse-mode
Spine1(config-if)# int ethernet1/1-4
Spine1(config-if-range)# ip pim sparse-mode

Аналогично для Spine2:

Spine2(config)# int lo0
Spine2(config-if)# ip pim sparse-mode
Spine2(config-if)# int ethernet1/1-4
Spine2(config-if-range)# ip pim sparse-mode

Для Leaf-устройств:

Leaf1(config)# int ethernet1/1-2
Leaf1(config-if-range)# ip pim sparse-mode

Повторите это для всех Leaf-устройств.

Шаг 4: Настройка RP

Теперь нужно указать, какой RP использовать для многоадресных групп. Мы используем адрес Anycast RP (192.0.2.255):

Spine1(config)# ip pim rp-address 192.0.2.255 group-list 224.0.0.0/4
Spine2(config)# ip pim rp-address 192.0.2.255 group-list 224.0.0.0/4

Здесь:

  • 192.0.2.255 — это адрес RP.
  • group-list 224.0.0.0/4 — диапазон многоадресных групп, для которых применяется этот RP.

Аналогично настраиваем все Leaf-устройства:

Leaf1(config)# ip pim rp-address 192.0.2.255 group-list 224.0.0.0/4

Шаг 5: Настройка Anycast RP

На Spine-маршрутизаторах нужно явно указать, что они являются участниками Anycast RP:

Spine1(config)# ip pim anycast-rp 192.0.2.255 192.0.2.1
Spine1(config)# ip pim anycast-rp 192.0.2.255 192.0.2.2
Spine2(config)# ip pim anycast-rp 192.0.2.255 192.0.2.1
Spine2(config)# ip pim anycast-rp 192.0.2.255 192.0.2.2

Здесь:

  • 192.0.2.255 — адрес Anycast RP.
  • 192.0.2.1 и 192.0.2.2 — адреса Loopback-интерфейсов Spine1 и Spine2 соответственно.

Шаг 6: Проверка

После завершения настройки выполните проверку:

  1. Просмотр соседей PIM :
Spine1# show ip pim nei
  1. Убедитесь, что RP настроен правильно, и список участников Anycast RP включает все Spine-устройства.

Шаг 7: Включение PIM на Loopback для VXLAN

Если вы планируете использовать VXLAN, включите PIM на Loopback-интерфейсах для VXLAN:

Leaf1(config)# int lo1
Leaf1(config-if)# ip pim sparse-mode

Повторите это для всех Leaf-устройств.

Итог

Теперь наша сеть готова к передаче многоадресного трафика через андерлей с использованием PIM и Anycast RP. Это обеспечит:

  • Высокую доступность RP.
  • Эффективную маршрутизацию многоадресного трафика.
  • Подготовку сети для работы с VXLAN.

Повторим что такое VXLAN?

VXLAN (Virtual Extensible LAN) — это технология, которая позволяет создавать оверлейные сети поверх существующей физической сети (андерлея ). Она использует инкапсуляцию трафика в UDP-пакеты для передачи данных между устройствами. VXLAN расширяет возможности традиционных VLAN, увеличивая количество доступных сетевых доменов с 4096 (в VLAN) до 16 миллионов (в VXLAN).

Мы хотим:

  1. Включить поддержку VXLAN на устройствах Leaf.
  2. Настроить отображение VLAN на VNI (VXLAN Network Identifier) .
  3. Создать NVE (Network Virtual Endpoint) для работы с VXLAN.
  4. Настроить порты для подключения серверов.
  5. Убедиться, что устройства Leaf могут обмениваться данными через VXLAN.

Шаг 1: Включение функций VXLAN

Первым делом нужно включить поддержку VXLAN на всех устройствах Leaf:

Leaf1(config)# feature vn-segment-vlan-based
Leaf1(config)# feature nv overlay
  • vn-segment-vlan-based: Позволяет связывать VLAN с VNIs.
  • nv overlay: Включает поддержку VXLAN.

Аналогично настраиваем все остальные Leaf-устройства.

Шаг 2: Настройка NVE (Network Virtual Endpoint)

Теперь создаем интерфейс NVE , который будет использоваться для работы с VXLAN. Этот интерфейс отвечает за инкапсуляцию и декапсуляцию трафика.

Пример для Leaf1:
Leaf1(config)# interface nve1
Leaf1(config-if-nve)# no shutdown
Leaf1(config-if-nve)# source-interface loopback1
Leaf1(config-if-nve)# member vni 1000
Leaf1(config-if-nve-vni)# mcast-group 239.0.0.1

Здесь:

  • interface nve1: Создаем интерфейс NVE.
  • source-interface loopback1: Указываем, что Loopback1 будет использоваться как источник для VXLAN-трафика.
  • member vni 1000: Привязываем VNI 1000 к этому интерфейсу.
  • mcast-group 239.0.0.1: Назначаем мультикаст-группу для передачи многоадресного трафика.

Повторяем это для всех Leaf-устройств.

Шаг 3: Проверка NVE

После настройки можно проверить статус интерфейса NVE:

Leaf1# show int nve1

Если все настроено правильно, вы увидите, что интерфейс активен (nve1 is up), и сможете увидеть статистику по входящему и исходящему трафику.

Шаг 4: Настройка VLAN и портов

Теперь нужно настроить VLAN и привязать его к VNI. Также настраиваем порты для подключения серверов.

Пример для Leaf1:

Leaf1(config)# vlan 100
Leaf1(config-vlan)# vn-segment 1000
Leaf1(config-vlan)# interface ethernet1/3
Leaf1(config-if)# switchport mode access
Leaf1(config-if)# switchport access vlan 100
Leaf1(config-if)# no shutdown

Здесь:

  • vlan 100: Создаем VLAN 100.
  • vn-segment 1000: Привязываем VLAN 100 к VNI 1000.
  • interface ethernet1/3: Настраиваем порт для подключения сервера.
  • switchport mode access: Порт работает в режиме доступа.
  • switchport access vlan 100: Привязываем порт к VLAN 100.

Повторяем это для всех Leaf-устройств.

Шаг 5: Подключение к мультикаст-группе

После настройки VXLAN устройства Leaf будут автоматически подключаться к мультикаст-группе (например, 239.0.0.1). Это можно проверить на Spine-маршрутизаторах:

Spine1# show ip mroute

Вы увидите записи для мультикаст-группы, например:

-11

Это означает, что устройства успешно обмениваются многоадресным трафиком через VXLAN.

Шаг 6: Проверка работы VXLAN

SW1

interface Ethernet0/0
switchport access vlan 100
switchport mode access
interface Vlan100
ip address 172.16.0.2 255.255.0.0

SW2

interface Ethernet0/0
switchport access vlan 100
switchport mode access
interface Vlan100
ip address 172.16.0.3 255.255.0.0

-12