Vida Digital, el estilo de la tecnología

DNS dinámico con CloudFlare

Regresar


CloudFlare

Las acciones rec_load_all y rec_edit del API Cliente CloudFlare y la ejecución automática del script Shell aquí descrito con ayuda del comando cron, permitirán actualizar dinámicamente el registro DNS que asocia el nombre de dominio del sitio web con la dirección IP que corresponde, cada vez que el proveedor de servicios de Internet (ISP) la cambie.


Palabras clave: CloudFlare, DDNS, IP



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.


Teléfono de oficina +52 55 1289 9802
Correo electrónico mercader@vidadigital.com.mx
Billetera Formas de pago
Entrega Politicas de envíos
Devolución Devoluciones y reembolsos

Acerca de Vida Digital, el estilo de la tecnología Vida Digital
Encuentranos en OferTip encuentra, compara y ahorra OferTip
Conoce nuestra Análisis y diseño Fábrica de software

Aviso de privacidad Aviso de privacidad