96598, Southpole
info@raskitoma.com

Como usar un dominio de GoDaddy con ip dinámica

Created with Sketch.

Tratando de configurar mi servidor personal, decidí que iba a utilizar un domino que tenía mal parqueado (bueno, de hecho se llama al estatus parked): raskitoma.com, es decir, este dominio.

La buena noticia: disponible, el nombre que me gusta, pagado por dos años.

La mala noticia: GoDaddy no soporta algún mecanismo de ip dinámica.

Para ir a la guía más abajo, hacer click aquí.

Qué es una IP dinámica?

Cuando Internet inició allá por 1969 con el nombre de ArpaNET, la necesidad y disponibilidad de direcciones IP no era un problema. Habían suficientes: de acuerdo a las características del protocolo IPv4, son un total del 
4294967296 (232)  direcciones, de las cuales unos casi 18 Millones están reservadas para redes privadas y 270 Millones para otros haberes (Multicast).

Ese número que parece tan grande lamentablemente con la popularización de Internet a las masas se ha visto apretado, por lo que existe el tema del  subnetting y redes privadas.  En resumen, la autoridad de internet IANA, asigna direcciones IP de manera territorial, etc. estos a su vez lo reciben cada uno de los proveedores por zonas y estos las reparten mediante NAT (Network Address Translation) a sus clientes finales. Y aquí no termina ya que dentro de nuestras casas u oficinas tenemos también un equipo que se encarga de hacer NAT y generar su propio subestrato de direcciones IP para los equipos conectados a él.

Yo tengo una IP pública y la quiero aprovechar

En ocasiones, y dependiendo del proveedor, uno tiene la suerte de tener una IP pública, es decir que tiene acceso a la red desde cualquier parte del mundo. Y es ahí cuando uno decide poner una cámara de vigilancia, control remoto de algún dispositivo, acceso a archivos personales, etc. O en mi caso, un servidor web personal.

Pero no siempre estas direcciones son fijas. Muchas veces el sistema las toma de un pool de direcciones y cada vez que nuestro router se reinicia (apagón de energía, reset por que si, etc.) es probable que nos asignen una nueva dirección.

Por esa razón existen los servicios de DNS Dinámico que permiten al router conectarse a los mismos para reportar la nueva dirección. Así, en lugar de recordar una serie de números, solo tenemos que ingresar un nombre como “miperro.dyndns.org” para acceder a nuestro equipo/servidor.

Pero cuando uno tiene un nombre comprado en la red, espera que un proveedor de servicios como GoDaddy tenga soporte para este tipo de tecnologías, pero a ellos no les interesa.

La Guía


Entonces llegamos a la guía para resolver este problema!

Cómo logro que GoDaddy se actualice automáticamente con mi dirección IP?

