VXLAN in NSX-V – Fehlerbehebung im Underlay

Ich begrĂŒĂŸe Sie und beginne zunĂ€chst mit etwas Lyrik. Manchmal beneide ich meine Kollegen, die remote arbeiten — es ist einfach wunderbar, die Möglichkeit zu haben, von jedem Ort der vernetzten Welt aus zu arbeiten, Urlaub wann man will, Verantwortung fĂŒr Projekte und Deadlines zu tragen, statt von 8 bis 17 Uhr im BĂŒro zu sein. Meine Position und Arbeitsaufgaben schließen lange Abwesenheiten im Rechenzentrum praktisch aus. Doch regelmĂ€ĂŸig gibt es interessante FĂ€lle, wie den unten beschriebenen — und ich merke, dass es nur wenige Positionen gibt, die so viel Raum fĂŒr die kreative Entfaltung eines internen Troubleshooters bieten.

Ein kleiner Disclaimer — zum Zeitpunkt des Schreibens des Artikels war der Fall noch nicht vollstĂ€ndig gelöst, aber angesichts der Reaktionsgeschwindigkeit der Anbieter kann es noch Monate dauern, bis eine vollstĂ€ndige Lösung erarbeitet wird; ich möchte aber meine Entdeckungen schon jetzt teilen. Ich hoffe, verehrte Leser, Sie verzeihen mir diese Eile. Aber genug der Vorrede — was ist mit dem Fall?

ZunĂ€chst eine Einleitung: Es gibt eine Firma (in der ich als Netzwerkingenieur arbeite), die Kundenlösungen in einer privaten VMWare-Cloud hostet. Die meisten neuen Lösungen sind mit VXLAN-Segmenten verbunden, die von NSX-V verwaltet werden — ich möchte nicht bewerten, wie viel Zeit mir dieses System geschenkt hat; kurz gesagt — es ist viel. Ich konnte sogar meinen Kollegen die Einrichtung von NSX ESG beibringen, und kleinere Kundenlösungen werden ohne mein Zutun implementiert. Ein wichtiger Hinweis — der Control Layer bei uns verwendet Unicast-Replikation. Die Hypervisoren sind ĂŒber zwei Schnittstellen redundant an verschiedene physische Juniper QFX5100-Switches (zu einem Virtual Chassis zusammengeschaltet) angeschlossen und die Routing-Politik basiert auf dem ursprĂŒnglichen virtuellen Port — zur VollstĂ€ndigkeit der Darstellung.

Die Kundenlösungen sind sehr unterschiedlich: von Windows IIS, wo alle Komponenten des Webservers auf einem einzigen Rechner installiert sind, bis hin zu grĂ¶ĂŸeren Lösungen — beispielsweise Lastverteilung fĂŒr Apache-Web-Frontends + LB MariaDB in Galera + Share-Server, die mit GlusterFS synchronisiert werden. Praktisch jeder Server muss einzeln ĂŒberwacht werden, und nicht alle Komponenten haben öffentliche Adressen — falls Sie sich mit dieser Herausforderung auseinandergesetzt haben und elegantere Lösungen zur VerfĂŒgung stehen, wĂŒrde ich mich ĂŒber RatschlĂ€ge freuen.
Meine Überwachungsentscheidung besteht darin, die Firewall (Fortigate) an jedes interne Kundennetzwerk anzuschließen (+SNAT und natĂŒrlich strenge EinschrĂ€nkungen hinsichtlich des erlaubten Datenverkehrs) und die internen Adressen zu beobachten – auf diese Weise wird eine gewisse Vereinheitlichung und Vereinfachung der Überwachung erreicht. Die Überwachung erfolgt aus einem Cluster von PRTG-Servern. Das Überwachungsschema sieht ungefĂ€hr so aus:

VXLAN in NSX-V – Fehlerbehebung im Underlay

