Hoy vamos con una de las operaciones básicas y necesarias cuando trabajamos en el mundo del IoT o de las aplicaciones web en general: el port forwarding (o apertura de puertos, en español).
Hemos desplegado una aplicación en nuestro PC o placa de desarrollo. Pongamos, por ejemplo, el servidor Node-RED que vimos en Instalando Node-RED, pero podría ser cualquier otra, empezando por una simple página HTML estática de desarrollo propio.
Es muy probable que en algún momento quieras tener acceso a ella no sólo desde el PC donde la has montado o los dispositivos de la red local. ¿Cómo podemos conectarnos a ella desde, por ejemplo, nuestro teléfono móvil cuando estamos a kilómetros de distancia?
Pues el concepto clave aquí es Port Forwarding, esto es, abrir los puertos de nuestro router para permitir esas conexiones.
Acceso desde el Localhost
Retomando el ejemplo del servidor Node-RED, vimos que una vez instalada la aplicación, esta estaba disponible en la dirección http://localhost:1880/. Localhost es la máquina local. Otra forma de llamar al localhost es a través de su IP loopback: 127.0.0.1. Así, obtendríamos el mimo resultado si en nuestro navegador escribiésemos http://127.0.0.1:1880/.
Esto funcionará siempre que trabajemos desde la misma máquina, pero la cosa cambia si ahora queremos conectar desde otro dispositivo de nuestra red. Nótese que resalto «de nuestra red». Esto quiere decir que los dos dispositivos: el servidor donde hemos instalado la aplicación y el cliente desde el que queremos conectar deben estar en la misma red, bien sea cableados al mismo router o conectados a la misma red WiFi.
Acceso desde la red local
Si este es el caso, la dirección que debemos escribir en el navegador del dispositivo cliente es la IP de la máquina donde está el servidor.
Cuando trabajamos en Windows, una de las maneras de averiguarla es abriendo un CMD (Símbolo del sistema) y escribir el comando
ipconfig

Consultada la IP del servidor, la dirección en la que estará disponible la plataforma Node-RED instalada será http://192.168.1.5:1880/.
Esto ya es un gran avance porque nos permite, por ejemplo, desplegar una aplicación en un miniordenador o placa de desarrollo y acceder a él desde nuestro teléfono móvil.
Y aún queda el truco final.
Lo que hemos conseguido está genial, pero qué pasa si salimos de casa, fuera de nuestra red doméstica, y queremos tener acceso al sistema de seguridad que hemos creado para verificar si las puertas de nuestra casa han sido abiertas.
Acceso desde el exterior
Pues el paso clave es el denominado Port Forwarding, o Apertura de Puertos en español. Si sois atentos, os habréis dado cuenta de que en todo momento las direcciones que estamos escribiendo en el navegador se componen de una IP y un puerto.
Pues bien, lo que tenemos que hacer es indicarle al router que debe permitir el acceso desde el exterior a la IP y al puerto concreto donde hemos alojado la aplicación web.
Para ello debemos abrir el portal de configuración de nuestro router. Para llegar a él escribimos en el navegador la dirección del router, que es lo que vemos en la imagen anterior como Puerta de enlace predeterminada.
Cada router es diferente y la navegación por su interfaz gráfica, así como sus menús y los términos empleados (la traducción al español puede ser un verdadero quebradero de cabeza), pero una vez nos familiarizamos con estos dispositivos no es difícil descubrir los pormenores de cualquiera que caiga en nuestras manos.
A modo de ejemplo, muestro capturas de pantalla de un par de ellos a los que tengo acceso.
En primer lugar, un CBN CG7486E.
Si vamos a Router > Advanced > Port Forwarding, podremos configurar a qué servicios queremos dar salida al exterior.

De manera análoga, en un router HUAWEI B315, tendremos lo mismo si vamos a Configuración > Seguridad > Aplicaciones Especiales (¿Por qué usa estos términos en español para esto? No sé, pero como os dije antes, cuando hayáis tocado 2 ó 3 routers, sabréis identificar el menú).

Para continuar, debemos conocer la IP de la máquina que ofrece el servicio y el puerto. De esta manera, en el ejemplo que hemos visto, estos serían la IP192.168.1.5 y el puerto 1880. A cada uno de los servicios a los que demos salida al exterior le asignaremos un puerto externo.
De esta manera, una vez completemos la configuración, la forma de acceder a nuestra aplicación web desde el exterior será escribiendo en el navegador la combinación IP externa:puerto.
¿IP externa? ¿Puerto externo? ¿Qué quiere decir?
Muy sencillo. Nuestro PC (o Raspberry, o Arduino…) tiene una IP privada dentro de la red local, pero esta IP no es vista desde el exterior. Nuestra red tiene una IP pública, proporcionada por nuestro ISP (Proveedor de Servicios de Internet). Podéis averiguar la vuestra en alguna página como https://www.whatsmyip.org/, por ejemplo. Para acceder a nuestra red, esa es la IP que habrá que escribir.
¿Y el puerto? Pues si escribimos la IP sin más, el puerto al que se dirigirá la petición por defecto es el 80, los servidores web habituales usan el puerto 80, pero hay otras aplicaciones que usan otros (como Node-RED con el 1880).
Ahora imaginemos que tenemos dos servidores Node-RED en nuestra red, ¿cómo discriminamos entre uno y otro si ahora todos los dispositivos de la red están identificados por la IP pública? Pues con el puerto externo. Así, podemos asignar a uno el 1880 y a otro el 1881, por ejemplo. De esta manera, todas nuestras aplicaciones estarán identificadas unívocamente.
En cuanto a los protocolo, tenemos la posibilidad de activar TCP y/o UDP. Nunca me he parado a reflexionar sobre esto y suelo activar los dos.
Ahora sí, ya tenemos acceso a nuestro sistema casero de seguridad o a cualquier otra app que despleguemos desde cualquier sitio.
Seguramente estéis echando en falta algo. Por ejemplo, ¿por qué hay que usar la IP esa tan fea? ¿No puedo conseguir un nombre más sencillo, como marca.com y compañía? Bueno, si quieres dar ese pasito, puedes indagarlo en internet. Sólo te daré una pista… DNS.
¿Qué router comprar?
Si te estás preguntando si esto vale para todos los routers, la respuesta es SÍ. Los que yo te he enseñado son los que proporciona cualquier proveedor de servicios en internet (Movistar, Vodafone etc.), pero uno que compres en cualquier sitio será muy muy similar.







0 comentarios