VXLAN i NSX-V — felsökning av underlay

Hej, och först lite lyrik. Jag avundas ibland kollegor som arbetar pĂ„ distans — det Ă€r fantastiskt att kunna arbeta frĂ„n vilken plats som helst i den uppkopplade vĂ€rlden, ta ledigt nĂ€r som helst, ha ansvar för projekt och deadlines, istĂ€llet för att befinna sig pĂ„ kontoret mellan 8 och 17. Min position och arbetsuppgifter utesluter nĂ€stan möjligheten till lĂ„ngvarig frĂ„nvaro frĂ„n datacentret. Men — dĂ„ och dĂ„ intrĂ€ffar intressanta fall, likt det som beskrivs nedan — och jag förstĂ„r att det finns fĂ„ positioner dĂ€r det finns sĂ„ mycket utrymme för kreativt uttryck av den interna felsökaren.

En liten disklaimer — vid tidpunkten för artikelns skrivande Ă€r fallet inte helt löst, men med tanke pĂ„ svarstiden frĂ„n leverantörer kan det dröja mĂ„nader att fĂ„ en fullstĂ€ndig lösning, och jag vill gĂ€rna dela med mig av mina fynd redan nu. Jag hoppas att ni, kĂ€ra lĂ€sare, kan förlĂ„ta mig denna brĂ„dska. Men nog med vatten — vad hĂ€nder med fallet?

Först en introduktion: det finns ett företag (dĂ€r jag arbetar som nĂ€tverksingenjör) som hostar kundlösningar i en privat VMWare-moln. De flesta nya lösningar ansluts till VXLAN-segment som hanteras av NSX-V — jag ska inte bedöma hur mycket tid detta beslut har gett mig, kort sagt — mycket. Jag har till och med lyckats lĂ€ra kollegor att konfigurera NSX ESG och smĂ„ kundlösningar implementeras utan min inblandning. En viktig notering — kontrollplanet har vi med unicast-replikering. Hypervisorerna Ă€r anslutna redundanta med tvĂ„ grĂ€nssnitt till olika fysiska Juniper QFX5100-switchar (som Ă€r ihopkopplade i ett Virtual Chassis) och en policy för rutning baserad pĂ„ den ursprungliga virtuella porten — detta för att fĂ„ en helhetsbild.

Kundlösningarna Ă€r mycket skiftande: frĂ„n Windows IIS, dĂ€r alla komponenter av webbservern Ă€r installerade pĂ„ en och samma maskin, till ganska stora — exempelvis lastbalanserade Apache-webbfronter + LB MariaDB i Galera + delad servrar, synkroniserade med GlusterFS. NĂ€stan varje server mĂ„ste övervakas separat, och offentliga adresser finns inte för alla komponenter — om du har stött pĂ„ denna uppgift och har en mer elegant lösning, skulle jag uppskatta ett tips.
Min övervakningslösning innebĂ€r att "koppla" brandvĂ€ggen (Fortigate) till varje intern kundnĂ€tverk (+SNAT och sjĂ€lvklart strikt begrĂ€nsning av tillĂ„ten trafik) och övervaka interna adresser – pĂ„ sĂ„ sĂ€tt uppnĂ„s en form av enhetlighet och förenkling av övervakningen. SjĂ€lv övervakning görs frĂ„n en kluster av PRTG-servrar. Övervakningsschemat ser ungefĂ€r ut sĂ„ hĂ€r:

VXLAN i NSX-V — felsökning av underlay

NĂ€r vi endast arbetade med VLAN fungerade allt ganska vanligt och förutsĂ€gbart, som en klocka. Efter implementeringen av NSX-V och VXLAN stĂ€lldes vi inför frĂ„gan – kan vi fortsĂ€tta övervaka som tidigare? Vid tidpunkten för denna frĂ„ga var den "snabbaste" lösningen att distribuera NSX ESG och koppla VXLAN trunk-grĂ€nssnittet till VTEP-nĂ€tverket. Snabbt i citat – eftersom anvĂ€ndning av GUI för att konfigurera kundnĂ€tverk, SNAT och brandvĂ€ggsregler kanske enhetliggör hanteringen i ett enda vSphere-grinterfaces, men enligt min Ă„sikt Ă€r det ganska klumpigt och, utöver allt, begrĂ€nsar det verktygssatserna för felsökning. De som har anvĂ€nt NSX ESG som ersĂ€ttning för en "riktig" brandvĂ€gg kommer nog att hĂ„lla med. Även om, kanske, en sĂ„dan lösning skulle vara mer stabil – eftersom allt sker inom en leverantörs ramverk.

En annan lösning Ă€r att anvĂ€nda NSX DLR i bridge-lĂ€ge mellan VLAN och VXLAN. HĂ€r tycker jag att allt Ă€r klart – man förlorar helt enkelt fördelen med att anvĂ€nda VXLAN – eftersom man fortfarande mĂ„ste dra VLAN till övervakningsinstallationen. För övrigt stötte jag under arbetet med den hĂ€r lösningen pĂ„ ett problem dĂ€r DLR-bryggan inte skickade paket till den virtuella maskin med vilken den befann sig pĂ„ samma vĂ€rd. Jag vet, jag vet – i böcker och guider om NSX-V stĂ„r det klart att en separat kluster ska tilldelas NSX Edge, men det Ă€r i böckerna
 Hur som helst, efter ett par mĂ„nader med supporten löste vi inte problemet. I princip förstod jag logiken bakom – kĂ€rnmodulen i hypervisorn, som Ă€r ansvarig för inkapsling av VXLAN, aktiverades inte om DLR och den observerade servern befann sig pĂ„ samma vĂ€rd, eftersom trafiken inte lĂ€mnar vĂ€rden och enligt logiken skulle vara kopplad till VXLAN-segmentet – inkapsling behövs inte. Med supporten kom vi fram till det virtuella grĂ€nssnittet vdrPort, som logiskt förenar uplinks och Ă€ven utför bryggning/inkapsling – dĂ€r noterades en avvikelse i den inkommande trafiken, som jag tog med mig i det aktuella Ă€rendet. Men som sagt, jag avslutade inte detta Ă€rende helt, eftersom jag blev överflyttad till ett annat projekt och dessutom var den grenen frĂ„n början en Ă„tervĂ€ndsgrĂ€nd, och jag hade inte sĂ€rskilt mycket lust att utveckla den. Om jag inte misstar mig observerades problemet i versionerna NSX 6.1.4 och 6.2.

Och dÀr - bingo! Fortinet tillkÀnnager nativ stöd för VXLAN. Och inte bara point-to-point eller VXLAN-over-IPSec, inte programvarubryggning av VLAN-VXLAN - allt detta började implementeras redan med version 5.4 (och finns representerat hos andra leverantörer), och den verkliga supporten av unicast control plane. NÀr jag implementerade lösningen stötte jag pÄ ett annat problem - de övervakade servrarna försvann periodvis frÄn övervakningen, Àven om sjÀlva virtuella maskinen var aktiv. Anledningen var att jag glömde att tillÄta Ping pÄ VXLAN-grÀnssnittet. Under ombalanseringen av klustren flyttades de virtuella maskinerna, och Ping avslutade vMotion för att ange den nya ESXi-vÀrden som maskinen flyttades till. Det var en dumhet frÄn min sida, men detta problem skadade Äterigen förtroendet för supporten frÄn tillverkaren - i detta fall Fortinet. Jag nÀmner inte ens att varje Àrende relaterat till VXLAN börjar med frÄgan

Efter att ha testat trafik framgÄngsrikt beslutades det att implementera denna lösning. Och i produktion visade det sig att efter en eller tvÄ dagar försvann allt som övervakades genom VXLAN gradvis. Deaktivering/aktivering av grÀnssnittet hjÀlpte, men bara för en kort stund. Med tanke pÄ tillverkarens lÄngsamhet i support, satte jag igÄng med felsökningen frÄn min sida - i slutÀndan Àr det mitt företag, mitt nÀtverk - mitt ansvar.

Under spoiler-texten finns felsökningsprocessen. Den som tröttnat pÄ bokstÀver och överdrifter - hoppa över detta och gÄ vidare till postanalysen.

FelsökningsprocessenTack för att du fortsatte lÀsa - vi fortsÀtter!

SÄ, övervakningen fungerar under en tid, sedan bryter den ner av sig sjÀlv. Det antyder att det förmodligen inte finns nÄgra problem i brandvÀggens policyer. Men eftersom jag har stött pÄ problemet med hÀngande systemprocesser i Fortigate versioner 5.6+, sÄ kollar vi först pÄ "diagnose debug flow" - som vÀntat tillÄts trafiken och skickas ut frÄn grÀnssnittet och som vÀntat kommer det inget svar. SÄ vi grÀver vidare i stacken. TyvÀrr mÄste vi dölja adresser, Àven om de Àr RFC1918, men jag hoppas kunna ge processen en tillrÀcklig beskrivning för förstÄelse. Servern inom VXLAN har adress x.x.x.15, Fortigate-grÀnssnittet x.x.x.254, och alla andra adresser tillhör VTEP-nÀtverket.

För en lyckad överföring av VXLAN-kapslade paket krÀvs korrekt information i flera tabeller. För overlay Àr det ARP och OVSDB, för underlay Àr det ARP och CAM. I fallet med Fortigate Àr VXLAN FDB och OVSDB samma sak. HÀr börjar vi:

 fortigate (root) #diag sys vxlan fdb list vxlan-LS
mac=00:50:56:8f:3f:5a state=0x0002 flags=0x00 remote_ip=у.у.у.47 port=4789 vni=5008 ifindex=7

HĂ€r Ă€r allt ganska enkelt — MAC-adressen för den virtuella maskinen mĂ„ste finnas pĂ„ VTEP med adressen у.у.у.47. Genom att titta pĂ„ innehĂ„llet och instĂ€llningarna i ESXI-klustret finner jag att MAC-adressen för den virtuella maskinen Ă€r korrekt, och adressen för VTEP likasĂ„. Jag kontrollerar CAM/ARP-tabellen pĂ„ fortigate — Ă„terigen stĂ€mmer allt överens med instĂ€llningarna pĂ„ ESXI-vĂ€rden:

fortigate (root) #get sys arp | grep у.у.у.47
у.у.у.47 0 00:50:56:65:f6:2c dmz

Tabellerna Ă€r korrekta och trafiken gĂ„r — kanske problemet inte ligger hos fortigate? Jag har avsiktligt hoppat över analysen av trafikvĂ€xlingen pĂ„ Juniper — logiskt sett bör nĂ€sta steg i felsökningen göras dĂ€r, men mitt nĂ€tverk Ă€r enkelt — bara en VLAN för VTEP och alla komponenter Ă€r direktanslutna. Dessutom minns jag ett fall med DLR-bryggan, VDR och försvinnande trafik — jag gĂ„r för att sniffa pĂ„ ESXI-vĂ€rden och skapar samtidigt ett Ă€rende till VMWare. Nedan har MAC "97:6e" tillhör fortigate, vmnic1 — detta Ă€r grĂ€nssnittet som har VTEP med adressen у.у.у.47, vi sniffar i bĂ„da riktningar "—dir 2":

pktcap-uw --uplink vmnic1 --vni 5008  --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

VXLAN i NSX-V — felsökning av underlay

Framsteg — i sniffen ser jag ARP-förfrĂ„gan och det inkommande svaret. Jag visar bara ARP-svaret och dĂ€r Ă€r allt korrekt. Jag nĂ€mnde inte, men under hela denna tid pingade övervakningsservern adressen х.х.х.15 — var Ă€r ICMP-trafiken? Jag minns att jag har tvĂ„ uplinks. HĂ€r kan man diskutera och sĂ€ga att den virtuella portens kĂ€lla Ă€r densamma (min teaming policy), det vill sĂ€ga för samma vNIC borde samma uplink vĂ€ljas, men eftersom jag Ă€r pĂ„ vĂ€rden Ă€r det inget problem att kontrollera den andra uplinken:

pktcap-uw --uplink vmnic4 --vni 5008  --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

VXLAN i NSX-V — felsökning av underlay

