MikroTik + Cloudflare: Actualiza tu IP Dinámica con un Script Automatizado

Si tienes una conexión a Internet con una IP dinámica y utilizas Cloudflare como tu proveedor de DNS, es posible que necesites actualizar manualmente la IP de tu dominio cada vez que cambie. Para automatizar este proceso, puedes configurar un script en tu MikroTik que actualice automáticamente la IP en Cloudflare cuando esta cambie.

En esta guía, te explicaré paso a paso cómo hacerlo. Hay que tener en cuenta que todas las pruebas se han realizado en la versión 7.17 de RouterOS.


Requisitos previos

Antes de comenzar, asegúrate de tener lo siguiente:

  1. Un router MikroTik con acceso a la terminal (WinBox, SSH o WebFig).
  2. Una cuenta en Cloudflare con un dominio configurado.
  3. El Zone ID y API Token de Cloudflare.
    • El Zone ID lo encuentras en la página de configuración de tu dominio en Cloudflare.
    • El API Token lo generas en la sección de API Tokens de tu cuenta de Cloudflare. Asegúrate de que tenga permisos para editar registros DNS.
  4. El ID del registro DNS que deseas actualizar.

Paso 1: Crear el script en MikroTik

El siguiente script se encargará de verificar si la IP de tu conexión a Internet ha cambiado y, en caso afirmativo, actualizará el registro DNS en Cloudflare. Además, el script inicializa automáticamente la variable que almacena la última IP conocida, por lo que no es necesario hacerlo manualmente.

  1. Conéctate a tu MikroTik (WinBox, SSH o WebFig).
  2. Ve a System > Scripts y haz clic en el botón «New» para crear un nuevo script.
  3. Asigna un nombre al script, por ejemplo, update-cloudflare-dns.
  4. Copia y pega el siguiente código en el campo Source:
:local cloudflareApiToken "tu_api_token_de_cloudflare"
:local cloudflareZoneId "tu_zone_id_de_cloudflare"
:local dnsRecordId "el_id_del_registro_dns"
:local dnsRecordName "tudominio.com"
:local dnsRecordType "A"
:local newIpAddress [/ip address get [find where interface=pppoe-out1] address]

# Extraer la IP sin la máscara
:local newIpAddress [:pick $newIpAddress 0 [:find $newIpAddress "/"]]

# Obtener la última IP conocida desde /system note
:local lastIpAddress [/system note get value-name=note]

# Mensaje de depuración: Mostrar la IP actual y la última IP conocida
:log info "IP actual: $newIpAddress, Última IP conocida: $lastIpAddress"

# Si /system note está vacío, inicializarlo con la IP actual
:if ([:len $lastIpAddress] = 0) do={
    /system note set note=$newIpAddress
    :log info "Inicializando /system note con la IP: $newIpAddress"
    :local lastIpAddress $newIpAddress
}

# Comparar la IP actual con la última IP conocida
:if ($newIpAddress != $lastIpAddress) do={
    :log info "La IP ha cambiado. Actualizando Cloudflare..."

    # URL de la API de Cloudflare
    :local cloudflareApiUrl "https://api.cloudflare.com/client/v4/zones/$cloudflareZoneId/dns_records/$dnsRecordId"

    # Datos para enviar a la API
    :local jsonData "{\"type\":\"$dnsRecordType\",\"name\":\"$dnsRecordName\",\"content\":\"$newIpAddress\",\"proxied\":true}"

    # Mensaje de depuración: Mostrar los datos que se enviarán a la API
    :log info "Enviando datos a Cloudflare: $jsonData"

    # Realizar la solicitud HTTP PUT
    :local result [/tool fetch url=$cloudflareApiUrl http-method=put http-data=$jsonData http-header-field="Authorization: Bearer $cloudflareApiToken" output=user]

    # Mensaje de depuración: Mostrar el resultado de la solicitud HTTP
    :log info "Resultado de la solicitud HTTP: $result"

    # Verificar el resultado de la API
    :if ([:len $result] > 0 && [:find $result "success\":true"] > 0) do={
        :log info "Cloudflare DNS actualizado correctamente con la IP: $newIpAddress"
        # Guardar la nueva IP en /system note
        /system note set note=$newIpAddress
    } 
#else={
#     :log warning "Error al actualizar Cloudflare DNS. Respuesta de la API: $result"
#  }
} else={
    :log info "La IP no ha cambiado. No se requiere actualización."
}

Haz clic en Apply y luego en OK para guardar el script.


Paso 2: Programar la ejecución automática

Para que el script se ejecute automáticamente cada 5 minutos y verifique si la IP ha cambiado:

  1. Ve a System > Scheduler.
  2. Haz clic en el botón «+» para crear un nuevo programador.
  3. Asigna un nombre, por ejemplo, cloudflare-dns-update.
  4. En el campo Interval, ingresa 00:05:00 (5 minutos).
  5. En el campo On Event, ingresa el siguiente comando: /system script run update-cloudflare-dns
  6. Haz clic en Apply y luego en OK.

Paso 3: Verificar el funcionamiento

  1. Ejecuta el script manualmente para asegurarte de que funciona:
    • Ve a System > Scripts.
    • Selecciona el script update-cloudflare-dns y haz clic en Run Script.
  2. Revisa los logs para verificar que todo esté funcionando correctamente:
    • Ve a Log y busca mensajes como:
      • Cloudflare DNS actualizado correctamente con tu IP pública.
      • La IP no ha cambiado. No se requiere actualización.
  3. Revisa que en el panel de Cloudflare la IP se ha actualizado correctamente.

Consideraciones adicionales

  • Interfaz de red: Asegúrate de que la interfaz pppoe-out1 en el script sea la correcta. Si usas otra interfaz, cámbiala por el nombre correspondiente.
  • API Token de Cloudflare: Asegúrate de que el token tenga permisos para editar registros DNS.
  • Registro DNS en Cloudflare: Verifica que el registro DNS que deseas actualizar esté correctamente configurado en Cloudflare.

Conclusión

Con este script, has automatizado la actualización de la IP en Cloudflare cada vez que cambie tu dirección IP pública. Esto es especialmente útil si tienes una conexión a Internet con IP dinámica y deseas mantener tu dominio siempre accesible.

Scroll al inicio
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

WordPress Appliance - Powered by TurnKey Linux