Page suivante Page précédente Table des matières

9. Votre propre domaine sur une liaison commutée intermittente.

Par Joe Merlino.

9.1 Introduction

Vous aimez votre sysème Linux. Vous en appréciez sa puissance, sa souplesse. Vous aimez la liberté. Vous aimez réellement son indépendance absolue à l'égard de Microsoft. Mais au plus profond de vous-même, vous savez qu'il manque quelque chose. Un désir ardent vous dévore, avec un impérieux besoin d'être assouvi.

Ce quelque chose, vos amis, qui ont des connexions éthernet à plein temps le possèdent. Ils peuvent se connecter à leurs machines Linux n'importe quand. Ils ont leur propres noms de domaines. Vous avez même probablement un compte sur l'une de leurs machines. Mais, voyons pourquoi vous êtes vous en êtes là. C'est certain, votre modem est très rapide, mais il ne se connecte que lorsque vous le lui commandez, et vous ne pouvez pas le faire si vous n'êtes pas connecté. Même si vous le paramétrez pour tourner en tâche cron, vous ne saurez toujours pas comment y accéder par telnet puisque votre ISP (fournisseur de service Internet) vous attribue une adresse IP différente à chaque connexion.

Comment obtenir un accès à distance ?

Ne désespérez pas. Il existe un moyen. Pour le prix d'un compte réseau comuté PPP, vous pouvez obtenir cet accès à distance si précieux. Et si vous êtes prêt à payer le coût d'InterNIC (vous pouvez trouver soixante dix dollars, n'est-ce pas ?) vous pouvez même posséder votre propre domaine. Voici comment  :

9.2 Étape n°1 - Mise en service de PPP

La méthode générale de configuration de PPP est bien documentée un peu partout, donc, je ne vais pas en parler ici sauf pour dire que vous devez configurer PPP pour qu'il fonctionne de façon non interactive à partir d'une ligne de commande. Le programmes à interface graphique qui lancent PPP tels que EZPPP ou netcfg de RedHat ne fonctionneront pas. Ceci est du au fait que vous allez créer un script qui doit être lancé en tant que tâche cron, et que ce script doit pouvoir appeler votre script de connexion PPP.

Pour les besoins de cet article, j'ai appelé mon script de connexion PPP /etc/ppp/ppp-on, et le script de fin de connexion PPP /etc/ppp/ppp-off. Vous devriez pouvoir trouver des exemples de ce genre de script sur le web.

9.3 Étape n° 2 - DNS dynamique

Vous obtenez probablement votre Service de Noms de Domaines (DNS - Domain Name Service) par l'intermédiaire de votre fournisseur de service internet (ISP), mais, celui-ci ne garde pas de trace de votre connexion particulière car celle-ci change à chaque fois que vous vous connectez. Votre ISP procède ainsi car il a plus d'utilisateurs qu'il ne dispose d'adresses IP. C'est normal si l'on considère que la plupart des gens ne se connectent que pour des périodes courtes, une paire d'heures au plus. Vous pouvez probablement obtenir une connexion à temps plein et une adresse IP statique chez votre ISP, mais, dans ce cas, c'est vraiment très cher.

En réalité, vous n'avez pas besoin d'une adresse IP statique pour posséder un nom de domaine constant. Dans la mesure où le Serveur de Noms de Domaines où réside votre domaine connait votre adresse IP *à chaque instant*, vous pouvez accéder à votre machine. Et le serveur DNS où réside votre domaine n'a pas besoin d'être le même que celui qui appartient à votre ISP.

J'utilise le service fourni par une société nommée Dyndns (www.dyndns.com). Dyndns, pour un certain prix, maintient votre nom de domaine dans sa base de données. Le nom de domaine que vous avez peut être soit un sous-domaine de l'un des leurs (i.e. votre_domaine.dyndns.com), solution la plus économique, soit, vous pouvez posséder votre nom de domaine propre (i.e. votre_domaine.com), ce qui est beaucoup plus cher.
Si vous voulez votre propre nom de domaine, il faudra d'abord enregistrer votre nom de domaine auprès de l'InterNIC (www.internic.net). Dyndns peut le faire pour vous moyennant finances, mais c'est facile à faire et vous pouvez le faire vous-même et économiser de l'argent. Lorsque vous vous enregistrez auprès de l'InterNIC, vous devez fournir les adresses IP primaire et secondaire du serveur DNS. Ces adresses sont disponibles sur la page web de Dyndns. Une fois que tout est fait (lire : que vous avez payé), vous êtes prêt pour vous lancer.

La chose suivante à faire consiste à télécharger un programme client du site web de Dyndns. Vous pouvez choisir parmi deux clients différents (un en C et un en Perl), et il vous faudra peut-être faire quelques expériences pour savoir quel est le meilleur pour vous (et même, j'ai eu un ami qui a été obligé de bidouiller le client Perl pour le faire fonctionner).

Quand vous êtes connecté chez votre ISP, vous faites tourner le programme client. Ce programme client récupère votre adresse IP courante de la sortie de la commande ifconfig, et la renvoie au serveur DNS de Dyndns. Il y a maintenant un pointeur de votre nom de domaine sur votre machine.

[Note : rien de ce que j'ai dit dans cette section ne doit être considéré comme un support ou une publicité de Dyndns. J'ai utilisé leur service comme exemple car c'est celui que j'utilise et qui m'est familier.]

9.4 Étape n° 3 - Automatisation de la connexion

Vous avez le nom de domaine, vous avez le service DNS et le programme client fonctionne. Maintenant vous avez besoin d'un moyen qui permette à votre ordinateur de se connecter à votre ISP sans que vous soyez physiquement présent pour le faire. Ah, les merveilles de Linux !. Cela est réalisable à l'aide d'un simple script pour l'interpréteur de commandes. Voici celui que j'utilise  :

#!/bin/bash

#  Voici un script qui tente de se connecter à distance par réseau commuté
#  et d'établir une connexion PPP connection. Si cela réussi, il lance
#  'ntpdate' (network clock set), NamedControl.pl (un script perl script 
#  pour mettre à jour le DNS dynamique), ainsi que fetchmail pour tous 
#  les comptes. S'il échoue, il fait deux tentatives puis abandonne.

#  Ce script est fourni selon les termes de la Licence Publique Générale GNU.
#  Aucune garantie, implicite ou explicite, quelle qu'elle soit, n'est donnée.

#  La version originale a été écrite par Joe Merlino <joe@negia.net>, 
#  November, 1997.

#  Si vous avez une idée pour améliorer ce script, merci de m'en faire part
#  know. 

#  initialiser le compteur de boucle à 1
i=1
while [ $i -le 3 ]
  do

    #  Cette partie teste la disponibilité du modem. Si le modem
    #  est disponible, il lance /etc/ppp/ppp-on. Sinon, il rend compte
    #  et abandonne.

    (
    if (test -e /var/lock/LCK..modem)
      then 
        echo modem not available  # for some reason this didn't work. 
        exit 0
      else
        /etc/ppp/ppp-on
        sleep 45
     fi
    )

    #  Cette partie teste le fichier verrou du modem, et s'il existe, lance
    #  les différents programmes nécessaires pour mettre à jour le système à
    #  partir du réseau. Si le fichier verrou n'est pas trouvé, il rend compte
    #  et abandonne.

    (
    #!/bin/bash
    if (test -e /var/lock/LCK..modem)
      then  
        /etc/ppp/netpack  #invoke 'netpack' script
        echo done
      else
       echo no connection
    fi
    )
    sleep 60

      #  Cette partie teste à nouveau la présence du fichier verrou, et
      #  s'il le trouve, met le compteur d'itérations à 4 ( de façon à sortir
      #  du script). Si le fichier verrou n'est pas trouvé, il incrémente
      #  le compteur d'une unité.

      if (test -e /var/lock/LCK..modem)
        then
          i=3
      fi
      i=`expr $i + 1`
      echo $i
  done
Vous noterez que ce script en appelle un autre, netpack. J'ai procédé de cette façon car il y a un ensemble de choses que j'aime voir réalisées lorsque ma machine se connecte. Au strict minimum, netpack doit inclure votre script client DNS dynamique. Je recommanderai aussi de lui inclure tout ce que vous utiliser pour récupérer votre courrier électronique (e.g. fetchmail ou popclient ou autre). Il doit être également possible de remplacer la ligne qui appelle netpack par une série de lignes qui appellent différents programmes, mais j'aime la nature modulaire de cette architecture car je peux éditer netpack tout seul.

J'ai placé ce script (que j'ai appelé auto-up) et netpack dans /etc/ppp

Une fois que vous avez réalisé toute cette configuration, essayez de la faire tourner manuellement pour voir si cela fonctionne. (N'oubliez pas de vous donner les droits d'exécution). Une fois que vous avez vérifié que cela fonctionne, faites-en une tâche cron (avec la commande crontab -e) pour lancer tout ce que à quoi vous voulez pouvoir accéder à distance sur votre machine Linux. Configurez également /etc/ppp/ppp-off pour qu'il tourne lorsque vous voulez que la connexion se termine.

[Note : certains ISP ont une limite de temps pendant laquelle on peut être connecté sans qu'il ne se passe rien sur la ligne. Ceci pour éviter que certains ne se connectent et ne laissent leurs ordinateurs contamment connectés. Faites attention à la politique de votre ISP à ce sujet.]

Et voilà. Vous avez maintenant un accès à distance à votre machine pendant certaines périodes. Maintenant, vous pouvez commencer à languir après une connexion à temps plein.

Addendum : entre le moment où j'ai écrit cet article et la parution de ce numéro de la Linux Gazette, DynDNS a ajouté un système de mise à jour par le web à ses méthodes existantes. Cela signifie que vous pouvez mettre à jour DynDNS manuellement, avec votre butineur.

Cela nous fourni l'opportunité d'écrire un autre client Perl. Celui-ci peut être beaucoup plus compact, et devrait fonctionner «à la mise en place» avec une simple petite bidouille, indispensable, pour mettre les coordonnées de vote compte.

Si vous soulez l'utiliser, copiez simplement le texte compris entre les lignes ---Coupez ici--- dans un fichier, accordez-vous le droit de l'exécuter, et utilisez-le à la place de l'autre programme client.

---------------Coupez ici------------------

  
#!/usr/bin/perl

#
# Script client pour la mise à jour par HTTP du service de Domaine Dynamique
# de DynDNS.
# Ecrit par Joe Merlino  12/31/98
# Licence: GNU GPL
#

use IO::Socket;

# Replacer les valeurs ci-dessous par vos informations comme indiqué 

$host = "master.dyndns.com";
$myhost = "myhost";             #remplacer par votre nom d'hôte (hostname)
$myname = "postmaster";         
$mypass = "mypass";             #remplacer par votre mot de passe (password)


# This part opens a connection to DynDNS's web server.
$remote = IO::Socket::INET->new(
        Proto => "tcp",
        PeerAddr => "$host",
        PeerPort => "http(80)"
        ) 
        or die "couldn't open $host";

# Cette partie envoie une requête HTTP contenant les informations 
# vous concernant.
print $remote "GET /dyndns/cgi/DynDNSWeb.cgi?name=$myname&passwd=$mypass&domain=$myhost&IP=AUTO HTTP/1.0\n\n";


# Cette partie extrait et imprime la réponse de DynDNS.
while ($hrm = <$remote>) {

        if ($hrm =~ /UPDATE/) {
                $message = $hrm
        }

        if ($line =~ /THERE/) {
                $message = $hrm
        }
}

print "DynDNS: $message";

-close $remote;
---------------Coupez ici------------------

_______________________________________________________________________________

Copyright © 1999, Joe Merlino - Publié dans le n°36 de la Linux Gazette, janvier 1999.

Adaptation française de Albert-Paul Bouillot


Page suivante Page précédente Table des matières