Jag fĂ„r förfrĂ„gningar frĂ„n Fortigate, men inget svar. Det vill sĂ€ga att problemet inte ligger hos Fortigate. Tja, jag tĂ€nker att det Ă€r samma gamla problem med förlorad trafik pĂ„ VDR, Ă„terigen mĂ„ste jag spendera ett par mĂ„nader för att fĂ„ till rĂ€tt person med Ă€rendet. Efter ett par dagar, nĂ€r jag svalt ner det och inte ville acceptera situationen, bestĂ€mde jag mig för att samla fler sniffar för supporten för att pĂ„skynda processen. Och hĂ€r, "av en slump", dras min blick till Ethernet-inkapslingen underlay. Kungen Ă€r inte verklig och MAC-adressen för VTEP överensstĂ€mmer inte med dess IP. Jag nollstĂ€ller, sniffer, grĂ€ver — sant eller falskt. Jag kommer att visa ARP-tabellen bredvid, sĂ„ att det Ă€r lĂ€ttare att jĂ€mföra. Notera den första Ethernet-inkapslingen pĂ„ bilden ovan:

fortigate (root) #get sys arp | grep u.u.u.47
u.u.u.47 0 00:50:56:65:f6:2c dmz
fortigate (root) #get sys arp | grep u.u.u.42
u.u.u.42 0 00:50:56:6a:78:86 dmz

SĂ„, vad har vi kommit fram till — efter migreringen av den virtuella maskinen, försöker Fortigate skicka trafik till VTEP frĂ„n (korrekt) VXLAN FDB, men anvĂ€nder fel DST MAC och trafiken kasseras som förvĂ€ntat av den mottagande hypervisorgrĂ€nssnittet. Och i en av fyra fall tillhörde denna MAC den ursprungliga hypervisorn, frĂ„n vilken migreringen av maskinen pĂ„börjades.

IgĂ„r fick jag ett mejl frĂ„n Fortinet-supporten — de har öppnat en bugg 615586 för mitt Ă€rende. Jag vet inte om jag ska vara glad eller ledsen: Ă„ ena sidan — problemet ligger inte i instĂ€llningarna, Ă„ andra sidan — fixen kommer bara med nĂ€sta firmware-uppdatering, i bĂ€sta fall nĂ€sta. Mitt ego fĂ„r ocksĂ„ en extra boost av en annan bugg som jag identifierade förra mĂ„naden, dock vid HTML5 GUI vSphere. Det Ă€r verkligen som en lokal QA-avdelning hos leverantörer...

Jag vÄgar göra följande antagande:

1 — multicast-kontrollplanet kommer förmodligen inte att vara utsatt för det beskrivna problemet — eftersom MAC-adresserna för VTEP fĂ„rs frĂ„n gruppens IP-adress som grĂ€nssnittet Ă€r prenumererat pĂ„.

2 — förmodligen ligger felet hos Fortigate i avlastningen av sessioner till Network Processor (ungefĂ€r som CEF) — om varje paket passerar genom CPU:n, kommer de att anvĂ€nda tabeller som innehĂ„ller korrekt — i alla fall visuellt — information. Det stöder detta antagande att det hjĂ€lper att stĂ€nga/öppna grĂ€nssnittet eller vĂ€nta en stund — mer Ă€n 5 minuter.

3 — att Ă€ndra teaming-policy, till exempel till explicit failover, eller att införa LAG kommer inte att lösa problemet, eftersom det har observerats "fastna" MAC-adressen för den ursprungliga hypervisorn i inkapslade paket.

I detta ljus kan jag dela med mig av att jag nyligen har upptÀckt bloggen, dÀr en av artiklarna pÄstod att stateful brandvÀggar och cachade dataöverföringsmetoder Àr tillfÀlliga lösningar. Tja, jag Àr inte tillrÀckligt erfaren inom IT för att pÄstÄ nÄgot sÄdant, dessutom hÄller jag inte alltid med om pÄstÄendena i blogginlÀggen. Men nÄgot sÀger mig att det finns en del sanning i Ivans ord.

Tack för uppmÀrksamheten! Jag ser fram emot att svara pÄ frÄgor och höra konstruktiv kritik.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster