Skip to content

Tout pour WordPress, le développement web — et plus encore

🚀 Comment configurer un DNS dynamique via Cloudflare sur Raspberry Pi

🚀 Comment configurer un DNS dynamique via Cloudflare sur Raspberry Pi

Votre serveur domestique sur Raspberry Pi fonctionne 24h/24 et 7j/7, mais votre FAI change l’adresse IP externe tous les jours. Aller chercher manuellement la nouvelle adresse est un travail d’archéologue. Et DynDNS comme No-IP vous bombardent de courriels: «connectez-vous une fois par mois ou nous désactiverons votre compte gratuit».

Il s’avère que Cloudflare peut faire office de DNS dynamique, sans courriels promotionnels, sans limite de fréquence de mise à jour et sans sous-domaines tiers. Vous avez déjà un domaine chez Cloudflare? Alors il vous suffit d’un jeton API et d’un script bash sur le Raspberry Pi. En une demi-heure, vous mettrez en place un dispositif qui met automatiquement à jour l’enregistrement A dès que l’IP change.

Et si vous souhaitez non seulement «accéder à la console», mais déployer un véritable site de développement, même sous WordPress, cette configuration devient la base: vous accédez à votre serveur depuis n’importe où dans le monde via un sous-domaine pratique comme home.example.com.

💡 Aperçu rapide:

  • Étape 1: Créez un enregistrement A dans le panneau DNS de Cloudflare avec l’IP de test 0.0.0.0
  • Étape 2: Obtenez un jeton API (pas une clé globale, les jetons sont plus sûrs et révocables en un clic)
  • Étape 3: Exécutez un script bash qui interroge l’IP actuelle et l’envoie à l’API Cloudflare
  • Étape 4: Mettez en place une tâche cron et oubliez les mises à jour manuelles pour toujours

Ce dont vous aurez besoin

  • Un domaine ajouté à Cloudflare et géré via leurs DNS
  • Un Raspberry Pi (tous les modèles fonctionnent, Pi 3, Pi 4, Pi Zero 2 W) avec Raspbian ou Raspberry Pi OS
  • Une IP locale statique pour le Raspberry Pi (configurée dans l’interface graphique du système ou via le routeur)
  • Un accès au terminal du Pi via SSH ou directement

Les services que vous hébergez exactement sur le Raspberry Pi et la manière dont vous redirigez les ports sur le routeur constituent un sujet à part, qui dépasse le cadre de ce tutoriel. Le dispositif fonctionne de manière identique, que ce soit pour un serveur web avec WordPress, un accès VNC ou une caméra de surveillance.

1. Créez un enregistrement A pour votre serveur domestique

Choisissez un sous-domaine, il deviendra votre point d’entrée permanent. J’utilise home, mais vous pouvez en choisir un autre: dev, lab, cam.

  • Rendez-vous sur le tableau de bord Cloudflare et sélectionnez votre domaine
  • Allez dans l’onglet DNS
  • Cliquez sur Ajouter un enregistrement, choisissez le type A
  • Dans le champ Nom, saisissez le sous-domaine (par exemple, home)
  • Dans le champ Adresse IPv4 address, indiquez 0.0.0.0, temporairement, pour tester le script plus tard
  • Laissez le Statut du proxy désactivé (nuage gris), la mise en cache et le proxy ne sont pas nécessaires pour le DDNS
Enregistrement A avec IP de test 0.0.0.0 dans Cloudflare DNS

L’enregistrement est prêt. Passons maintenant à l’obtention de la clé d’accès API.

2. Obtenez un jeton API Cloudflare

Auparavant, tous les guides conseillaient la clé API globale, qui donne un accès complet à tous les domaines du compte. C’est dangereux: si la clé fuit, tout fuit. Désormais, Cloudflare recommande les jetons API avec des permissions granulaires. Un jeton peut être limité à un domaine et une action spécifiques, et en cas de compromission, il est révoqué en un clic.

  • Dans le tableau de bord Cloudflare, allez dans: Mon profilJetons API
  • Cliquez sur Créer un jeton
  • Sélectionnez le modèle Modifier les DNS de la zone (ou créez-en un personnalisé)
  • Dans la section Ressources de la zone, précisez le domaine pour lequel vous configurez le DDNS
  • Cliquez sur Continuer vers le résuméCréer un jeton
  • Copiez le jeton, il ne s’affiche qu’une seule fois

Le jeton se présente sous la forme d’une longue chaîne commençant par cfut_. Conservez-le en lieu sûr, le script sur le Raspberry Pi en aura besoin dans un instant.

3. Script de mise à jour automatique sur le Raspberry Pi

Connectez-vous au Raspberry Pi via SSH ou ouvrez un terminal. Créons un dossier pour le script:

1mkdir -p ~/cf && cd ~/cf

Passons maintenant au script lui-même. Créez le fichier cloudflare-ddns.sh:

1nano ~/cf/cloudflare-ddns.sh

Copiez le code suivant dans ce fichier:

1#!/bin/bash
2
3 ## Settings (replace with yours)
4AUTH_EMAIL="[email protected]"
5API_TOKEN="cfut_your_token"
6ZONE_NAME="example.com"
7RECORD_NAME="home.example.com"
8
9 ## Get current public IP
10CURRENT_IP=$(curl -s https://api.ipify.org)
11
12 ## Get Zone ID
13ZONE_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
18RECORD=$(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
22RECORD_ID=$(echo "$RECORD" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
23DNS_IP=$(echo "$RECORD" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4)
24
25 ## Update record if IP changed
26if [ "$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
33else
34 echo "$(date): IP unchanged ($CURRENT_IP)" >> ~/cf/cloudflare-ddns.log
35fi

Remplacez les quatre variables du bloc «Settings» par vos valeurs réelles. Email, le même que pour la connexion Cloudflare. Token, celui que vous avez copié à l'étape 2. Zone name, votre domaine sans http://. Record name, le sous-domaine complet.

Enregistrez le fichier (Ctrl+O, Entrée, Ctrl+X dans nano) et rendez-le exécutable:

1chmod +x ~/cf/cloudflare-ddns.sh

Lancez-le manuellement pour vérifier:

1~/cf/cloudflare-ddns.sh

Si tout est correctement configuré, allez dans le panneau DNS de Cloudflare: l'adresse IP de l'enregistrement A devrait passer de 0.0.0.0 à votre véritable IP publique. Le journal est écrit dans ~/cf/cloudflare-ddns.log, consultez-le en cas de problème.

4. Automatisation via cron

Le lancement manuel sert uniquement à tester. À partir d'ici, cron prend le relais.

1crontab -e

Si le système vous demande de choisir un éditeur, sélectionnez nano (généralement le numéro 2, c'est le plus simple). Ajoutez une ligne à la fin du fichier:

10 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh

Cette entrée exécute le script toutes les 6 heures. Même si le FAI change l'IP une fois tous les quelques mois, une fenêtre de six heures est un compromis raisonnable entre réactivité et charge sur l'API.

Si vous souhaitez une fréquence plus élevée, remplacez par */30 * * * * (toutes les 30 minutes). Mais gardez à l'esprit que la limite gratuite de l'API Cloudflare est de 1200 requêtes par minute, donc même des appels toutes les minutes ne sont pas un problème pour un seul domaine.

Enregistrez (Ctrl+X, O, Entrée). Cron prendra en compte les modifications automatiquement, pas besoin de redémarrer le service. Pour vous aider à décoder les astérisques, rendez-vous sur crontab.guru.

Un court tutoriel vidéo sur le même sujet, par NetworkChuck, avec une démonstration sur un vrai Raspberry Pi et l'explication de chaque étape:

Que faire si le script n'a pas trouvé le Zone ID ou le Record ID

Il arrive que l'API ne renvoie pas les identifiants automatiquement, surtout si le compte possède de nombreux domaines ou des enregistrements aux noms similaires. Dans ce cas, récupérez-les manuellement:

  • Allez sur le tableau de bord Cloudflare, sélectionnez le domaine, onglet DNS
  • Ouvrez les outils de développement du navigateur (F12 → onglet Réseau → sous-onglet XHR)
  • Cliquez sur l'icône de nuage à côté de votre enregistrement A, une requête vers l'API apparaîtra dans le panneau réseau
  • Faites un clic droit dessus → CopierCopier l'adresse du lien (Chrome) ou Copier l'URL (Firefox)
  • Dans le lien copié, trouvez la partie après zones/, c'est le Zone ID, et après dns_records/, le Record ID

Remplacez les variables ZONE_ID et RECORD_ID dans le script par ces valeurs, et tout fonctionnera. Assurez-vous que le nuage dans le panneau DNS est gris (proxy désactivé): Cloudflare ne doit pas mettre en cache l'IP pour le DDNS.

⁉️🤔 Foire aux questions

Est-il obligatoire d'utiliser un jeton API plutôt que la clé globale?

La clé globale fonctionne encore, mais le jeton est l'option moderne et sécurisée. Un jeton peut être limité à un seul domaine et aux droits d'édition DNS. La clé globale donne accès à l'ensemble du compte. Si le script ou le Pi sont compromis, il vous suffit de révoquer le jeton, alors qu'il vous faudrait changer la clé partout.

En quoi cette approche diffère-t-elle de DuckDNS ou No-IP?

Les services de DDNS tiers fournissent un sous-domaine de troisième niveau comme myhome.duckdns.org. L'approche Cloudflare utilise votre propre domaine (home.example.com), ce qui est plus professionnel, ne dépend pas du service de quelqu'un d'autre et ne nécessite pas de connexion mensuelle pour confirmer l'activité. De plus, vous avez accès à tout l'écosystème Cloudflare: protection DDoS, certificats SSL, règles de pare-feu.

Dois-je ouvrir des ports sur le routeur?

Oui, pour atteindre le Raspberry Pi depuis Internet. Le DDNS garantit seulement que le domaine pointe toujours vers l'IP actuelle. Mais pour que le trafic provenant de cette IP atteigne le Pi, vous devez configurer une redirection de port sur le routeur pour les ports nécessaires (22 pour SSH, 80/443 pour le web, etc.).

Que faire si le Raspberry Pi est derrière un NAT opérateur?

Certains FAI utilisent du Carrier-Grade NAT (CGNAT): dans ce cas, vous ne disposez pas de votre propre IP publique et le DDNS ne vous aidera pas. Solution: demandez une IP blanche à votre FAI (souvent gratuite sur demande) ou utilisez Cloudflare Tunnel, qui crée un canal chiffré du Pi vers Cloudflare sans ouvrir de ports.

Combien coûte cette solution?

Zéro. Le DNS Cloudflare est gratuit pour un nombre illimité d'enregistrements A. Vous avez déjà acheté le Raspberry Pi. La consommation électrique d'un Pi 3/4 en charge est d'environ 3 à 5 W, ce qui représente annuellement environ 250 à 400 $.

Puis-je mettre à jour plusieurs sous-domaines?

Oui, dupliquez les blocs contenant RECORD_NAME et DNS_IP dans le script pour chaque sous-domaine, ou encapsulez la logique dans une boucle parcourant un tableau de noms.

DNS dynamique sur Cloudflare : ce qu’il faut mettre en place en 2026

Le montage associant l’API Cloudflare et cron a survécu à plusieurs générations de Raspberry Pi et n’a rien perdu de sa pertinence. Vous obtenez votre propre sous-domaine, vous ne dépendez d’aucun fournisseur DDNS tiers et vous ne déboursez pas un centime.

Si vous souhaitez aller plus loin, intéressez-vous aux images Docker prêtes à l’emploi : oznu/cloudflare-ddns met à jour l’IP toutes les 5 minutes et se configure via des variables d’environnement. Pour ceux qui préfèrent Python, il existe aribasadme/rpi-cloudflare-ddns, taillé spécifiquement pour le Raspberry Pi.

L’essentiel de ce que vous avez accompli aujourd’hui : le Raspberry Pi est désormais accessible depuis n’importe où dans le monde, à une adresse permanente. Et c’est la base de tout : d’un serveur de développement WordPress à votre propre stockage cloud.

🔗 Documentation de l’API DNS Cloudflare