Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 23 Jan 2006 11:11:56

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Dynamic DNS maison avec BIND + nsupdate

Situation: vous êtes l'heureux propriétaire d'un nom de domaine, et vous avez votre propre serveur DNS. Vous avez aussi un serveur a domicile avec une IP dynamique, et vous aimeriez donner un nom DNS a ce serveur, sans passer par un service de DNS dynamique daubesque qui vous impose des restrictions débiles.


Vous possédez le domaine exemple.com, et contrôlez un serveur DNS maître pour ce domaine, ns.exemple.com, qui utilise BIND9. Le serveur a domicile, que vous souhaitez appeler serveur.exemple.com, dispose de l'outil nsupdate (généralement disponible dans le package bind-tools ou équivalent, avec dig et consorts)

HOWTO:

Commençons par définir une nouvelle zone dédiée pour la machine. Ceci permettra de changer le contenu du reste du domaine sans altérer l'enregistrement dynamique de serveur.exemple.com. En effet, les mises a jour dynamiques du DNS ne sont pas stockées, donc si vous rechargez la configuration de la zone correspondante, elles sont perdues. Une zone dédiée permet de confiner les enregistrements dynamiques et leur permet de survivre au rechargement des autres zones.

Comme nous ne sommes intéressés que par une seule machine (serveur.exemple.com), nous allons créer une zone avec le même nom. Créez une nouvelle zone vide a l'endroit approprié (varie selon les distributions, typiquement dans /var/named ou sous /etc/bind). Par exemple, /var/named/serveur.zone

Code:

@       IN      SOA     serveur.exemple.com.    administrator.exemple.com. (
                        1
                        28800
                        7200
                        2419200
                        86400
                        )
                NS      ns.exemple.com.
                A       0.0.0.0

Générez ensuite une nouvelle clef symétrique TSIG (Les clefs asymétriques SIG(0) sont parait-il plus délicates a utiliser, et pas forcément moins sûres dans certaines conditions):

Code:

dnssec-keygen -a HMAC-MD5 -n 512 -n HOST serveur.exemple.com.

Ceci créera deux fichiers, Kserveur.exemple.com.+157+?????.key et .private. (le contenu est identique pour une clef TSIG mais il y a deux fichiers pour des raisons historiques)

Ouvrez le fichier .private nouvellement créé et copiez la chaine clef (Le champ après Key:):

Code:

Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: blahblahblahblahblahblah

Ouvrez maintenant le fichier de configuration de BIND (/etc/named.conf, /etc/bind/named.conf, suivant la distribution), et ajoutez-y les sections suivantes:

1) La clef elle-même:

Code:

key "serveur.exemple.com." {
        algorithm HMAC-MD5;
        secret "blahblahblahblahblah";
};

2) La zone dynamique, avec une référence vers la clef:

Code:

zone "serveur.exemple.com" IN {
        type master;
        file "/var/named/serveur.zone";
        update-policy {
                grant serveur.exemple.com. name serveur.exemple.com. A;
        };
        allow-transfer { none; };
        notify no;
};

puis rechargez la configuration de BIND:

Code:

rndc reload

Copiez les deux fichier Kserveur.exemple.com.+157+??????.* sur serveur.exemple.com au moyen d'un canal sécurisé. (scp, disquette, ...)

Reste un moyen de découvrir l'adresse IP locale pour déclencher une mise a jour. Exemple de script:

Code:

#!/bin/bash
# (C) BOFH 2006

INTERFACE='eth0' #interface a mettre a jour
HOSTNAME='serveur.exemple.com' #nom DNS
NS='ns.exemple.com'  #Serveur responsable pour la zone
KEYFILE='/etc/Kserveur.exemple.com.+157+??????.private'
TTL='86400'  # TTL de l'enregistrement

# Extraction de l'adresse actuelle avec l'outil d'iproute2
CURRENT_IP=`ip addr show dev $INTERFACE |grep inet |cut '-d ' -f6 |cut -d/ -f1`

# Ancienne IP via host
# on ignore les problèmes, vu que dans ce cas il faudra mettre a jour de toute
# facon
OLD_IP=`host $HOSTNAME |cut '-d ' -f4`

if [ "$CURRENT_IP" = "$OLD_IP" ]
then
        echo "L'adresse n'a pas changé." >&2
else
        (echo "server $NS"
         echo "zone $HOSTNAME"
         echo "update delete $HOSTNAME A"
         echo "update add ${HOSTNAME}. $TTL A $CURRENT_IP"
         echo "send" ) | nsupdate -k '$KEYFILE'
         echo "OK"
fi

serveur.exemple.com et ns.exemple.com doivent avoir leurs horloges synchronisées pour
que les clefs TSIG fonctionnent, donc ntp est recommandé, et la configuration du fuseau horaire doit être correcte.

Hors ligne

 

Pied de page des forums

Powered by FluxBB