
🚀 Come configurare il DNS dinamico tramite Cloudflare su Raspberry Pi
Il tuo home server su Raspberry Pi funziona 24 ore su 24, ma il provider cambia l'IP pubblico ogni giorno. Bussare manualmente al nuovo indirizzo è un lavoro da archeologo. E DynDNS e No-IP ti bombardano di email: «accedi una volta al mese o disattiveremo il tuo account gratuito».
A quanto pare, Cloudflare può funzionare come DNS dinamico, senza email promozionali, senza limiti di frequenza di aggiornamento e senza sottodomini di terze parti. Hai già un dominio su Cloudflare? Allora ti bastano un token API e uno script bash su Raspberry Pi. In mezz'ora imposti un meccanismo che aggiorna automaticamente il record A ogni volta che l'IP cambia.
E se non vuoi solo «entrare nella console», ma pubblicare un vero sito di sviluppo, anche su WordPress, questa configurazione diventa la base: ottieni accesso al tuo server da qualsiasi parte del mondo tramite un sottodominio comodo come home.example.com.
💡 Panoramica rapida:
- Passo 1: Crea un record A nel pannello DNS di Cloudflare con IP di test
0.0.0.0 - Passo 2: Ottieni un token API (non una chiave globale, i token sono più sicuri e revocabili con un clic)
- Passo 3: Esegui uno script bash che interroga l'IP attuale e lo invia alle API di Cloudflare
- Passo 4: Imposta un cron job e dimentica per sempre gli aggiornamenti manuali
Cosa ti serve
- Un dominio aggiunto a Cloudflare e gestito tramite i loro DNS
- Raspberry Pi (qualsiasi modello va bene, Pi 3, Pi 4, Pi Zero 2 W) con Raspbian o Raspberry Pi OS
- IP locale statico per Raspberry Pi (configurato nella GUI del sistema operativo o via router)
- Accesso al terminale di Pi via SSH o direttamente
Quali servizi ospiti esattamente su Raspberry Pi e come inoltri le porte sul router è un argomento a parte, oltre lo scopo di questo tutorial. Lo schema funziona in modo identico sia per un server web con WordPress, per l'accesso VNC o per una telecamera di sorveglianza.
1. Crea un record A per il tuo home server
Scegli un sottodominio, diventerà il tuo punto di ingresso permanente. Io uso home, ma puoi sceglierne uno qualsiasi: dev, lab, cam.
- Vai alla dashboard di Cloudflare e seleziona il tuo dominio
- Vai alla scheda DNS
- Clicca Aggiungi record, tipo A
- Nel campo Nome inserisci il sottodominio (ad esempio,
home) - Nel campo Indirizzo IPv4 address specifica
0.0.0.0, temporaneamente, per testare lo script più tardi - Lascia Stato proxy disattivato (cloud grigia), caching e proxy non servono per il DDNS

Il record è pronto. Ora procuriamoci la chiave di accesso API.
2. Ottieni il token API di Cloudflare
In passato tutte le guide suggerivano la chiave API globale, che dà accesso completo a tutti i domini dell'account. Questo è pericoloso: se la chiave viene compromessa, viene compromesso tutto. Ora Cloudflare raccomanda i token API con permessi granulari. Un token può essere limitato a un dominio e a un'azione specifici e, in caso di compromissione, revocato con un clic.
- Nella dashboard di Cloudflare vai a: Il mio profilo → Token API
- Clicca Crea token
- Seleziona il modello Modifica DNS di zona (o creane uno personalizzato)
- Nella sezione Risorse di zona specifica il dominio particolare per cui stai configurando il DDNS
- Clicca Continua al riepilogo → Crea token
- Copia il token, viene mostrato una volta sola
Il token ha l'aspetto di una lunga stringa che inizia con cfut_. Conservalo in un posto sicuro, lo script su Raspberry Pi ne avrà bisogno tra un minuto.
3. Script di aggiornamento automatico su Raspberry Pi
Connettiti al Raspberry Pi via SSH o apri il terminale. Creiamo una cartella per lo script:
1 mkdir -p ~/cf && cd ~/cf
Ora, lo script vero e proprio. Crea il file cloudflare-ddns.sh:
1 nano ~/cf/cloudflare-ddns.sh
Copiate il seguente codice al suo interno:
1 #!/bin/bash 2 3 ## Settings (replace with yours) 4 AUTH_EMAIL="[email protected]" 5 API_TOKEN="cfut_your_token" 6 ZONE_NAME="example.com" 7 RECORD_NAME="home.example.com" 8 9 ## Get current public IP 10 CURRENT_IP=$(curl -s https://api.ipify.org) 11 12 ## Get Zone ID 13 ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE_NAME" \ 14 -H "Authorization: Bearer $API_TOKEN" \ 15 -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4) 16 17 ## Get Record ID and current record IP 18 RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \ 19 -H "Authorization: Bearer $API_TOKEN" \ 20 -H "Content-Type: application/json") 21 22 RECORD_ID=$(echo "$RECORD" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4) 23 DNS_IP=$(echo "$RECORD" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4) 24 25 ## Update record if IP changed 26 if [ "$CURRENT_IP" != "$DNS_IP" ]; then 27 UPDATE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ 28 -H "Authorization: Bearer $API_TOKEN" \ 29 -H "Content-Type: application/json" \ 30 --data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":120}") 31 32 echo "$(date): IP changed from $DNS_IP to $CURRENT_IP — updated" >> ~/cf/cloudflare-ddns.log 33 else 34 echo "$(date): IP unchanged ($CURRENT_IP)" >> ~/cf/cloudflare-ddns.log 35 fi
Sostituite le quattro variabili nel blocco "Settings" con i vostri valori reali. Email, la stessa usata per il login a Cloudflare. Token, quello copiato al punto 2. Zone name, il vostro dominio senza http://. Record name, il sottodominio completo.
Salvate il file (Ctrl+O, Invio, Ctrl+X in nano) e rendetelo eseguibile:
1 chmod +x ~/cf/cloudflare-ddns.sh
Eseguitelo manualmente per verificare:
1 ~/cf/cloudflare-ddns.sh
Se tutto è configurato correttamente, andate nel pannello DNS di Cloudflare: l'indirizzo IP del record A dovrebbe passare da 0.0.0.0 al vostro IP pubblico reale. Il log viene scritto in ~/cf/cloudflare-ddns.log, controllatelo se qualcosa non funziona.
4. Automazione via cron
L'avvio manuale serve solo per i test. Da qui in poi subentra cron.
1 crontab -e
Se il sistema vi chiede di scegliere un editor, selezionate nano (di solito è il numero 2, è il più semplice). Aggiungete una riga in fondo al file:
1 0 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh
Questa voce esegue lo script ogni 6 ore. Anche se l'ISP cambia IP una volta ogni pochi mesi, una finestra di sei ore è un compromesso ragionevole tra tempestività e carico sulle API.
Se volete una frequenza maggiore, sostituite con */30 * * * * (ogni 30 minuti). Ricordate però: il limite gratuito delle API Cloudflare è di 1200 richieste al minuto, quindi anche chiamate ogni minuto non sono un problema per un singolo dominio.
Salvate (Ctrl+X, S, Invio). Cron rileverà le modifiche automaticamente, non serve riavviare il servizio. Per aiutarvi a decifrare gli asterischi: crontab.guru.
Breve video guida sullo stesso tema, di NetworkChuck, con dimostrazione su un vero Raspberry Pi e spiegazione di ogni passaggio:
Cosa fare se lo script non trova Zone ID o Record ID
A volte l'API non restituisce gli identificativi in automatico, specialmente se l'account ha molti domini o record con nomi simili. In tal caso, recuperateli manualmente:
- Andate nella dashboard Cloudflare, selezionate il dominio, scheda DNS
- Aprite gli strumenti di sviluppo del browser (
F12→ scheda Network → sotto-scheda XHR) - Cliccate sull'icona a forma di nuvola accanto al vostro record A, nel pannello network comparirà una richiesta all'API
- Clic destro su di essa → Copy → Copy link address (Chrome) o Copy URL (Firefox)
- Nel link copiato trovate la parte dopo
zones/, che è lo Zone ID, e dopodns_records/, che è il Record ID
Sostituiteli nelle variabili ZONE_ID e RECORD_ID dello script e tutto funzionerà. Assicuratevi che la nuvola nel pannello DNS sia grigia (proxy disattivato): Cloudflare non deve mettere in cache l'IP per il DDNS.
⁉️🤔 Domande frequenti
È obbligatorio usare un API token invece della chiave globale?
La chiave globale funziona ancora, ma il token è l'opzione moderna e sicura. Un token può essere limitato a un solo dominio e ai diritti di modifica DNS. La chiave globale dà accesso all'intero account. Se lo script o il Pi vengono compromessi, basta revocare il token, mentre con la chiave dovreste cambiarla ovunque.
In cosa si differenzia questo approccio da DuckDNS o No-IP?
I servizi DDNS di terze parti forniscono un sottodominio di terzo livello come
myhome.duckdns.org. L'approccio Cloudflare usa il vostro dominio personale (home.example.com), ha un aspetto più professionale, non dipende da un servizio esterno e non richiede accessi mensili per conferma di attività. Inoltre avete accesso all'intero ecosistema Cloudflare: protezione DDoS, certificati SSL, regole firewall.
Devo aprire le porte sul router?
Sì, per raggiungere il Raspberry Pi da internet. Il DDNS garantisce solo che il dominio punti sempre all'IP attuale. Ma perché il traffico da quell'IP arrivi al Pi, dovete configurare il port forwarding sul router per le porte necessarie (22 per SSH, 80/443 per il web e così via).
Cosa fare se il Raspberry Pi è dietro NAT dell'ISP?
Alcuni ISP usano Carrier-Grade NAT (CGNAT), in tal caso non avete un IP pubblico vostro e il DDNS non serve. Soluzione: richiedete un IP bianco all'ISP (spesso gratuito su richiesta) oppure usate Cloudflare Tunnel, che crea un canale crittografato dal Pi a Cloudflare senza bisogno di port forwarding.
Quanto costa questa soluzione?
Zero. Il DNS Cloudflare è gratuito per un numero illimitato di record A. Il Raspberry Pi lo avete già comprato. Il consumo energetico di un Pi 3/4 sotto carico è di circa 3-5 W, che su base annua si traduce in circa 25-35 €.
Posso aggiornare più sottodomini?
Sì, duplicate i blocchi con
RECORD_NAMEeDNS_IPnello script per ogni sottodominio oppure racchiudete la logica in un ciclo su un array di nomi.
DNS dinamico su Cloudflare: cosa configurare nel 2026
Lo schema con API Cloudflare e cron è sopravvissuto a diverse generazioni di Raspberry Pi e non ha perso rilevanza. Ottieni un tuo sottodominio, non dipendi da provider DDNS di terze parti e non spendi un centesimo.
Se vuoi andare oltre, dai un'occhiata alle immagini Docker già pronte: oznu/cloudflare-ddns aggiorna l'IP ogni 5 minuti e si configura tramite variabili d'ambiente. Per chi preferisce Python, c'è aribasadme/rpi-cloudflare-ddns, pensata specificamente per Raspberry Pi.
La cosa principale che hai ottenuto oggi: il Raspberry Pi ora è accessibile da qualsiasi parte del mondo a un indirizzo permanente. E questa è la base per qualsiasi progetto: da un server di sviluppo WordPress al tuo cloud storage personale.



