1 votes

Communiquer entre deux serveurs situés derrière leurs NATs respectifs.

Je construis une application web (Serveur A) qui communique avec un serveur distant (Serveur B) qui est connecté à l'internet.

Le serveur B se trouve derrière un NAT et écoute les communications sur 3 ports non standard.

Dans un scénario typique, pour que je puisse déployer plusieurs serveurs distants sur différents réseaux et les faire communiquer avec l'application web mère (Serveur A), chacun de ces serveurs doit avoir les routeurs configurés manuellement pour transmettre les ports respectifs à une adresse IP statique dans laquelle le Serveur B est configuré.

Je cherche un moyen de résoudre ce problème qui consiste à devoir configurer chaque routeur individuellement et manuellement pour chaque déploiement. Le transfert de port doit être effectué car le serveur A doit communiquer avec le serveur B et doit initier la conversation.

Je demande s'il existe un moyen pour le serveur B d'initier la communication plutôt que l'inverse, de sorte que la redirection de port ne soit pas nécessaire.

Le serveur B n'aurait qu'à appeler la maison, ouvrir tous les sockets/ports nécessaires (c'est là que j'ai besoin de votre aide pour obtenir des informations) et toutes les communications se feraient via ces ports ouverts sans que le serveur A n'ait jamais besoin de connaître l'adresse IP du serveur B, ni de parler au routeur pour gérer la redirection.

Ce scénario est-il possible ?

Edita: J'ai ajouté quelques détails supplémentaires :

En gros, j'ai créé une application web (Serveur A) qui communique avec plusieurs serveurs d'impression 3D ayant une API REST exposée. Les serveurs API des serveurs d'impression écoutent tous sur un port non standard de 8721.

Pour l'instant, je configure manuellement sur mon application web pour pointer vers chaque serveur d'impression via leur adresse IP externe et leur port redirigé. Comme vous pouvez probablement le dire, cela va créer un tas de problèmes car la plupart de ces adresses IP externes vont changer car la plupart des réseaux domestiques/consommateurs n'ont pas d'IP statique.

Cela signifie que je dois trouver chaque fois que l'adresse IP est changée et modifier manuellement mes enregistrements sur mon application web.

J'imagine (et j'émets l'hypothèse) que l'une des meilleures façons de résoudre ce problème est de ne pas laisser l'application web se préoccuper de l'emplacement de chacun de ces serveurs d'impression, mais plutôt de laisser les serveurs d'impression eux-mêmes indiquer au serveur web où ils se trouvent.

J'essaie de résoudre deux problèmes :

  1. Les adresses IP externes sont dynamiques et non statiques (comme mentionné ci-dessus).
  2. Redirection de port/pare-feu imposé par les réseaux domestiques. Dans le cas où il y a plusieurs serveurs d'impression dans un réseau domestique, cela signifie que pour atteindre chaque serveur individuellement, le routeur domestique doit savoir comment acheminer chaque port unique qui doit être configuré à la fois du côté de la webapp et du routeur domestique vers le bon serveur d'impression (car ils écoutent tous sur 8721).

Désolé pour le long message. Je suis encore relativement nouveau dans le domaine de la programmation des prises et j'espère que quelqu'un pourra m'indiquer où je dois chercher pour trouver plus d'informations sur la façon de faire ce qui précède.

1voto

climbage Points 5742

Oui, c'est possible. Cela peut être automatisé facilement avec Transfert de port UPnP, si elle est activée sur l'hôte/appareil NAT, si la sécurité n'est pas une considération. Si vous ne voulez pas utiliser UPnP, par exemple, parce que la sécurité est une considération, vous pouvez y parvenir en utilisant une autre API pour accéder à vos périphériques NAT. UPnP est très courant dans les routeurs domestiques.

Vous pouvez utiliser un autre serveur pour communiquer les adresses IP et les numéros de port du serveur A et du serveur B à une adresse IP statique ou un FQDN directement accessible sur un port statique. Cela peut se faire en stockant les données dans un fichier texte, par exemple.

Comme l'a dit @Evan, sans précisions sur ce que vous essayez vraiment d'obtenir, c'est tout ce que je peux dire.

1voto

Evan Anderson Points 140581

En supposant que vous contrôliez le code du serveur d'impression, alors, bien sûr, vous pouvez faire en sorte que le serveur d'impression se connecte à vos serveurs, ce qui évite de devoir se préoccuper de la NAT dans les réseaux distants. C'est, par exemple, la façon dont "GoToMyPC" et "LogMeIn" fonctionnent - en établissant des connexions persistantes vers les serveurs à travers le pare-feu.

Allí son Les protocoles qui peuvent vous permettre de "passer à travers" la NAT mais, franchement, à moins que les deux points d'extrémité ne soient derrière une NAT que vous ne pouvez pas contrôler, je dirais que ces protocoles (STUN, etc.) représentent trop de travail pour un rendement trop faible.

Vous devrez réfléchir à la manière dont vos serveurs d'impression localisent le serveur central. Il est tentant de se contenter d'utiliser les noms DNS, mais vous devez penser aux changements que vous pourriez apporter ultérieurement à votre infrastructure de serveurs (en matière de mise à l'échelle, par exemple). Je vous conseille de consulter Enregistrements SRV comme un mécanisme permettant aux serveurs d'impression de localiser leur serveur central. L'enregistrement SRV possède déjà une abstraction intégrée pour la haute disponibilité et la pondération des priorités.

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