¿Qué es el reenvío de puertos y para qué se utiliza?

Respuestas:

318

Los basicos

Para explicar realmente el reenvío de puertos, primero debe comprender un poco más sobre lo que hace su enrutador . Su proveedor de servicios de Internet asigna una dirección IP a su conexión a Internet. Todas las computadoras en Internet necesitan una dirección IP única, pero tiene varias computadoras en su casa y solo una dirección. Entonces, ¿cómo funciona esto?

Si sabe lo que es y solo quiere saber cómo hacerlo : http://portforward.com/ tiene un tutorial con capturas de pantalla para literalmente cientos de enrutadores diferentes. La documentación está oculta detrás de una página publicitaria para su herramienta de configuración automática de puertos. (Simplemente haga clic un poco y lo encontrará).

NAT: ¿Qué es eso? ¿Por qué lo usamos?

Su enrutador doméstico tiene una función llamada Traducción de direcciones de red, o NAT, integrada. Dentro de su red, las computadoras tienen direcciones como 192.168.1.100. Todas las direcciones en el rango 192.168. * (O en el rango 10. *) son direcciones " privadas " o " reservadas " . La IANA asigna oficialmente estas direcciones para su uso dentro de redes privadas. Su enrutador asigna automáticamente dicha dirección a cada computadora conectada a través de DHCP . Estas direcciones son cómo las computadoras en su red se comunican con el enrutador y entre sí.

Su enrutador tiene una interfaz de red separada que lo conecta a Internet. Esta interfaz tiene una dirección muy diferente asignada por su ISP. Esta es la única dirección que mencioné antes, y su enrutador la usa para comunicarse con otras computadoras en Internet. Las computadoras dentro de su red tienen direcciones IP privadas no enrutables , lo que significa que si envían paquetes directamente a Internet, los paquetes se descartarán automáticamente (los paquetes con direcciones privadas no pueden atravesar Internet por razones de estabilidad). Pero su enrutador tiene una dirección enrutable . La traducción de direcciones de red, como su nombre lo indica, se traduce entre estos dos tipos de direcciones, permitiendo que las múltiples computadoras dentro de su red aparezcan en Internet como una computadora con una sola dirección.

Los detalles

Aunque esto puede sonar complicado, en realidad es bastante simple cómo lo hace su enrutador. Cada vez que una computadora dentro de su red desea conectarse a una computadora en Internet, envía la solicitud de conexión al enrutador (sabe que debe enviarla al enrutador porque su parámetro de puerta de enlace predeterminada está configurado en la dirección del enrutador). El enrutador luego toma esa solicitud de conexión (una "solicitud SYN" en TCP / IP) y cambia la dirección de origen (la "respuesta" o la dirección de retorno) y la cambia de la IP privada de la computadora a la IP pública del enrutador, para que la respuesta se envíe al enrutador. Luego toma nota en una base de datos (llamada tabla NAT ) que la conexión se inició, para que la recuerde más tarde.

Cuando la respuesta regresa de la computadora remota (un "SYN-ACK"), el enrutador mira en su tabla NAT y ve que una conexión a ese host en ese puerto fue iniciada previamente por una computadora privada en su red, cambia el destino dirección a la dirección privada de la computadora y la reenvía dentro de su red. De esta forma, los paquetes pueden continuar en tránsito de ida y vuelta entre las redes, con el enrutador cambiando de forma transparente las direcciones para que funcione. Cuando finaliza la conexión, el enrutador simplemente la elimina de la tabla NAT.

O piensa de esta manera

Esto podría ser un poco más fácil de visualizar con una metáfora; digamos que usted es un agente de carga en los Estados Unidos que trabaja con clientes chinos. Necesitan enviar paquetes a muchos clientes en los EE. UU., Pero es más fácil por razones de aduanas / papeleo enviar paquetes solo a un lugar. Entonces, un paquete le llega de uno de sus clientes en China (la red privada, en este ejemplo) con un destino real en algún lugar de los EE. UU. (Internet). Cambia la etiqueta de la dirección en la caja a la dirección de EE. UU. (Pública), y cambia la dirección de devolución a su propia dirección pública (ya que no puede devolverse directamente a China sin incomodar al cliente) y entregarla al servicio postal . Si el cliente devuelve el producto, se trata de usted. Lo buscas en tus registros y ves de qué compañía en China vino,

