Le but initial de ma manœuvre est de pouvoir connaitre l'IP externe de la maison à tout moment, afin d'accéder à un service quelconque sur une machine de mon réseau local.

Le concept est assez simple :

  1. j'ai un script PHP sur le serveur qui héberge ce blog.
  2. j'envoie régulièrement (disons toutes les 10 minutes) une requête http sur ce script depuis la maison.
  3. le script côté serveur récupère l'IP qui l'appelle, et la stocke quelque part (base de données, fichier...)
  4. depuis une page du serveur, je peux désormais accéder à l'IP de chez moi !

Côté serveur, basiquement voici la chose. Je l'ai appelé ping.php.

[php]

//Récupère l'IP du client :

$clientIp = $_SERVER["REMOTE_ADDR"];

//Enregistre l'IP dans un fichier texte. $f = fopen("ip", "w"); fwrite($f, $clientIp); fclose($f);

[/php]

C'est tout... Pour le moment. Parce que si jamais un petit rigolo s'amuse à ouvrir cette page, c'est son IP qui va être mémorisée, et du coup ce n'est pas top. Avec une bonne vieille authentification HTTP, le problème sera résolu.

 

Côté client, on va avoir besoin d'un script shell qui va appeler ping.php à intervalles réguliers. Quelque chose comme :

[shell]

!/bin/sh

La boucle est infinie

while [ 1 -ne 0 ] do

Charge la page

wget http://dirtymarmotte.net/redir/ping.php

Efface le fichier téléchargé, pour être propre

rm ping.php

On y retournera dans 10 minutes

sleep 600s done

[/shell]

Notez qu'on pourrait tout aussi bien créer une tache cron pour lancer le wget.

A partir de là, nous avons tout ce qu'il faut pour effectuer une redirection vers la maison, depuis une page de notre serveur.

Un peu de PHP :

[php] <?php //Lit l'adresse de la maison $ip = file_get_contents("ip");

//Construit l'URL pour pointer sur la webcam $url = "http://$ip:8081";

?> [/php]

Et sur la même page, un peu de HTML pour charger la page dans un iframe:

[html] <html> <body>

<div><?php echo $url ?></div> <iframe width="100%" height="100%" src="<?php echo $url ?>"> </iframe>

</body> </html> [/html]

Et en plus, ça fonctionne ! on peut même envisager une redirection http avec un en-tête Location.

Bon, ce n'est pas vraiment du DNS dynamique, car le système se limite à un accès par navigateur. Mais en tout cas, cela me permet de connaître à tout moment l'IP de la maison, et à partir de là, je peux établir une connexion arbitraire (ssh, ftp, ou ce que je veux).

Article précédent Article suivant