Les notes de Clément

Spécialiste de rien // Partageur de tout
Billets avec le mot-clé administration

Utilisation d’un DNS dynamique

Comme vous le savez, je possède depuis peu un Raspberry Pi, et j’y ai installé un serveur web. J’ai écrit un billet là dessus, et à ce moment là, pour accéder à ce site web, je m’étais passé d’utiliser un service de DNS dynamique, et il fallait donc que j’utilise directement l’adresse IP de ma box SFR. Non seulement ce n’est pas pratique, mais en plus, si l’adresse IP change (on redémarre la box par exemple), c’est embêtant. J’avais donc fait un script pour détecter un changement d’adresse IP, chargé de m’envoyé un e-mail.

Bref, ce n’était pas très sérieux ! Heureusement, un collègue (@Toumt4m) m’a éclairé sur l’utilisation pratique du DNS dynamique !

C’est quoi le DNS ?

N’étant pas un spécialiste, je me garderai bien de vouloir vous expliquer en détail les mécanismes du DNS. Mais en quelques mots, c’est l’annuaire d’internet. En effet, chaque site web est hébergé sur un ordinateur. Un ordinateur qui doit donc être relié à internet, il a ainsi une adresse IP. Pour accéder au site web qu’il héberge, il suffit alors de taper l’adresse IP dans son navigateur. Vous voulez visiter google.fr, rien de plus simple : 74.125.230.215

Seulement voilà, ce n’est pas très simple de retenir toutes ces adresses IP, donc le DNS nous permet de retenir le nom de domaine du site, et il se chargera pour nous de le traduire vers l’adresse IP correspondante. Si vous voulez en savoir plus, un bon point de départ est la page Wikipédia : wikipedia.org/wiki/Domain_Name_System

Finalement, lorsque l’adresse IP du serveur qui héberge notre site web peut changer, il faut utiliser un service de DNS dynamique qui permet de mettre à jour en temps réel le DNS. Nous allons donc voir comment utiliser un tel service.

Inscription au service

Il existe pléthore de sites proposant ce type de service, j’ai personnellement opté pour dnsdynamic.org (si vous en connaissez des mieux, ça m’intéresse !). C’est très simple, il suffit de s’inscrire, puis d’ajouter un sous-domaine comme mon-rpi.dnsdynamic.com et de lui associer son adresse IP. Pour connaître votre adresse IP externe, vous pouvez par exemple allez sur le site ipogre.com (si curl est installé sur votre Raspberry, tapé curl ipogre.com dans un terminal).

Voilà ! Maintenant, en tapant mon-rpi.dnsdynamic.com dans votre navigateur, vous devriez tomber sur le site web que vous hébergez sur votre Raspberry. Mais celà fonctionne également pour vous connecter en ssh par exemple (à condition d’avoir redirigé correctement le port de votre serveur ssh…).

Mise à jour automatique

Si votre adresse IP change, il y a plus simple que de se connecter sur dnsdynamic.org pour mettre à jour votre sous-domaine. Vous pouvez utiliser l’API de ce site. En pratique, il vous suffit d’installer ddclient :

		sudo apt-get install ddclient
	

Vous pouvez ensuite reprendre le fichier de configuration /etc/ddclient.conf proposé, en modifiant identifiant, mot de passe et nom du sous-domaine choisi :

	   # Configuration file for ddclient generated by debconf
		#
		# /etc/ddclient.conf

		daemon=60                           # check every 60 seconds
		syslog=yes                          # log update msgs to syslog
		mail=root                           # mail all msgs to root
		mail-failure=root                   # mail failed update msgs to root
		pid=/var/run/ddclient.pid           # record PID in file.
		ssl=yes                             # use ssl-support.  Works with
												# ssl-library
		use=web, web=myip.dnsdynamic.com    # get ip from server.
		server=www.dnsdynamic.org           # default server
		login=votre_adresse@mail.com        # default login
		password=votre_mot_de_passe         # default password
		server=www.dnsdynamic.org,          \
		protocol=dyndns2                    \
		mon-rpi.dnsdynamic.com
	

Ce logiciel s’exécute ensuite comme un démon, mais vous pouvez également le lancer en ligne de commande en faisant :

		ddclient -daemon=0 -verbose
	

J’ai personnelement ajouté cette ligne à mon script (voir le billet …), c’est pas très propre mais comme ça je recevrai toujours l’e-mail en plus.

Raspberry Pi : installation d’un serveur web

Dans ce billet, je vais décrire comment j’ai installé un serveur web sur mon Raspberry Pi, mais surtout comment j’ai configuré mon installation sachant que mon fournisseur d’accès est SFR.

Dans la première moitié, je décris l’installation du serveur et la configuration minimale pour tester. Et dans la seconde partie, je décris comment s’en sortir sans adresse IP fixe (comme c’est le cas chez SFR).

MODIFICATION : j’ai finalement réussi à utilisé un service de DNS dynamique, qui me permet de ne pas forcément utiliser mon script compliqué : voir ce billet

Installation du serveur et configuration minimale

Installation du serveur

On va installer un serveur web, communément appelé LAMP, pour Linux / Apache / MySQL / PHP. Avec ça vous aurez de quoi faire tourner un petit site web, avec base de données et pages dynamiques. Il suffit d’installer les paquets suivants :

	sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql

La racine de votre site se situe alors dans le dossier /var/www/ et si vous allez sur la page localhost:80, vous devriez voir la page par défaut d’Apache qui dit « It Works! ».

Trouver son adresse IP externe

Il y a plusieurs façon de faire : vous pouvez vous rendre sur l’interface de votre box 192.168.1.1 et l’adresse IP est alors visible en haut à droite. Vous pouvez également utiliser un site web tel que ipogre.com (nous l’utiliserons d’ailleurs dans la seconde partie).