Esto funciona muy bien, pero hay un pequeño problema. ¿Qué sucede si un cliente necesita enviar algo a la empresa, digamos un giro postal en pago por algo? O, digamos que una computadora en Internet inicia una conexión con el enrutador (una solicitud SYN), digamos a un servidor web que está en la red. ¡La carta / paquete solo tiene la dirección pública del enrutador, por lo que el enrutador en realidad no sabe dónde enviarla! podría estar destinado a cualquiera de las computadoras en la red privada, o ninguna de ellas. Es posible que haya experimentado este problema cuando llama al teléfono de la casa de alguien; cuando lo llaman no hay problema, pero cuando lo llama no hay forma de que sepa a quién llama, por lo que la persona equivocada puede responder.

Si bien es bastante fácil para los humanos resolver esto, es mucho más complicado para las computadoras, porque no todas las computadoras de su red conocen todas las demás.

Y finalmente llegamos a Port Forwarding

El reenvío de puertos es cómo solucionamos este problema: es una forma de decirle a su enrutador a qué computadora dentro de la red deben dirigirse las conexiones entrantes. Tenemos tres formas diferentes de hacer esto:

  • Faux-DMZ : muchos enrutadores tienen una función llamada DMZ. Esto significa Zona Desmilitarizada, que es un tipo de configuración de seguridad de red. La DMZ en los enrutadores domésticos a menudo se denomina DMZ falsa porque carece de las características de una DMZ real. Lo que hace es el tipo más simple de manejo de la conexión entrante: todas las solicitudes de conexión entrantes se enviarán a una especificada dentro de su red. Es muy simple: escribe una dirección IP en la configuración de su enrutador y todas las conexiones entrantes van allí. Sin embargo, esto no siempre funciona porque es posible que tenga varias computadoras que necesiten aceptar conexiones entrantes. Para eso, tenemos ...
  • Reenvío de puertos : todas las solicitudes de conexión de red incluyen un "puerto". El puerto es solo un número, y es parte de cómo una computadora sabe cuál es el paquete. IANA ha especificado que el Puerto 80 se usa para HTTP. Esto significa que un paquete entrante que dice el número de puerto 80 debe ser una solicitud destinada a un servidor web. El reenvío de puertos en su enrutador le permite ingresar un número de puerto (o posiblemente un rango o combinación de números, dependiendo del enrutador) y una dirección IP. Todas las conexiones entrantes con un número de puerto coincidente se enviarán a la computadora interna con esa dirección.
  • Reenvío de puertos UPnP : el reenvío UPnP funciona exactamente de la misma manera que el reenvío de puertos, pero en lugar de configurarlo, el software en una computadora dentro de la red configura automáticamente el enrutador para reenviar el tráfico en un puerto determinado.

Un ejemplo

Veamos un ejemplo de uso. Muchos videojuegos multijugador (por ejemplo, Counter Strike) te permiten ejecutar un servidor de juegos en tu computadora al que otras personas pueden conectarse para jugar contigo. Su computadora no conoce a todas las personas que quieren jugar, por lo que no puede conectarse a ellas; en cambio, tienen que enviar nuevas solicitudes de conexión a su computadora desde Internet.

Si no tuviera nada configurado en el enrutador, recibiría estas solicitudes de conexión pero no sabría qué computadora dentro de la red tenía el servidor de juego, por lo que simplemente las ignoraría (o, más específicamente, enviaría devuelve un paquete que indica que no se puede conectar). Afortunadamente, sabes el número de puerto que estará en las solicitudes de conexión para el servidor del juego. Entonces, en el enrutador, establece un puerto hacia adelante con el número de puerto que espera el servidor del juego (por ejemplo, 27015) y la dirección IP de la computadora con el servidor del juego (por ejemplo, 192.168.1.105).
El enrutador sabrá reenviar las solicitudes de conexión entrantes a 192.168.1.105 dentro de la red, y las computadoras externas podrán conectarse.

