VxLAN фабрика. Част 1

Здравей, Хабр. В момента съм ръководител на курса "Мрежов инженер" в OTUS.
В навечерието на старта на новия набор курс "Мрежов инженер", подготвих цикъл статии по технологията VxLAN EVPN.

Съществуват огромно множество материали по работа с VxLAN EVPN, затова искам да събера различни задачи и практики за решаване в съвременен ЦОД.

VxLAN фабрика. Част 1

В първата част от цикъла по технологията VxLAN EVPN искам да разгледам как да организираме L2 свързаност между хостовете върху мрежовата фабрика.

Всички примери ще изпълняваме на Cisco Nexus 9000v, разположени в топология Spine-Leaf. Няма да се спираме на настройката на Underlay мрежата в рамките на тази статия.

  1. Underlay мрежа
  2. BGP пиринг за address-family l2vpn evpn
  3. Настройка на NVE
  4. Supress-arp

Underlay мрежа

Използваната топология изглежда по следния начин:

VxLAN фабрика. Част 1

Нека зададем адресацията на всички устройства:

Spine-1 - 10.255.1.101
Spine-2 - 10.255.1.102

Leaf-11 - 10.255.1.11
Leaf-12 - 10.255.1.12
Leaf-21 - 10.255.1.21

Host-1 - 192.168.10.10
Host-2 - 192.168.10.20

Нека проверим дали има IP свързаност между всички устройства:

Leaf21# sh ip route

10.255.1.11/32, ubest/mbest: 2/0                      ! Leaf-11 е достъпен чрез два Spine
    *via 10.255.1.101, Eth1/4, [110/81], 00:00:03, ospf-UNDERLAY, intra
    *via 10.255.1.102, Eth1/3, [110/81], 00:00:03, ospf-UNDERLAY, intra
10.255.1.12/32, ubest/mbest: 2/0                      ! Leaf-12 е достъпен чрез два Spine
    *via 10.255.1.101, Eth1/4, [110/81], 00:00:03, ospf-UNDERLAY, intra
    *via 10.255.1.102, Eth1/3, [110/81], 00:00:03, ospf-UNDERLAY, intra
10.255.1.21/32, ubest/mbest: 2/0, attached
    *via 10.255.1.22, Lo0, [0/0], 00:02:20, local
    *via 10.255.1.22, Lo0, [0/0], 00:02:20, direct
10.255.1.101/32, ubest/mbest: 1/0
    *via 10.255.1.101, Eth1/4, [110/41], 00:00:06, ospf-UNDERLAY, intra
10.255.1.102/32, ubest/mbest: 1/0
    *via 10.255.1.102, Eth1/3, [110/41], 00:00:03, ospf-UNDERLAY, intra

Нека проверим дали VPC домейн е създаден и двата суича са преминали теста за консистентност, като настройките на двете ноди са идентични:

Leaf11# show vpc 

vPC domain id                     : 1
Peer status                       : peer adjacency formed ok
vPC keep-alive status             : peer is alive
Configuration consistency status  : success
Per-vlan consistency status       : success
Type-2 consistency status         : success
vPC role                          : primary
Number of vPCs configured         : 0
Peer Gateway                      : Disabled
Dual-active excluded VLANs        : -
Graceful Consistency Check        : Enabled
Auto-recovery status              : Disabled
Delay-restore status              : Timer is off.(timeout = 30s)
Delay-restore SVI status          : Timer is off.(timeout = 10s)
Operational Layer3 Peer-router    : Disabled

vPC статус
----------------------------------------------------------------------------
Id    Port          Status Consistency Reason                Active vlans
--    ------------  ------ ----------- ------                ---------------
5     Po5           up     success     success               1

BGP пиринг

Накрая можем да преминем към настройка на Overlay мрежата.

В рамките на статията е необходимо да организираме мрежа между хостовете, както е показано на схемата по-долу:

VxLAN фабрика. Част 1

