Acceder a un Arduino Yun desde internet con NO-IP

La aplicación Android que controlará al YUN, puede conectarse fácilmente al mismo utilizando su ip si estamos conectados a nuestra red doméstica. Sin embargo cuando no estemos conectados a la misma red que YUN, tendremos que utilizar otro mecanismo para poder acceder a el.

La solución a la que he llegado es una combinación de varios servicios gratuitos disponibles en internet.

  • Primero, configurar nuestro router doméstico para redirigir las peticiones al puerto 80 al YUN.
  • Para no tener que recordar nuestra ip externa utilizaremos el servicio NO_IP para mapear nuestra ip a un nombre de dominio que podamos recordar facilmente. El propio YUN se encargará mediante una tarea de cron, de mantener actualizada la IP externa en NO-IP en caso de nuestro proveedor de servicios la cambie.

Redirección del puerto 80 del router.

Los pasos a dar para configurar nuestro router para que redireccione todas las peticiones al puerto 80 de nuestra IP externa, al puerto 80 del YUN, dependerán de la marca y modelo de router que tengamos y de nuestro proveedor de internet.

Evidentemente yo solo tengo un router y un proveedor de internet en casa, por eso solo puedo documentar como se realiza la configuración para el router EchoLife HG553 de Vodafone.

Accedemos al panel de configuración, poniendo para ello en un navegador la ip de nuestro router. A menos que la hayas modificado, en el caso de Vodafone suele ser:

http://192.168.16.1

e introduciremos el usuario y la contraseña, que en este caso es «vodafone/vodafone». Entraremos en la consola de administración del router. En el menu vertical de la parte izquierda, navegamos a la opción Cortafuegos->Redireccion de puertos.

Se nos mostrará un formulario donde podemos añadir las redirecciones que nos hagan falta. En nuestro caso, seleccionamos el servicio HTTP de la lista, y en dirección ip local, introducimos la dirección IP del Arduino YUN. Los puertos se rellenan automáticamente. Al darle al botón añadir, la pantalla debería quedar como sigue:

Redireccion puertos echolife hg553 de vodafone
Redireccion puertos echolife hg553 de vodafone

Ya tenemos una redirección programada. Ahora, nuestro Arduino YUN debería ser accesible desde Internet tecleando en un navegador http://mi_ip_externa/. Puedes comprobarlo conectándote aun red diferente a tu red doméstica, con la tarifa de datos del móvil, etc.

Ya que estáis en la configuración del router, podéis consultar la dirección externa del mismo, en la pantalla de Inicio, en la sección WAN, dirección ip.

Para evitar tener que recordar de memoria nuestra dirección IP, y tener que comprobarla periódicamente (ya que los proveedores de internet suelen modificarlas, si bien es cierto que ahora menos que hace años), utilizaremos el proveedor de dns dinámica NO-IP, y el YUN se encargará de actualizar nuestra IP externa en NO-IP periódicamente.

Alta en NO-IP

El alta en no-ip no tiene gran complicación. Tenemos que proporcionar un correo electrónico y una contraseña, y decidir el hostname que queremos.  La clave está en la configuración posterior al proceso de alta.

En el menú principal, pulsamos en el botón «add host»:

Alta en no-ip paso 1
Alta en no-ip paso 1

Y se nos presentará el siguiente formulario, donde tendremos que introducir el hostname, seleccionar un nombre de los disponibles, e introducir la ip externa de nuestro router. Finalmente, pulsamos en Add Host.

Alta no-ip paso 2
Alta no-ip paso 2

En el ejemplo anterior, hemos creado una dns dinámica que nos permitir llegar a nuestro YUN desde internet utilizando una petición del tipo http://lo_que_quieras.redirectme.net en vez de http://99.99.99.99

Si tenéis un poco de paciencia e imaginación, podeis elegir un hostname que sea mas fácil de recordar que la IP de vuestro router. En cualquier caso este paso es necesario para prevenir perder el acceso al YUN si nuestro proveedor cambia nuestra ip externa.

¿Como se mantiene actualizada la ip externa en NO_IP?

La cuenta gratuita de NO-IP, caduca a los 30 días si no actualizamos nuestra IP en ese periodo de tiempo. Para evitar tener que mantener y actualizar nuestra IP manualmente en NO-IP, configuraremos el YUN para que lo haga por nosotros.

En primer lugar, añadiremos comando al inicio del sistema, que actualizará la IP en NO-IP cuando encendamos el YUN. Esto es necesario después de largos periodos de inactividad, por ejemplo, si en verano no utilizamos RHC y lo tenemos desconectado.

En segundo lugar, programaremos una tarea en el cron de Linino que cada 24 horas actualice la IP en NO-IP, haya cambiado o no, para mantener nuestra cuenta con vida. Veremos todo esto en el articulo de configuración e instalación de software en el YUN.

¿Como averiguamos nuestra IP Externa?

Existen muchos servicios gratuitos para averiguar una ip externa, pero el que mas me ha gustado por si simplicidad es IPEcho.net. Nos ofrece la posibilidad de hacer una petición HTTP y nos devuelve nuestra IP externa, de tal manera que en PHP es sencillo averiguarla utilizando el comando curl (podeis descargar y ver el codigo fuente completo en la seccion de descargas):

