Podremos verificar si contamos con los servicios de cron y curl por medio de los comandos
crontab -l
curl --help
Si la respuesta es command not found, entonces podemos instalarlos de la siguiente forma
sudo apt-get install cron -y
sudo apt-get install curl -y
En caso contrario ya se encuentran instalados en nuestro sistema.
Consultar registros DNS de un dominio rec_load_all
Para obtener los registros DNS de un determinado nombre de dominio debemos realizar un POST sobre la URL https://www.cloudflare.com/api_json.html con los parámetros
- a, la acción a realizar en este caso
rec_load_all
- tkn, La API key disponible en la página de su cuenta CloudFlare
- email, Correo electrónico asociado a la API key en la página de su cuenta CloudFlare
- z, nombre de dominio del que se obtendrán los registros DNS
Ejemplo de un POST con la acción rec_load_all para obtener los registros de tudominio.com
curl https://www.cloudflare.com/api_json.html \
-d 'a=rec_load_all' \
-d 'tkn=tu_cloudflare_api_key' \
-d 'email=tu@tudominio.com' \
-d 'z=tudominio.com'
La ejecución del comando previo nos dará como respuesta un mensaje en formato JSON (Notación de objeto JavaScript) que podremos analizar mejor con ayuda de una herramienta como el Editor JSON en línea.
Debemos obtener el valor del atributo client_id en el registro tipo "A" pues es necesario como parámetro para la siguiente acción.
Editar registro rec_edit
Para editar un registro DNS determinado de nuestro nombre de dominio debemos realizar un POST sobre la URL https://www.cloudflare.com/api_json.html con los parámetros
- a, la acción a realizar en este caso
rec_edit
- tkn, La API key disponible en la página de tu cuenta CloudFlare
- email, Correo electrónico asociado a la API key en la página de tu cuenta CloudFlare
- z, nombre de dominio del que se obtendrán los registros DNS
- type, tipo de registro DNS a modificar (A, CNAME, MX, TXT, SPF, AAAA, NS, SRV o LOC)
- id, identificador del registro DNS, obtenido por medio de la acción rec_load_all
- name, nombre de registro DNS
- content, contenido del registro DNS
- ttl, tiempo de vida del registro en segundos (1 = Automático o un valor entre 120 y 86,400 segundos)
Ejemplo de un POST con la acción rec_edit editar un registro de Tipo "A".
curl https://www.cloudflare.com/api_json.html \
-d 'a=rec_edit' \
-d 'tkn=tu_cloudflare_api_key' \
-d 'email=tu@tudominio.com' \
-d 'z=tudominio.com' \
-d 'id=197122144' \
-d 'type=A' \
-d 'name=tudominio.com' \
-d 'ttl=1' \
-d "content=direccion_ip_publica"
Para obtener los dns_record_id de cloudflare
curl -X GET 'https://api.cloudflare.com/client/v4/zones/tu_cloudflare_zone_id/dns_records' \
-H 'X-Auth-Email: tu@tudominio.com' \
-H 'X-Auth-Key: tu_cloudflare_api_key' \
-H 'Content-Type: application/json'
Script Shell de actualización de IP
A continuación el script Shell que realiza la actualización de la IP con la ayuda del comando previamente descrito.
#!/bin/sh
IP_ACTUAL=`curl ifconfig.co`
IP_PREVIA=`cat /var/ip_publica.txt`
if [ "$IP_ACTUAL" = "$IP_PREVIA" ]
then
echo "La IP pública no ha cambiado."
else
curl -X PUT 'https://api.cloudflare.com/client/v4/zones/tu_cloudflare_zone_id/dns_records/tu_cloudflare_dns_record_id$
-H 'X-Auth-Email: tu@tudominio.com' \
-H 'X-Auth-Key: tu_cloudflare_api_key' \
-H 'Content-Type: application/json' \
--data '{
"type": "A",
"name": "vidadigital.com.mx",
"content": "$IP_ACTUAL",
"proxied": true
}'
curl -X PUT 'https://api.cloudflare.com/client/v4/zones/tu_cloudflare_zone-id/dns_records/tu_cloudflare_dns_record_id$
-H 'X-Auth-Email: tu@tudominio.com' \
-H 'X-Auth-Key: tu_cloudflare_api_key' \
-H 'Content-Type: application/json' \
--data '{
"type": "A",
"name": "www.vidadigital.com.mx",
"content": "$IP_ACTUAL",
"proxied": true
}'
echo "IP pública actualizada."
echo $IP_ACTUAL > /var/ip_publica.txt
fi
Configuración de cron
Para concluir la configuración de cron, a fin de ejecutar el Script Shell cada 10 minutos que garantice que el sitio web este nuevamente disponible como máximo 10 minutos después de que la IP pública sea cambiada por el proveedor de servicios de Internet.
Debe crearse el script actualizar_ip_cloudflare.sh en la carpeta /opt, definirlo como propio y darle privilegios de ejecución.
sudo chown $USER:root /opt/actualizar_ip_cloudflare.sh
chmod 0750 /opt/actualizar_ip_cloudflare.sh
Planifique la ejecución del Script Shell en cron y redirija la salida de mensajes y errores estandar al archivo /opt/actualizar_ip_cloudflare.log.
crontab -e
*/10 * * * * /opt/actualizar_ip_cloudflare.sh > /opt/actualizar_ip_cloudflare.log 2>&1
Puede realizar pruebas, puede modificar el valor de la dirección IP en el archivo /var/ip_publica.txt y revisar después de 10 minutos.