Réponses NAT et UDP

20

Contrôle de santé mentale s'il vous plaît.

Si j'envoie des paquets UDP de la machine A derrière un NAT au port N de la machine B, où la machine B est en dehors du NAT (ailleurs sur Internet), puis-je raisonnablement m'attendre à ce que NAT transmette les paquets UDP reçus de la machine B sur le port N à port N sur la machine A, sans nécessiter de redirection de port manuelle sur le NAT?

tomfanning
la source

Réponses:

21

Uniquement si le port source du datagramme sortant d'origine était également le port N et si le NAT n'a pas choisi de laisser flotter le port source.

Autrement dit, le premier datagramme UDP de la machine A ressemble à ceci sur votre réseau local:

       Source IP: MachineAPrivate  
     Source Port: PortA     <-- note this is typically different than the destination port  
  Destination IP: MachineBPublic  
Destination Port: PortN  

Ensuite, après avoir été traduit par le NAT dans le sens sortant, il ressemble à ceci:

       Source IP: NATPublic  
     Source Port: PortC   <-- note this may or may not be the same as "PortA" above  
  Destination IP: MachineBPublic  
Destination Port: PortN  

Maintenant, lorsque la machine B répond, la réponse ressemble généralement à ceci:

       Source IP: MachineBPublic  
     Source Port: PortN  
  Destination IP: NATPublic  
Destination Port: PortC  

Ensuite, après avoir suivi le processus de traduction NAT entrant:

       Source IP: MachineBPublic  
     Source Port: PortN  
  Destination IP: MachineAPrivate  
Destination Port: PortA  

Ainsi, IF Machine A envoie la trame à partir du même port source que le port de destination ( « Port N »), et SI le NAT est en mesure de préserver le port source (il est configuré pour conserver les ports source lorsque cela est possible, et que le port source n'est pas utilisé), ALORS vous pouvez vous attendre à ce qu'une réponse au "Port N" revienne à la Machine A.

Voici la référence faisant autorité sur le bon comportement NAT UDP:
RFC 4787 / BCP 127: Exigences comportementales de traduction d'adresses réseau (NAT) pour Unicast UDP

Spiff
la source
3

Fermez, mais la machine B doit regarder l'adresse source et le numéro de port qu'elle reçoit réellement, qui peuvent être différents de N.

Le NAT sur la machine A peut ne pas utiliser le même port N que celui envoyé par la machine A. (Imaginez que la machine C derrière ce même NAT envoie également sur le port N: ils ne peuvent pas tous les deux l'utiliser.) Ainsi, la machine B peut voir un port source différent, M. Mais si le NAT fait cela, il devrait accepter le trafic renvoyé vers port M et mappez-le automatiquement sur N sur la machine B.

En d'autres termes, tant que la machine B renvoie à l'adresse source et au port source indiqués dans le paquet qu'elle a reçu, vous pouvez raisonnablement vous attendre à ce que le paquet de retour retrouve son chemin vers la source d'origine. Cela suppose que le paquet de retour est envoyé dans un court laps de temps, car les règles NAT automatiques ont tendance à expirer après un certain nombre de minutes.

Seth Noble
la source
-1

Je ne m'attendrais pas à ça.

Vous pouvez avoir plusieurs adresses IP derrière le NAT, vous devez donc choisir vers lequel il doit être transféré. En dehors de NAT, seule l'IP du routeur est visible et les IP NAT internes ne sont pas visibles.

UDP ne forme pas de connexion, mais c'est juste un datagramme voyageant à travers le réseau.

Il existe également une différence entre le port d'envoi et le numéro de port de réception.

rumburak
la source
Vous avez raison de dire que UDP ne "forme pas de connexion", mais les ports source et de destination appariés permettent en fait au NAT d'identifier de manière unique l'adresse IP derrière le NAT vers laquelle envoyer les paquets
portforwardpodcast