La expresión "abrir puertos" tiene muchas acepciones, en principio el uso correcto es el equivalente a “escuchar por un puerto”, es decir, ejecutar aplicaciones que usan un determinado puerto y tener ese puerto activo y listo para para enviar o recibir datos.
Otro uso de la expresión “abrir puertos” para, en un firewall (encargado de permitir, denegar y custodiar las conexiones), conceder permisos para que cierto puerto destino u origen pueda salir o entrar de la red local.
Pero en cuanto al tema que tratamos, la traducción de direcciones y puertos, hablamos de “abrir puertos”, o NAT inversa (Port Forwarding o Virtual Server en muchos menús de router domésticos) para permitir entrar en una LAN desde Internet, sin que previamente se haya producido una petición desde la LAN.
Como se ha visto en el apartado anterior, los paquetes que entran en LAN corresponden a respuestas de peticiones previas realizadas desde dentro de la LAN. Para entrar en LAN sin que haya una solicitud previa es necesario “abrir los puertos”, es decir, hay que incluir una traducción en la tabla NAT fija, no dinámica producida por un paquete que ha salido.
La finalidad de abrir los puertos es tener servicios (servidor web, servidor base de datos, etc.) instalados en una red local y que se puedan acceder desde cualquier lugar exterior.
Ejemplo de NAT inversa o apertura de puertos
En el esquema hay un servidor web en una red local, para acceder a este servidor web desde el exterior solo es necesario poner en el navegador del equipo externo http://1.1.1.1
¿Qué contenido tendrá la tabla NAT antes de abrir el puerto?
Antes de abrir el puerto la tabla NAT estará vacía, o si algún equipo local ha enviado alguna petición al exterior el router habrá anotado esa salida, es decir, anotaciones dinámicas asociadas a las salidas de datos al exterior.
Dinámica/Fija
|
Protocolo
|
IP interna
|
IP externa
|
IP
|
Puerto
|
IP
|
Puerto
|
Dinámica
|
…
|
…
|
…
|
…
|
…
|
….
|
|
|
|
|
|
Dinámica
|
…
|
…
|
…
|
…
|
…
|
¿Qué contenido tendrá la tabla NAT después de abrir el puerto?
La tabla NAT tendrá una entrada fija, indicando que todas las peticiones con destino al puerto 80 (servicio web) la atenderá el servidor www
Dinámica/Fija
|
Protocolo
|
IP interna
|
IP externa
|
IP
|
Puerto
|
IP
|
Puerto
|
Fija
|
TCP
|
192.168.0.100
|
80
|
1.1.1.1
|
80
|
Dinámica
|
…
|
…
|
…
|
…
|
…
|
….
|
|
|
|
|
|
Dinámica
|
…
|
…
|
…
|
…
|
…
|
Como se puede observar no hay datos relativos a la IP externa, la razón es que las peticiones pueden venir de cualquier IP externa. Cuando llegue un paquete con destino a 1.1.1.1:80, el router aplicará la traducción fija y lo enviará a 192.168.0.100:80
¿Podríamos tener dos servidores web funcionado en la red local?
Pues sí, pero el puerto 80 está abierto hacia 192.168.0.100, es decir, el puerto 80 está asociado al equipo 192.168.0.100, por tanto, será necesario utilizar otro puerto, por ejemplo el 81 para el segundo servidor:
Dinámica/Fija
|
Protocolo
|
IP interna
|
IP externa
|
IP
|
Puerto
|
IP
|
Puerto
|
Fija
|
TCP
|
192.168.0.100
|
80
|
1.1.1.1
|
80
|
Fija
|
TCP
|
192.168.0.200
|
80
|
1.1.1.1
|
81
|
Dinámica
|
…
|
…
|
…
|
…
|
…
|
Cuando un paquete llegue al router con destino puerto 81, el router aplicará la segunda traducción y enviará al puerto 80 del equipo 192.168.0.200 el paquete. Para visitar esta segunda web desde el exterior habrá que indicar http://1.1.1.1:81