Veinte móviles en una tienda
Una tienda de móviles tiene wifi para los clientes. Una tarde hay veinte personas conectadas a la vez, y además el datáfono y el ordenador de la caja.
Internet solo ve una dirección para toda la tienda. Aun así, cada vídeo llega a la pantalla correcta.
El router de la tienda hace un cambio en cada paquete. Hoy ves cuál.
Al final de esta lección
Nota
Puedo explicar cómo comparten muchos equipos una sola dirección.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Dirección pública | una dirección que se usa en internet | |
| Puerta de enlace | el router entre una red interior e internet | |
| NAT | traducción de direcciones: cambiar las direcciones de un paquete | |
| Puerto de origen | el número que dice a qué conexión pertenece un paquete | 50001 |
| Tabla NAT | la lista de la puerta de enlace con qué conexión es de qué equipo | |
| Reenvío de puerto | una regla que manda un puerto de fuera a un equipo de dentro |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
A una dirección privada no llega la respuesta
Los equipos de la tienda usan direcciones privadas. Ningún router de internet tiene una ruta hacia ellas.
Así que una petición desde 192.168.20.15 puede llegar a un servidor. La respuesta no tiene por dónde volver y se pierde.
Conoce las tres máquinas
netlab statusSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira qué redes conoce el servidor
sudo ip netns exec srv ip routeSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide la web exterior desde dentro
sudo ip netns exec lan curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide lo mismo desde la puerta de enlace
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una petición tiene respuesta y otra no
El estado muestra gw con dos direcciones: 10.0.0.1 dentro y 203.0.113.1 fuera. La máquina de dentro, lan, es 10.0.0.2.
El servidor srv solo conoce una red, 203.0.113.0/24. No sabe volver a 10.0.0.2, así que desde lan curl espera tres segundos y escribe Connection timed out.
Desde gw, el servidor responde enseguida: outside-server: you are 203.0.113.1.
La puerta de enlace cambia el origen
Con NAT, la puerta de enlace cambia cada paquete al salir. Pone su dirección pública en lugar de la privada.
Mantiene el puerto de origen si está libre y elige otro si dos equipos chocan. Apunta el cambio en su tabla NAT.
Cuando vuelve una respuesta, mira el puerto en la tabla y devuelve la dirección privada.
Ejemplo resuelto: tres equipos, una dirección
| Equipo | Sale del equipo desde | Sale de la puerta desde |
|---|---|---|
| Móvil de Ana | 192.168.20.15 puerto 45000 | 198.51.100.9 puerto 45000 |
| Móvil de Hugo | 192.168.20.16 puerto 45000 | 198.51.100.9 puerto 45001 |
| Datáfono | 192.168.20.5 puerto 38000 | 198.51.100.9 puerto 38000 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lee lo que recuerda la puerta de enlace
sudo ip netns exec gw conntrack -LSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
La puerta sigue cada conexión
Cada línea es una conexión que ha visto la puerta de enlace. La petición de lan muestra SYN_SENT y [UNREPLIED]: no volvió respuesta.
La petición de la propia puerta muestra TIME_WAIT y [ASSURED]: tuvo respuesta y se cerró.
Cada línea dura unos dos minutos. NAT usa esta memoria para llevar cada respuesta al equipo correcto.
Un reenvío de puerto deja entrar algo
NAT funciona con conexiones que empiezan dentro. Una petición que empieza fuera no coincide con ninguna línea de la tabla, así que se tira.
Para abrir un servicio de dentro hace falta un reenvío de puerto. Por ejemplo, el puerto 8443 de fuera va a la cámara de seguridad de la tienda.
Las reglas del cortafuegos de la puerta deciden qué puede entrar.
Mira qué puertos escucha lan
sudo ip netns exec lan ss -ltnSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee las reglas del cortafuegos
sudo ip netns exec gw nft list rulesetSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que NAT es lo que impide entrar a desconocidos. NAT solo cambia direcciones. Las reglas del cortafuegos deciden qué entra. En estas reglas, policy drop en la cadena forward es lo que bloquea el exterior.
Para ir más lejos: la tabla llena
Un puerto es un número del 1 al 65535. Imagina una puerta de enlace que solo presta los puertos del 40000 al 40004.
¿Cuántas conexiones aguanta a la vez? Usa tu next_free_port para llenar una tabla hasta que devuelva "llena". ¿Qué notaría un cliente de la tienda?