Automatizza gli aggiornamenti IP dinamici per il tuo dominio con Cloudflare e Bash Script
In un mondo in cui gli indirizzi IP statici rappresentano spesso una spesa aggiuntiva, gli indirizzi IP dinamici possono rendere la gestione dei domini una sfida. Se il tuo ISP ti assegna un indirizzo IP dinamico, mantenere aggiornato il tuo dominio può essere una seccatura. Questo tutorial ti guiderà attraverso la creazione di uno script Bash semplice ma efficace che utilizza l'API di Cloudflare per aggiornare il record DNS del tuo dominio ogni volta che il tuo IP cambia. Con questo script puoi assicurarti che il tuo dominio punti sempre al tuo attuale indirizzo IP dinamico, anche senza un IP statico.
In questo tutorial imparerai:
- Come ottenere un token API Cloudflare per la gestione dei DNS
- Come trovare l'ID della zona e l'ID del record DNS
- Come creare uno script Bash per aggiornare un record DNS con il tuo IP dinamico
- Come migliorare lo script per aggiornare solo quando cambia l'indirizzo IP
Guida passo passo per mappare il tuo dominio su un IP dinamico
Segui i passaggi seguenti per creare uno script Bash che aggiorni automaticamente il tuo record DNS Cloudflare ogni volta che il tuo IP cambia. Questo script è ideale per server domestici, desktop remoti o qualsiasi situazione in cui un indirizzo IP dinamico deve riflettersi in modo coerente nel DNS.
Ottieni il token API di Cloudflare: per interagire con l'API di Cloudflare, hai bisogno di un token API con le autorizzazioni per modificare i record DNS.
- Accedi a Cloudflare: visita la dashboard di Cloudflare e accedi con le credenziali del tuo account.
- Vai a Token API: vai a Il mio profilo e seleziona Token API.
- Crea un nuovo token: fai clic su Crea token e scegli il modello Modifica DNS zona.
- Personalizza il token: specifica il dominio che desideri che il token gestisca e fai clic su Crea token.
- Copia il token: copia il token API generato da utilizzare nel tuo script.
Copia il token generato. Questo verrà utilizzato nel tuo script per autenticarti con Cloudflare.
Trova l'ID di zona e l'ID del record DNS: successivamente, avrai bisogno dell'ID di zona del tuo dominio e dell'ID del record DNS che desideri aggiornare.
$ curl -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" \
-H "Authorization: Bearer YOUR_CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json"
Questo comando restituirà l'ID zona per example.com
. Sostituisci example.com
con il tuo nome di dominio effettivo. Nota il campo id
, che è il tuo ID zona.
Per ottenere il DNS_RECORD_ID
, utilizza:
$ curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records?name=example.com" \
-H "Authorization: Bearer YOUR_CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json"
Cerca il campo id
sotto il record DNS desiderato. Questo è il tuo DNS_RECORD_ID
.
Crea uno script Bash di base per aggiornare il record DNS: con gli ID e il token necessari, puoi creare un semplice script Bash per aggiornare il record DNS con il tuo IP corrente.
#!/bin/bash
CLOUDFLARE_API_TOKEN="your_api_token_here"
ZONE_ID="your_zone_id_here"
DNS_RECORD_ID="your_record_id_here"
DNS_RECORD_NAME="example.com"
DNS_RECORD_TYPE="A"
IP=$(curl -s http://ipv4.icanhazip.com)
curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"type": "'"$DNS_RECORD_TYPE"'",
"name": "'"$DNS_RECORD_NAME"'",
"content": "'"$IP"'",
"ttl": 120,
"proxied": false
}'
Questo script aggiorna il record DNS con il tuo IP pubblico corrente. Sostituisci i segnaposto con i tuoi valori effettivi.
Migliora lo script per aggiornarlo solo quando necessario: per evitare aggiornamenti non necessari, migliora lo script per verificare se l'indirizzo IP è cambiato prima dell'aggiornamento. Aggiorna anche i percorsi completi di qualsiasi comando all'interno dello script in modo che possa essere eseguito con cron.
#!/bin/bash
CLOUDFLARE_API_TOKEN="your_api_token_here"
ZONE_ID="your_zone_id_here"
DNS_RECORD_ID="your_record_id_here"
DNS_RECORD_NAME="example.com"
DNS_RECORD_TYPE="A"
Define the full paths to commands to be able run this script with cron
CURL="/usr/bin/curl"
JQ="/usr/bin/jq"
Get the current public IP address
IP=$($CURL -s http://ipv4.icanhazip.com)
Cloudflare API endpoint to get the current DNS record
GET_API_ENDPOINT="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID"
Get the current DNS record's IP address from Cloudflare
current_ip=$($CURL -s -X GET "$GET_API_ENDPOINT" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" | $JQ -r '.result.content')
Check if the IP addresses are different
if [[ "$IP" == "$current_ip" ]]; then
echo "No update needed. IP address has not changed: $IP"
else
echo "IP address has changed from $current_ip to $IP. Updating record..."
# Cloudflare API endpoint to update the DNS record
UPDATE_API_ENDPOINT="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID"
# Update the DNS record
response=$($CURL -s -X PUT "$UPDATE_API_ENDPOINT" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"type": "'"$DNS_RECORD_TYPE"'",
"name": "'"$DNS_RECORD_NAME"'",
"content": "'"$IP"'",
"ttl": 120,
"proxied": false
}')
# Check if the update was successful
if [[ $response == *"\"success\":true"* ]]; then
echo "DNS record updated successfully to IP: $IP"
else
echo "Failed to update DNS record. Response: $response"
fi
fi
Questa versione dello script controlla se l'IP corrente è diverso dall'IP nel record DNS. Aggiorna il record DNS solo se l'IP è cambiato.
Pianifica lo script utilizzando Cron: per mantenere aggiornato automaticamente il record DNS, pianifica l'esecuzione dello script a intervalli regolari utilizzando cron
.
$ crontab -eAdd the following line to run the script every 5 minutes:
*/5 * * * * /path/to/update_dns.sh
Questo eseguirà lo script ogni 5 minuti, assicurando che qualsiasi modifica nel tuo IP dinamico si rifletta tempestivamente nei tuoi record DNS.
Conclusione
Seguendo questi passaggi, hai creato una soluzione affidabile per mantenere il tuo dominio puntato al tuo indirizzo IP dinamico. Questo script automatizza il processo, eliminando la necessità di aggiornamenti manuali ogni volta che il tuo IP cambia. Con l'API di Cloudflare e un po' di scripting Bash, puoi assicurarti che il tuo dominio sia sempre raggiungibile, indipendentemente dalla frequenza con cui cambia il tuo IP. Questa configurazione è perfetta per server domestici, servizi self-hosted o qualsiasi scenario in cui un IP dinamico causerebbe altrimenti grattacapi.