Proyecto domótica PARTE 4 - Acceder al servidor por medio de un DNS Dinámico

Dado que las empresas proveedoras de internet entregan una dirección IP dinámica (ya que cambia cada vez reiniciamos el router, o cada cierto periodo de tiempo que generalmente son máximo un par de días) por ello es necesario establecer un dominio que permita actualizarse en forma inmediata cuando nuestra dirección IP pública cambie.

El siguiente diagrama muestra la estrategia a utilizar, se creará un programa que se ejecutará en la Raspberry Pi cada 1 hora y verificará la dirección de IP pública, si detecta un cambio la actualizará en el dominio.

4.1 Comprar un dominio dinámico

Son muchas las empresas que venden dominios o subdominios dinámicos, las más populares son noip.com y dyn.com, también se pueden conseguir en forma gratuita, sin embargo es necesario estar validando constantemente la cuenta para continuar con el servicio, lo que con el tiempo se vuelve algo muy tedioso.

En mi caso opté por comprar un dominio en Google Domains, ya que los valores son muy económicos y permite crear subdominios dinámicos sin costo adicional (ahorrándome más de 20 dólares en comparación a noip.com).

4.1.1 Ingresar a la web de Google Domains: https://domains.google/



4.1.2 Buscar dominio y pagarlo
Esta etapa es muy simple, consiste en buscar un dominio disponible, agregarlo al carro y pagarlo, como lo hacemos con cualquier compra en internet.

De todas formas para mí un dominio es algo de cierta importancia, por lo que no compraría cualquier nombre, podemos aprovechar la oportunidad de nombrarlo como algún emprendimiento o un nombre de algún proyecto que nos interese sacar a la luz a futuro.

Acá les dejo un ejemplo del buscador, podemos buscar cualquier palabra y ordenar por precio o por las extensiones de dominio más usadas.





Ejemplo del carro de compras


4.1.3 Crear un subdominio y darle las propiedades de DNS dinámico.



Una vez que ya somos dueños de un dominio, ahora nos toca crear el subdominio que utilizaremos para el proyecto.


Primero, debemos ingresar a la configuración de nuestro dominio, para ello hacemos click en el menú mis dominios y luego sobre el dominio que utilizaremos.



Segundo, ingresar a las opciones de DNS y bajar hasta la sección Registros sintéticos.



Tercero, debemos agregar un registro de DNS dinámico, para ello seleccionar en el selector dicha opción, escribir el nombre deseado para nuestro subdominio y presionar el botón Añadir.



Por último, una vez añadido nuestro subdominio debemos obtener los datos necesarios para nuestro script de actualización de dirección de IP. Debemos expandir las opciones del DNS dinámico y copiar el nombre de usuario y contraseña que ahí se muestra.




4.2 Crear script de actualización de dirección IP

El script de actualización permitirá que nuestro servidor este siempre disponible desde cualquier conexión a internet, ya que lo configuraremos para que cada 1 hora esté llamando a un servicio de google que actualiza la dirección IP en el dominio. Para ello tenemos que crear un programa (script) que será ejecutado a través de Crontab.

4.2.1 Crear directorio para el script.

mkdir <nombre-directorio>

ejemplo en terminal

4.2.2 Entrar al directorio recién creado y crear archivo ejecutable.

cd <nombre-directorio>
nano google-dyndns-updater.sh


4.2.3 Pegar el contenido del script y actualizar datos del dominio.

#!/bin/bash

### Google Domains provides an API to update a DNS
### "Synthetic record". This script updates a record with 
### the script-runner's public IP address, as resolved using a DNS
### lookup.
###
### Google Dynamic DNS: https://support.google.com/domains/answer/6147083
### Synthetic Records: https://support.google.com/domains/answer/6069273

USERNAME=""
PASSWORD=""
HOSTNAME=""

# Resolve current public IP
IP=$( dig +short myip.opendns.com @resolver1.opendns.com )
# Update Google DNS Record
URL="https://${USERNAME}:${PASSWORD}@domains.google.com/nic/update?hostname=${HOSTNAME}&myip=${I>
curl -s $URL

ejemplo en terminal

4.2.4 Ejecutar script

Para ejecutar el script primero hay que agregar los permisos al archivo.
chmod +x google-dyndns-updater.sh

Una vez otorgado el permiso de ejecución se podrá correr el programa de la siguiente forma.
./google-dyndns-updater.sh

si no funciona la forma anterior puede ser necesario ejecutarlo desde el bourne shell mediante:

sh ./google-dyndns-updater.sh

Cuando el programa se ejecuta correctamente responde "good" y la "dirección IP pública" de nuestra conexión a internet.


Cuando se ejecuta y la dirección IP no ha cambiado responde "nochg (no change)" y la "dirección IP pública actual".




4.2.5 Agregar nuestro script a la ejecución de Crontab. Crontab es un archivo de texto que permite administrar tareas de Cron, donde cada linea lleva un formato especifico que permite definir el tiempo y ejecución a realizar.

EDITOR=nano crontab -e
Con este comando se abrirá el editor nano con el archivo de texto 

Pegar la siguiente linea
0 * * * * /home/ubuntu/software/google-dyndns/google-dyndns-updater.sh

Quedando:


4.2.6 Probar la configuración
Si hacemos un ping al dominio, debería responder la misma dirección IP que obtenemos al consultar nuestra dirección IP pública.


ping <subdominio.dominio.extension>

En las siguientes imágenes se puede observar que al hacer un ping al dominio desde terminal nos responde la misma IP que el sitio miip.cl






-> Siguiente parte ->


Indice

Parte 15) Resultados

Comentarios