2 votes

Demande au serveur x Réponse du serveur y

J'ai besoin d'un conseil de votre part : Je m'occupe d'un loadbalancer/logiciel personnalisé pour lequel nous utiliserons 2 serveurs principaux et environ 8 serveurs esclaves. En bref : l'utilisateur envoie une requête au serveur principal, le serveur principal reçoit et traite les requêtes, envoie une requête à un serveur esclave et le serveur esclave doit envoyer les données DIRECTEMENT à l'"utilisateur".

Utilisateur -> Serveur principal

Serveur principal -> Serveur esclave

Serveur esclave -> Utilisateur

  • La raison pour laquelle les données doivent être envoyées directement à l'utilisateur et non par l'intermédiaire du serveur principal est la largeur de bande et le faible budget.

J'ai maintenant les idées suivantes : -IPinIP, mais ce n'est pas possible dans la couche 7 (jusqu'à présent, je sais qu'il y a des routeurs coûteux pour cela). -IP Spoof, en utilisant C/C++, nous ferons en sorte que la réponse semble provenir du serveur principal.

Mais je me disais que la réponse "serveur esclave -> utilisateur" pouvait peut-être provenir d'une autre adresse IP sans causer de problèmes au niveau du pare-feu de l'utilisateur ou de son antivirus. Je ne connais pas très bien les pare-feu/routeurs "domestiques" et/ou les logiciels antivirus. Je suppose que la machine de l'utilisateur ne le supporterait pas bien ?

1voto

ErikE Points 4616

Je pense que cela dépend de la façon dont l'équilibreur de charge personnalisé (je suppose le serveur maître comme indiqué dans votre schéma) et l'application des serveurs esclaves peuvent être configurés. Il y a deux principes qui sont souvent vus dans les équilibreurs de charge pour faire une conception réelle autour de l'acheminement des requêtes/réponses :

1) Si vous pouvez dire au serveur principal de ne pas utiliser sa propre adresse ip comme ip source, mais à la place l'ip du client (telle qu'elle était dans le paquet lorsqu'il est arrivé au serveur principal en premier lieu, selon votre schéma) lors de la transmission du paquet aux esclaves. Le serveur esclave enverra naturellement sa réponse directement au client plutôt que de passer par le serveur principal. Il s'agit d'une fonction assez courante dans les équilibreurs de charge ; nous, les spécialistes des réseaux, appelons souvent les réécritures de source "source nat" plutôt que "ip spoofing" pour distinguer l'intention bénigne, et avec laquelle vous devriez être en mesure de faire quelques recherches intéressantes sur le sujet.

2) Une autre option consiste à intégrer des méta-informations similaires à l'en-tête X-Forwarded-For dans http ou au champ remote_addr/remote_host (je ne sais plus lequel) dans ajp, qui sont utilisées pour conserver l'adresse IP du client d'origine dans le champ de données, même si elle a été remplacée par une adresse d'hôte intermédiaire dans le paquet IP. S'il est possible de réaliser quelque chose de similaire avec le protocole que vous utilisez, vos serveurs maîtres devront injecter ces méta-informations dans un champ de leur choix. L'application sur vos serveurs esclaves devra recevoir l'instruction d'envoyer la réponse à l'adresse de ce champ plutôt qu'à l'adresse source dans le paquet IP. L'un des avantages de cette conception est qu'elle permet une excellente journalisation puisque vous avez accès à toutes les adresses de nœuds qui ont été impliquées dans un flux particulier.

Il s'agit d'une question de principe ; en pratique, vous risquez de trébucher un peu si le client s'attend à ce que la réponse de l'esclave fasse partie de la même session que la demande (et ainsi de suite). Tout dépend des attentes du protocole que vous essayez de faire passer, et de l'infrastructure que vous avez autour de votre service pour vous aider à résoudre les problèmes :-)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X