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
- 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 - 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
- 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
- Konfiguracja EVPN
Przechodzimy do EVPN Settings gdzie w VNI Pool wybieramy nasz profil dla VNI który wcześniej utworzyliśmy.
- EVPN Tunel Endpoint
W tym sam miejscu ustawiamy EVPN Tunel Endpoint który wskazuje nasz interfejs loopback
- 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 - 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
- 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
- utworzenie routera VRF1
przechodzimy do Networking Tier-0 Gateways wybieramy ADD Gateway i wybieramy VRF
- 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
- Tworzenie Interfejsu loopback w VRFie A
Przechodzimy do Edycji VRF-A
Gdzie przechodzimy do sekcji Interface i dodajemy Interfejs
- 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.
Powyższe kroki powtarzamy dla routera T1 podłączonego do VRFu B
Konfiguracja vMX’a
- Konfiguracja Interfejsu ge-0/0/0.11 do T0.
Konfigurujemy połączenie pomiędzy T0 i vMX oraz na interfejsie włączamy MTU 9K.
123456set interfaces ge-0/0/0 vlan-taggingset interfaces ge-0/0/0 mtu 9000set interfaces ge-0/0/0 unit 11 vlan-id 11set interfaces ge-0/0/0 unit 11 family inet address 192.168.10.1/24 - Konfiguracja interfejsu loopback 0.
123set 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.
1234set interfaces lo0 unit 100 family inet address 172.30.100.2/32set interfaces lo0 unit 101 family inet address 192.168.100.2/32 - Konfiguracja sesji BGP
W pierwszym kroku konfigurujemy sesję BGP na interfejsie uplink vlan 11 który łączy vMX i T0
123456set protocols bgp group T0 type internalset protocols bgp group T0 family inet unicastset protocols bgp group T0 peer-as 65000set protocols bgp group T0 neighbor 192.168.10.10
w drugim korku konfigurujemy BGO pomiędzy interfejsami loopback
1234567set protocols bgp group EVPN type internalset protocols bgp group EVPN family inet unicastset protocols bgp group EVPN family evpn signalingset protocols bgp group EVPN neighbor 10.11.10.1 local-address 10.11.10.2set protocols bgp group EVPN neighbor 10.11.10.1 peer-as 65000 - Konfiguracja polityki eksportującej wszystkich sieci direct
1234set policy-options policy-statement export_direct from protocol directset policy-options policy-statement export_direct then accept - VRFy
Konfiguracja VRF-A
1234567891011set routing-instances vrfx-a protocols evpn ip-prefix-routes advertise direct-nexthopset routing-instances vrfx-a protocols evpn ip-prefix-routes encapsulation vxlanset routing-instances vrfx-a protocols evpn ip-prefix-routes vni 95001set routing-instances vrfx-a protocols evpn ip-prefix-routes export export_directset routing-instances vrfx-a vtep-source-interface lo0.0set routing-instances vrfx-a instance-type vrfset routing-instances vrfx-a interface lo0.100set routing-instances vrfx-a route-distinguisher 65000:95001set routing-instances vrfx-a vrf-target target:65000:95001
Konfiguracja VRF-B
1234567891011set routing-instances vrfx-b protocols evpn ip-prefix-routes advertise direct-nexthopset routing-instances vrfx-b protocols evpn ip-prefix-routes encapsulation vxlanset routing-instances vrfx-b protocols evpn ip-prefix-routes vni 95002set routing-instances vrfx-b protocols evpn ip-prefix-routes export export_directset routing-instances vrfx-b vtep-source-interface lo0.0set routing-instances vrfx-b instance-type vrfset routing-instances vrfx-b interface lo0.101set routing-instances vrfx-b route-distinguisher 65000:95002set routing-instances vrfx-b vrf-target target:65000:95002 - Wykonujemy commit i przechodzimy do weryfikacji
Weryfikacja
Weryfikacja po stronie vMX
- Sprawdzenie BGP
123456789101112131415161718root> show bgp summaryThreading mode: BGP I/OGroups: 2 Peers: 2 Down peers: 0Table Tot Paths Act Paths Suppressed History Damp State Pendinginet.02 0 0 0 0 0bgp.evpn.04 4 0 0 0 0Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...10.11.10.1 65000 30 39 0 2 10:38 Establinet.0: 0/1/1/0bgp.evpn.0: 4/4/4/0vrfx-a.evpn.0: 2/2/2/0vrfx-b.evpn.0: 2/2/2/0192.168.10.10 65000 24 27 0 2 10:38 Establinet.0: 0/1/1/0
Jak widzimy sesje BGP unicast oraz evpn są zestawione - Sprawdzamy tablicę routingu
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394root> show route | no-moreinet.0: 14 destinations, 16 routes (14 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both0.0.0.0/0 *[Static/5] 5d 05:20:34> to 10.101.9.1 via fxp0.010.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.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.11[BGP/170] 00:11:42, MED 0, localpref 100AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.11vrfx-a.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both172.30.30.0/24 *[EVPN/170] 00:09:56> to 192.168.10.10 via ge-0/0/0.11172.30.100.1/32 *[EVPN/170] 00:09:56> to 192.168.10.10 via ge-0/0/0.11172.30.100.2/32 *[Direct/0] 00:14:31> via lo0.100vrfx-b.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both192.168.2.0/24 *[EVPN/170] 00:08:41> to 192.168.10.10 via ge-0/0/0.11192.168.100.1/32 *[EVPN/170] 00:08:41> to 192.168.10.10 via ge-0/0/0.11192.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, * = Both5:65000:95001::0::172.30.30.0::24/248*[BGP/170] 00:33:41, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95001::0::172.30.100.1::32/248*[BGP/170] 00:33:41, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95001::0::172.30.100.2::32/248*[EVPN/170] 00:03:41Indirect5:65000:95002::0::192.168.2.0::24/248*[BGP/170] 00:32:26, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95002::0::192.168.100.1::32/248*[BGP/170] 00:32:26, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95002::0::192.168.100.2::32/248*[EVPN/170] 00:03:07Indirectvrfx-a.evpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both5:65000:95001::0::172.30.30.0::24/248*[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95001::0::172.30.100.1::32/248*[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95001::0::172.30.100.2::32/248*[EVPN/170] 00:03:41Indirectvrfx-b.evpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both5:65000:95002::0::192.168.2.0::24/248*[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95002::0::192.168.100.1::32/248*[BGP/170] 00:00:05, MED 0, localpref 100, from 10.11.10.1AS path: ?, validation-state: unverified> to 192.168.10.10 via ge-0/0/0.115:65000:95002::0::192.168.100.2::32/248*[EVPN/170] 00:03:07Indirect
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. - ulubiony test ping pomiędzy interfejsami loop back
12345678910111213141516171819202122232425root> ping 192.168.100.1 routing-instance vrfx-bPING 192.168.100.1 (192.168.100.1): 56 data bytes64 bytes from 192.168.100.1: icmp_seq=0 ttl=64 time=1.266 ms64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=1.429 ms64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=1.347 ms64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=1.386 ms64 bytes from 192.168.100.1: icmp_seq=4 ttl=64 time=1.698 ms64 bytes from 192.168.100.1: icmp_seq=5 ttl=64 time=1.530 ms64 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 lossround-trip min/avg/max/stddev = 1.266/1.444/1.698/0.129 msroot> ping 172.30.100.1 routing-instance vrfx-aPING 172.30.100.1 (172.30.100.1): 56 data bytes64 bytes from 172.30.100.1: icmp_seq=0 ttl=64 time=1.325 ms64 bytes from 172.30.100.1: icmp_seq=1 ttl=64 time=1.249 ms64 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 lossround-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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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 |