NAT, PAT, SNAT y DNAT explicados con una tabla NAT
NAT es lo que permite que todos los equipos de tu casa salgan a internet con una sola IP pública. Aquí tienes los tipos, una tabla NAT de ejemplo leída paso a paso y la configuración en Cisco y Linux.
Para qué sirve NAT
Dentro de casa o de una empresa, los equipos usan direcciones privadas (10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16, del RFC 1918). Esas direcciones no se pueden usar en internet: se repiten en millones de redes. Para salir fuera, el router cambia la IP privada por su IP pública y apunta el cambio para poder devolver la respuesta al equipo correcto.
Ese cambio es NAT (Network Address Translation, traducción de direcciones de red; RFC 3022). Nació porque no había direcciones IPv4 públicas para todos, y hoy lo hace cualquier router doméstico. Si todavía dudas de qué rangos son privados, los tienes en la guía de clases de direcciones IP.
Los tipos de NAT
| Tipo | Qué hace | Cuándo se usa |
|---|---|---|
| NAT estático | Una IP privada siempre con la misma IP pública (1 a 1). | Un servidor que tiene que ser visible desde fuera con su propia IP pública. |
| NAT dinámico | Las IP privadas cogen una IP pública libre de un grupo (pool) mientras la necesitan. | Poco habitual hoy: hacen falta tantas IP públicas como equipos navegando a la vez. |
| PAT o NAT con sobrecarga | Muchas IP privadas comparten una sola IP pública; se distinguen por el puerto. | Lo que hace el router de casa. En Cisco se llama overload; en Linux, masquerade. |
Los puertos son números de 16 bits (de 0 a 65.535). Por eso una sola IP pública con PAT puede mantener miles de conexiones a la vez: cada una ocupa un puerto distinto en la IP pública.
SNAT y DNAT: qué dirección se cambia
- SNAT (NAT de origen): cambia la IP de origen del paquete. Es lo que pasa cuando un equipo de dentro sale a internet. PAT es un tipo de SNAT.
- DNAT (NAT de destino): cambia la IP de destino. Es lo que pasa cuando alguien de fuera entra a un servidor de dentro. En el router de casa se llama abrir puertos o port forwarding: «lo que llegue al puerto 80 de mi IP pública, mándalo a 192.168.1.10».
Ejemplo resuelto: una tabla NAT con PAT
Una oficina tiene la red 192.168.1.0/24 y su router sale a internet con una sola IP pública,
203.0.113.5. Tres equipos navegan a la vez. (Las direcciones 203.0.113.0/24 y 198.51.100.0/24 están
reservadas para ejemplos, así que no son de nadie.)
| Protocolo | Interior local | Interior global | Exterior |
|---|---|---|---|
| TCP | 192.168.1.10:51000 | 203.0.113.5:51000 | 198.51.100.20:443 |
| TCP | 192.168.1.11:51000 | 203.0.113.5:1024 | 198.51.100.20:443 |
| UDP | 192.168.1.12:50500 | 203.0.113.5:50500 | 198.51.100.53:53 |
Cómo se lee:
- Interior local es la IP y el puerto reales del equipo, los de la red privada. Interior global es cómo se ve ese equipo desde internet. Exterior es el servidor al que se conecta.
-
El equipo .10 abre una conexión a una web segura (puerto 443) desde su puerto 51000. El router cambia el origen
192.168.1.10:51000por203.0.113.5:51000y lo apunta en la tabla. - El equipo .11 se conecta a la misma web y, por casualidad, también desde el puerto 51000. Ese puerto de la IP pública ya está ocupado, así que el router le da otro (aquí el 1024). Sin ese cambio de puerto no podría saber a quién devolver cada respuesta.
-
Cuando llega la respuesta a
203.0.113.5:1024, el router busca la fila, cambia el destino por192.168.1.11:51000y se la entrega al equipo .11. - La tercera fila es una consulta DNS (UDP, puerto 53): PAT funciona igual con UDP.
Las filas se borran solas al cabo de un tiempo sin tráfico. Por eso, desde fuera, nadie puede iniciar una conexión hacia un equipo de dentro si no hay una regla de DNAT: el router no sabría a quién mandarla.
Configuración en un router Cisco
Primero se marca qué interfaz da a la red interna y cuál a internet:
interface g0/0
ip nat inside
interface g0/1
ip nat outside PAT con la IP de la interfaz de salida (lo más habitual):
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 interface g0/1 overload La ACL dice qué direcciones se traducen; la wildcard 0.0.0.255 es la máscara /24 invertida (la puedes sacar con la calculadora de wildcard). Otros casos:
! NAT estático (servidor visible desde fuera)
ip nat inside source static 192.168.1.10 203.0.113.6
! NAT estático de un solo puerto (abrir el puerto 80)
ip nat inside source static tcp 192.168.1.10 80 203.0.113.5 80
! Ver la tabla NAT
show ip nat translations Configuración en Linux con iptables
# PAT: todo lo que sale por eth0 usa la IP de eth0 (SNAT dinámico)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# SNAT con una IP pública fija
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.5
# DNAT: lo que llegue al puerto 80 va al servidor interno
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
Fíjate en la cadena: SNAT se hace en POSTROUTING (justo antes de salir) y DNAT en
PREROUTING (nada más entrar, antes de decidir la ruta). Además hay que activar el reenvío de paquetes
con sysctl -w net.ipv4.ip_forward=1.
Preguntas frecuentes
¿NAT es lo mismo que un cortafuegos?
No. NAT bloquea de rebote las conexiones que llegan de fuera sin una regla, pero no está pensado para proteger. Para eso están las reglas de filtrado del cortafuegos.
¿Qué es el CGNAT?
Es NAT hecho por tu operador: varios clientes comparten una misma IP pública. Tu router recibe una dirección del rango 100.64.0.0/10 (RFC 6598) en lugar de una pública. Se nota porque no puedes abrir puertos desde casa. La calculadora de subredes te dice si una IP es de ese rango.
¿En IPv6 hace falta NAT?
Normalmente no: hay direcciones de sobra y cada equipo puede tener la suya pública. La protección la pone el cortafuegos. Lo tienes en IPv6 explicado.
¿El servidor DHCP y el NAT van en el mismo router?
En casa, sí: el router da las IP privadas por DHCP y luego las traduce con PAT al salir. En una empresa pueden estar en equipos distintos.