Estoy usando un módem-enrutador y, en ciertos casos, también estoy detrás de un ISP NAT. ¿Cómo funciona una NAT (la NAT del enrutador) detrás de una NAT (la NAT del ISP)?
Hasta donde yo sé, una NAT funciona así: las computadoras A y B obtienen IP internas internal1
y internal2
. Luego, la NAT les proporciona puertos en la misma IP, de modo que de cara al público estén detrás someIP:1
y someIP:2
.
Pero si el enrutador hace eso y luego el ISP lo vuelve a hacer, las IP tendrían la forma someIP:1:100
, someIP:2:101
lo cual es imposible porque los puertos no tienen puertos de segundo nivel.
Entonces, ¿cómo funciona esto?
Respuesta1
Probemos un ejemplo sencillo.
En una red doméstica NAT "normal", 192.168.1.2:11223
se asigna al par dirección "pública": puerto 203.0.113.5:22334
. Entonces, el host de destino final cree que recibió un paquete 203.0.113.5:22334
y no tiene conocimiento de la red "privada" detrás de él.
Ahora, ampliémoslo a una red de doble NAT, con dos niveles de NAT.
En el enrutador más cercano al host, 192.168.1.2:11223
se asigna a la dirección "pública": par de puertos 10.0.0.8:22334
. Ahora 10.0.0.8
sigue siendo una dirección privada, solo que en una red diferente. En lo que respecta a este enrutador, su trabajo está hecho.
En el siguiente enrutador, que sirve como puerta de enlace para la LAN en la que está el primer enrutador, 10.0.0.8:22334
se asigna a otra dirección: par de puertos en su propia interfaz pública 203.0.113.5:12345
.
El host de destino final cree que recibió un paquete de 203.0.113.5:12345
. Ni él ni la Internet pública en su conjunto tienen conocimiento de ninguna de las 10.0.0.0/8
subredes 192.168.0.0/16
involucradas aquí. Enviará una respuesta a esa dirección, que cada enrutador debe traducir por turno.
Different address:port pairs for
thesame endpoint in one connection!
+------------------------+ -----------------------------------
|Host |
|192.168.1.2 |
+------------------------+ 192.168.1.2:11223 <--- Host sees
this pair
+------------------------+ 192.168.1.2:11223 <--- Router 1 sees
|Router 1 | req from this
|internal 192.168.1.1/24 |
|external 10.0.0.8 |
+------------------------+ 10.0.0.8:22334 <------ Router 1 sends
req from this
+------------------------+ 10.0.0.8:22334 <------ Router 2 sees
|Router 2 | req from this
|internal 10.0.0.1/24 |
|external 203.0.113.5 |
+------------------------+ 203.0.113.5:12345 <--- Router 2 sends
req from this
+------------------------+ 203.0.113.5:12345 <--- Public internet
|Public internet | sees this pair
+------------------------+
CGN ("ISP NAT") funciona de manera muy similar. La única diferencia es que no proporciona a sus hosts internos una dirección privada RFC1918, ya que puede entrar en conflicto con las redes empresariales. En cambio, una dirección del 100.64.0.0/10
rango (RFC6598) se distribuye mediante el "Enrutador 2" en el diagrama anterior. Hasta donde ve el enrutador del cliente, su dirección "pública" se encuentra en ese rango, ¡pero en realidad no es accesible en la Internet pública!
Respuesta2
Hasta donde yo sé, una NAT funciona así: las computadoras A y B obtienen IP internas interna1 e interna2. Luego, la NAT les proporciona puertos en la misma IP, de modo que de cara al público estén detrás de alguna IP:1 y alguna IP:2.
No. Puertosno sonparte de la dirección del host: no existen puertos en la capa IP, ya sea que se use NAT o no. La dirección IP de un host siempre esjustola dirección; no tiene puertos de "segundo nivel" y tampoco tiene puertos de "primer nivel". [1]
En cambio, los puertos pertenecen a cada TCP/UDP individual.conexiónque el host crea sobre la IP. (Bueno, estrictamente hablando, son parte de cada paquete y todos los paquetes en la misma conexión usan los mismos puertos).
Entonces, cuando vea una dirección escrita como 12.34.56.78:123
, todo seránola dirección IP del host: es un punto final de conexión TCP para el puerto 123enun host cuya dirección IP sigue siendo simplemente 12.34.56.78
.
Estos puertosno se agreganpor NAT: siempre han estado ahí; Cada paquete TCP o UDP tiene exactamente dos puertos (un puerto de "origen" y un puerto de "destino"). Un enrutador que realiza NAT simplemente los traduce a valores diferentes. No importa cuántos niveles de NAT tenga, ese paquete seguirá teniendo dos puertos.
[1] Esto significa que cuando tiene dos hosts con NAT detrás de una única dirección pública, en realidad son indistinguibles para la capa IP: cuando se envía un paquete IP desde el exterior, someIP
no tiene forma de especificar qué host desea; el enrutador NAT tiene que deducir esto de la capa TCP. Es por eso que debes configurar reglas de "reenvío de puertos" para poder recibir conexiones entrantes.