Se passer de DynDNS et autres noip.com

(English version here)

Récemment j'ai eu besoin d'accéder à un équipement (A) qui hébergeait un serveur et qui était derrière une box (LiveBox) laquelle, bien sûr, n'avait pas d'adresse fixe (ca marche aussi pour les adresses fixes).

DynsDNS étant devenu payant et noip.com me paraissant contraignant, j'ai utilisé une solution très simple que je vais vous décrire dans le détail.

Pour cela, j'ai eu besoin de :

  • Un compte chez un FAI qui offre un hébergement (je suis chez free) pour y créer un site dans le "CLOUD"
  • Deux pages php sur ce site (que je vais détailler)
  • Un petit script sur l'équipement 'A' qui accède tous les jours à ce site

Principe

Régulièrement l'équipement A accède à une page php sur le site (enregistre.php). Celle-ci voit donc l'adresse WAN de la box et l'écrit dans un petit fichier sur le serveur qui héberge le site (equipa.txt).
Lorsque je veux accéder à mon équipement (je suis le client), je tape une url vers une autre page php de mon site (aller.php sur mon dessin) qui lit l'adresse écrite dans ce fichier et me redirige vers cette adresse.
Bien sûr, cela n'empèche pas de configurer une route NAT sur la box pour atteindre l'équipement final (plus de détails sur le NAT ici).

Le site

Pour l'exemple, imaginons que c'est http://site.free.fr.

L'équipement A

La meilleure manière que j'ai trouvée est d'utiliser wget. Sur Windows téléchargez-le ; sur Linux il y est de base sur beaucoup de versions semble-t-il.
wget
sert à télécharger une page HTML à l'adresse qu'on lui donne.
Je fais donc :
wget 'http://site.free.fr/enregistre.php?nom=equipa&mdp=monmotdepasse'
En fait je fais :
wget -q --spider 'http://site.free.fr/enregistre.php?nom=equipa&mdp=monmotdepasse'
L'option -q (quiet) supprime tous les messages en sortie.
L'option --spider indique à wget de ne rien télécharger (mais il y accède quand même ce qui nous suffit).
Les quotes simples (les apostrophes) servent à empêcher Linux d'interprèter pas le signe &

Cette commande peut être mise dans une tâche répétitive de Windows (dans un .BAT ou un .VBS) ou dans un cron sous Linux.
"equipa" est un nom qui représente, pour moi, l'équipement A. Mettez ce que vous voulez (le hostname sous linux par exemple). Evitez quand même les espaces, les accents, cédilles etc.
Le mot de passe empêche qu'un robot ou autre y mette "par erreur" une info non désirée.
La page enregistre.php qui récupère donc cette connexion contient : (Voir le code)

Vous pouvez changer, bien sur, monmotdepasse par ce que vous voulez pourvu d'utiliser mettre le même avec wget.
Ceci crée donc equipa.txt dans un dossier redir et qui contient l'adresse de la box telle qu'elle est vue de l'extérieur.

Le lien magique

Pour l'exemple, on va supposer que l'adresse aujourd'hui est : 90.1.30.45
Alors quand je veux accéder à mon équipement depuis n'importe où, je tape dans mon navigateur :
http://site.free.fr/aller.php?nom=equipa
ou même :
http://site.free.fr/aller.php?nom=equipa&port=7000
Et ma page aller.php me retrouve l'adresse de 'equipa' pour m'aiguiller vers :
http://90.1.30.45:7000/ (Voir le code)

Avec les paramètres vus dans le code, je me paye même le luxe de pouvoir spécifier en option :
  • Si c'est http ou https (avec l'option &secure)
  • un numéro de port (pour aider le NAT de la box à savoir quoi faire)
  • Une page particulière (autre que index.html)
Genre :
http://site.free.fr/aller.php?nom=equipa&port=7000&page=appli.htm
Et voilà !
Vous voulez essayer sur mon site ?

Des questions ?
Écrivez-moi à migrigaut at gmail point com


Améliorations depuis la première version :

  • Une nouvelle version permet de passer des paramètres à la page appelée (comprenez la page finale de l'équipement A) :
    http://site.free.fr/aller.php?nom=equipa&page=app.php&Params=var=ab,foo=1,t=4
    Qui est transformée en : http://90.1.30.45/app.php?var=ab&foo=1&t=4
  • Une autre version propose maintenant un mot de passe différent pour chacun avec un script d'enregistrement (login/mdp classique).