Skip to content

Instantly share code, notes, and snippets.

@maagmirror
Last active February 9, 2024 17:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maagmirror/d9860cacc819d57c17316d6cd6b0f1c6 to your computer and use it in GitHub Desktop.
Save maagmirror/d9860cacc819d57c17316d6cd6b0f1c6 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Tu correo electrónico registrado en Cloudflare
CF_EMAIL="correo@gmail.com"
# Tu clave de API global de Cloudflare (asegúrate de cambiarla si aún no lo has hecho)
CF_API_KEY="api_key"
# La IP antigua que deseas actualizar
OLD_IP="1.1.1.1"
# La nueva IP
NEW_IP="1.1.1.1"
echo "Obteniendo lista de zonas..."
# Obtener la lista de zonas (dominios)
zones=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json")
# Para cada zona, obtén todos los registros DNS y actualízalos si es necesario
echo "$zones" | jq -r '.result[] | .id + " " + .name' | while read ZONE_ID ZONE_NAME; do
echo "Procesando zona: $ZONE_NAME ($ZONE_ID)"
# Procesar registros A
echo "Actualizando registros A en $ZONE_NAME..."
records=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=A" \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json")
echo "$records" | jq -r '.result[] | select(.content == "'$OLD_IP'") | .id + " " + .name' | while read RECORD_ID RECORD_NAME; do
echo "Actualizando registro A: $RECORD_NAME a $NEW_IP"
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"'$RECORD_NAME'","content":"'$NEW_IP'","ttl":1,"proxied":false}')
echo "Resultado de la actualización: $(echo "$update" | jq .success)"
done
# Procesar registros TXT que contienen la IP antigua
echo "Buscando registros TXT en $ZONE_NAME que contengan la IP $OLD_IP..."
records=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=TXT" \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json")
echo "$records" | jq -r '.result[] | select(.content | contains("ip4:'$OLD_IP'")) | .id + " " + .name + " " + .content' | while IFS=" " read RECORD_ID RECORD_NAME RECORD_CONTENT; do
echo "Encontrado registro TXT para actualizar: $RECORD_NAME con ID $RECORD_ID"
NEW_RECORD_CONTENT=$(echo "$RECORD_CONTENT" | sed "s/ip4:$OLD_IP/ip4:$NEW_IP/g")
echo "Actualizando registro TXT: $RECORD_NAME"
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json" \
--data '{"type":"TXT","name":"'$RECORD_NAME'","content":"'$NEW_RECORD_CONTENT'"}')
echo "Resultado de la actualización: $(echo "$update" | jq .success)"
done
done
echo "Proceso completado."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment