Cloudflare-DDNS ou comment rediriger simplement un ou plusieurs sites sur une IP dynamique

cloudflare 24 sept. 2021

Avec la fibre Orange je n’ai pas d’IP fixe garantie. Souhaitant rapatrier quelques services à la maison, voici un outil de Joshuaavalon qui permet de créer enregistrement dynamique A (IPv4) ou AAAA (IPv6) sur Cloudflare.

Je privilégie le format Docker pour la simplicité d’utilisation. Evidemment ça suppose que le domaine (ou sous-domaine) passe par les DNS de Cloudflare. Cet outil permet de modifier l’IP d’un domaine/sous-domaine déjà existant ou non (il peut le créer).

Pour tester je me sers d’un site Web en HTML que j’héberge sur un NUC via Docker. Il a aussi fait un script pour Synology (que j’ai pas le temps de tester maintenant). Voici de quoi mettre en place un petit serveur Web pour tester :

docker run -d \
--name=sitetest \
--restart always \
-p 8051:8080 \
-v /home/aerya/docker/sitetest:/var/www/html \
--label=com.centurylinklabs.watchtower.enable=true \
trafex/php-nginx

Il suffit donc de déposer le contenu du site dans /home/aerya/docker/sitetest

Et maintenant la redirection dynamique :

docker run -d \
--name=cfddnstest \
--restart always \
-e ZONE=moi.fr \
-e HOST=testabcd.moi.fr \
-e [email protected] \
-e API=1234 \
-e PROXY=true \
-e FORCE_CREATE=true \
--label=com.centurylinklabs.watchtower.enable=true \
joshuaavalon/cloudflare-ddns

La zone est le domaine concerné (ou son numéro, qu’on trouve sur la page d’accueil du domaine sur son panel Cloudflare : “ID Zone” dans la colonne de droite.

Le HOST est le domaine ou sous-domaine que l’outil va créer automatiquement (enregistrement A ou AAAA).
L’EMAIL est celui de votre compte CF et API votre clé API globale CF qu’on trouve dans son profil.
PROXY (en true) est pour activer le proxy Cloudflare (masquer l’IP source en gros) et FORCE_CREATE lui indique qu’il faut créer l’enregistrement A (ou AAAA) s’il n’existe pas déjà. S’il existe, il mettra alors à jour son IP de redirection quand elle changera.

Une fois lancé il a bien créé le sous-domaine testabcd.moi.fr et vérifie son IP toutes les 5 minutes. Au besoin elle sera alors modifiée dans Cloudflare.

Bien entendu pour que ça fonctionne il faut soit rediriger le port public 443 (SSL) sur le port privé de votre site/application sur le/laquelle ça doit pointer sur votre PC/serveur/Rasp. Par exemple dans mon cas il faut viser le port 8051. Ou alors on peut aussi faire simple et passer la dite machine en DMZ sur sa box FAI ou son routeur…

Pour héberger plusieurs sites ou applications et les rediriger avec autant de sous-domaines (plex.moi.fr, blog.moi.fr, radarr.moi.fr, etc), le plus simple est de faire pointer l’outil vers un reverse proxy et d’ensuite ajouter les autres sous-domaines en CNAME.

Détaillons :
Au lieu d’utiliser CF-DDNS pour mon site Web testabcd.moi.fr directement, je lui fais pointer mon Nginx Proxy Manager : npm.moi.fr

docker run -d \
--name=cfddnstest \
--restart always \
-e ZONE=moi.fr \
-e HOST=npm.moi.fr \
-e [email protected] \
-e API=1234 \
-e PROXY=true \
-e FORCE_CREATE=true \
--label=com.centurylinklabs.watchtower.enable=true \
joshuaavalon/cloudflare-ddns


Et sous Cloudflare directement j’ajoute des CNAME qui renvoient sur npm.moi.fr. Le CNAME renvoie un sous-domaine sur un autre (ou un domaine) et non une IP. Du coup ça permet de ne pas avoir à modifier X fois les IP de redirection mais que celle sur laquelle pointent les CNAME. Autrement dit, si mon IP change, CF-DDNS la modifiera sous Cloudflare pour mon proxy npm.moi.fr et tous mes autres sous-domaines seront toujours bien redirigés.

De cette manière Nginx Proxy Manager reçoit bien toutes les requêtes et peut les traiter comme d’habitude.

Il existe plusieurs outils, format Docker, pour utiliser Cloudflare avec des DDNS, des DNS dynamiques. Vous avez par exemple également celui d’oznu. Plus complet avec notamment sélection IPv4 ou v6, sélection de l’interface réseau à prendre en compte pour le DNS dynamique ou encore l’ajout d’un serveur DNS personnalisé.

Mots clés