Bonjour, et tout d'abord un peu de lyrisme. Parfois, j'envie mes collĂšgues qui travaillent Ă distance â c'est formidable de pouvoir travailler de n'importe quel coin du monde connectĂ© Ă Internet, de prendre des vacances Ă tout moment, d'avoir des projets et des dĂ©lais Ă respecter, plutĂŽt que d'ĂȘtre prĂ©sent au bureau de 8h Ă 17h. Ma position et mes tĂąches de travail excluent pratiquement la possibilitĂ© d'un long absence au centre de donnĂ©es. Cependant, il arrive parfois des cas intĂ©ressants, comme celui dĂ©crit ci-dessous â et je comprends qu'il existe peu de postes offrant un tel espace pour l'expression crĂ©ative d'un troubleshooter interne.
Un petit avertissement â au moment de la rĂ©daction de cet article, le cas n'est pas complĂštement rĂ©solu, mais compte tenu de la rapiditĂ© de rĂ©ponse des fournisseurs, une solution complĂšte pourrait prendre encore des mois, et j'aimerais dĂ©jĂ partager mes dĂ©couvertes. J'espĂšre, chers lecteurs, que vous me pardonnerez cette hĂąte. Mais assez de blabla â que se passe-t-il avec le cas ?
Tout d'abord, un peu de contexte : il y a une entreprise (oĂč je travaille comme ingĂ©nieur rĂ©seau) qui hĂ©berge des solutions clients dans un cloud privĂ© VMWare. La plupart des nouvelles solutions sont connectĂ©es Ă des segments VXLAN, gĂ©rĂ©s par NSX-V â je ne vais pas Ă©valuer combien de temps cette solution m'a fait gagner, pour faire court â beaucoup. J'ai mĂȘme rĂ©ussi Ă former des collĂšgues Ă la configuration de NSX ESG, et de petites solutions clients sont dĂ©ployĂ©es sans ma participation. Remarque importante â notre plan de contrĂŽle utilise la rĂ©plication unicast. Les hyperviseurs sont connectĂ©s de maniĂšre redondante via deux interfaces Ă diffĂ©rents commutateurs physiques Juniper QFX5100 (assemblĂ©s en ChĂąssis Virtuel) et avec une politique de synchronisation basĂ©e sur le port virtuel d'origine â c'est pour complĂ©ter le tableau.
Les solutions clients sont trĂšs variĂ©es : allant de Windows IIS, oĂč tous les composants du serveur web sont installĂ©s sur une seule machine, Ă des configurations plus importantes â par exemple, des fronts web Apache Ă©quilibrĂ©s par charge + LB MariaDB en Galera + serveurs de fichiers synchronisĂ©s Ă l'aide de GlusterFS. Pratiquement chaque serveur doit ĂȘtre surveillĂ© sĂ©parĂ©ment, et tous les composants n'ont pas d'adresses publiques â si vous avez dĂ©jĂ Ă©tĂ© confrontĂ© Ă cette tĂąche et disposez d'une solution plus Ă©lĂ©gante, je serais ravi de recevoir vos conseils.
Ma solution de surveillance consiste Ă "connecter" un pare-feu (Fortigate) Ă chaque rĂ©seau client interne (+SNAT et, bien sĂ»r, des restrictions strictes sur le type de trafic autorisĂ©) et Ă surveiller les adresses internes. Cela permet d'atteindre une certaine uniformitĂ© et de simplifier la surveillance. La surveillance elle-mĂȘme se fait Ă partir d'un cluster de serveurs PRTG. Le schĂ©ma de surveillance est Ă peu prĂšs le suivant :

Tant que nous ne travaillions qu'avec des VLAN, tout fonctionnait de maniĂšre assez ordinaire et prĂ©visible, comme une horloge. AprĂšs la mise en Ćuvre de NSX-V et VXLAN, nous avons Ă©tĂ© confrontĂ©s Ă la question : peut-on continuer Ă surveiller de l'ancienne maniĂšre ? Ă ce moment-lĂ , la solution la plus "rapide" Ă©tait de dĂ©ployer NSX ESG et de connecter l'interface trunk VXLAN au rĂ©seau VTEP. Rapide entre guillemets, car utiliser l'interface graphique pour configurer les rĂ©seaux clients, SNAT et les rĂšgles du pare-feu peut unifier la gestion dans une seule interface vSphere, mais Ă mon avis, cela reste assez lourd et, en plus, cela limite les outils disponibles pour le dĂ©pannage. Ceux qui ont utilisĂ© NSX ESG comme remplacement d'un vĂ©ritable pare-feu seront d'accord, je suppose. Bien que, probablement, une telle solution serait plus stable, car tout se dĂ©roule au sein d'un mĂȘme fournisseur.
Une autre solution consiste Ă utiliser NSX DLR en mode bridge entre VLAN et VXLAN. Ici, je pense que tout est clair : l'avantage d'utiliser VXLAN est perdu, car dans ce cas, il faut toujours tirer le VLAN vers l'installation de surveillance. D'ailleurs, en travaillant sur cette solution, j'ai rencontrĂ© un problĂšme oĂč le bridge DLR n'envoyait pas de paquets Ă la VM avec laquelle il se trouvait sur le mĂȘme hĂŽte. Je sais, je sais â dans les livres et les guides sur NSX-V, il est clairement dit qu'un cluster distinct doit ĂȘtre dĂ©diĂ© Ă NSX Edge, mais cela reste dans les livres⊠Quoi qu'il en soit, aprĂšs quelques mois avec le support, nous n'avons pas rĂ©solu le problĂšme. En gros, j'ai compris la logique : le module du noyau de l'hyperviseur responsable de l'encapsulation VXLAN n'Ă©tait pas utilisĂ©, car le DLR et le serveur observĂ© se trouvaient sur le mĂȘme hĂŽte, le trafic ne quittant pas l'hĂŽte et logiquement devant ĂȘtre reliĂ© au segment VXLAN â l'encapsulation n'Ă©tait pas nĂ©cessaire. Avec le support, nous nous sommes arrĂȘtĂ©s sur l'interface virtuelle vdrPort, qui unit logiquement les uplinks et assure le bridging/l'encapsulation â c'est lĂ que nous avons constatĂ© une incohĂ©rence dans le trafic entrant, que j'ai pris en charge pour le cas actuel. Mais comme il a Ă©tĂ© dit, je n'ai pas poussĂ© ce cas jusqu'au bout, car j'ai Ă©tĂ© transfĂ©rĂ© sur un autre projet et de plus, la branche Ă©tait initialement sans issue et je n'avais pas vraiment l'envie de la dĂ©velopper. Si je ne me trompe pas, le problĂšme Ă©tait observĂ© dans les versions NSX 6.1.4 et 6.2.
Et lĂ â bingo ! Fortinet annonce le support natif . Et pas seulement du point Ă point ou du VXLAN-over-IPSec, pas de bridging logiciel VLAN-VXLAN â tout cela a commencĂ© Ă ĂȘtre mis en Ćuvre depuis la version 5.4 (et prĂ©sentĂ© par d'autres ), et un vĂ©ritable support pour le plan de contrĂŽle unicast. Lors de la mise en Ćuvre de la solution, j'ai rencontrĂ© un autre problĂšme - les serveurs surveillĂ©s disparaissaient parfois, puis reapparaissaient dans la surveillance, alors que la machine virtuelle Ă©tait toujours active. La raison Ă©tait que j'avais oubliĂ© d'autoriser le Ping sur l'interface VXLAN. Dans le processus de rééquilibrage des clusters, les machines virtuelles Ă©taient dĂ©placĂ©es, et avec le Ping, le vMotion Ă©tait terminĂ© pour dĂ©signer le nouvel hĂŽte ESXI sur lequel la machine avait Ă©tĂ© dĂ©placĂ©e. C'Ă©tait une erreur de ma part, mais ce problĂšme a encore une fois sapĂ© ma confiance dans le support du fabricant - dans ce cas Fortinet. Je ne mentionne mĂȘme pas que chaque cas liĂ© Ă VXLAN commence par la question « oĂč se trouvent vos paramĂštres de softswitch VLAN-VXLAN ? » Cette fois, on m'a conseillĂ© de modifier le MTU - c'est pour le Ping, qui fait 32 octets. Ensuite, « joue » avec tcp-send-mss et tcp-receive-mss dans les politiques - pour VXLAN, qui est encapsulĂ© dans UDP. Ouf, pardon - j'en avais marre. Bref, j'ai rĂ©solu ce problĂšme par mes propres moyens.
AprĂšs avoir testĂ© le trafic avec succĂšs, il a Ă©tĂ© dĂ©cidĂ© de mettre en Ćuvre cette solution. Et en production, il s'est avĂ©rĂ© qu'aprĂšs un jour ou deux, tout ce qui Ă©tait surveillĂ© via VXLAN commençait progressivement Ă tomber en panne. La dĂ©sactivation/rĂ©activation de l'interface aidait, mais seulement pour un temps. Souvenant de la lenteur du support du fabricant, je me suis attelĂ© au dĂ©pannage de mon cĂŽtĂ© - aprĂšs tout, ma sociĂ©tĂ©, mon rĂ©seau - ma responsabilitĂ©.
Sous spoiler le déroulement du dépannage. Ceux qui sont fatigués des lettres et des vantardises - passez et allez à l'analyse postérieure.
Déroulement du dépannageMerci d'avoir continué la lecture - continuons !
Donc, la surveillance fonctionne un certain temps, puis se dĂ©connecte d'elle-mĂȘme. Cela signifie qu'il n'y a probablement pas de problĂšmes dans les politiques du pare-feu. Cependant, comme j'ai rencontrĂ© des problĂšmes de processus systĂšme suspendus dans Fortigate versions 5.6+, commençons par regarder « diagnose debug flow » - comme prĂ©vu, le trafic est autorisĂ© et s'en va de l'interface avec aucune rĂ©ponse attendue. Cela signifie que nous approfondissons la pile. Je vais malheureusement devoir masquer les adresses mĂȘme si elles sont RFC1918, mais j'espĂšre fournir un descriptif suffisant pour la comprĂ©hension. Le serveur Ă l'intĂ©rieur du VXLAN a l'adresse x.x.x.15, l'interface de Fortigate x.x.x.254, toutes les autres adresses appartiennent au rĂ©seau VTEP.
Pour le transfert réussi des paquets VXLAN encapsulés, il est nécessaire d'avoir des informations correctes dans plusieurs tables. Pour l'overlay, ce sont ARP et OVSDB, pour l'underlay, ce sont ARP et CAM. Dans le cas de Fortigate, VXLAN FDB est OVSDB. Commençons là .
fortigate (root) #diag sys vxlan fdb list vxlan-LS
mac=00:50:56:8f:3f:5a state=0x0002 flags=0x00 remote_ip=x.x.x.47 port=4789 vni=5008 ifindex=7
Ici, c'est assez simple â l'adresse MAC de la machine virtuelle doit ĂȘtre prĂ©sente sur le VTEP avec l'adresse x.x.x.47. En examinant le contenu et les paramĂštres du cluster ESXI, je constate que l'adresse MAC de la machine virtuelle est correcte, tout comme l'adresse VTEP. Je vĂ©rifie la table CAM/ARP sur le Fortigate â tout correspond Ă la configuration de l'hĂŽte ESXI :
fortigate (root) #get sys arp | grep x.x.x.47
x.x.x.47 0 00:50:56:65:f6:2c dmz
Les tables sont correctes et le trafic sort â peut-ĂȘtre que le problĂšme ne se trouve pas sur le Fortigate ? J'ai intentionnellement omis l'analyse de la commutation du trafic sur Juniper â logiquement, c'est lĂ qu'il faut effectuer la prochaine Ă©tape de dĂ©pannage, mais mon rĂ©seau est simple â un seul VLAN pour VTEP et tous les composants sont connectĂ©s directement. De plus, je me souviens d'un cas avec un pont DLR, VDR et un trafic manquant â je dois sniffer sur l'hĂŽte ESXI, tout en crĂ©ant un cas dĂ©jĂ chez VMWare. Ci-dessous, la MAC «97:6e» appartient au Fortigate, vmnic1 â c'est l'interface qui a le VTEP avec l'adresse x.x.x.47, je sniff dans les deux directions "âdir 2":
pktcap-uw --uplink vmnic1 --vni 5008 --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

ProgrĂšs â dans le sniffer, je vois une requĂȘte ARP et la rĂ©ponse qui arrive. Je ne mentionne que la rĂ©ponse ARP et tout est correct. Je n'ai pas mentionnĂ©, mais pendant tout ce temps, le serveur de surveillance ping x.x.x.15 â oĂč est le trafic ICMP ? Je me souviens que j'ai deux uplinks. On pourrait dĂ©battre et dire que le port virtuel source est le mĂȘme (ma politique de teaming), c'est-Ă -dire qu'un mĂȘme uplink doit ĂȘtre sĂ©lectionnĂ© pour la mĂȘme vNIC, mais comme je suis sur l'hĂŽte, vĂ©rifier un autre uplink ne pose pas de problĂšme :
pktcap-uw --uplink vmnic4 --vni 5008 --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

Des requĂȘtes provenant de Fortigate arrivent, mais il n'y a pas de rĂ©ponse. Donc, le problĂšme ne vient pas de Fortigate. Eh bien, je pense Ă nouveau Ă ce mĂȘme problĂšme de trafic qui disparaĂźt sur le VDR, encore quelques mois Ă diriger le cas dans la bonne direction. AprĂšs quelques jours de rĂ©flexion et ne souhaitant pas rester coincĂ©, j'ai dĂ©cidĂ© de rĂ©cupĂ©rer d'autres sniffers pour le support afin d'accĂ©lĂ©rer le processus. Et lĂ , mon regard « tombe par hasard » sur l'encapsulation Ethernet sous-jacente. Le roi n'est pas vrai et l'adresse MAC VTEP ne correspond pas Ă son IP. Je remets Ă zĂ©ro, je sniffe, je creuse - c'est vrai que ce n'est pas vrai. Je vais fournir la table ARP Ă cĂŽtĂ© pour facilitĂ© la comparaison. Faites attention Ă la premiĂšre encapsulation Ethernet sur l'image ci-dessus :
fortigate (root) #get sys arp | grep x.x.x.47
x.x.x.47 0 00:50:56:65:f6:2c dmz
fortigate (root) #get sys arp | grep x.x.x.42
x.x.x.42 0 00:50:56:6a:78:86 dmz
Alors, que nous avons au final - aprÚs la migration de la machine virtuelle, Fortigate essaie d'envoyer du trafic sur VTEP à partir de (correctement) VXLAN FDB, mais utilise une mauvaise MAC DST et le trafic est donc rejeté par l'interface de l'hyperviseur qui le reçoit. En un cas sur quatre, cette MAC appartenait à l'hyperviseur d'origine, à partir duquel nous avons commencé la migration de la machine.
Hier, j'ai reçu un e-mail du support technique de Fortinet - un bug 615586 a été ouvert sur mon cas. Je ne sais pas vraiment si je dois me réjouir ou me lamenter : d'un cÎté, le problÚme ne vient pas des paramÚtres, de l'autre, le correctif viendra seulement avec la mise à jour du firmware, au mieux lors de la prochaine. Mon égo est également alimenté par un autre bug que j'ai découvert le mois dernier, bien que cette fois-ci dans l'interface HTML5 de vSphere. C'est comme un département local QA des fournisseurs...
Je vais tenter de faire l'hypothĂšse suivante :
1 â le plan de contrĂŽle multicast ne sera probablement pas sujet au problĂšme dĂ©crit â en effet, les adresses MAC VTEP sont obtenues Ă partir de l'adresse IP du groupe, auquel l'interface est abonnĂ©e.
2 â il est probable que le problĂšme de Fortigate vienne du dĂ©chargement des sessions sur le processeur rĂ©seau (en gros, similaire Ă CEF) â si chaque paquet passe par le CPU, des tables contenant les bonnes informations â du moins visuellement â seront utilisĂ©es. Cela est soutenu par le fait que fermer / ouvrir l'interface ou attendre un certain temps â plus de 5 minutes â aide.
3 â changer la politique de teaming, par exemple en explicit failover, ou mettre en Ćuvre LAG ne rĂ©soudra pas le problĂšme, car il a Ă©tĂ© observĂ© que l'adresse MAC de l'hyperviseur d'origine se « fige » dans les paquets encapsulĂ©s.
Ă la lumiĂšre de cela, je peux partager que j'ai rĂ©cemment dĂ©couvert , oĂč l'un des articles prĂ©tendait que les pare-feux stateful et les mĂ©thodes de transmission de donnĂ©es mises en cache ne sont que des solutions de contournement. Eh bien, je ne suis pas assez expĂ©rimentĂ© en IT pour affirmer cela, et de plus, je ne suis pas d'accord avec toutes les affirmations des articles de blog. Cependant, quelque chose me dit qu'il y a une part de vĂ©ritĂ© dans les propos d'Ivan.
Merci pour votre attention ! Je serai ravi de répondre à vos questions et d'entendre des critiques constructives.
Source : habr.com
