| | | | | | | | |

Alternative à DynDNS avec OVH – Màj. auto. de l’IP avec Docker

Introduction

Vous cherchez une alternative à DynDNS avec OVH et Docker ? Lorsqu’on héberge un serveur web ou une application à domicile avec une IP dynamique, on a besoin de mettre à jour automatiquement le DNS pour que le nom de domaine pointe toujours vers la bonne adresse IP. Traditionnellement, on utilise des outils comme ddclient ou inadyn pour gérer cette mise à jour automatique (Dynamic DNS).

Cependant, installer ces applications directement sur le système peut alourdir la configuration et compliquer la maintenance. Dans ce tutoriel, on va voir comment créer une alternative légère avec Docker qui met à jour automatiquement l’IP publique sur OVH sans installer de logiciel supplémentaire sur le serveur hôte.

Avantages de cette solution

Aucune installation système – Tout tourne dans un conteneur Docker isolé
Léger et portable – Basé sur Alpine Linux (~5 MB)
Facilement modifiable – Un simple fichier docker-compose.yml
Logs horodatés – Suivi clair des mises à jour
Redémarrage automatique – En cas de reboot du serveur


Prérequis

Avant de commencer, on a besoin de :

  • Un nom de domaine enregistré chez OVH
  • Docker et Docker Compose installés sur le serveur
  • Un accès à l’espace client OVH
  • Une Fritz!Box ou un autre routeur qui expose le serveur sur Internet

exemple.lu et MotDePasseComplexe à remplacer par vos information !


Étape 1 : Configuration du DynHost sur OVH

1.1 Activer le service DynHost

On se connecte à l’espace client OVH et on accède à la gestion du domaine :

  1. Aller dans Domaines → Sélectionner son domaine (ex: exemple.lu).
  2. Cliquer sur l’onglet DynHost.
  3. Cliquer sur Ajouter un DynHost.
  4. ajouter un nom de sous-domaine à défaut, la case reste vide.
  5. ajouter une adresse IP bidon pour voir qu’elle se met à jour plus tard.
  6. Valider en appuyant sur le bouton.
Interface OVH pour activer le service DynHost sur un nom de domaine
Interface OVH pour activer le service DynHost sur un nom de domaine
Créer un DynHost chez OVH
Créer un DynHost chez OVH

1.2 Créer un identifiant DynHost

On va créer un identifiant qui permettra au script de s’authentifier :

  1. Cliquer sur Gérer les accès.
  2. Cliquer sur Créer un identifiant.
  3. Renseigner les informations :
    • Suffixe : un nom descriptif (ex: docker-upd)
    • Sous-domaine : * (pour mettre à jour le domaine racine et tous les sous-domaines)
    • Mot de passe : un mot de passe complexe (on le notera pour plus tard)

L’identifiant final ressemblera à : exemple.lu-docker-upd

Création d'un identifiant DynHost dans l'interface OVH
Création d’un identifiant DynHost dans l’interface OVH
Créer un identifiant DynHost
Créer un identifiant DynHost chez OVH

1.3 Nettoyer la zone DNS

Pour éviter les conflits, on doit supprimer les anciens enregistrements DNS de type A :

  1. Aller dans Zone DNS.
  2. Repérer les lignes avec le Type A pointant vers une ancienne IP.
  3. Supprimer ces enregistrements (cliquer sur l’icône poubelle).

Important : On garde uniquement la configuration DynHost active. Les anciens enregistrements A créeront des conflits et empêcheront le bon fonctionnement.

Suppression des anciens enregistrements DNS de type A dans la zone OVH
Suppression des anciens enregistrements DNS de type A dans la zone OVH

Étape 2 : Tester la mise à jour manuelle

Avant de créer le conteneur Docker, on vérifie que les identifiants fonctionnent correctement.

Test avec curl

On ouvre un terminal sur le serveur et on exécute cette commande :

curl -u "exemple.lu-docker-upd:MotDePasseComplexe" \
  "https://www.ovh.com/nic/update?system=dyndns&hostname=exemple.lu&myip=$(curl -s https://icanhazip.com)"

Réponses possibles :

  • good 103.58.8.0 ✅ – IP mise à jour avec succès
  • nochg 103.58.8.0 ✅ – IP inchangée (normal)
  • badauth ❌ – Identifiant ou mot de passe incorrect
  • {"class":"Client::BadRequest"} ❌ – Erreur dans le nom de domaine

Si on obtient good ou nochg, les identifiants sont corrects et on peut continuer !


Méthode 1 : Conteneur Docker standalone (Recommandé)

Cette méthode crée un conteneur Docker indépendant qui s’occupe uniquement de la mise à jour DynDNS. C’est l’approche la plus propre et la plus réutilisable.

3.1 Créer le dossier du projet

mkdir -p ~/ovh-dyndns
cd ~/ovh-dyndns

3.2 Créer le fichier docker-compose.yml

On crée le fichier de configuration Docker Compose :

nano docker-compose.yml

On colle le contenu suivant :

version: '3.8'

services:
  ovh-dyndns:
    image: alpine:latest
    container_name: ovh-dyndns
    restart: unless-stopped
    command: sh -c "apk add --no-cache curl && while true; do echo \"[$(date '+%Y-%m-%d %H:%M:%S')]\" >> /var/log/ovh.log; curl -s -u 'exemple.lu-docker-upd:MotDePasseComplexe' 'https://www.ovh.com/nic/update?system=dyndns&hostname=exemple.lu&myip='$$(curl -s https://icanhazip.com) >> /var/log/ovh.log 2>&1; echo '' >> /var/log/ovh.log; sleep 1800; done"
    volumes:
      - ./logs:/var/log

Configuration à personnaliser :

  • exemple.lu-docker-upd : remplacer par l’identifiant DynHost créé sur OVH
  • MotDePasseComplexe : remplacer par le mot de passe défini
  • exemple.lu : remplacer par le nom de domaine
  • sleep 1800 : intervalle de mise à jour (1800 = 30 minutes)

3.3 Lancer le conteneur

docker compose up -d

Le conteneur se lance et commence immédiatement à mettre à jour l’IP.

3.4 Vérifier les logs

# Voir les logs en temps réel
docker compose logs -f

# Ou consulter le fichier de log
cat logs/ovh.log

On devrait voir quelque chose comme :

[2026-01-31 14:30:15]
nochg 103.58.8.0

[2026-01-31 15:00:20]
nochg 103.58.8.0

[2026-01-31 15:30:25]
good 103.58.8.0

3.5 Arrêter ou redémarrer le conteneur

# Arrêter
docker compose down

# Redémarrer
docker compose restart

# Voir le statut
docker compose ps

Méthode 2 : Intégration dans un docker-compose existant (WordPress, etc.)

Si on a déjà une stack Docker (par exemple WordPress), on peut intégrer le service DynDNS directement dans le fichier docker-compose.yml existant.

4.1 Éditer le docker-compose.yml existant

cd /chemin/vers/wordpress-docker
nano docker-compose.yml

4.2 Ajouter le service ovh-dyndns

On ajoute ces lignes à la fin du fichier, au même niveau que les autres services :

  ovh-dyndns:
    image: alpine:latest
    container_name: ovh-dyndns
    restart: unless-stopped
    command: sh -c "apk add --no-cache curl && while true; do echo \"[$(date '+%Y-%m-%d %H:%M:%S')]\" >> /var/log/ovh.log; curl -s -u 'exemple.lu-docker-upd:MotDePasseComplexe' 'https://www.ovh.com/nic/update?system=dyndns&hostname=exemple.lu&myip='$$(curl -s https://icanhazip.com) >> /var/log/ovh.log 2>&1; echo '' >> /var/log/ovh.log; sleep 1800; done"
    volumes:
      - ./ovh-dyndns-logs:/var/log

Attention à l’indentation ! Le service ovh-dyndns doit être aligné avec les autres services (wordpress, db, nginx, etc.)

4.3 Relancer la stack

docker compose down; docker compose up -d

Tous les conteneurs redémarrent, y compris le nouveau service DynDNS.

4.4 Vérifier les logs

cat ovh-dyndns-logs/ovh.log

Optimisation et personnalisation

Ajuster la fréquence de mise à jour

La valeur sleep détermine l’intervalle entre chaque mise à jour :

  • sleep 900 = 15 minutes (4 fois par heure)
  • sleep 1800 = 30 minutes (2 fois par heure) ✅ Recommandé
  • sleep 3600 = 1 heure (1 fois par heure)
  • sleep 7200 = 2 heures

Conseil : Pour une IP domestique qui change rarement, 30 minutes est un bon compromis. Cela évite de surcharger les serveurs OVH tout en garantissant une mise à jour rapide en cas de changement d’IP.

Nettoyer les anciens logs

Si le fichier de log devient trop volumineux :

# Arrêter le conteneur
docker compose down

# Supprimer le log
rm logs/ovh.log  # ou ovh-dyndns-logs/ovh.log

# Relancer
docker compose up -d

Mise à jour automatique au démarrage du serveur

Avec restart: unless-stopped, le conteneur redémarre automatiquement :

  • Au démarrage du serveur
  • Après un crash
  • Après une mise à jour de Docker

Dépannage

Erreur « Unauthorized »

Symptôme : Le log affiche {"class":"Client::Unauthorized","message":"Unauthorized"}

Causes possibles :

  1. Identifiant ou mot de passe incorrect
  2. Trop de requêtes envoyées → OVH bloque temporairement

Solutions :

  • Vérifier les identifiants dans l’espace client OVH
  • Régénérer un nouveau mot de passe si nécessaire
  • Augmenter l’intervalle (sleep 3600 ou plus)
  • Attendre 30 minutes avant de réessayer

Erreur « Invalid domain name »

Symptôme : Le log affiche {"class":"Client::BadRequest","message":"{'hostname': ['Invalid domain name']}"}

Causes possibles :

  1. Le nom de domaine dans la commande ne correspond pas à celui configuré dans OVH
  2. Présence d’un caractère spécial mal échappé

Solutions :

  • Vérifier que hostname=exemple.lu correspond exactement au domaine OVH
  • Utiliser le domaine racine (exemple.lu) et non un sous-domaine avec astérisque dans l’URL

Le DNS ne se met pas à jour

Symptôme : nslookup exemple.lu retourne toujours l’ancienne IP

Causes possibles :

  1. Anciens enregistrements DNS de type A toujours présents
  2. Cache DNS local
  3. Propagation DNS en cours

Solutions :

# Vider le cache DNS local
sudo systemd-resolve --flush-caches

# Attendre 5 à 30 minutes pour la propagation

# Vérifier la zone DNS OVH
# Supprimer tous les enregistrements A en doublon

Let’s Encrypt échoue avec Nginx Proxy Manager

Symptôme : « Internal Error » lors de la demande de certificat SSL

Causes possibles :

  1. Le DNS ne pointe pas encore vers la bonne IP
  2. Les ports 80/443 ne sont pas ouverts sur la Fritz!Box
  3. Propagation DNS incomplète

Solutions :

  1. Vérifier que nslookup exemple.lu retourne la bonne IP publique
  2. S’assurer que les ports 80 et 443 sont redirigés vers le serveur dans la Fritz!Box
  3. Attendre 10-30 minutes après le changement DNS
  4. Tester d’abord en HTTP (sans SSL) puis ajouter le certificat

Pourquoi cette alternative DynDNS avec OVH plutôt que ddclient ?

Avantages par rapport à ddclient

CritèreDocker DynDNSddclient
Installation système❌ Aucune✅ Oui (apt install)
Dépendances❌ Aucune✅ Perl + modules
ConfigurationSimple (docker-compose.yml)Complexe (/etc/ddclient.conf)
Portabilité✅ Fonctionne partout❌ Lié au système
Isolation✅ Conteneur isolé❌ Processus système
Logs✅ Fichier simple❌ Dispersés dans syslog
Mise à jour✅ Modifier le yml❌ Éditer le conf + redémarrer le service

Cas d’usage idéal

Cette solution Docker est parfaite si :

  • On veut éviter d’installer des paquets supplémentaires sur le système.
  • On utilise déjà Docker pour d’autres services.
  • On veut une solution portable et facilement reproductible.
  • On préfère gérer la configuration dans un seul fichier docker-compose.yml.

Si on a besoin de gérer plusieurs domaines avec des fournisseurs DynDNS différents (OVH, No-IP, DynDNS.org, etc.), ddclient reste une meilleure option.


Bonus : Économies et simplicité

Pas d’abonnement payant (DynDNS.org coûte 55$/an)
Pas de renouvellement mensuel (No-IP oblige à cliquer tous les 30 jours)
Autres services gratuits mentionnés avec leurs limitations (Dynu, FreeDNS)


Conclusion

On a vu comment créer une alternative légère à DynDNS avec OVH et Dockeret efficace à ddclient pour mettre à jour automatiquement l’IP publique sur OVH avec Docker. Cette solution :

✅ Ne nécessite aucune installation système supplémentaire.
✅ S’intègre facilement dans une infrastructure Docker existante.
✅ Produit des logs clairs et horodatés.
✅ Redémarre automatiquement en cas de reboot.
✅ Se configure en quelques minutes.

Pour aller plus loin, on peut adapter ce tutoriel à d’autres fournisseurs DynDNS en changeant simplement l’URL et le format de la requête curl.


sources:
Pour plus d’informations sur Docker, consultez la documentation officielle Docker.
La documentation OVH sur le DynHost explique le fonctionnement du service.


Découvrez d’autre article similaire:

Laisser un commentaire