Gérer un domaine dynamique DynDNS avec Debian

Comme ce blog est hébergé à la maison et que je n'ai pas envie d'y accéder avec un adresse IP, j'utilise un service de DNS dynamique. Pour faire simple, ce système permet d'attribuer dynamiquement un nom DNS à une adresse IP. Ce service est souvent gratuit, ce qui lui confère un certain intérêt !

Toutefois, ces services gratuits sont plutôt orientés vers le dynamic DNS. Si on dispose d'une IP fixe, comme chez moi, il n'y a plus de dynamisme. Du coup, au bout d'un certain temps, les services de DNS dynamique estiment que la machine n'est plus disponible car elle n'a jamais manifesté de changement d'adresse IP. Pour éviter les erreurs, ils envoient un email 5 jours avant pour réactiver le compte. Pour ma part, ça fait des mois que je le fais à la main et c'est assez pénible car ça arrive finalement assez souvent.

Mais heureusement, une solution existe sur notre distribution préférée: ddclient, un programme destiné à gérer ces histoires d'adresses IP dynamiques. Voyons comment l'utiliser au mieux...

Installation:

Il convient avant tout d'installer le bousin.

Munissez vous des éléments suivants car dpkg va vous poser des questions:

  • le nom DNS dynamique de votre machine visible sur le réseau.
  • Les identifiants de connexion chez DynDNS

Ensuite, un simple:

aptitude install ddclient

Fonctionnement sur Debian:

ddclient est avant tout un script Perl. C'est pour ça qu'il dépend du paquet perl5. Du coup, il est simple à gérer. Sa configuration est située dans un seul fichier nommé /etc/ddclient.conf. On peut l'utiliser de plusieurs manières:

  • en l'exécutant régulièrement avec cron. La mise à jour de l'adresse se fait suivant le niveau de cron.
  • en le couplant avec un script de connexion PPP (/etc/ppp/). C'est pratique avec les modems.
  • en le lançant comme démon par un script init.d (/etc/init.d/ddclient). La mise à jour s'effectue selon un timing défini par le fichier de configuration.

A priori, par défaut, Debian configure ddclient comme un démon.

Ma configuration:

ddclient étant un client versatile pour un nombre important de fournisseurs de DNS dynamiques, sa configuration est loin d'être triviale. Il y a des options générales mais certaines sont également présentes dans le fichier /etc/default/ddclient (notamment la variable daemon_interval qui précise la fréquence de MAJ).

Le principe de configuration est le suivant:

  • renseigner des variables générales: syslog=3600 pour indiquer que la mise à jour de l'adresse sur le service dynamique se fera toutes les heures.
  • choisir l'adresse IP à mettre à jour:

    • la variable use=... permet de choisir une méthode d'attribution de l'adresse IP. On trouve des méthodes génériques: une ip fixe décrite par vous-même (ip), l'adresse IP d'une interface réseau (if) ou bien des méthodes adaptées au matériel spécifique. Un modem ou un modem-routeur ont des méthodes différentes pour connaître les adresses IP qui servent à publier votre serveur (ex:linksys).
    • une fois la méthode d'attribution de l'adresse IP choisie, il faut indiquer les réglages permettant de récupérer l'adresse IP. Par exemple, avec un modem-routeur, il est indispensable pour ddclient de connaître l'adresse IP du modem-routeur afin qu'il puisse interroger ce dernier et récupérer l'adresse IP publique.
  • choisir un protocole et renseigner les variables spécifiques à ce protocole:

    • chaque fournisseur de service DNS dynamique dispose d'un protocole propre. Il convient d'indiquer celui qu'on choisit en renseignant la variable protocol.
    • suivant le protocol choisi, certains paramètres doivent être renseignés (consulter la page de référence pour plus d'informations).

Dans mon cas, mon problème est que l'IP de la machine qui fait office de serveur n'est pas celle qui est publique. En effet, cette machine est située derrière un routeur qui fait du NAT. Seuls certains ports sont ouverts sur cette IP et le routeur passe les requêtes à la bonne machine en fonction de ces ports. L'adresse IP que le serveur connaît est donc celle qui est locale (réseau derrière le routeur).

Ainsi, pour que ddclient fonctionne, il est indispensable qu'il puisse récupérer l'adresse publique du routeur. Là où ddclient est performant, c'est qu'il sait interroger les services de dyndns.org pour récupérer l'information. Il faut indiquer qu'on va utiliser l'interface web et indiquer que la requête web est web=checkip.dyndns.org/.

Voici donc un aperçu de ma configuration qui marche:

# Variables générales:
pid=/var/run/ddclient.pid

# Méthode de détermination de l'adresse IP:
use=web, web=checkip.dyndns.org/

# Choix du protocole et indication des paramètres:
protocol=dyndns2
static=yes
server=members.dyndns.org
login=votre_login_qui_tue
password='votre_password_qui_tue'
votre_domaine.qui_tue.org

Pour plus d'informations sur les options de configuration, je vous invite à lire le fichier /usr/share/doc/ddclient/examples/sample-etc_ddclient.conf.gz qui est sans doute plus complet que ce qu'on peut trouver sur le site Web de ddclient.

Gestion du offline:

Dyndns permet de router votre adresse DNS dynamique vers une page web temporaire indiquant que le serveur est éteint. Malheureusement, ddclient ne le prend pas en compte ! C'est dommage, ça serait bien de mettre en place une telle commande: lorsque le service web du serveur s'arrête ou avant que sa connexion PPP se termine, il pourrait être intéressant de signaler au fournisseur du service DNS Dynamique de router vers une page qui indique que le site est offline. M'en vais voir si c'est possible...

Références: