Vediamo come utilizzare Cloudflare per crearci un DDNS che verrà aggiornato ad ogni cambio IP del router Mikrotik
Contenuti
Requisiti
- Account free Cloudflare
- Dominio gestito (già configurato) da Cloudflare
- Router Mikrotik
- Connettività con IP Pubblico dinamico
Creazione Record DNS Cloudflare
Accediamo alla Dashboard di Cloudflare, clicchiamo su Siti Web e poi selezioniamo il nostro dominio, es: aclab.bid
Spostiamoci ora nella sezione DNS e clicchiamo su Aggiungi Record
Compiliamo le seguenti voci in questo modo:
- Tipo: A
- Nome: casa (questo sarà il sottodominio che utilizzeremo per il DDNS, che sarà appunto casa.aclab.bid)
- Indirizzo IPV4: 1.2.3.4 (utilizziamo un indirizzo fittizio, verrà poi aggiornato dallo script)
- Stato proxy: Disattiviamolo, deve essere impostato su Solo DNS
Clicchiamo su Salva
Creazione Token API Cloudflare
Dobbiamo ora creare un Token che ci permetterà di utilizzare le API di Cloudflare per aggiornare il nostro DDNS tramite il Mikrotik.
Andiamo sulla sezione Panoramica ed in fondo alla pagina sulla parte destra troveremo la voce Ottieni il token API
Anche se possiamo recuperarlo nei passaggi successivi, prendiamoci nota dell’ID Zona; ci servirà successivamente
Clicchiamo su Crea Token ed usiamo il modello Modifica DNS Zona
Impostiamo il modello come segue e poi clicchiamo su Vai al riepilogo e poi su Crea Token
Salviamoci il token generato perchè non sarà più recuperabile, ci servirà per lo script DDNS che configureremo sul nostro Mikrotik
Recuperare Record ID
Per utilizzare il nostro Mikrotik con DDNS Cloudflare ci occorre reperire un ultimo dato.
Si tratta del Record ID associato al record A (casa) che abbiamo creato precedentemente.
Possiamo utilizzare curl (se usate ambiente Linux) con il comando seguente(sostituite le voci evidenziate con i vostri dati):
curl https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records -H "Authorization: Bearer API_TOKEN"
Oppure potete usare il tool Online REQBIN ed inserire la stringa sopra e poi cliccare su RUN
Una volta ottenuto il risultato dell’interrogazione, dobbiamo cercare il valore “id” relativo al record DNS casa.aclab.bid
Da queste informazioni possiamo anche recuperare la Zone ID
Annotiamoci il Record ID
Configurare il Mikrotik con DDNS Cloudflare
Accediamo ora al nostro Mikrotik, andiamo in System -> Script e creiamo un nuovo script dove dentro incolleremo il seguente codice, personalizzando le variabili sotto con i propri dati:
- ZoneID: ID della vostra Zona
- RecordID: ID del vostro record DNS
- Token: Token API
- Email: Email utilizzata per accedere al vostro account Cloudflare
- DNSHost: Il vostro dominio/sottodominio definito in precedenza per il DDNS (es. casa.aclab.bid)
# Script: DDNS Cloudflare
#
# Description: Update Cloudflare A record when IP of main WAN change
# Version: 1
# RouterOS v.7.15.3
# Created: 15/09/2024
# Author: Andrea Caracciolo
# Website: https://andreacaracciolo.it
# Mail: info@andreacaracciolo.it
#------------------------------------------------------------------------------
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Change with your account details <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
# Your Zone ID
:local ZoneID "XXXXXXXXXXXXXXXXXXX0c89"
# Your Record ID
:local RecordID "XXXXXXXXXXXXXXXXXXb60a"
# Your API Token
:local Token "XXXXXXXXXXXXXXXXXXXXXXXYSTl"
# Your account email
:local Email "vostraemail@gmail.com"
# Your domain/subdomain to dynamically update
:local DNShost "casa.aclab.bid"
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
# Do not edit below
:local dateTime ([ /system clock get date ] . " " . [ / system clock get time ]);
:local currentIP ([/tool fetch url="https://ifconfig.me/ip" mode=https output=user as-value]->"data")
:local cloudflareDNSIP [:resolve $DNShost server=1.1.1.1];
:if ($currentIP != $cloudflareDNSIP) do={
# If the IP has changed, update the Cloudflare record
:local cfurl "https://api.cloudflare.com/client/v4/zones/$ZoneID/dns_records/$RecordID"
:local cfDataDNS "{\"type\":\"A\",\"name\":\"$DNShost\",\"content\":\"$currentIP\",\"ttl\":120,\"proxied\":false,\"comment\":\"last update: $dateTime\"}"
:local cfHeader "X-Auth-Email: $Email,Authorization: Bearer $Token,Content-Type: application/json"
:log info ("Updating Cloudflare record. Old IP: " . $cloudflareDNSIP . " New IP: " . $currentIP);
/tool fetch url=$cfurl http-data=$cfDataDNS http-header-field=$cfHeader http-method=put keep-result=no
}
Salvate lo Script cliccando su Apply e testiamone il funzionamento cliccando su Run Script
Se la procedura è andata a buon fine, troverete nei Log del Mikrotik la voce Updating Cloudflare record. Old IP: 1.2.3.4 New IP: XXX.XXX.XXX.135
Potete verificare nella Dashboard di Cloudflare che il record DNS creato in precedenza sarà valorizzato con il vostro IP Pubblico
Non vi resta che creare uno Scheduler sul Mikrotik che richiama lo script ogni 120 secondi
Se l’articolo Mikrotik con DDNS Cloudflare è stato di tuo gradimento esprimi il tuo voto