¿Cómo funciona NAT / PortForwarding / TCP / IP?

11

Hace poco leí un artículo titulado cómo funciona NAT . Algunas cosas aún no me quedan claras. Estaría agradecido si alguien pudiera explicarlo.

A continuación se muestra la parte del artículo sobre DynamicNAT que es más confusa:

Una computadora en el dominio de código auxiliar intenta conectarse a una computadora fuera de la red, como un servidor web.

El enrutador recibe el paquete de la computadora en el dominio de código auxiliar. El enrutador guarda la dirección IP no enrutable de la computadora en una tabla de traducción de direcciones. El enrutador reemplaza la dirección IP no enrutable de la computadora emisora ​​con la primera dirección IP disponible fuera del rango de direcciones IP únicas. La tabla de traducción ahora tiene una asignación de la dirección IP no enrutable de la computadora que coincide con una de las direcciones IP únicas.

Cuando un paquete regresa de la computadora de destino, el enrutador verifica la dirección de destino en el paquete. Luego busca en la tabla de traducción de direcciones para ver a qué computadora en el dominio de código auxiliar pertenece el paquete.

1) ¿Cómo sabe NAT que el paquete "regresa" a la computadora de destino?

2) ¿Qué sucede si otras computadoras en la LAN están conectadas al mismo servidor? ¿Cómo sabe la NAT qué paquete debe "regresar" y dónde?

3) ¿La modificación del encabezado del paquete permite realizar un ataque de Internet, en el cual la "IP de origen" se reemplaza con la IP de la víctima, y ​​el servidor de respuesta inundará a la víctima con paquetes no deseados?

Supongo que múltiples atacantes tendrían que estar involucrados ...

4) ¿StaticNAT es equivalente al PortForwarding de todos los puertos?

usuario2449761
fuente

Respuestas:

10

Existe una idea errónea general entre NAT (traducción de direcciones de red) y PAT (traducción de direcciones de puerto), que es lo que usamos principalmente en nuestros enrutadores domésticos.

NAT
Supongamos que tenemos una red con la siguiente topología:

Private_Network <-------> Router <-------> The_Internet

La interfaz del enrutador que está conectada a Private_Network tiene una dirección IP privada , es decir, una que no es única en The_Internet . Por otro lado, en el caso de NAT , el enrutador tiene múltiples interfaces conectadas a The_Internet . Cada interfaz tiene una dirección IP única en The_Internet . Ahora supongamos que Host_A y Host_B están en Private_Network y ambos quieren acceder a Website_X en The_Internet al mismo tiempo. Las IP y los puertos de Host_AEl paquete será:

IP de origen: Host_A 's IP privada
Puerto de origen: puerto A de Host_A
IP de destino: Website_X ' s pública / IP exclusiva y
Puerto de destino: Un puerto donde Website_X servidor 's está escuchando

y de la misma manera para un paquete procedente de Host_B .
Si la IP de origen no se modifica, Website_X responderá a una dirección IP que sea privada, es decir, no única y, por lo tanto, el paquete nunca podrá encontrar el camino de regreso. Para resolver ese problema, el enrutador verifica si una de sus direcciones IP únicas conectadas a The_Internet no se utiliza. Si ese es el caso, realiza la siguiente asignación:

Host_A 's IP privada ======= Router's_unique_IP_K

y ahora el paquete que comenzó desde Host_A yendo a Website_X y ahora abandona la interfaz del Enrutador conectado a The_Internet tendrá la forma:

IP de origen: Router's_unique_IP_K
Puerto de origen: puerto A de Host_A
IP de destino: Website_X 's pública / IP exclusiva y
Puerto de destino: Un puerto donde Website_X ' s servidor está escuchando

Por lo tanto, puede comprender que existe una asociación uno a uno desde IP privadas a IP públicas. Por lo tanto, cuando llega un paquete desde Website_X al enrutador , esta asociación se verifica y la dirección IP de destino se cambia de nuevo a la privada y se entrega con éxito al host correcto.
Como puede ver, este método es bastante simple, pero tiene una gran desventaja: cada host privado debe tener una dirección IP única reservada, lo cual es costoso, por lo tanto, seleccionamos tener menos direcciones IP únicas que los hosts en la red privada. Por lo tanto, si todos los hosts privados intentan acceder a The_Internet al mismo tiempo, solo un subconjunto de ellos, igual al número de direcciones IP públicas disponibles que el enrutadortiene, tendrá acceso y el resto será denegado.
Para contrarrestar eso creamos PAT .

