¿Cómo funciona una NAT detrás de una NAT (NAT del enrutador y NAT del ISP)?

¿Cómo funciona una NAT detrás de una NAT (NAT del enrutador y NAT del ISP)?

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 internal1y internal2. Luego, la NAT les proporciona puertos en la misma IP, de modo que de cara al público estén detrás someIP:1y 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:101lo 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:11223se 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:22334y 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:11223se asigna a la dirección "pública": par de puertos 10.0.0.8:22334. Ahora 10.0.0.8sigue 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:22334se 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/8subredes 192.168.0.0/16involucradas 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/10rango (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, someIPno 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.

información relacionada