Solange wir nur mit VLANs gearbeitet haben, war alles ganz ĂŒblich und vorhersehbar, es funktionierte wie ein Uhrwerk. Nach der EinfĂŒhrung von NSX-V und VXLAN standen wir vor der Frage – können wir die Überwachung wie gewohnt fortsetzen? Zu dem Zeitpunkt war die „schnellste“ Lösung, NSX ESG zu implementieren und den VXLAN-Trunk-Schnittstellen in das VTEP-Netzwerk anzuschließen. Schnell in AnfĂŒhrungszeichen – denn die Verwendung der GUI zur Konfiguration der Kundennetzwerke, SNAT und Firewall-Regeln vereinheitlicht zwar die Verwaltung in einer einzigen vSphere-OberflĂ€che, ist meiner Meinung nach jedoch recht umstĂ€ndlich und schrĂ€nkt zudem die Werkzeugsammlung fĂŒr das Troubleshooting ein. Diejenigen, die NSX ESG als Ersatz fĂŒr eine „echte“ Firewall verwendet haben, werden dem vermutlich zustimmen. Obwohl eine solche Lösung wahrscheinlich stabiler wĂ€re – schließlich geschieht alles im Rahmen eines Anbieters.

Eine weitere Lösung besteht darin, den NSX DLR im Bridge-Modus zwischen VLAN und VXLAN zu verwenden. Hier denke ich, ist alles klar – es verliert einfach die Vorteile der Anwendung von VXLAN – denn in diesem Fall muss man das VLAN doch an die Monitoring-Installation anbinden. Übrigens bin ich bei der Ausarbeitung dieser Lösung auf ein Problem gestoßen, bei dem der DLR-Bridge keine Pakete an die virtuelle Maschine sendete, mit der sie sich auf demselben Host befand. Ich weiß, ich weiß – in den BĂŒchern und LeitfĂ€den zu NSX-V steht ausdrĂŒcklich, dass fĂŒr NSX Edge ein separater Cluster bereitgestellt werden muss, aber das steht in den BĂŒchern... So oder so, nach ein paar Monaten mit dem Support konnten wir das Problem nicht lösen. Im Prinzip habe ich die Logik verstanden – das Hypervisor-Kernel-Modul, das fĂŒr die Kapselung von VXLAN verantwortlich ist, wurde nicht genutzt, wenn DLR und der ĂŒberwachte Server sich auf demselben Host befanden, da der Verkehr den Host nicht verlĂ€sst und laut Logik an das VXLAN-Segment angeschlossen sein sollte – die Kapselung ist nicht notwendig. Mit dem Support haben wir uns auf das virtuelle Interface vdrPort geeinigt, das logisch die Uplinks vereint und auch die Bridging/Kapselung durchfĂŒhrt – dort wurde eine Diskrepanz im eingehenden Traffic festgestellt, die ich in diesem Fall weiterverfolgt habe. Aber wie gesagt, ich habe diesen Fall nicht zu Ende gebracht, da ich auf ein anderes Projekt versetzt wurde und der Ast ursprĂŒnglich eine Sackgasse war und ich nicht wirklich das BedĂŒrfnis hatte, ihn weiterzuentwickeln. Wenn ich mich nicht irre, trat das Problem in den Versionen NSX 6.1.4 und 6.2 auf.

Und hier – Bingo! Fortinet kĂŒndigt die native UnterstĂŒtzung fĂŒr VXLANan. Und es handelt sich nicht nur um Point-to-Point oder VXLAN-over-IPSec, nicht um softwarebasiertes Bridging zwischen VLAN und VXLAN – all dies wurde bereits seit Version 5.4 implementiert (und bei anderen Anbietern vorgestellt.), und eine echte UnterstĂŒtzung des Unicast Control Plane. Bei der Implementierung der Lösung bin ich auf ein weiteres Problem gestoßen – die ĂŒberwachten Server verschwanden gelegentlich aus der Überwachung, obwohl die virtuelle Maschine selbst noch aktiv war. Der Grund war, dass ich vergessen hatte, Ping auf dem VXLAN-Interface zu aktivieren. WĂ€hrend des Rebalancierens der Cluster wurden die virtuellen Maschinen verschoben und der vMotion-Prozess endete mit Ping, um den neuen ESXi-Host zu kennzeichnen, auf den die Maschine verschoben wurde. Meine Dummheit, aber dieses Problem hat mein Vertrauen in den Support des Herstellers erneut erschĂŒttert – in diesem Fall Fortinet. Ganz zu schweigen davon, dass jeder Fall, der mit VXLAN zu tun hat, mit der Frage beginnt: „Wo haben Sie die VLAN-VXLAN-Einstellungen in Ihrer Konfiguration?“ Dieses Mal wurde mir geraten, die MTU zu Ă€ndern – das fĂŒr den Ping, der 32 Byte betrĂ€gt. Danach „spiele“ ein wenig mit tcp-send-mss und tcp-receive-mss in der Policy – fĂŒr VXLAN, das in UDP eingekapselt ist. Puh, Entschuldigung – es musste raus. Zusammenfassend gesagt, habe ich dieses Problem eigenstĂ€ndig gelöst.

Nachdem ich den Testverkehr erfolgreich durchlaufen hatte, wurde beschlossen, diese Lösung einzufĂŒhren. Und in der Produktionsumgebung stellte sich heraus, dass nach ein oder zwei Tagen all das, was ĂŒber VXLAN ĂŒberwacht wurde, allmĂ€hlich ausfiel. Das Deaktivieren/Aktivieren des Interfaces half, aber nur vorĂŒbergehend. In Anbetracht der Langsamkeit des Herstellersupports habe ich mit dem Troubleshooting von meiner Seite aus begonnen – schließlich ist meine Firma, mein Netzwerk – meine Verantwortung.

Der Fortschritt des Troubleshootings unter Spoiler. Wer von Buchstaben und Prahlerei mĂŒde ist – ĂŒberspringt und geht zur Nachanalyse.

Fortschritt des TroubleshootingsDanke, dass Sie weiter gelesen haben – wir machen weiter!

Also, die Überwachung funktioniert eine Weile, dann fĂ€llt sie von selbst aus. Das bedeutet, dass es in der Firewall-Policy wahrscheinlich keine Probleme gibt. Da ich jedoch auf Probleme mit hĂ€ngenden Systemprozessen in Fortigate-Versionen 5.6+ gestoßen bin, schauen wir uns zuerst „diagnose debug flow“ an – erwartungsgemĂ€ĂŸ wird der Datenverkehr genehmigt und verlĂ€sst das Interface, und erwartungsgemĂ€ĂŸ kommt nichts als Antwort zurĂŒck. Das bedeutet, wir mĂŒssen weiter im Stack graben. Leider muss ich die Adressen sogar RFC1918-sichtbar verstecken, aber ich hoffe, den Prozess mit ausreichend Beschreibung fĂŒr das VerstĂ€ndnis zu versehen. Der Server innerhalb des VXLAN hat die Adresse x.x.x.15, das Interface des Fortigates x.x.x.254, alle anderen Adressen gehören zum VTEP-Netzwerk.

FĂŒr die erfolgreiche Übertragung von VXLAN-kapsulierten Paketen ist die korrekte Information in mehreren Tabellen erforderlich. FĂŒr das Overlay sind dies ARP und OVSDB, fĂŒr das Underlay ARP und CAM. Bei Fortigate ist VXLAN FDB und OVSDB vorhanden. Dort fangen wir an:

 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

Hier ist alles recht einfach – die MAC-Adresse der virtuellen Maschine muss sich am VTEP mit der Adresse у.у.у.47 befinden. Bei der ÜberprĂŒfung des Inhalts und der Einstellungen des ESXi-Clusters stelle ich fest, dass die MAC-Adresse der virtuellen Maschine korrekt ist und auch die Adresse des VTEP. Ich ĂŒberprĂŒfe die CAM/ARP-Tabelle auf dem Fortigate – erneut stimmen die Einstellungen mit dem ESXi-Host ĂŒberein:

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

Die Tabellen sind korrekt und der Traffic wird gesendet – könnte das Problem nicht an der Fortigate liegen? Ich habe die Analyse der Verkehrskommunikation auf dem Juniper absichtlich ausgelassen – logisch sollte der nĂ€chste Schritt der Fehlersuche dort stattfinden, aber mein Netzwerk ist einfach – nur ein VLAN fĂŒr VTEP und alle Komponenten sind direkt verbunden. Zudem fĂ€llt mir der Fall mit dem DLR-Bridge, VDR und dem verschwindenden Traffic ein – ich gehe schnĂŒffeln auf dem ESXi-Host und eröffne parallel einen Fall bei VMware. Unten gehört die MAC „97:6e“ zur Fortigate, vmnic1 ist das Interface, das VTEP mit der Adresse у.у.у.47 hat, schnĂŒffeln wir in beide Richtungen "—dir 2":

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

VXLAN in NSX-V – Fehlerbehebung im Underlay

