12
votes

Comment créer un serveur TCP fonctionne derrière un routeur (NAT) sans aucune configuration de redirection nécessaire

Le scénario est ce qui suit. J'ai deux machines A et B: A: Client (derrière Nat) B: serveur (derrière NAT)

Je veux que B puisse écouter tout port donné, de sorte que A peut envoyer des paquets à B à travers ce port TCP spécifique et recevoir toute réponse. Si les deux machines ne sont pas derrière un NAT, c'est un processus de trapude droite. Cependant, comment puis-je le faire fonctionner pour que cela fonctionne même lorsque B est derrière un routeur, sans qu'il doive aller changer la configuration du routeur permet de transférer du port, etc.

Par exemple, comment fonctionnent les programmes homologues-pairs tels que les clients Torrent fonctionnent sans que l'utilisateur ait rien à configurer?


2 commentaires

Vous pourriez avoir mieux la chance sur serverfault.com


Je suppose que cette question est de savoir comment écrire le serveur pour travailler derrière NAT, plutôt que de la configurer.


4 Réponses :


1
votes

Vous devrez soit:

  1. Configurer le transfert de port de NAT passerelle devant le serveur dans la machine Votre logiciel de serveur est en cours d'exécution et a le client. Connectez-vous à l'adresse IP de cette passerelle.

  2. créer un serveur proxy assis entrer dans les 2 gateaux nat de sorte que les deux Votre serveur et votre client peuvent connecter pour que. Votre serveur et votre client avoir à mettre en place une connexion à cela proxy qui fera médiati les données entre ces 2 connexions.


1 commentaires

Bonjour, j'ai envisagé cette solution, le seul problème avec cette solution est que la charge sera considérable sur le proxy, cette coûteuse.



7
votes

Pour répondre à l'exemple des programmes de pairs aux pairs, et en général: il y a une technologie appelée Plug universel et Jouez 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 pour que les autres clients puissent se connecter directement à eux.


2 commentaires

Mais n'est-ce pas simplement un moyen d'automatiser l'automatisation du transfert de ports?


La clé est Automation - Je suppose que "lui" dans la question est l'utilisateur. Éviter manuellement avoir à configurer le transfert de port est à la fois la beauté et le danger d'UPNP.



0
votes

Une alternative à un serveur proxy est un serveur de fabrication de correspondance. Au lieu de proxyer tout le trafic, le fabricant de match ne fait que négocier jusqu'à ce que les pairs puissent se parler. Cela implique de trouver les IP publiques externes des pairs et de parler à chacun de sorte que le pare-feu / routeur sache que les pairs souhaitent communiquer.

Ceci s'appelle TRACK POWERING et il doit souvent être fait par le fabricant de match plutôt que les pairs eux-mêmes. Une fois le trou perforé cependant, le fabricant de match peut dire aux pairs les uns des autres et ils peuvent communiquer directement.


3 commentaires

Afaik trous poinçonnant comme celui-ci ne fonctionne que pour UDP - et uniquement si la cartographie du port UDP est cohérente sur le routeur.


J'ai lu sur le trous de poinçonnage, le trous de TCP pointe-t-il du travail? Il pourrait cependant être aussi facile à mettre en œuvre, mais je vais essayer comme cela semble être ce que je cherche. Merci.


Vous pouvez jeter un coup d'œil sur la cascade. Mais je ne recommanderais pas le coup de poing sur TCP Trou car il ne fonctionnera pas de manière fiable



0
votes

Le poinçonnage des trous est modérément bien compris pour la communication UDP, mais elle peut également être utilisée de manière fiable pour configurer des flux TCP par pair à pair. Voici l'article bien détaillé sur TCP et UDP:

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


0 commentaires