Librox blog

À deux, c’est mieux

Accueil > Serveur > Serveur derrière IP dynamique

Serveur derrière IP dynamique

mercredi 29 juin 2011

Ou comment héberger des sites sur son propre serveur Debian quand on n’a qu’une IP dynamique à disposition. Voici comment mettre à jour les conf de BIND9 avec la nouvelle IP quand celle-ci change.

  1. Enregistrez-vous sur dyndns.org et configurez votre box pour utiliser votre compte dyndns.
    On va prendre librox.dyndns.org pour l’exemple
  2. Vous disposez d’un domaine qu’on va appeler librox.net dans ce sujet.
  3. Dans le pannel de conf de votre domaine chez votre registrar (1&1 pour moi), créez un sous domaine : ns.librox.net (où ce que vous voulez) qui pointe vers librox.dyndns.org (enregistrement CNAME)
  4. Sur votre serveur branché chez vous, vous avez une Debian squeeze aux petits oignons avec un BIND9 qui va vous permettre de gérer votre domaine librox.net et de créer des sous domaine.
    Le problème est que quand on crée des sous-domaines, il faut dire à BIND9 quelle est l’IP publique qui héberge le sous-domaine. A priori cette IP sera l’IP publique de votre serveur mais celle-ci change puisque vous êtes en IP dynamique. Qu’à cela ne tienne, configurez BIND9 avec votre IP actuelle, on va voir comment la mettre à jour automatiquement lors d’un changement. [1]
  5. Voici le programme élaboré et testé par mes soins qui permet de mettre à jour automatiquement les fichiers de conf de BIND (à copier dans le dossier qui contient les fichiers de conf de BIND /var/lib/bind/ mais ça dépend de votre serveur) :

# !/bin/bash
#Ce programme vérifie toutes les minutes si l’ip externe du serveur a changé
#Si c’est le cas, il change toutes les anciennes ip des fichier de conf des domaines de bind
#et il reload bind ; puis il repart pour un tour
#remplacez /var/lib/bind/ par l’emplacement de vos fichiers de conf de Bind

dropout="false" #pour boucler à l’infini
while [ $dropout == "false" ] ; do
#récupération de l’adresse ip actuelle dans la variable ipnew
ipnew=`wget http://blog.majoux.net/myip -O - -o /dev/null`
#récupération de la précédente ip dans la variable ipold
#(c’est la dernière ligne du fichier ip)
ipold=`tail -1 /var/lib/bind/ip`
#si l’ip actuelle est différente de la précédente ip
if [ $ipnew != $ipold ] ; then #alors
date >> /var/lib/bind/ip #on écrit la date et l’heure à la suite du fichier ip
echo $ipnew >> /var/lib/bind/ip #à la ligne on écrit l’ip actuelle
sed -i "s/$ipold/$ipnew/g" /var/lib/bind/*.hosts #on parcours tous les fichiers .hosts du répertoir /var/lib/bind et on remplace toutes les ip anciennes par la nouvelle ip
sudo /etc/init.d/bind9 reload #On reload bind
sleep 60 #on attend 60s avant de reboucler
else
sleep 60 #si c’est la même ip, on attend 60s avant de reboucler
fi
done

J’utilise un petit code php sur un serveur extérieur qui me donne mon IP publique. Voici ce code :
mettez le sur un site quelconque et remplacez l’adresse de mon fichier (http://blog.majoux.net/myip) par le votre.

Enfin, pour le lancer automatiquement au démarrage, ajoutez cette ligne à la fin de votre fichier /etc/init.d/rc.local :

sh /var/lib/bind/dynip-to-fixip.sh


[1Il faut bien comprendre que pour la configuration de BIND9, qu’on ait une IP fixe ou dynamique, ça ne change rien. Faites comme si vous avez une IP fixe avec votre IP actuelle. Faites vos tests, les sous domaines doivent fonctionner tant que votre IP n’a pas changé. Le programme qui suit mettra à jour vos fichiers de conf.

Messages

  • Merci pour le petit tuto et le script !
    En fait, j’ai un environnement un peu différent : un NAS avec un client no-ip et une Debian à l’extérieur de chez moi avec un Bind dessus. Le NAS va mettre à jour no-ip régulièrement et mon domaine sur le bind sera à jour aussi grâce au CNAME :)
    Nickel ! Merci encore.