[Rétrospective de dépannage] Une imbrication de proxies m’a rendu fou : la machine nœud enchaîne des requêtes bizarres, et sur ma machine presque tous les nœuds sont injoignables

Cette fois, c’était vraiment étrange : j’ai pratiquement perdu une nuit entière, et au final j’ai découvert que le problème n’était pas du tout le nœud en lui-même, mais que le proxy local était « imbriqué ».

Le phénomène était très bizarre au début :

  • Le propriétaire de la machine du nœud est venu me demander ce qui se passait, en disant que le backend recevait en continu des requêtes étranges.
  • De mon côté, ma machine locale n’arrivait presque à se connecter à aucun nœud.
  • Plus inquiétant encore : peu importe comment je modifiais la configuration de mon proxy local, la machine du nœud continuait à voir ce genre de requêtes continues.

Au départ, j’ai soupçonné beaucoup de pistes, par exemple :

  • Le nœud lui-même a explosé
  • Le contenu de l’abonnement a un problème
  • Les règles sont mal écrites
  • Le DNS ou le proxy système n’a pas été complètement désactivé
  • Un programme en arrière-plan réessaie frénétiquement

Résultat, après avoir tout écarté, le problème central était en réalité une boucle de proxy / proxy imbriqué.

Plus précisément, à ce moment-là, il n’y avait pas qu’un seul mihomo qui tournait sur ma machine : il y en avait deux en même temps :

  • L’un était le mihomo lancé normalement par Sparkle
  • L’autre était un ancien processus orphelin résiduel

Du coup, le chemin du trafic est devenu extrêmement étrange, comme un « court-circuit » qui tournait en rond en local :

  • J’ai modifié la configuration locale, mais l’instance du core qui prenait réellement le contrôle du trafic n’était pas forcément celle que je croyais
  • Certaines requêtes étaient relayées plusieurs fois, retombaient plusieurs fois, et au final, côté machine du nœud, ça ressemblait à des requêtes continues bizarres
  • Ma machine locale, au contraire, se comportait comme si un grand nombre de nœuds étaient indisponibles, quasiment impossible de se connecter à la plupart

Ce n’est qu’après que j’ai eu un déclic : ce n’était pas simplement « le nœud est mort », mais un proxy local par-dessus un proxy local / un core résiduel empilé en plus.

Après avoir supprimé l’ancien processus résiduel, puis relancé Sparkle, le système est revenu à :

  • un processus principal Sparkle
  • un sous-processus mihomo lancé par celui-ci

Et là, c’était redevenu normal.

La leçon est très directe :

  1. Quand vous voyez « côté nœud des requêtes continues étranges + en local presque tous les nœuds ne passent pas », ne suspectez pas uniquement le distant.
  2. Vérifiez d’abord combien de core proxy tournent en local, surtout pour mihomo : y a-t-il des processus orphelins résiduels ?
  3. Dès qu’il y a imbrication ou boucle, les symptômes ressemblent fortement à de la “magie noire”, alors qu’en réalité le chemin du trafic local est déjà en vrac.

Si je retombe sur un cas similaire à l’avenir, je pense que mon premier réflexe devra être de vérifier :

  • Combien de mihomo tournent
  • Qui est le processus parent, qui est le processus orphelin
  • Quelle instance écoute réellement 7890/7891/7892
  • Si le proxy système ne pointe pas à nouveau vers lui-même

Absurde, mais au moins ça m’a servi de leçon.