Fortschritt – im SchnĂŒffelprotokoll sehe ich ARP-Anfragen und die eingehende Antwort. Ich fĂŒhre nur die ARP-Antwort an und dort stimmt alles. Ich habe nicht erwĂ€hnt, dass der Überwachungsserver die Adresse х.х.х.15 anpingt – wo bleibt der ICMP-Traffic? Ich erinnere mich, dass ich zwei Uplinks habe. Hier kann man argumentieren und sagen, dass der virtuelle Ausgangsport der gleiche ist (meine Teaming-Politik), also fĂŒr dieselbe vNIC derselbe Uplink ausgewĂ€hlt werden sollte, aber da ich bereits auf dem Host bin, ist es kein Problem, den anderen Uplink zu ĂŒberprĂŒfen:

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

VXLAN in NSX-V – Fehlerbehebung im Underlay

Es kommen Anfragen vom Fortigate, aber es gibt keine Antwort. Das heißt, das Problem liegt nicht am Fortigate. Also denke ich: Wieder das gleiche Problem mit dem verschwindenden Verkehr auf dem VDR, wieder ein paar Monate, um den Fall in die richtige Richtung zu lenken. Nach ein paar Tagen, nach einem kurzen Besinnungsprozess und um nicht mit dem Stau zu leben, beschloss ich, weitere Sniffs fĂŒr den Support zu sammeln, um den Prozess zu beschleunigen. Und hier fĂ€llt mein Blick „zufĂ€llig“ auf die Ethernet-Kapselung der Underlay. Der König ist also nicht echt und die MAC-Adresse des VTEP stimmt nicht mit seiner IP ĂŒberein. Ich setze alles auf null, sniffle, grabe weiter – recht, was nicht recht ist. Ich werde die ARP-Tabelle daneben bringen, um den Vergleich zu erleichtern. Beachten Sie die erste Ethernet-Kapselung auf dem Bild oben:

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

Was haben wir also als Ergebnis – nach der Migration der virtuellen Maschine versucht der Fortigate, den Verkehr an den VTEP aus der (korrekten) VXLAN-FDB zu senden, verwendet aber die falsche DST-MAC und der Verkehr wird erwartungsgemĂ€ĂŸ vom empfangenden Interface des Hypervisors verworfen. In einem von vier FĂ€llen gehörte diese MAC zum ursprĂŒnglichen Hypervisor, von dem die Migration der Maschine begann.

Gestern erhielt ich eine Nachricht vom Fortinet-Support – zu meinem Fall wurde ein Bug 615586 eröffnet. Ich weiß nicht, ob ich mich freuen oder trauern soll: Einerseits liegt das Problem nicht an den Einstellungen, andererseits kommt der Fix nur mit einem Firmware-Update, bestenfalls im nĂ€chsten. Mein Ego wird auch von einem weiteren Bug angeheizt, den ich letzten Monat entdeckt habe, allerdings diesmal im HTML5 GUI vSphere. Da haben wir eine lokale QA-Abteilung der Anbieter


Ich wage folgende Vermutung:

1 – Der Multicast-Control-Plane wird wahrscheinlich nicht von dem beschriebenen Problem betroffen sein – denn die MAC-Adressen des VTEP werden aus der IP-Adresse der Gruppe gewonnen, auf die das Interface abonniert ist.

2 – Wahrscheinlich liegt das Problem beim Fortigate im Offloading von Sessions auf dem Network Processor (Ă€hnlich wie CEF) – wenn man jedes Paket durch die CPU leitet, werden die Tabellen verwendet, die die korrekten – zumindest visuell – Informationen enthalten. Dies stĂŒtzt die Vermutung, dass es hilft, das Interface zu schließen/zu öffnen oder eine gewisse Zeit abzuwarten – lĂ€nger als 5 Minuten.

3 – Eine Änderung der Teaming-Policy, zum Beispiel auf explizites Failover, oder die EinfĂŒhrung von LAG wird das Problem nicht lösen, da das „Steckenbleiben“ der MAC des ursprĂŒnglichen Hypervisors in den gekapselten Paketen beobachtet wurde.

In diesem Licht kann ich teilen, dass ich kĂŒrzlich Blog, wo in einem der Artikel behauptet wurde, dass Stateful-Firewalls und cachefĂ€hige Methoden zur DatenĂŒbertragung eine KrĂŒcke sind. Nun, ich bin nicht so erfahren in IT, um so etwas zu behaupten, außerdem stimme ich nicht sofort mit allen Aussagen der Blogartikel ĂŒberein. Doch etwas sagt mir, dass ein Körnchen Wahrheit in Ivans Worten steckt.

Danke fĂŒr Ihre Aufmerksamkeit! Ich freue mich darauf, Fragen zu beantworten und konstruktive Kritik zu hören.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster