Faire un DDNS en utilisant Cloudflare avec Docker

Faire un DDNS en utilisant Cloudflare avec Docker
Photo by NASA / Unsplash

Comme abordé précédemment dans un autre article, j'ai pu auto-héberger des sites web chez moi, sur un NAS Synology, avec Docker.

Un peu de contexte

J'utilisais Google Domains comme registrar, et sa fermeture imminente et la migration des noms de de domaines chez Squarespace ne m’intéressait pas.

J'ai donc transféré mon nom de domaine chez OVH, sachant pertinemment que leur fonction DynHost ne couvrait pas l'utilisation de l'IPv6 (un comble en 2023), il fallait trouver une solution.

Je me suis donc tourné vers Cloudflare.

Prérequis

Il convient de disposer des éléments suivants :

  • un nom de domaine chez un registrar où les DNS pointent vers Cloudflare (avec un compte actif chez eux)
  • La clé API, un token API, le mail utilisé pour le compte Cloudflare
  • Un NAS Synology ou une machine Linux avec Docker Compose d'installé
  • Un routeur avec l'IPv6 d'activée qui contourne le routeur Starlink

Configuration

Tout d'abord, écrire un fichier docker-compose.yml :

version: '3.9'
services:
  cloudflare-ddns:
    image: timothyjmiller/cloudflare-ddns:latest
    container_name: cloudflare-ddns
    security_opt:
      - no-new-privileges:true
    network_mode: 'host'
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - /VOTRE/CHEMIN/ICI/config.json:/config.json
    restart: unless-stopped

Puis, dans le dossier que vous avez créé, écrire un fichier config.json :

{
  "cloudflare": [
    {
      "authentication": {
        "api_token": "api_token", 
        "api_key": {
          "api_key": "api_key",
          "account_email": "votre_email"
        }
      },
      "zone_id": "votre_zone_id_ici",
      "subdomains": [
        {
          "name": "www", 
          "proxied": false 
        },
        {
          "name": "foo", 
          "proxied": false
        },
        {
          "name": "bar", 
          "proxied": false
        }
      ]
    }
  ],
  "a": false, 
  "aaaa": true,
  "purgeUnknownRecords": false,
  "ttl": 3600
}

Puis lancer avec docker-compose up -d

Vérifier la bonne transmission des informations à la zone DNS :

Et voilà !