За да настроим Overlay мрежата, е необходимо да включим BGP с поддръжка на семейството l2vpn evpn на комутаторите Spine и Leaf:

feature bgp
nv overlay evpn

След това е необходимо да настроим BGP пиъринг между Leaf и Spine. За улесняване на настройката и оптимизиране на разпространението на маршрутната информация, Spine конфигурираме като Route-Reflector server. Всички Leaf ще бъдат вписани в конфигурацията чрез шаблони с цел оптимизация на настройката.

Така конфигурацията на Spine изглежда така:

router bgp 65001
  template peer LEAF 
    remote-as 65001
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
      route-reflector-client
  neighbor 10.255.1.11
    inherit peer LEAF
  neighbor 10.255.1.12
    inherit peer LEAF
  neighbor 10.255.1.21
    inherit peer LEAF

Конфигурацията на Leaf комутатора изглежда аналогично:

router bgp 65001
  template peer SPINE
    remote-as 65001
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
  neighbor 10.255.1.101
    inherit peer SPINE
  neighbor 10.255.1.102
    inherit peer SPINE

На Spine ще проверим пиъринга с всички Leaf комутатори:

Spine1# sh bgp l2vpn evpn summary

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.255.1.11     4 65001       7       8        6    0    0 00:01:45 0
10.255.1.12     4 65001       7       7        6    0    0 00:01:16 0
10.255.1.21     4 65001       7       7        6    0    0 00:01:01 0

Както можем да видим, с BGP няма никакви проблеми. Да преминем към настройката на VxLAN. По-нататъшната настройка ще се извършва само от страна на Leaf комутаторите. Spine играе роля само на основа на мрежата и се занимава само с предаването на трафика. Цялата работа по инкапсулацията и определяне на пътя се реализира само на Leaf комутаторите.

Настройка на NVE

NVE — мрежов виртуален интерфейс

Преди да започнем настройката, нека въведем малко терминология:

VTEP — Виртуална Тунелна Крайна Точка, устройство, на което започва или завършва VxLAN тунел. VTEP не е задължително да бъде мрежово устройство. Може също да бъде и сървър с поддръжка на технологията VxLAN. В нашата топология всички Leaf комутатори са VTEP.

VNI — Виртуален Мрежов Идентификатор — идентификатор на мрежата в рамките на VxLAN. Може да се направи аналогия с VLAN. Въпреки това, има някои разлики. При използване на фабрикат, VLAN стават уникални само в рамките на един Leaf комутатор и не се предават по мрежата. Но с всеки VLAN може да бъде асоцииран номер VNI, който вече се предава по мрежата. Както изглежда това и как може да бъде използвано, ще бъде разгледано по-нататък.

Нека включим feature за работа с технологията VxLAN и възможността за асоцииране на номера VLAN с номера VNI:

feature nv overlay
feature vn-segment-vlan-based

Настройваме интерфейса NVE, който отговаря за работата на VxLAN. Този интерфейс всъщност е отговорен за инкапсулирането на кадри в заглавията на VxLAN. Може да се направи аналогия с интерфейса Tunnel за работа с GRE:

interface nve1
  no shutdown
  host-reachability protocol bgp ! използваме BGP за предаване на маршрутна информация
  source-interface loopback0    ! интерфейсът, от който изпращаме пакети loopback0

На Leaf-21 комутатора всичко се създава без проблеми. Въпреки това, ако проверим изхода на командата show nve peers, ще се окаже, че е празен. Тук е необходимо да се върнем към настройката на VPC. Наблюдаваме, че Leaf-11 и Leaf-12 работят в двойка и са обединени в VPC домейн. Оттук произлиза следната ситуация:

Host-2 изпраща един кадър към Leaf-21, за да го предаде по мрежата към Host-1. Въпреки това, Leaf-21 вижда, че MAC адресът на Host-1 е достъпен веднага чрез два VTEP. Какво да прави Leaf-21 в този случай? В крайна сметка това значи, че в мрежата може да се е появила цикличност.

За решаване на тази ситуация, ние трябва Leaf-11 и Leaf-12 в рамките на фабриката също да функционират като едно устройство. Това се решава доста просто. На интерфейса Loopback, от който изграждаме тунела, добавяме вторичен адрес. Вторичният адрес трябва да бъде идентичен на двата VTEP.

interface loopback0
 ip add 10.255.1.10/32 secondary

Таким образом с точки зрения других VTEP мы получаем следующую топологию:

VxLAN фабрика. Част 1

Следователно сега тунел ще бъде изграждан между IP адреса на Leaf-21 и виртуалния IP между двата Leaf-11 и Leaf-12. Сега проблеми с изучаването на MAC адреса от двете устройства няма да възникват и трафикът може да преминава от един VTEP на друг. Кой точно от двата VTEP ще обработи трафика, се решава с помощта на таблицата за маршрутизация на Spine:

Spine1# sh ip route

10.255.1.10/32, ubest/mbest: 2/0
  *via 10.255.1.11, Eth1/1, [110/41], 1d01h, ospf-UNDERLAY, intra
  *via 10.255.1.12, Eth1/2, [110/41], 1d01h, ospf-UNDERLAY, intra
10.255.1.11/32, ubest/mbest: 1/0
  *via 10.255.1.11, Eth1/1, [110/41], 1d22h, ospf-UNDERLAY, intra
10.255.1.12/32, ubest/mbest: 1/0
  *via 10.255.1.12, Eth1/2, [110/41], 1d01h, ospf-UNDERLAY, intra

Както може да се види по-горе, адресът 10.255.1.10 е достъпен веднага чрез два Next-hop.

На този етап разгледахме основната свързаност. Прехвърляме се към настройката на интерфейса NVE:
Веднага активираме Vlan 10 и го асоциираме с VNI 10000 на всеки Leaf за хостовете. Настройваме L2 тунел между хостовете.

vlan 10                 ! Включваме VLAN на всички VTEP, свързани с необходимите хостове
  vn-segment 10000      ! Асоциираме VLAN с номер VNI 

interface nve1
  member vni 10000      ! Добавяме VNI 10000 за работа през интерфейс NVE. за инкапсулация в VxLAN
    ingress-replication protocol bgp    ! указваме, че за разпространение на информацията за хоста използваме BGP

Сега ще проверим nve peers и таблицата за BGP EVPN:

Leaf21# sh nve peers
Interface Peer-IP          State LearnType Uptime   Router-Mac
--------- ---------------  ----- --------- -------- -----------------
nve1      10.255.1.10      Up    CP        00:00:41 n/a                 ! Виждаме, че peer е достъпен с вторичен адрес

Leaf11# sh bgp l2vpn evpn

   Network            Next Hop            Metric     LocPrf     Weight Path
Route Distinguisher: 10.255.1.11:32777    (L2VNI 10000)        ! От кого точно е дошъл този l2VNI
*>l[3]:[0]:[32]:[10.255.1.10]\/88                                   ! EVPN route-type 3 - показва нашия съсед, който също знае за l2VNI10000
                      10.255.1.10                       100      32768 i
*>i[3]:[0]:[32]:[10.255.1.20]\/88
                      10.255.1.20                       100          0 i
* i                   10.255.1.20                       100          0 i

Route Distinguisher: 10.255.1.21:32777
* i[3]:[0]:[32]:[10.255.1.20]\/88
                      10.255.1.20                       100          0 i
*>i                   10.255.1.20                       100          0 i

Отгоре виждаме маршрути само EVPN route-type 3. Този тип маршрути разказва за peer(Leaf), но къде са нашите хостове?
Проблемът е, че информацията за MAC адресите на хостовете се предава чрез EVPN route-type 2.

За да видим нашите хостове, е необходимо да настроим EVPN route-type 2:

evpn
  vni 10000 l2
    route-target import auto   ! в рамките на тази статия използваме автоматичен номер за route-target
    route-target export auto

Нека направим ping от Host-2 на Host-1:

Firewall2# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1): 56 data bytes
36 bytes from 192.168.10.2: Destination Host Unreachable
Request 0 timed out
64 bytes from 192.168.10.1: icmp_seq=1 ttl=254 time=215.555 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=254 time=38.756 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=254 time=42.484 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=254 time=40.983 ms

И по-долу можем да видим, че в таблицата BGP се появиха route-type 2 с MAC адресите на хостовете — 5001.0007.0007 и 5001.0008.0007

Leaf11# sh bgp l2vpn evpn


   Network            Next Hop            Metric     LocPrf     Weight Path
Route Distinguisher: 10.255.1.11:32777    (L2VNI 10000)
*>l[2]:[0]:[0]:[48]:[5001.0007.0007]:[0]:[0.0.0.0]\/216                      !  evpn route-type 2 и mac адрес хоста 1
                      10.255.1.10                       100      32768 i
*>i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]\/216                      ! evpn route-type 2 и mac адрес хоста 2
* i                   10.255.1.20                       100          0 i
*>l[3]:[0]:[32]:[10.255.1.10]\/88
                      10.255.1.10                       100      32768 i
Route Distinguisher: 10.255.1.21:32777
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]\/216
                      10.255.1.20                       100          0 i
*>i                   10.255.1.20                       100          0 i

След това можем да разгледаме подробна информация за Update, в който получихме информация за MAC Host. По-долу е представено не всичкото изходно съдържание на командата

Leaf21# sh bgp l2vpn evpn 5001.0007.0007

BGP маршрутизираща таблица информация за VRF default, адресно семейство L2VPN EVPN
Route Distinguisher: 10.255.1.11:32777        !  изпратено Update с MAC Host. Не виртуален адрес VPC, а адрес Leaf
BGP маршрутизираща таблица вход за [2]:[0]:[0]:[48]:[5001.0007.0007]:[0]:[0.0.0.0]\/216,
 версия 1507
Paths: (2 налични, най-добрият е #2)
Flags: (0x000202) (high32 00000000) на xmit-list, не е в l2rib\/evpn, не е в HW

  Тип на пътя: вътрешен, пътят е валиден, не най-добър причина: адрес на съсед, без етикетирана следваща стъпка
  AS-Path: НЯМА, пътят е източен вътрешно за AS
    10.255.1.10 (метрика 81) от 10.255.1.102 (10.255.1.102)    ! с кого точно изграждаме VxLAN тунел
      Произход IGP, MED не е зададен, localpref 100, тегло 0
      Получен етикет 10000         ! Номер VNI, който е асоцииран с VLAN, в който се намира Host
      Extcommunity: RT:65001:10000 SOO:10.255.1.10:0 ENCAP:8        ! Тук е видно, че RT е образуван автоматично на базата на номера на AS и VNI
      Произходител: 10.255.1.11 Списък на клъстера: 10.255.1.102

Нека видим как изглеждат пакетите, когато се предават през фабриката:

VxLAN фабрика. Част 1

Suppress-ARP

Отлично, L2 свързаност между хостовете вече имаме и на това може да се приключи. Въпреки това не всичко е толкова просто. Докато имаме малко хостове, проблеми няма да възникнат. Но нека си представим ситуации, в които хостовете са стотици и хиляди. С каква проблематика можем да се сблъскаме?

Тази проблематика е BUM (Broadcast, Unknown Unicast, Multicast) трафик. В рамките на тази статия ще разгледаме вариант за справяне с broadcast трафика.
Основният генератор на Broadcast в Ethernet мрежи са самите хостове, чрез протокол ARP.

На nexus е реализиран следният механизъм за борба с ARP заявките — suppress-arp.
Работата на тази функция изглежда по следния начин:

  1. Host-1 изпраща ARP заявка на Broadcast адреса на своята мрежа.
  2. Заявката достига до Leaf комутатора и вместо да предаде тази заявка по-нататък в фабриката към Host-2 — Leaf отговаря сам и указва нужния IP и MAC.

По този начин Broadcast заявката не е стигнала до фабриката. Но как може да работи това, ако Leaf знае само MAC адреса?

Всичко е доста просто, EVPN route-type 2 освен MAC адреса може да предава съчетание MAC/IP. За целта на Leaf е необходимо да се настрои IP адрес в VLAN. Възниква въпросът, какъв IP да зададем? На Nexus има възможност да се създаде разпределен (еднакъв) адрес на всички комутатори:

feature interface-vlan

fabric forwarding anycast-gateway-mac 0001.0001.0001    ! задаваме виртуален mac за създаване на разпределен шлюз между всички комутатори

interface Vlan10
  no shutdown
  ip address 192.168.10.254/24          ! на всички Leaf задаваме еднакъв IP
  fabric forwarding mode anycast-gateway    ! казваме да използва виртуален mac

По този начин от гледна точка на хостовете, мрежата ще изглежда по следния начин:

VxLAN фабрика. Част 1

Да проверим BGP l2route evpn

Leaf11# sh bgp l2vpn evpn


   Network            Next Hop            Metric     LocPrf     Weight Path
Route Distinguisher: 10.255.1.11:32777    (L2VNI 10000)
* >l[2]:[0]:[0]:[48]:[5001.0007.0007]:[0]:[0.0.0.0]/216
                      10.255.1.21                       100      32768 i
* >i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]/216
                      10.255.1.10                       100          0 i
* i                   10.255.1.10                       100          0 i
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[32]:[192.168.10.20]/248
                      10.255.1.10                       100          0 i
* >i                   10.255.1.10                       100          0 i



Route Distinguisher: 10.255.1.21:32777
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]/216
                      10.255.1.20                       100          0 i
* >i                   10.255.1.20                       100          0 i
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[32]:[192.168.10.20]/248
* >i                   10.255.1.20                       100          0 i

От изхода на командата става ясно, че в EVPN route-type 2 освен MAC вече виждаме и IP адреса на хоста.

Връщаме се към настройката suppress-arp. Тази настройка се включва за всеки VNI поотделно:

interface nve1
  member vni 10000   
    suppress-arp

Следва да възникне известна сложност:

  • За работата на тази функция е необходимо място в TCAM паметта. Давам пример за настройка за suppress-arp:

hardware access-list tcam region arp-ether 256

За тази настройка ще е необходим double-wide. Тоест, ако зададете 256, то в TCAM е необходимо да освободите 512. Настройката на TCAM излиза извън обхвата на тази статия, тъй като настройката на TCAM зависи единствено от задачата, поставена пред Вас и може да варира от една мрежа до друга.

  • Внедряването на suppress-arp е необходимо да се извърши на всички Leaf комутатори. Въпреки това, сложността може да възникне при настройването на парите Leaf, находящи се в домейна VPC. При промяна на TCAM, консистенцията между парите ще бъде нарушена и един от възлите може да спре да работи. Освен това, за прилагане на настройката, свързана с промените в TCAM, може да е необходима перезагрузка на устройството.

В резултат на това, трябва сериозно да се помисли дали в вашата ситуация да се внедри тази настройка на работеща фабрика.

С това завършваме първата част от цикъла. В следващата част ще разгледаме маршрутизацията през VxLAN фабрика с разделение на мрежите по различни VRF.

А сега каня всички на безплатен уебинар, в рамките на което подробно ще разкажа за курса. Първите 20 участници, регистрирали се за уебинара, ще получат сертификат за отстъпка на електронната си поща в течение на 1-2 дни след трансляцията.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster