Comment faire fonctionner un serveur TCP derrière un routeur (NAT) sans aucune configuration de redirection nécessaire

StackOverflow https://stackoverflow.com/questions/1511562

  •  19-09-2019
  •  | 
  •  

Question

Le scénario est le suivant. J'ai deux machines A et B: A: Client (derrière Nat) B: Server (derrière Nat)

Je veux que B puisse écouter sur n'importe quel port donné, afin que A puisse envoyer des paquets à B via ce port TCP spécifique et recevoir n'importe quelle réponse. Si les deux machines ne sont pas derrière un NAT, c'est un processus Foward assez droit. Cependant, comment puis-je le faire fonctionner pour que cela fonctionne même lorsque B est derrière un routeur, sans qu'il ait à changer la configuration du routeur activer un transfert de port, etc.

Par exemple, comment les programmes peer-to-peer comme les clients torrent fonctionnent-ils sans que l'utilisateur n'ait rien à configurer?

Était-ce utile?

La solution

Une alternative à un serveur proxy est un serveur de correspondance. Au lieu de proxier tout le trafic, le fabricant de matchs négocie simplement jusqu'à ce que les pairs puissent se parler. Cela implique de trouver les IP publics externes des pairs et de parler à chacun de manière à ce que le pare-feu / routeur sache que les pairs souhaitent communiquer.

C'est appelé Punchage du trou Et cela doit souvent être fait par le Match Maker plutôt que par les pairs eux-mêmes. Une fois que le trou est frappé, le Match Maker peut parler des pairs les uns des autres et ils peuvent communiquer directement.

Autres conseils

Pour répondre à l'exemple des programmes de pairs à des pairs, et en général: il existe une technologie appelée Plug et jeu universel Quels routeurs NAT peuvent utiliser pour permettre aux clients derrière eux d'exposer des ports à l'extérieur. C'est ce que les clients BitTorrent peuvent utiliser afin que les autres clients puissent se connecter directement à eux.

Vous devrez soit:

  1. Configurez le transfert de port à partir de la passerelle NAT devant le serveur dans la machine que votre logiciel de serveur est en cours d'exécution et demandez au client de se connecter à l'adresse IP de cette passerelle.

  2. Créez un serveur proxy assis entre les 2 Nat Gatewys afin que votre serveur et votre client puissent s'y connecter. Votre serveur et votre client doivent configurer une connexion à ce proxy qui médiera les données entre ces 2 connexions.

Le coup de poing du trous est modérément bien compris pour la communication UDP, mais il peut également être utilisé de manière fiable pour configurer des flux TCP peer-to-peer. Voici l'article bien détaillé sur TCP et UDP:

http://www.brynosaurus.com/pub/net/p2pnat/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top