PAT
PAT es lo que está utilizando la gran mayoría de nuestros enrutadores domésticos. La limitación básica es que el enrutador tiene una única dirección IP única con la que se conecta a The_Internet , pero aún queremos permitir que varios hosts de la red privada accedan a The_Internet al mismo tiempo.
La forma en que lo hacemos es "similar" a la forma en que NAT lo hace con una diferencia clave: en lugar de que el enrutador tenga un grupo de direcciones IP, tiene un grupo de números de puerto. Más precisamente, un paquete que llega al Router desde Host_A en Private_Network destinado a Website_X enThe_Internet tendrá el siguiente formato:

IP de origen: Host_A 's IP privada
Puerto de origen: puerto A de Host_A
IP de destino: Website_X ' s pública / IP exclusiva y
Puerto de destino: Un puerto donde Website_X servidor 's está escuchando

Ahora el enrutador realizará dos tareas:

  1. Cambiará la IP de origen a la IP pública única del enrutador Y
  2. Cambiará el puerto de origen a un puerto de un grupo que el enrutador está manteniendo y que aún no se utiliza, por ejemplo, Port_Z

y ahora el paquete que comenzó desde Host_A yendo a Website_X y ahora abandona la interfaz del Enrutador conectado a The_Internet tendrá la forma:

IP de origen: Router's_unique_IP_K
Puerto de origen: Port_Z
IP de destino: Website_X 's pública / IP exclusiva y
Puerto de destino: Un puerto donde Website_X ' s servidor está escuchando

y el enrutador mantendrá la siguiente asignación:

La IP privada de Host_A Y un puerto en Host_A ======= Port_Z

¿Por qué funciona esto?
Ahora, cuando regresa un paquete, el enrutador simplemente verifica el número de puerto de destino y cambia la dirección IP de destino y el número de puerto de destino de acuerdo con la asignación mencionada anteriormente y el paquete se entrega con éxito.

¿Qué sucede si ejecuto varias aplicaciones en el mismo host?
Las diferentes aplicaciones tendrán diferentes puertos, por definición, por lo que se asignarán a un puerto diferente del enrutador .

¿Qué sucede si varios hosts intentan acceder a The_Internet al mismo tiempo y todos usan la misma aplicación?
Los diferentes hosts tendrán diferentes direcciones IP privadas, por definición, por lo que se asignarán a un puerto diferente del enrutador .

PAT se balancea peligrosamente en un espacio gris de capa cruzada. Los números de puerto son parte del protocolo de transporte, mientras que los enrutadores pueden operar hasta el protocolo de Internet. Técnicamente hablando es algo que no está permitido por los protocolos. Por lo tanto, existen, al menos teóricamente, peligros potenciales: el conjunto de puertos es limitado. Por lo tanto, si mi red privada consta de 1000 hosts y cada uno ejecuta aplicaciones port_pool / 10, la tabla de asignación en el enrutador se quedará sin entradas disponibles y se denegará el acceso a las aplicaciones.

Esta respuesta excedió en gran medida mi longitud prevista, pero espero que haya sido útil.

Jorge
fuente
2
Un par de notas: en primer lugar, está utilizando el término "NAT" para referirse a lo que los RFC llaman "NAT básico" y "PAT" para referirse a lo que los RFC llaman "NAPT". Los RFC generalmente usan "NAT" como un término general que abarca tanto "NAT básico" como "NAPT". En segundo lugar, incluso "NAT básico" tiene que modificar el encabezado TCP / UDP porque el encabezado TCP / UDP contiene una suma de verificación que cubre las direcciones IP.
Peter Green
@PeterGreen, pero ¿es precisa la esencia de la respuesta?
lpydawa
6

El enrutador sabe a dónde pertenecen los paquetes porque The router saves ... an address translation table.recuerda las traducciones de direcciones internas y externas que ha realizado. Como tal, una dirección interna es igual a una dirección externa, y el destino fuera de Internet es irrelevante. Esto, por supuesto, ignora el firewall presente en prácticamente todos los enrutadores NAT, que rastrea conexiones completas:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT puede cambiar cualquier combinación de ip y / o puerto.

# 3 es un tema completamente diferente: suplantación de identidad

# 4 "NAT estático", o "1 a 1", es un mapa de solo direcciones. Entonces, el puerto (e incluso el protocolo: tcp, udp, gre, etc.) es irrelevante.

Ricky Beam
fuente
2) ¿Qué sucede si otras computadoras en la LAN están conectadas al mismo servidor? ¿Cómo sabe la NAT qué paquete debe "regresar" y dónde?
user2449761
1 y 2 son la misma respuesta: porque está rastreando conexiones / traducciones. Dos hosts internos no se asignarán a la misma dirección externa; por lo que cualquier paquete que llegue a una dirección externa mapeada, automáticamente solo tiene un destino interno. Si solo tiene una dirección externa (pública), entonces no es "NAT", sino PAT (traducción de puerto)
Ricky Beam