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.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
- 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
- Konfiguracja sesji BGP
W pierwszym kroku konfigurujemy sesję BGP na interfejsie uplink vlan 11 który łączy vMX i T0set 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
- 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
- VRFy
Konfiguracja VRF-Aset 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
- Wykonujemy commit i przechodzimy do weryfikacji
Weryfikacja
Weryfikacja po stronie vMX
- 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
- 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.
- 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 |