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.