Actualizar registros dns con API de IONOS

En esta ocasión, necesitaba mantener actualizado un registro DNS alojado en el proveedor IONOS (1and1). Esto puede ser muy útil cuando utilizas un servidor de pruebas alojado en tu casa o allí donde tengas una línea de internet con ip publica dinámica.

Buscando entre las diferentes maneras, he visto que IONOS pone a disposición de sus clientes, una api que permite editar parámetros en varios de sus servicios, entre ellos, los registros de las zonas DNS contratadas en IONOS.

Vamos a preparar un script que actualice la IP del registro dns que apunta a uno de los servidores, con el fin de tener siempre el dato actualizado si mi servidor cambia de ip publica.

Crear clave personal de API en IONOS

Primero necesitaremos crear una clave que nos permitirá autenticarnos en la api de IONOS.

Esta clave la podemos generar desde nuestro portal de Hosting API de IONOS. Si es la primera vez que accedemos, deberemos llamar al soporte (o vía chat) para solicitar que nos habiliten el acceso.

Desde este portal, es muy sencillo seguir los pasos para crear una clave nueva.

Una vez tenemos se han generado las claves, debemos tomar nota de ambos registros (prefijo publico y secreto).

Crear script para modificar el registro DNS de IONOS vía API

Para poder tratar mejor la información obtenida en formato JSON, os recomiendo instalar la herramienta jq en nuestro servidor. Esto lo podemos realizar mediante sudo apt install jq.

Primero, vamos a declarar 2 variables para incluir los datos de autenticacion de nuestra conexion a la API.

prefijo=b15ddb6120a24ffdbcd1d993fa253688
secreto=1CM1LQMGsTwAgFxlOwZV-qzRtSzSr8Tegryg0b_-i77-9xtxwe6k95SNijem9xsBrh92CIZm8jtLFEfB5m5SoA

Vamos a necesitar varios valores para poder editar nuestro registro DNS y el único modo de conseguir estos datos es mediante la propia API. Primero, necesitamos conocer 2 valores, el ID de la zona y el ID del registro. Vamos a ver como podemos sacar esta información:

ID de la zona

Para poder sacar el ID de nuestra zona, vamos a utilizar el siguiente comando

curl -X GET "https://api.hosting.ionos.com/dns/v1/zones/" -H "X-API-Key: $prefijo.$secreto" | jq '.[]'

Si todo ha funcionado como esperamos, veremos un listado de registros que corresponden a todos los dominios DNS que tenemos contratados. De este listado, debemos buscar el dominio del cual queremos modificar el registro (mirando en el campo name) y anotar la clave del campo id.

ID del registro

Para recuperar el ID del registro, utilizaremos el siguiente script.

idDeLaZona=b21af289-a08f-11eb-8bc3-0a5864445239
curl -X GET "https://api.hosting.ionos.com/dns/v1/zones/$idDeLaZona" -H "X-API-Key: $prefijo.$secreto" | jq '.[]'

En resumen, definimos una nueva variable para añadir el ID de la zona, que hemos recuperado en el punto anterior, y listamos todos los registros DNS de esta zona.

De este listado, aplicamos la misma lógica que en el anterior punto. Buscamos en el campo name el registro dns a modificar (es importante tenerlo ya creado, si no es así, crearlo desde el portal de my.ionos.es) y apuntamos el registro en el campo id.

Actualizar registro DNS de IONOS vía API

Desde nuestro servidor, crearemos un fichero con el siguiente contenido.

#!/bin/bash
myIP=$(curl ifconfig.me/ip) #Extraemos la IP Publica del servidor y la añadimos a una variable
FILE=/tmp/myIP.txt


actualiza_ip () {
        prefijo=b15ddb6120a24ffdbcd1d993fa253688
        secreto=1CM1LQMGsTwAgFxlOwZV-qzRtSzSr8Tegryg0b_-i77-9xtxwe6k95SNijem9xsBrh92CIZm8jtLFEfB5m5SoA

        idDeLaZona=b21af289-a08f-11eb-8bc3-0a5864445239
        idDelRegistro=33311870-96a0-2e89-94aa-413d385dc2ad

        curl -X PUT "https://api.hosting.ionos.com/dns/v1/zones/$idDeLaZona/records/$idDelRegistro" -H "X-API-Key: $prefijo.$secreto" -H 'Content-Type: application/json' -d '{"disabled": false,"content": "'$myIP'","ttl": 300,"prio": 0}'

        echo Mi IP se ha actualizado a: $myIP
        echo $myIP > $FILE

}


if test -f "$FILE";
then
        if [ "$myIP" == "$(cat $FILE)" ];
        then
                echo La IP no ha cambiado. No es necesario actualizar la IP. La IP sigue siendo $myIP
        else
                actualiza_ip
        fi
else
        actualiza_ip
fi

Este script extraerá la IP pública de nuestra conexión y, en caso de que esta haya cambiado, mandará la actualización en nuestro registro dns. Si queremos mantener el registro actualizado, podemos incluir nuestro script en el crontab del sistema.

Una vez ejecutado el script, podemos comprobar desde el portal de IONOS o ejecutando un ping al nombre del dominio, que el registro se ha actualizado correctamente. Además, en caso de algún problema durante la actualización del registro, se nos mostraría un mensaje de error, indicando el motivo, en la salida del script.

Para mas información, podéis ir a la web oficial de IONOS donde podréis obtener mas documentación en la ayuda para desarrolladores:

https://developer.hosting.ionos.es/docs/getstarted

https://developer.hosting.ionos.es/docs/dns

Déjame en comentarios si te ha sido útil esta publicación o si tienes alguna duda.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.