Dynamic DNS pour Cloudflare

Installation avec docker d'un container pour mettre à jour automatiquement votre IP si vous utilisez Cloudflare.

Dynamic DNS pour Cloudflare

Bonjour,

Je dispose d'une IP dynamique comme l'immense majorité des français. Pour l'auto hébergement, ça veut dire qu'on doit passer par un relais extérieur pour indiquer au reste du monde quand votre IP change. Pour cela, j'utilise Cloudflare. Ca se présente de cette façon dans Cloudflare :

Bien évidemment, vous n'allez pas vous amuser à mettre à jour à la main votre IP à chaque fois. Vous pouvez aussi si vous disposez d'un routeur le configurer pour qu'il utilise DynDNS. Ca fonctionne parfaitement avec OPNsense, je l'ai fait pendant un moment, mais j'aime cette solution ultra simple via docker. Car si je change de domaine, pas besoin d'aller faire une modification dans OPNsense, le container va le savoir via le fichier .env. Donc moins de boulot au final.

Les prérequis pour l'installation:
- Docker
- Docker Compose

Dans votre répertoire principal ou sont vos dockers, on va commencer par créer le réseau "backend".

docker network create backend

Le réseau "backend" chez moi est le réseau qui n'est pas sensé être en frontal avec internet et dans lequel les services n'ont pas de frontend exposés. Dès que j'ai un frontend exposé, j'utilise un reverse-proxy + authentification pour sécuriser (et Cloudflare pour rajouter une couche).

Le docker compose qui va bien :

########################### NETWORKS ###############################################
networks:     
  backend:
    external: true
########################### SERVICES ###############################################
services:    
    cf-ddns:
    # Cloudflare DDNS - Dynamic DNS Updater
    # https://hub.docker.com/r/oznu/cloudflare-ddns/
    container_name: cf-ddns
    image: oznu/cloudflare-ddns:latest
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - backend     
    environment:
      - API_KEY=$CLOUDFLARE_API_TOKEN
      - ZONE=$DOMAINNAME
      - PROXIED=true
      - RRTYPE=A
      - DELETE_ON_STOP=false
      - DNS_SERVER=1.1.1.1
      - TZ=$TZ

Toutes mes variables sont des $qqch. Elles sont toutes stockées dans un fichier .env à la racine de mes dockers pour plus de simplicité.  On ouvre donc ce fichier :

nano .env

Et voici à quoi ça ressemble en exemple dans ce fichier .env :

################## SYSTEM ########################
PUID=1001 
PGID=1001
TZ=Europe/Paris 
USERDIR=/home/docker
[email protected] 
[email protected]
SERVER_IP=192.160.125.101
COMPOSE_PROJECT_NAME=DDNS

################ DOMAIN #########################
DOMAINNAME=votredomaine.com
SECONDDOMAINNAME=*.votredomaine.com

############## CLOUDFLARE #######################
[email protected]  
CLOUDFLARE_API_TOKEN=votrekeyapicloudflare

Rien de transcendant ici, faites bien attention à bien définir votre USERDIR là ou seront les répertoires permanents des containers. Et bien evidemment à indiquer votre token Cloudflare.

Pour créer un token Cloudflare, il faut se rendre dans l'onglet Jeton API sur votre dashboard.

Cliquer ensuite pour créer un jeton et on rentre ces informations :

Zone - Réglages Zone - Lecture
Zone - Zone - Lecture
Zone - DNS - Modifier

Ressource de la zone : 
Inclure - Toutes les zones

On valide et et on copie le code qui va bien dans votre fichier .env (ou dans un secret si vous voulez augmenter la sécurité).

C'est terminé ? Bah oui, il ne reste plus maintenant qu'à lancer les containers :

docker-compose up -d

Et voila, dès que votre IP va changer, le DNS va se mettre à jour automatiquement dans Cloudlfare. C'est beau, c'est presque magique.

Enjoy, @+ !