Où l’on va voir comment se passer (sous certaines conditions) des fournisseurs de DNS dynamique.
Merci aux copains qui m’ont aidé dans la compréhension et de déverminage de cette fonctionnalité.
Je suis possédé par une maison de campagne. Celle-ci est mal reliée aux Internets par une connexion ADSL fournie par Orange. À chaque reboot de la « Livebox », celle-ci change d’adresse IP et le peu d’équipement que j’ai derrière devient inaccessible. J’ai essayé les services de type DynDNS pour mettre à jour un enregistrement DNS. Malheureusement, celui-ci ne correspond en rien avec mon domaine à moi que j’ai. Mais je loue une machine reliée aux Internets et équipée d’une adresse IP fixe. Celle-ci héberge un serveur DNS animé par Bind9. C’est donc lui qui va gérer la zone dynamique de mon domaine avec l’adresse IP de ma « livebox » campagnarde.
Prérequis
Vous aurez besoin de quelques prérequis pour mettre en place cette solution :
- un serveur DNS en état de marche ;
- savoir vous en servir (éditer une zone) ;
- savoir vous débrouiller avec le shell.
Sur le serveur
Nous devons créer une nouvelle zone (en fait un sous-domaine de celui qui existe déjà). La mienne sera externe.example.com.
Ajout de la gestion de la nouvelle zone
Nous allons ajouter la gestion de cette zone dans la configuration de Bind9. Cela se fait à la suite des zones existantes, dans le fichier /usr/local/etc/namedb/named.conf.local1.
|
|
Ce qui signifie :
- définition de la zone “externe.example.com" ;
- de type master ;
- le fichier de définition est celui-ci ;
- la mise à jour est autorisée avec cette clef.
Génération de la clef
Cette clef, qui sera présente sur le serveur et le client, devra demeurer secrète, est utilisée pour certifier les échanges. Seules les machines disposant cette clef pourront mettre à jour la zone.
|
|
Création du fichier de la zone externe.example.com
Ce fichier de zone ne comporte que le SOA et un enregistrement de type NS. Il va permettre à Bind9 de connaître la zone. Vous devriez être capable de lire et comprendre ce fichier. Ce fichier se nomme db.externe.example.com
|
|
Vérification de la prise en compte de nos modifications
Nous allons vérifier que notre fichier de zone est correct, que la configuration l’est aussi et nous allons redémarrer Bind pour que nos modifications soient prises en compte.
Vérification de la configuration
Pour vérifier la configuration, nous allons utiliser named-checkconf :
|
|
Vérification de la zone
Nous avons, pour vérifier la zone, à notre disposition l’utilitaire named-checkzone :
|
|
Redémarrage de Bind et test de la résolution de la zone
Nous redémarrons Bind le plus simplement du monde :
|
|
Et nous testons la résolution de la zone. Cela se fait de préférence depuis une autre machine que le serveur.
|
|
On dirait que la zone est connue.
Copie de la clef sur la machine cliente
Il nous reste à copier la clef sur la machine cliente.
|
|
Sur la machine cliente
Ma machine cliente est une RaspBerryPi2. Doivent être installé les utilitaires DNS afin de disposer de la commande nsupdate.
|
|
Première mise à jour avec nsupdate
Nous allons commencer par utiliser le mode interactif de nsupdate pour comprendre comment fonctionne l’outil.
|
|
En interrogeant le DNS nous devrions voir apparaître notre machine dans la zone :
|
|
Houra, ça marche. Toutes vos machines qui utilisent ns.example.com comme resolveur peuvent connaître la RaspberryPI.
Automatisation
Il faut maintenant automatiser cette mise à jour. Il va nous falloir déterminer la fréquence de mise à jour. Est-ce qu’une semaine, une jour ou une heure sans pouvoir joindre la machine est handicapant ? J’ai choisi une journée, mais libre à vous de changer ce réglage. Nous allons faire un script shell qui va devoir vérifier quelques petites choses avant de faire la mise à jour. En effet, celle-ci est inutile si l’adresse IP n’a pas changé. Inutile aussi si le serveur DNS est injoignable. Nous allons également devoir supprimer l’enregistrement avant de l’ajouter à nouveau. Voici mon script :
|
|
Et IPv6 ?
Depuis l’écriture de billet, je me suis lancé dans IPv6 pour de vrai. Il est donc logique que j’ai envie de joindre ma raspberry pi via son adresse V6.
J’ai donc ajouté un petit morceau à mon script pour prendre en compte ce changement.
Je ne cherche pas à valider l’adresse IPv6, celle-ci étant, dans mon script,
donnée par ifconfig
, il y a des chances qu’elle soit valide.
Je ne met pas en place tout ce qui peux l’être pour IPv6, seule l’adresse publique m’interesse ici.
|
|
Et dans la partie de mise à jour de la zone, on ajoute l’adress V6 :
|
|
Il reste à tester le script et à le mettre en production avec cron.
Mettre le script dans cron
Nous allons le mettre dans la crontab de l’utilisateur root.
|
|
Le script est lancé automatiquement tous les jours à 4 heures 10 du matin.
Conclusion
Il n’est pas très difficile de mettre en place une zone dynamique avec Bind9 et nsupdate. Cette technique peut être utilisé en conjonction avec un serveur DHCP pour que toutes les machines qui obtiennent une adresse via ce protocole soit enregistré dans une zone spécifique du DNS.
Mise à jour du 22 décembre 2018
Petite relecture et mise à jour du script par rapport à la réalité.
Mise à jour du 4 novembre 2019
Ajout de la gestion d’IPv6
Mise à jour du 5 octobre 2021
Mise à jour de la commandes d’obtention des adresses IP et des vérifications.
-
les chemins vers mes fichiers sont ceux d’une installation FreeBSD. Ils différent sur une installation Linux, mais je suis sûr que vous saurez faire la convertion. ↩︎