nsx-t logo

NSX-T EVPN

W poprzednim wpisie pokazałem jak skonfigurować DVS z NSX-t, dziś przedstawię bardzo ciekawą nową funkcjonalność w NSX-T 3.0 jest to EVPN.

W dokumentacji VMWare na czas pisania tego wpisu nie znalazłem za dużo informacji o konfiguracji, którą poczyniłem poniżej. Mam nadzieję, że przyda się Wam ta wiedza.

Co to jest EVPN

W kilku prostych słowach. EVPN (Ethernet VPN) jest to standard IEEE który dostarcza nam VPN warstwy 2 i 3. W EVPNie mamy control i data plane. NSXie Multiprotokol BGP (MPBGP) jest odpowiedzialne za control plane a VXLAN data plane.

Testowa architektura

Poniżej przedstawiam ogólną architekturę rozwiązania gdzie widzimy na routerze zewnętrznym w tym przypadku jest to Juniper vMX mamy 2 Vrfy A i B które przekażemy w sesji MP BGP do routera T0 na którym zostaną rozszyte do odpowiednich VRF’ów o tej samej nazwie oraz RD. Na końcu do tych VRF’ów zostaną podłączone routery T1 które będą miały podłączone segmenty.

Wymagania i ograniczenia

Wymagania Ograniczenia
MTU min 1600 na uplinku do vMX na chwilę nie znalazłem
Urządzenia muszą wspierać MPBGP oraz EVPN type 5

Konfiguracja EVPN

Konfiguracja NSX-T EVPN

Przygotowanie

Konfiguracja VNI POOL

Logujemy się do NSX Managera przechodzimy do Networking –> Networking Settings następnie VNI Pool.  Poola ta będzie używana do tworzenia połączenia EVPN

Klikamy ADD VNI POOL i w nowym oknie definiujemy pulę id dla VNI.

Gdzie w Name nadajemy nazwę
Start – ID od którego rozpocznie poola
END – ID do którego będzie poola VNI

Konfiguracja Segmentu dla T0

Konfigurujemy Segment który będzie stanowił połączenie pomiędzy T0 i naszym vMXem przechodzimy do Networking następnie Segments.

Klikamy ADD Segment w nowym oknie konfigurujemy go

Nadajemy nazwę, wybieramy nasz transport zone typu Vlan, oraz nadjemy vlan id i zapisujemy.

Utworzenie i konfiguracja routera T0
  1. W tym środowisku stworzyłem jeden router T0 na dedykowany do tego jednym EDGE VM którą przypisałem dla klastra edge-cluster-02 Nowy router zostanie stworzony na dedykowanym klastrze edge. Dla środowiska testowego uruchamiam to na jednym EDGE VM.
    Przechodzimy do tworzenie routera T0,

    w nowym oknie nadajemy nazwę dla naszego Tier-0 Routera

    Klikamy save
  2. Po utworzeniu routera T0 konfigurujemy interfejs Uplink do vMX. Przechodzimy do Edycji utworzonego T0 przechodzimy do Interfejs

    klikamy set i w nowym oknie klikamy ADD Interface w pierwszej kolejności Uplink-vlan11. Tutaj mamy do skonfigurowania:
    – nadajemy nazwę dla interfejsu,
    – wybieramy Tym External,
    – nadajemy adres ip,
    – przypinamy do segmentu utworzonego na samym początku.
    – Przypinamy na której EDGE VM ma być przypięty interfejs. W tym przypadku to jest jedyny edge vm który mam dostępny do tego.
    – ustawiamy MTU ze względu że będzie tam VXALN enkapsulacja musimy ustawić min. 1600
  3. Konfiguracja Interfejsu loopback
    Teraz utworzymy interfejs loopback który będzie służył nam do zapinania sesji EVPN pomiędzy T0 a vMX’em
  4. Konfiguracja EVPN
    Przechodzimy do EVPN Settings gdzie w VNI Pool wybieramy nasz profil dla VNI który wcześniej utworzyliśmy.
  5. EVPN Tunel Endpoint
    W tym sam miejscu ustawiamy EVPN Tunel Endpoint który wskazuje nasz interfejs loopback
  6. BGPKonfigurujemy sąsiedztwo BGP na interfejsie Uplink. W ta sesja posłuży nam do rozgłoszenia adresu IP Loopback
    Przechodzimy do sekcji BGP gdzie konfigurujemy:
    -Local AS
    – BGP włączamy

    Przechodzimy do BGP Neigbors gdzie konfigurujemy sąsiedztwo dla Interfejsu loopback i uplink
  7. Konfiguracja sąsiedztwa
    Sąsiedztwo na interfejsie uplink poniżej schemat poglądowy:

    Konfiguracja od strony NSX-T

    schemat logiczny:

    Konfiguracja sąsiedztwa na interfejsie loopback

    gdzie dla tego połączenie ustawiamy dodatkowy filtr
  8. redystrybucja routingu
    W sekcji Route RE-DISTRBUTION konfigurujemy profil gdzie włączamy takie jak poniżej redystrybucje:

    w powyższych krokach mamy skonfigurowane połączenie oraz sesje BGP z vMX’em
Konfiguracja routera VRF A
  1. utworzenie routera VRF1
    przechodzimy do Networking Tier-0 Gateways wybieramy ADD Gateway i wybieramy VRF
  2. Konfiguracja VRF
    W nowym oknie konfigurujemy nazwę dla VRFu do którego T0 zostanie podłączony, Nadajemy unikalny RD(Route Distinguisher) oraz wybieramy ID VNI który będzie służył do tunelowania pomiędzy VRFem a vMXem
    Tutaj można zastosować metodę dla RD że jest w formacie AS:VNI
  3. Tworzenie Interfejsu loopback w VRFie A
    Przechodzimy do Edycji VRF-A

    Gdzie przechodzimy do sekcji Interface i dodajemy Interfejs
  4. włączamy redystrybucję sieci podłączonych typu loopback oraz sieci z T1

VRF B potarzamy powyższe korki tylko zmieniamy dane zgodnie z rysunkiem

 

Router T1

Do każdego VRF’u zostanie podłączony nie zależny router T1 a każdy router T1 będzie miał podłączony jeden segment.

  1. Tworzymy router T1
  2. włączamy rozgłaszanie podłączonych segmentów
  3. Tworzymy segment podłączony do T1

Powyższe kroki powtarzamy dla routera T1 podłączonego do VRFu B

Konfiguracja vMX’a

  1. Konfiguracja Interfejsu ge-0/0/0.11 do T0.
    Konfigurujemy połączenie pomiędzy T0 i vMX oraz na interfejsie włączamy MTU 9K.

    set interfaces ge-0/0/0 vlan-tagging
    set interfaces ge-0/0/0 mtu 9000
    set interfaces ge-0/0/0 unit 11 vlan-id 11
    set interfaces ge-0/0/0 unit 11 family inet address 192.168.10.1/24
  2. Konfiguracja interfejsu loopback 0.
    set interfaces lo0 unit 0 family inet address 10.11.10.2/32

    Konfigurujemy interfejsy które będą dodane do VRF’ów A i B.

    set interfaces lo0 unit 100 family inet address 172.30.100.2/32
    set interfaces lo0 unit 101 family inet address 192.168.100.2/32
  3. Konfiguracja sesji BGP
    W pierwszym kroku konfigurujemy sesję BGP na interfejsie uplink vlan 11 który łączy vMX i T0

    set protocols bgp group T0 type internal
    set protocols bgp group T0 family inet unicast
    set protocols bgp group T0 peer-as 65000
    set protocols bgp group T0 neighbor 192.168.10.10

    w drugim korku konfigurujemy BGO pomiędzy interfejsami loopback

    set protocols bgp group EVPN type internal
    set protocols bgp group EVPN family inet unicast
    set protocols bgp group EVPN family evpn signaling
    set protocols bgp group EVPN neighbor 10.11.10.1 local-address 10.11.10.2
    set protocols bgp group EVPN neighbor 10.11.10.1 peer-as 65000
  4. Konfiguracja polityki eksportującej wszystkich sieci direct
    set policy-options policy-statement export_direct from protocol direct
    set policy-options policy-statement export_direct then accept
  5. VRFy
    Konfiguracja VRF-A

    set routing-instances vrfx-a protocols evpn ip-prefix-routes advertise direct-nexthop
    set routing-instances vrfx-a protocols evpn ip-prefix-routes encapsulation vxlan
    set routing-instances vrfx-a protocols evpn ip-prefix-routes vni 95001
    set routing-instances vrfx-a protocols evpn ip-prefix-routes export export_direct
    set routing-instances vrfx-a vtep-source-interface lo0.0
    set routing-instances vrfx-a instance-type vrf
    set routing-instances vrfx-a interface lo0.100
    set routing-instances vrfx-a route-distinguisher 65000:95001
    set routing-instances vrfx-a vrf-target target:65000:95001

    Konfiguracja VRF-B

    set routing-instances vrfx-b protocols evpn ip-prefix-routes advertise direct-nexthop
    set routing-instances vrfx-b protocols evpn ip-prefix-routes encapsulation vxlan
    set routing-instances vrfx-b protocols evpn ip-prefix-routes vni 95002
    set routing-instances vrfx-b protocols evpn ip-prefix-routes export export_direct
    set routing-instances vrfx-b vtep-source-interface lo0.0
    set routing-instances vrfx-b instance-type vrf
    set routing-instances vrfx-b interface lo0.101
    set routing-instances vrfx-b route-distinguisher 65000:95002
    set routing-instances vrfx-b vrf-target target:65000:95002
  6. Wykonujemy commit i przechodzimy do weryfikacji

Weryfikacja

Weryfikacja po stronie vMX
  1. Sprawdzenie BGP
    root> show bgp summary 
    Threading mode: BGP I/O
    Groups: 2 Peers: 2 Down peers: 0
    Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
    inet.0               
                           2          0          0          0          0          0
    bgp.evpn.0           
                           4          4          0          0          0          0
    Peer                     AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
    10.11.10.1            65000         30         39       0       2       10:38 Establ
      inet.0: 0/1/1/0
      bgp.evpn.0: 4/4/4/0
      vrfx-a.evpn.0: 2/2/2/0
      vrfx-b.evpn.0: 2/2/2/0
    192.168.10.10         65000         24         27       0       2       10:38 Establ
      inet.0: 0/1/1/0

    Jak widzimy sesje BGP unicast oraz evpn są zestawione

  2. Sprawdzamy tablicę routingu
    root> show route | no-more 
    
    inet.0: 14 destinations, 16 routes (14 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    0.0.0.0/0          *[Static/5] 5d 05:20:34
                        >  to 10.101.9.1 via fxp0.0
    10.11.10.1/32      *[Static/5] 3d 00:51:26
                        >  to 192.168.10.10 via ge-0/0/0.11
                        [BGP/170] 00:11:42, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
                        [BGP/170] 00:11:42, MED 0, localpref 100
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    
    vrfx-a.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    172.30.30.0/24     *[EVPN/170] 00:09:56
                        >  to 192.168.10.10 via ge-0/0/0.11
    172.30.100.1/32    *[EVPN/170] 00:09:56
                        >  to 192.168.10.10 via ge-0/0/0.11
    172.30.100.2/32    *[Direct/0] 00:14:31
                        >  via lo0.100
    
    vrfx-b.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    192.168.2.0/24     *[EVPN/170] 00:08:41
                        >  to 192.168.10.10 via ge-0/0/0.11
    192.168.100.1/32   *[EVPN/170] 00:08:41
                        >  to 192.168.10.10 via ge-0/0/0.11
    192.168.100.2/32   *[Direct/0] 00:14:31
                        >  via lo0.101
    
    .....
    bgp.evpn.0: 6 destinations, 6 routes (6 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    5:65000:95001::0::172.30.30.0::24/248               
                       *[BGP/170] 00:33:41, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95001::0::172.30.100.1::32/248               
                       *[BGP/170] 00:33:41, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95001::0::172.30.100.2::32/248               
                       *[EVPN/170] 00:03:41
                           Indirect
    5:65000:95002::0::192.168.2.0::24/248               
                       *[BGP/170] 00:32:26, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95002::0::192.168.100.1::32/248               
                       *[BGP/170] 00:32:26, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95002::0::192.168.100.2::32/248               
                       *[EVPN/170] 00:03:07
                           Indirect
    
    vrfx-a.evpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    5:65000:95001::0::172.30.30.0::24/248               
                       *[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95001::0::172.30.100.1::32/248               
                       *[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95001::0::172.30.100.2::32/248               
                       *[EVPN/170] 00:03:41
                           Indirect
    
    vrfx-b.evpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    5:65000:95002::0::192.168.2.0::24/248               
                       *[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95002::0::192.168.100.1::32/248               
                       *[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1
                          AS path: ?, validation-state: unverified
                        >  to 192.168.10.10 via ge-0/0/0.11
    5:65000:95002::0::192.168.100.2::32/248               
                       *[EVPN/170] 00:03:07
                           Indirect

    w tablicy routingu wygląda wszytko ok – jak widać tylko w tablicy inet.0 warto od strony T0 włączyć odpowiedni filtrowanie rozgłaszanych prfixów w BGP dla loopbacka, ale to jest kosmetyka.

  3. ulubiony test ping pomiędzy interfejsami loop back
    root> ping 192.168.100.1 routing-instance vrfx-b    
    PING 192.168.100.1 (192.168.100.1): 56 data bytes
    64 bytes from 192.168.100.1: icmp_seq=0 ttl=64 time=1.266 ms
    64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=1.429 ms
    64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=1.347 ms
    64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=1.386 ms
    64 bytes from 192.168.100.1: icmp_seq=4 ttl=64 time=1.698 ms
    64 bytes from 192.168.100.1: icmp_seq=5 ttl=64 time=1.530 ms
    64 bytes from 192.168.100.1: icmp_seq=6 ttl=64 time=1.450 ms
    ^C
    --- 192.168.100.1 ping statistics ---
    7 packets transmitted, 7 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 1.266/1.444/1.698/0.129 ms
    
    root> ping 172.30.100.1 routing-instance vrfx-a  
    PING 172.30.100.1 (172.30.100.1): 56 data bytes
    64 bytes from 172.30.100.1: icmp_seq=0 ttl=64 time=1.325 ms
    64 bytes from 172.30.100.1: icmp_seq=1 ttl=64 time=1.249 ms
    64 bytes from 172.30.100.1: icmp_seq=2 ttl=64 time=1.390 ms
    ^C
    --- 172.30.100.1 ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 1.249/1.321/1.390/0.058 ms
    
    
    

     

Weryfikacja po stronie NSX-T

Po stronie NSX sprawdzamy z poziomu CLI. Logujemy się z na EDGE VM na którym jest uruchomione T0
1. sprawdzamy na którym id jest uruchomione SR dla T0

dc1edge03> get logical-router
Logical Router
UUID                                   VRF    LR-ID  Name                              Type                        Ports  
736a80e3-23f6-5a2d-81d6-bbefb2786666   0      0                                        TUNNEL                      4      
f9414cef-e3e3-405a-a7f8-55f349e08f22   1      1026   SR-VRF-VRF-A                      VRF_SERVICE_ROUTER_TIER0    6      
11ab6c6f-222b-434f-b25b-aad51dadf2ed   2      1027   SR-VRF-VRF-B                      VRF_SERVICE_ROUTER_TIER0    6      
987450ee-042c-41aa-9d0d-d4fcabd44b36   3      25     SR-R-T1-VRF-A                     SERVICE_ROUTER_TIER1        5      
06d10402-2066-4e4f-8243-6679d1bcb6b3   4      14     SR-R-T0-MPBGP                     SERVICE_ROUTER_TIER0        7      
f2ca25ae-49a3-4b12-a91e-c5c9908bb6c9   6      22     DR-VRF-VRF-A                      VRF_DISTRIBUTED_ROUTER_TIER0 4      
c43a9c6d-b207-4022-b43c-e52728eb1ab5   7      24     DR-R-T1-VRF-A                     DISTRIBUTED_ROUTER_TIER1    4      
304d5182-a40c-486a-a1e3-6d35275951fd   8      27     SR-R-T1-VRF-B                     SERVICE_ROUTER_TIER1        5      
758b42b3-8a4c-452f-91ad-6baf97188879   9      23     DR-VRF-VRF-B                      VRF_DISTRIBUTED_ROUTER_TIER0 4      
6204d89c-ec0e-40a9-9824-33adbbb41bff   10     26     DR-R-T1-VRF-B                     DISTRIBUTED_ROUTER_TIER1    4

2. przechodzimy do VRF 4 i sprawdzamy stan BGP

dc1edge03(tier0_sr)> get bgp neighbor summary 
BFD States: NC - Not configured, AC - Activating,DC - Disconnected
            AD - Admin down, DW - Down, IN - Init,UP - Up
BGP summary information for VRF default for address-family: ipv4Unicast
Router ID: 192.168.10.10  Local AS: 65000

Neighbor                            AS          State Up/DownTime  BFD InMsgs  OutMsgs InPfx  OutPfx

10.11.10.2                          65000       Estab 00:20:34     NC  9887    8712    0      0     
192.168.10.1                        65000       Estab 00:20:34     NC  9869    8910    1      0     

BFD States: NC - Not configured, AC - Activating,DC - Disconnected
            AD - Admin down, DW - Down, IN - Init,UP - Up
BGP summary information for VRF default for address-family: l2VpnEvpn
Router ID: 192.168.10.10  Local AS: 65000

Neighbor                            AS          State Up/DownTime  BFD InMsgs  OutMsgs InPfx  OutPfx

10.11.10.2                          65000       Estab 00:20:34     NC  9887    8712    0      0     
192.168.10.1                        65000       Estab 00:20:34     NC  9869    8910    0      0     

3. sprawdzamy stan BGP EVPN – get bgp evpn

dc1edge03(tier0_sr)> get bgp evpn 
BGP table version is 3, local router ID is 192.168.10.10
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]

   Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65000:95001
*> [5]:[0]:[24]:[172.30.30.0]
                    10.11.10.1               0         32768 ?
*> [5]:[0]:[32]:[172.30.100.1]
                    10.11.10.1               0         32768 ?
*>i[5]:[0]:[32]:[172.30.100.2]
                    10.11.10.2                    100      0 i
Route Distinguisher: 65000:95002
*> [5]:[0]:[24]:[192.168.2.0]
                    10.11.10.1               0         32768 ?
*> [5]:[0]:[32]:[192.168.100.1]
                    10.11.10.1               0         32768 ?
*>i[5]:[0]:[32]:[192.168.100.2]
                    10.11.10.2                    100      0 i

Displayed 6 prefixes (6 paths)

kilka innych pomocnych komend do weryfikacji z poziomy serwis routera T0

Wyświetla wszystkie dostępne VRFy z przypisanym VBNI get bgp evpn vni 
Wyświetla tablicę routingu w protokole BGP z podziałem na RD get bgp evpn overlay
Pokazuje skonfigurowane VRFy które są aktywne w EVPN get evpn vni

 

 

Pasjonat komputerowy od zawsze oraz maniak w zakresie sieci, wirtualizacji oraz bezpieczeństwa IT. Kompetentny inżynier z dużym doświadczeniem w realizacji projektów informatycznych i telekomunikacyjnych. Wieloletni administrator IT, który utrzymuje systemy informatyczne dostosowując je do wymogów biznesowych z zapewnieniem dostępności 24/7/365.
Posts created 126

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top