Otro ejemplo sería una red local con dos máquinas, donde la segunda con la IP 192.168.1.10 aloja un sitio web con Apache. Por lo tanto, el enrutador debe reenviar las solicitudes del puerto 80 entrante a esta máquina. Mediante el reenvío de puertos, ambas máquinas pueden ejecutarse en la misma red al mismo tiempo.

Gráfico de ejemplo de reenvío de puertos

Los videojuegos son quizás el lugar más común en el que los usuarios de todos los días se encontrarán con el reenvío de puertos, aunque la mayoría de los juegos modernos usan UPnP para que no tenga que hacerlo manualmente (en cambio, es completamente automático). Sin embargo, deberá hacer esto cuando quiera poder conectarse directamente a algo en su red (en lugar de hacerlo a través de algún intermediario en Internet). Esto puede incluir ejecutar su propio servidor web o conectarse a través de un Protocolo de escritorio remoto a una de sus computadoras.

Una nota sobre seguridad

Una de las cosas buenas de NAT es que proporciona seguridad incorporada sin esfuerzo. Mucha gente deambula por internet buscando máquinas que sean vulnerables ... y lo hacen intentando abrir conexiones con varios puertos. Estas son conexiones entrantes, por lo tanto, como se discutió anteriormente, el enrutador las desconectará. Esto significa que en una configuración NAT, solo el enrutador es vulnerable a los ataques que involucran conexiones entrantes. Esto es algo bueno, porque el enrutador es mucho más simple (y, por lo tanto, es menos probable que sea vulnerable) que una computadora que ejecuta un sistema operativo completo con una gran cantidad de software. Debe tener en cuenta, entonces, que al DMZing una computadora dentro de su red (configurándola como el destino DMZ) pierde esa capa de seguridad para esa computadora: ahora está completamente abierta a las conexiones entrantes de Internet, por lo tanto, debe asegurarlo como si estuviera directamente conectado. Por supuesto, cada vez que reenvía un puerto, la computadora en el extremo receptor se vuelve vulnerable en ese puerto específico. Por lo tanto, asegúrese de ejecutar un software actualizado que esté bien configurado.

jcrawfordor
fuente
2
Lo mencionó brevemente, pero es posible que desee exponer la importancia de los usos de reenvío de puertos al estilo DMZ. No puedo pensar en una sola instancia en la que sería una buena idea, en un entorno de producción, exponer algo como un servidor SQL (o lo que sea) al mundo exterior. El reenvío de puertos puede permitir obtener recursos protegidos sin comprometer seriamente la seguridad.
Brian Vandenberg
11
Un detalle que no se amplió en la sección NAT es el hecho de que si las computadoras en su red usan DHCP para obtener sus direcciones IP privadas internas no enrutables, es posible que la asignada a ellas varíe y, si eso sucede, el reenvío de puertos será ensuciarse. Es mejor evitar eso configurando el direccionamiento de red de cada computadora manualmente. portforward.com enfatiza la importancia de esto y tiene una guía que describe cómo configurar una dirección IP estática en un sistema, sin embargo, no mencionan la necesidad de configurar también el DHCP del enrutador para evitar estas direcciones NAT ahora reservadas.
Martineau
2
@jcrawfordor, Hola, ¿te importaría explicar cómo exactamente es UPnP completamente automático? ¿Qué es UPnP y cómo funciona?
Pacerier
1
@martineau reservar direcciones DHCP es una buena forma de hacerlo. Algunos enrutadores pueden reenviar puertos a clientes específicos, no a direcciones, lo cual es aún más preferible.
Baldrickk el
2
La parte de la respuesta que dice: "El puerto es solo un número, y es parte de cómo una computadora sabe cuál es el paquete". es engañosa. La fijación de un número de puerto para una aplicación es una convención, no es un factor para determinar el tipo de paquete. En el mejor de un paquete destinado para el puerto 80 se puede adivinar a ser HTTP, nada más, es del todo dependerá de (a nivel de aplicación) la aplicación escuchando en el puerto 80.
codeman48