En el caso que la IP sea diferente a la que tiene NO_IP, podemos actualizarla desde PHP de la siguiente manera:

Resumiendo:

  • hemos configurado nuestro router para redireccionar las peticiones al puerto 80 desde fuera de nuestra red local al arduino YUN.
  • Hemos averiguado nuestra IP externa, y nos hemos dado de alta en el servicio NO_IP que nos proveerá de un servicio de dns dinámica.
  • Mediante el uso del servicio IPECHO, una tarea de cron, y peticiones HTTP, podemos mantener nuestra IP actualizada en NO-IP de una forma desatendida.

El siguiente paso es instalar configurar todo el software que necesita YUN para funcionar.

7 comentarios en “Acceder a un Arduino Yun desde internet con NO-IP”

  1. Hola!

    He intentado conectar mi arduino yun de forma remota a través del redireccionamiento de puertos, pero al momento de tratar de acceder desde otra red, obtengo el mensaje:

    SSH-2.0-dropbear_2011.54

    Se tiene que realizar algún tipo de configuración sobre el panel de configuración avanzada de luci?

    • Pues no se que puede significar ese mensaje, he googleado un poco y tampoco he encontrado nada que me lo aclare. La configuracion, deberia bastarte con la que indico en el articulo. Siento no poder ayudarte mas.

  2. Buenas a todos, tengo preparado el yun, le he asignado ip estatica, me he dado de alta en el servicio no ip, lo único que me falta es tener el sensor de temperatura y el rele.
    Conecto la app y me sale el mensaje que a otro forero (Bad response) compruebe la configuración de los webservices y la contraseña de root del yun.
    Yo creo que eso lo tengo todo bien en la configuración de la app.

    Espero que sea porque aún no detecta el sensor conectado.
    Respecto a lo que pone en este post, de añadir las lineas siguientes para actualizar la ip del router en el servicio de no ip:

    function retrieve_external_ip() {
    $i = do_Curl(«http://ipecho.net/plain»);
    return $i;
    }

    entiendo que esto se hace con el IDE añadiendo las dos cosas al scketch al principio de todo??? perdonad pero esto a mi se me atraganta un poco.
    al incluirlas en el sketch del proyecto y verificar me da el siguiente error:
    Arduino: 1.5.8 (Windows 7), Placa:»Arduino Yún»

    ControlTemperatura2.ino:3:1: error: stray ‘$’ in program
    ControlTemperatura2.ino:4:1: error: stray ‘$’ in program
    ControlTemperatura2.ino:3:1: error: ‘function’ does not name a type
    ControlTemperatura2.ino:2:1: error: ‘function’ does not name a type
    Error de compilación

    This report would have more information with
    «Show verbose output during compilation»
    enabled in File > Preferences.

    gracias a todos y especialmente al creador de esto.
    Jorge.

    • HOla Jorge,

      efectivamente, mientras no conectes el sensor de temperatura, el sketch no podra recoger la informacion correctamente el fallo que te esta dando probablemente sea por ello. Por otro lado, si no vas a usar nodos remotos, es conveniente retirar el codigo relativo a los nodos remotos ya que estaba dando problemas, en el foro creo que hablamos sobre ello.

      Lo de la funcion que actualiza la ip, en teoria deberia estar incluido ya en los diferentes scripts del proyecto, asi que si has usado los archivos descargados, no tendrias que añadir nada. De hecho esa funcion es una funcion de php no del sketch del arduino.

      Por ultimo te comento que es mejor que hagas estas consultas en el foro, que alli las leen todos, y en la seccion de comentarios del blog solo yo recibo la notificacion 🙂

      Un saludo

  3. Hola a todos.

    Tengo todo configurado y funcionando con la nueva versión, pero como en su día no necesitaba tener que actualizar la ip puesto que la tenía fija, no me preocupe en hacer que se actualizara automáticamente la ip externa.
    Pues como he dicho tengo todo funcionando, pero se me resiste este sencillo paso, puesto que busco y rebusco pero no encuentro el PHP con el código al que hace referencia este artículo, he buscado y rebuscado, claro está en la hora que es, me doy por vencido.

    Un empujón por favor.

    Gracias por todo.

    • Pues no me extraña que no encuentres el codigo para actualizar la IP, porque una de las principales novedades de la nueva version, es que ya no hace falta. Me explico, el tema de actualizar la IP en NO-IP y todo ese asunto, no es en absoluto necesario para la version 1.x de la app.

      La cosa funciona ahora de manera un poco diferente. Cada x tiempo el arduino yun envia un mensaje a tu movil usando el servicio de mensajeria de Google (GCM), con la ip de tu arduino. Algo parecido a recibir un whatsapp, para entendernos. Tu movil lo recibe, y actualiza la ip con la que trabaja. Esto en principio ocurre de manera transparente al usuario, es decir, no te das cuenta de nada, pero si quieres ver cuando te entran los mensajes con la ip de tu arduino, puedes activarlo en la configuración.

      Siento que hayas estado hasta las tres de la mañana buscando esto :S

      • Muchas gracias por la aclaración Roque, lo he comprobado y sí que llegan las nuevas ip’s al móvil. Piensas en todo.

        Un saludo, gracias.

Los comentarios están cerrados.