Requisitos:

  • Esta guía se asume que el script va a ser instalado en Linux tipo Ubuntu.  En mi caso fue en FreeBSD (Porque lo instalé en FreeNAS)
  • También se asume que saben que la dirección IP que el proveedor de su servicio les asigna es pública y dinámica. (Vamos… si es fija y están pagando por una, editen directamente el DNS en GoDaddy con esa dirección y ya!
  • Saben como entrar al administrador de DNS de dominio de GoDaddy para su dominio en particular.
  • Crear un Api Key de GoDaddy mediante la interfaz de desarrollador.
  • Acceso al servidor que vamos a tener siempre online, con soporte de superusuario (ya sea root o mediante sudo), para almacenar el script y ponerlo en el crontab.
  • Tener instalado curl en nuestro servidor.

Creación del Api Key

Cuando nos dirigimos a la interfaz de desarrollador de GoDaddy, hacemos click en el botón “Create New API Key”. Esto nos mostrará esta pantalla:

Importante:  poner un nombre para tener referencia, ya que podemos crear cuantos queramos y seleccionar en Enviroment(Ambiente): Production(Producción).

Hacemos click en Next y nos mostrará esto:

Si leyeron el mensaje, dice que copien el Secret porque no va a ser mostrado de nuevo…. Nunca… Jamás…. quedó entendido? Bueno, apunten El Key y el Secret, porque los usaremos después.

Preparación del script

Dentro de nuestro equipo, ya sea mediante SSH o localmente (espero que sea mediante SSH), ingresamos y nos colocamos en el home directory del user root.

Simplemente digitamos el siguiente comando:

nano updategodaddy.sh

Esto nos abrirá el editor de texto NANO tan amigable (porque detesto VI). Si no tienen instalado nano, ejecutar el siguiente comando;

Si es en linux tipo Debian (Ubuntu)

apt install nano

Si es en FreeBSD (como me toca a mi)

pkg install nano

Recuerden: si alguno de los comandos les reporta error de permisos es porque no tienen acceso como superusuario o root.  Antes de cada comando tendrán que anteponer el comando sudo y al presionar Enter el sistema les pedirá la contraseña.

Ahora si, el script:

Una vez que se ejecuta el programa nano, ingresamos lo siguiente, editando los campos de KEY, SECRET y su respectivo SUDOMINIO.COM:

#!/bin/bash

# This script is used to check and update your GoDaddy DNS server to the IP address of your current internet connection.
# Special thanks to mfox for his ps script
# https://github.com/markafox/GoDaddy_Powershell_DDNS
#
# First go to GoDaddy developer site to create a developer account and get your key and secret
#
# https://developer.godaddy.com/getstarted
# Be aware that there are 2 types of key and secret - one for the test server and one for the production server
# Get a key and secret for the production server
# 
#Update the first 4 variables with your information

key="AQUI INGRESAN EL KEY DE GODADDY QUE APUNTARON ARRIBA"
secret="AQUI INGRESAN EL SECRET DE GODADDY QUE APUNTARON ARRIBA"
 
result=$(curl -s -X GET -H "Authorization: sso-key $key:$secret" \
 "https://api.godaddy.com/v1/domains/SUDOMINIO.COM/records/A/@")

dnsIp=$(echo $result | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
 echo "dnsIp:" $dnsIp

# Get public ip address there are several websites that can do this.
ret=$(curl -s GET "http://ipinfo.io/json")

currentIp=$(echo $ret | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
 echo "currentIp:" $currentIp

 if [ "dnsIp" != $currentIp ];
 then
	echo "Ips are not equal"
	request='[{"data":"'$currentIp'","ttl":3600}]'
	#echo $request
	nresult=$(curl -X PUT "https://api.godaddy.com/v1/domains/SUDOMINIO.COM/records/A/@" \
 -H "accept: application/json" \
 -H "Content-Type: application/json" \
 -H "Authorization: sso-key $key:$secret" \
 -d $request )
# echo $nresult
fi

Una vez ingresado esto, presionamos Ctrl-X, Y y ENTER. Si nos muestra un mensaje de error, es porque talvez nos faltó hacer SUDO (superusuario)

Breves aspectos de seguridad

Proteger el script es lo menos que podemos hacer, asi que ejecutamos el siguiente comando:

chmod 700 updategodaddy.sh

Le damos características de ejecución con::

chmod +x updategodaddy.sh

Probando el script

Para probar el script basta escribir el siguiente comando:

./updategodaddy.sh

Si es en FreeBSD, debemos hacer esto primero:

#Instalar soporte para BASH con

pkg install bash

#y ejecutar el código con

bash updategodaddy.sh

Para confirmar que esto ha sido existoso nos vamos a la siguiente dirección:

https://api.godaddy.com/v1/domains/sudominio.com/records/A/@

y mostrará la siguiente información:

Que bien, ahí está mi dirección IP

Si la dirección que muestra esa página en el campo <data> es idéntica a la que ven al ingresar a Whatsmyip.com, dense una palmada en la cabeza.  Lo lograron!

Cómo automatizo este proceso?

Mediante la herramienta de cron automatizamos este proceso.

Para hacerlo fácil y como no me gusta usar VI, ejecutamos lo siguiente (para el caso de FreeBSD, para la distribución de ustedes, por favor averiguen la ruta de instalación de NANO:

setenv VISUAL /usr/local/bin/nano
setenv EDITOR /usr/local/bin/nano

Luego, ejecutamos el siguiente comando e ingresamos la instrucción a continuación:

crontab -e

Al abrirse el editor ingresamos esto:

0 */1 * * * bash /root/updategodaddy.sh

Presionamos Ctrl-X, Y y ENTER

Esto ejecutará el script cada hora lo cual es un valor normal y razonable. (poner */2 para cada 2 horas y asi sucesivamente).  Tomar en consideración que en mi caso el comando debe ser ejecutado primero bash y luego la ruta al script. Si tienen Linux que soporte bash, deben poner la ruta directa.

Consideraciones finales

Vale recalcar que seria ideal en la interfaz de manejo de DNS de dominio en GoDaddy ingresar una cadena de tipo CNAME con nombre www y con valor @, esto es para que haga referencia no sólo a sudominio.com, sino también a www.sudominio.com.

Enjoy!

Fuente: Markafox creador original(Powershell que lo pueden usar en windows) y modificaciones de BinnyChan (bash script). Gracias, Thank you, Arigato!



 

A %d blogueros les gusta esto: