Guten Tag! ZunĂ€chst ein wenig persönliche Gedanken. Manchmal beneide ich meine Kollegen, die remote arbeiten â es ist einfach fantastisch, von ĂŒberall auf der Welt, das mit dem Internet verbunden ist, arbeiten zu können. Urlaub zu jeder Zeit, Verantwortung fĂŒr Projekte und Fristen, ohne von 8 bis 17 Uhr im BĂŒro sein zu mĂŒssen. Meine Position und meine Aufgaben lassen kaum Raum fĂŒr lĂ€ngere Abwesenheiten im Rechenzentrum. Dennoch gibt es gelegentlich interessante FĂ€lle, wie den unten beschriebenen, und ich erkenne, dass es nur wenige Stellen gibt, die so viel Spielraum fĂŒr kreative Lösungen bieten wie die eines internen Troubleshooters.
Ein kleiner Hinweis â zum Zeitpunkt des Schreibens dieses Artikels ist der Fall noch nicht vollstĂ€ndig gelöst, aber aufgrund der Reaktionsgeschwindigkeit der Anbieter kann die vollstĂ€ndige Lösung einige Monate in Anspruch nehmen. Ich möchte jedoch jetzt schon meine Erkenntnisse mit Ihnen teilen. Ich hoffe, verehrte Leser, dass Sie mir diese Eile verzeihen. Doch genug der Einleitung â wie steht es um den Fall?
ZunĂ€chst eine Einleitung: Es gibt ein Unternehmen (bei dem ich als Netzwerkingenieur arbeite), das 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 werde nicht bewerten, wie viel Zeit mir diese Lösung eingespart hat, kurz gesagt â es ist viel. Ich habe sogar geschafft, Kollegen in der Konfiguration von NSX ESG zu schulen, und kleine Kundenlösungen werden ohne mein Eingreifen bereitgestellt. Eine wichtige Anmerkung â der Steuerungsebene verwenden wir Unicast-Replikation. Die Hypervisoren sind redundant mit zwei Schnittstellen an verschiedene physische Juniper QFX5100-Switches (die in einem Virtual Chassis zusammengeschlossen sind) angeschlossen und die Routing-Politik basiert auf dem ursprĂŒnglichen virtuellen Port â das soll die vollstĂ€ndige Bild vermitteln.
Die Kundenlösungen sind sehr heterogen: von Windows IIS, bei dem alle Komponenten des Webservers auf einer Maschine installiert sind, bis hin zu ziemlich groĂen Lösungen â zum Beispiel Lastenausgeglichene Apache-Webfronten + LB MariaDB in Galera + Datei-Server, die mit GlusterFS synchronisiert sind. Praktisch jeder Server muss separat ĂŒberwacht werden, und nicht alle Komponenten haben öffentliche Adressen â wenn Sie sich mit dieser Aufgabe auskennen und eine elegantere Lösung haben, wĂŒrde ich mich ĂŒber Ihren Rat freuen.
Meine Monitoring-Lösung besteht darin, die Firewall (Fortigate) in jedes interne Kundennetzwerk zu âintegrierenâ (+SNAT und natĂŒrlich strenge EinschrĂ€nkungen bezĂŒglich des erlaubten Datenverkehrs) und die internen Adressen zu ĂŒberwachen â auf diese Weise wird eine gewisse Vereinheitlichung und Vereinfachung der Ăberwachung erreicht. Die Ăberwachung erfolgt aus einem PRTG-Server-Cluster. Das Ăberwachungsschema sieht etwa so aus:

Solange wir nur mit VLANs arbeiteten, war alles ganz normal und funktionierte wie am SchnĂŒrchen. Nach der EinfĂŒhrung von NSX-V und VXLAN stieĂen wir auf die Frage â können wir die Ăberwachung wie gewohnt fortsetzen? Zu diesem Zeitpunkt war die "schnellste" Lösung die Bereitstellung von NSX ESG und das AnschlieĂen des VXLAN-Trunk-Interfaces an das VTEP-Netzwerk. "Schnell" in AnfĂŒhrungszeichen â denn die Verwendung des GUIs zur Konfiguration von Kundennetzwerken, SNAT und Firewall-Regeln mag die Verwaltung in einem einzigen vSphere-Interface vereinheitlichen, aber meiner Meinung nach ist es ziemlich unhandlich und schrĂ€nkt zudem die Werkzeugpalette fĂŒr das Troubleshooting ein. Diejenigen, die NSX ESG als Ersatz fĂŒr eine "echte" Firewall verwendet haben, werden dem denke ich zustimmen. Obwohl, so eine Lösung wĂ€re wahrscheinlich stabiler â 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 ist alles klar â die Vorteile von VXLAN werden durch die Notwendigkeit, VLAN zu den Monitoring-Installationen zu ziehen, zunichte gemacht. Ăbrigens stieĂ ich bei der Implementierung dieser Lösung auf ein Problem, bei dem der DLR-Bridge keine Pakete an die VM ĂŒbermittelte, die 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 eigener Cluster eingerichtet werden muss, aber das steht nur in den BĂŒchern⊠Jedenfalls konnten wir das Problem nach ein paar Monaten mit dem Support nicht lösen. GrundsĂ€tzlich habe ich die Logik verstanden â das Kernel-Modul des Hypervisors, das fĂŒr die VXLAN-Kapselung verantwortlich ist, wurde nicht aktiviert, wenn DLR und der beobachtete Server auf demselben Host waren, da der Verkehr den Host nicht verlĂ€sst und logischerweise an den VXLAN-Segment angeschlossen sein sollte â Kapselung ist nicht notwendig. Mit dem Support kamen wir auf die virtuelle Schnittstelle vdrPort, die logisch die UpLinks zusammenfĂŒhrt und auch die Bridging/Kapselung durchfĂŒhrt â dort wurde eine Diskrepanz im eingehenden Verkehr festgestellt, die ich fĂŒr den aktuellen Fall bearbeitet habe. Aber wie gesagt, ich habe diesen Fall nicht vollstĂ€ndig bearbeitet, da ich auf ein anderes Projekt umgeschichtet wurde und die Ăste ursprĂŒnglich ohne Ausweg waren, sodass ich nicht wirklich daran interessiert war, sie 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 native . Und nicht nur Point-to-Point oder VXLAN-over-IPSec, keine Software-Bridging von VLAN-VXLAN â all das wurde bereits mit Version 5.4 eingefĂŒhrt (und ist auch bei anderen ), sondern echte UnterstĂŒtzung des Unicast-Control-Planes. Bei der Implementierung der Lösung stieĂ ich auf ein weiteres Problem â die ĂŒberwachten Server verschwanden gelegentlich und tauchten wieder im Monitoring auf, obwohl die virtuelle Maschine aktiv war. Der Grund war, wie sich herausstellte, dass ich vergessen hatte, Ping auf dem VXLAN-Interface zuzulassen. WĂ€hrend des Rebalancierens der Cluster wurden die VMs verschoben, und der vMotion wurde durch einen Ping abgeschlossen, um den neuen ESXI-Host zu kennzeichnen, auf den die Maschine verschoben wurde. Ein Fehler meinerseits, aber dieses Problem hat mein Vertrauen in den Support des Herstellers â in diesem Fall Fortinet â erneut erschĂŒttert. Ich möchte nicht einmal erwĂ€hnen, dass jeder Fall im Zusammenhang mit VXLAN mit der Frage beginnt: âWo finden wir in Ihren Einstellungen den Softswitch VLAN-VXLAN?â Dieses Mal wurde mir geraten, die MTU zu Ă€ndern â das betrifft den Ping, der 32 Bytes betrĂ€gt. Danach âspieleâ mit tcp-send-mss und tcp-receive-mss in der Richtlinie â fĂŒr VXLAN, das in UDP enkapsuliert wird. Puh, entschuldigen Sie â das musste raus. Insgesamt habe ich dieses Problem selbst gelöst.
Nach dem erfolgreichen Testverkehr wurde beschlossen, diese Lösung einzufĂŒhren. In der Produktionsumgebung stellte sich jedoch heraus, dass nach ein oder zwei Tagen alles, was ĂŒber VXLAN ĂŒberwacht wurde, allmĂ€hlich ausfiel. Das Deaktivieren und Aktivieren der Schnittstelle half, aber nur fĂŒr eine gewisse Zeit. Angesichts der langsamen Reaktionszeiten des Supports habe ich selbst mit dem Troubleshooting begonnen â schlieĂlich ist meine Firma, mein Netzwerk â meine Verantwortung.
Unter dem Spoiler findet sich der Verlauf des Troubleshootings. Wer von Buchstaben und Prahlerei genug hat â ĂŒberspringt und geht zur Nachanalyse ĂŒber.
Verlauf des TroubleshootingsDanke, dass Sie weitergelesen haben â wir machen weiter!
Das Monitoring funktioniert eine Weile, fĂ€llt dann aber von selbst aus. Das deutet darauf hin, dass es wahrscheinlich keine Probleme mit den Firewall-Richtlinien gibt. Da ich jedoch mit hĂ€ngenden Systemprozessen in Fortigate-Versionen 5.6+ konfrontiert war, schauen wir zuerst mit âdiagnose debug flowâ nach. Der erwartete Verkehr wird zugelassen und verlĂ€sst die Schnittstelle, jedoch kommt erwartungsgemÀà nichts als Antwort zurĂŒck. Also mĂŒssen wir weiter im Stack graben. Leider mĂŒssen die Adressen, selbst wenn es sich um RFC1918-Adressen handelt, verborgen werden, 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, die Schnittstelle des Fortigate hat die Adresse 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 Overlay sind das ARP und OVSDB, fĂŒr Underlay ARP und CAM. Bei Fortigate sind VXLAN FDB und OVSDB identisch. Dort beginnen wir:
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 ziemlich einfach â die MAC-Adresse der virtuellen Maschine sollte sich auf dem VTEP mit der Adresse u.u.u.47 befinden. Nachdem ich den Inhalt und die Einstellungen des ESXi-Clusters ĂŒberprĂŒft habe, stelle ich fest, dass die MAC der virtuellen Maschine korrekt ist und die VTEP-Adresse ebenfalls. Ich prĂŒfe die CAM/ARP-Tabelle auf dem Fortigate â auch hier stimmen alle Einstellungen mit denen des ESXi-Hosts ĂŒberein:
fortigate (root) #get sys arp | grep u.u.u.47
u.u.u.47 0 00:50:56:65:f6:2c dmz
Die Tabellen sind korrekt und der Verkehr lĂ€uft â könnte das Problem nicht bei Fortigate liegen? Ich habe absichtlich die Analyse des Traffic-Switchings auf dem Juniper ausgelassen â logisch wĂ€re der nĂ€chste Schritt zur Fehlersuche dort, aber mein Netzwerk ist einfach â nur ein VLAN fĂŒr VTEP und alle Komponenten sind direkt verbunden. AuĂerdem erinnere ich mich an den Fall mit dem DLR-Bridge, VDR und dem verschwundenen Verkehr â ich gehe daraufhin zur Analyse auf dem ESXi-Host und erstelle parallel dazu einen Fall bei VMWare. Unten gehört die MAC â97:6eâ zu Fortigate, vmnic1 â das ist das Interface, das VTEP mit der Adresse u.u.u.47 hat. Wir schnĂŒffeln in beide Richtungen "âdir 2":
pktcap-uw --uplink vmnic1 --vni 5008 --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

Der Fortschritt â im Sniffer sehe ich die ARP-Anfrage und die ankommende Antwort. Ich bringe nur die ARP-Antwort, und da ist alles korrekt. Ich habe nicht erwĂ€hnt, dass der Monitoring-Server die Adresse x.x.x.15 anpingt â wo bleibt der ICMP-Verkehr? Ich erinnere mich, dass ich zwei Uplinks habe. Hier könnte man argumentieren, dass der virtuelle Quellport derselbe ist (meine Teaming-Richtlinie), das heiĂt, fĂŒr dasselbe vNIC sollte immer derselbe Uplink ausgewĂ€hlt werden. Aber da ich auf dem Host bin, ist es kein Problem, einen anderen Uplink zu ĂŒberprĂŒfen:
pktcap-uw --uplink vmnic4 --vni 5008 --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

Es kommen Anfragen vom FortiGate, aber es gibt keine Antwort. Das heiĂt, das Problem liegt nicht beim FortiGate. Nun gut, denke ich, wieder das gleiche Problem mit dem fehlenden Verkehr auf dem VDR, wieder ein paar Monate, um den Fall in die richtige Richtung zu lenken. Nach ein paar Tagen, etwas abgekĂŒhlt und nicht bereit, mich mit dem Stillstand abzufinden, beschloss ich, weitere Sniff-Daten fĂŒr den Support zu sammeln, um den Prozess zu beschleunigen. Und da âzufĂ€lligâ mein Blick auf die Ethernet-Kapselung unterlay fĂ€llt. Der König ist nicht echt, und die MAC-Adresse des VTEP stimmt nicht mit seiner IP ĂŒberein. Ich setze alles zurĂŒck, schnĂŒffle, grabe â richtig, dass es nicht richtig ist. Ich werde die ARP-Tabelle daneben anfĂŒhren, um den Vergleich zu erleichtern. Bitte beachten Sie die erste Ethernet-Kapselung im oberen Bild:
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
Also, was haben wir am Ende â nach der Migration der virtuellen Maschine versucht Fortigate, den Verkehr zum VTEP aus der (korrekten) VXLAN FDB zu senden, verwendet jedoch die falsche DST MAC, und der Verkehr wird erwartungsgemÀà vom empfangenden Schnittstelle des Hypervisors verworfen. DarĂŒber hinaus gehörte in einem von vier FĂ€llen diese MAC dem ursprĂŒnglichen Hypervisor, von dem die Migration der Maschine begann.
Gestern erhielt ich eine E-Mail vom technischen Support von Fortinet â in meinem Fall wurde der Bug 615586 eröffnet. Ich weiĂ nicht, ob ich mich freuen oder trauern soll: einerseits liegt das Problem nicht an den Einstellungen, andererseits wird die Behebung nur mit einem Firmware-Update kommen, im besten Fall mit dem nĂ€chsten. Auch ein weiterer Bug, den ich letzten Monat entdeckt habe, heizt mein Ego an, dieser jedoch im HTML5 GUI vSphere. Ich habe das GefĂŒhl, dass es wie ein lokales QA-Team bei den Anbietern ist...
Ich wage zu vermuten, dass Folgendes zutrifft:
1 â Es ist sehr wahrscheinlich, dass der Multicast-Control-Plane nicht von dem beschriebenen Problem betroffen sein wird â denn die MAC-Adressen des VTEP stammen aus der IP-Adresse der Gruppe, auf die die Schnittstelle abonniert ist.
2 â höchstwahrscheinlich handelt es sich um ein Problem des Fortigate mit dem Offload von Sitzungen auf dem Network Processor (vergleichbar mit CEF) â wenn jedes Paket durch die CPU geleitet wird, werden die Tabellen verwendet, die die korrekten â zumindest visuell â Informationen enthalten. Zu dieser Annahme spricht, dass es hilft, das Interface zu schlieĂen oder zu öffnen oder einige Zeit zu warten â lĂ€nger als 5 Minuten.
3 â eine Ănderung der Teaming-Policy, zum Beispiel auf explicit failover, oder die Implementierung von LAG wird das Problem nicht lösen, da ein 'Feststecken' der MAC des ursprĂŒnglichen Hypervisors in den inkapsulierten Paketen beobachtet wurde.
In diesem Zusammenhang möchte ich teilen, dass ich kĂŒrzlich entdeckt habe , wo in einem der Artikel behauptet wurde, dass stateful Firewalls und caching Methoden zur DatenĂŒbertragung â ein Strohhalm sind. Nun, ich bin nicht so erfahren in der IT, um so etwas zu behaupten, und auĂerdem stimme ich nicht sofort mit allen Aussagen der Blogartikel ĂŒberein. Dennoch sagt mir etwas, dass da ein Körnchen Wahrheit in den Worten von Ivan steckt.
Vielen Dank fĂŒr Ihre Aufmerksamkeit! Ich freue mich darauf, Fragen zu beantworten und konstruktive Kritik zu hören.
Quelle: habr.com