Mais si vous donner cette adresse IP à quelqu’un pour qu’il puisse voir le site web hebergé sur votre Raspberry, cela ne marchera pas car il « atterrira » sur la box ! On va donc voir comment la paramétrer dans la suite.

Paramètrer sa box

Par défaut, lorsqu’un nouvel équipement se connecte à la box (wifi ou ethernet), elle lui attribue une adresse IP locale aléatoire du type 192.168.1.XX. Pour que le Raspberry soit toujours à la même adresse (ce sera mieux pour le retrouver), on va demander à la box de lui attribuer une IP locale fixe. Il faut aller sur l’interface de la box (localhost:80), dans l’onglet DHCP de la section Réseau. Regarder l’aide de SFR à ce sujet qui est très bien faire : Héberger son site web à la maison avec sa box.

Maintenant, il faut rediriger le port 80 (celui du serveur web) vers votre Raspberry. C’est aussi expliqué sur la page d’aide de SFR, et il suffit d’ajouter une règle NAT. D’ailleurs, vous pouvez en profiter pour ajouter d’autres règles. En redirigeant également le port 22, vous pourrez vous connecter en ssh à votre Raspberry depuis n’importe où !

Test

Vous pouvez maintenant donner votre adresse IP externe à votre fameux ami qui meurt d’envie de voir le site web que vous hébergez sur votre Raspberry. Disons que cette adresse est A.B.C.D, s’il se rend à l’adresse A.B.C.D sur son navigateur, il atterrira sur votre site ! Si vous testez de chez vous, vous arriverez sur l’interface de la box, ce qui est moins intéressant, utilisez l’adresse IP locale de votre raspberry.

 

Script pour ne pas utiliser DynDNS

Chez SFR, l’adresse IP de votre box change régulièrement, et il est possible de souscrire à un service de DNS dynamique pour que l’adresse mon-rpi.dyndns.fr redirige toujours vers votre box. Seulement je n’ai pas réussi ! Il faut normalement aller dans l’onglet DynDNS de la section Réseau de l’interface de la box, mais le dervide dyndns.fr n’est pas présent, et donc j’ai préféré m’en passer pour l’instant.

Pour ne pas être bloqué, on m’a soufflé l’idée suivante : faire un script qui vérifie si l’adresse IP a changée, si oui le script doit m’envoyer un mail avec la nouvelle adresse IP. Puis il suffit de faire s’exécuter ce script automatiquement à intervalles réguliers.

Le script

On va mettre le script dans le répertoire /usr/local/bin/ipcheck.sh :

#!/bin/bash
IPFILE=/etc/ipaddress

CURRENT_IP=$(curl ipogre.com)

MAIL_TO=votre_adresse@domaine.fr

if [ -f $IPFILE ]; then
	KNOWN_IP=$(cat $IPFILE)
	else
	KNOWN_IP=
fi

if [ "$CURRENT_IP" != "$KNOWN_IP" ]; then
	echo $CURRENT_IP > $IPFILE

	MAIL_SUBJECT="L'adresse IP du RPI a changé !"
	MAIL_BODY="C'est maintenant $CURRENT_IP"

	echo $MAIL_BODY | mail -s "$MAIL_SUBJECT" $MAIL_TO
	logger -t ipcheck -- Nouvelle adresse IP : $CURRENT_IP
else
	logger -t ipcheck -- Même adresse IP.
fi

Donc l’adresse IP va être stockée dans le fichier /etc/ipaddress et on utilise le site ipogre.com pour récupérer l’adresse externe. Puis on compare l’ancienne adresse avec la courante, et si ce n’est pas la même, on envoie le mail. Voyons maintenant ce qu’il faut installer et configurer pour que tout marche bien.

Installation curl

Je ne sais plus s’il est installé de base dans Raspbian, dans le doute :

	sudo apt-get install curl

Envoi de mail

La partie qui risque de poser problème concerne l’envoi de mail. Car la commande mail ne fait qu’appeler le MTA installé localement. J’ai opté pour ssmtp qui est très simple à installer et configurer :

sudo apt-get install ssmtp

Je l’ai configurer pour utilisé mon compte Gmail pour les envois. Il faut alors éditer le fichier /etc/ssmtp/ssmtp.conf pour modifier les lignes suivantes :

mailhub=smtp.gmail.com:587
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=votre_login_gmail
AuthPass=votre_mot_de_passe_gmail

Attention, votre mot de passe Gmail n’est pas crypté, il faut donc s’assurer que le fichier ne sera pas lisible par n’importe qui ! :

sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chown root:mail /etc/ssmtp/ssmtp.conf

Cron du script

On va « croner » ce script pour qu’il s’exécute automatiquement toutes les heures. Comme il n’y a que l’utilisateur root (cf. le chown à l’étape précédente), il faut ajouter la tâche en sudo :

	sudo crontab -e

Et ajouter la ligne suivante :

0 * * * * /usr/local/bin/ipcheck.sh >/dev/null 2>&1

Voilà ! Maintenant, toutes les heures, votre RPi vérifiera que son adresse IP externe n’a pas changée. Si elle a en effet changée, il vous enverra un e-mail pour vous donner la nouvelle adresse. Vous pourrez également voir le log dans le fichier /var/log/user.log, en utilisant la commande tail par exemple.

Conclusion

Bien sûr, le gros problème avec cette solution (sans DNS dynamique), est qu’il vous faudra prévenir vos amis à chaque changement d’adresse IP ! Ce n’est bien sûr pas une solution viable pour un vrai site (mais fait uniquement pour partager avec des amis), et il faudra alors songer à acheter un vrai nom de domaine, associé à une solution de DNS dynamique.

N’hésitez pas à me faire part de toute remarques / corrections / erreurs !