Supongamos que tengo una red de 2 computadoras, cada una con una dirección de red privada de 192.168.1.101 y 192.106.1.102.
Para mi dirección IP pública, es 10.2.10.172.
Cuando realizo una solicitud http a google.com, mi computadora enviará un paquete con la dirección IP de origen 192.168.1.101 al enrutador y el NAT lo cambiará a 10.2.10.172.
Mi pregunta es, cuando google.com recibe la solicitud y envía la respuesta al 10.2.10.172, ¿cómo sabe el enrutador a qué computadora dirigirse? (192.168.1.101 o 192.168.1.102).
Al principio estaba pensando en el número de puerto, pero creo que podríamos estar navegando en el mismo sitio web al mismo tiempo, así que no tengo idea de cómo funciona aquí.
Respuestas:
NAT
Si está utilizando estática (uno-a-uno) NAT , el router asignará la
11.2.10.172
dirección IP pública a la primera PC (por ejemplo192.168.1.101
) tratando de llegar a google.com. En este caso, las dos PC no podrán comunicarse con google.com a la vez, porque la única IP pública disponible ya está distribuida.La tabla NAT en el enrutador:
11.2.10.172 -> 192.168.1.101
PAT
En su caso, PAT (sobrecarga de NAT) es la solución.
Con PAT, se pueden asignar múltiples direcciones a una IP privada. Cuando un dispositivo inicia una sesión TCP / IP, genera un número de puerto de origen TCP o UDP para identificar de forma exclusiva la sesión. Cuando el enrutador recibe este paquete, utiliza ese número de puerto de origen para identificar de forma exclusiva la traducción.
Ejemplo
PC1 (
192.168.1.101
) realiza una solicitud HTTP a google.com (64.233.161.1
) con un número de puerto de origen aleatorio (1444). PC1 enviará un paquete conDA: 64.233.161.1:80 | SA: 192.168.1.101:1444
. Cuando el enrutador recibe este paquete, se inserta11.2.10.172:1444 -> 192.168.1.101:1444
en la tabla NAT y luego cambia el direccionamiento L3 del paqueteDA: 64.233.161.1:80 | SA: 11.2.10.172:1444
y lo reenvía a google.com.Google responde con
DA: 11.2.10.172:1444 | SA: 64.233.161.1:80
. El enrutador recibe este paquete y lo traduce paraDA: 192.168.1.101:1444 | SA: 64.233.161.1:80
luego reenviarlo a la PC1.Si PC2 (
192.168.1.102
) envía un paquete con el mismo número de puerto de origen que PC1, el enrutador simplemente aumenta el número de puerto en 1. En ese caso, la tabla NAT se vería así11.2.10.172:1444 -> 192.168.1.101:1444
11.2.10.172:1445 -> 192.168.1.102:1444
Espero que ayude un poco.
ACTUALIZACIÓN
Como notó @CraigConstantine,
10.2.10.172
todavía está en el espacio de direcciones privadas, así que lo he cambiado a11.2.10.172
.fuente
Su enrutador sabe dónde enrutar el tráfico porque mantiene una tabla de conexiones con estado que son direcciones IP de origen: puerto y direcciones IP de destino: puerto. Estos se establecen en función de las reglas del firewall, las políticas NAT y algunas otras configuraciones (como el tiempo de espera de TCP y UDP). Hay 4 estados posibles: NUEVO, RELACIONADO, ESTABLECIDO e INVÁLIDO. Según las reglas de su firewall, su firewall determina en qué estado debe estar una conexión. Por lo tanto, por lo general, puede hacer NUEVAS conexiones salientes de forma predeterminada, pero solo las conexiones RELACIONADAS o ESTABLECIDAS se permiten entrantes si crea una regla NAT o PAT y una política de firewall coincidente para permitir esto.
Luego, ya sea en base a las reglas que ha configurado (para el caso de una NUEVA conexión) o la tabla de conexión existente (para el caso de una conexión ESTABLECIDA), se permitirá o rechazará un paquete.
Además, se mantiene una tabla [ARP] que ayuda al firewall a saber a qué dirección MAC física corresponde una dirección IP.
fuente