logo banniere

S'il n'y a pas de solution c'est qu'il n'y a pas de problème!


Adsl pptp sous linux



Avant de rentrer dans le vif du sujet

Les informations ci dessous permettent (je suis d'un naturel optimiste) de configurer une connexion adsl (protocole pptp, pour pppoe voir gegeweb) sous Linux grâce à un abonnement netissimo de France Telecom. Vous y trouverez aussi des scripts de lancement, de reconnexion automatique en cas de coupure et d'update automatique d'un nom de domaine dynamique chez www.dyndns.org grâce au client ipcheckip.py (voir plus bas)
Ces scripts de connexion-reconnexion ont été adaptés pour pppoa et les modems alcatel usb avec les drivers de Benoit Papillaut, voir § à la fin de cette page.

Vous avez donc:

  1. un ordinateur qui tourne sous Linux, noyau 2.2.* (merci à Raphaël Bouaziz qui m'a informé que le noyau 2.0.* fonctionnait aussi parfaitement bien) compilé avec ppp activé (dans le noyau ou sous forme de module). Au 9/9/2001, j'ai fait des tests sous 2.4.4, cela fonctionne aussi, sous réserve de patcher pptp, voir plus loin. Si vous vous posez déjà des questions, une petite formation Linux est sans doute à envisager! Entrez la commande:
    grep CONFIG_PPP /usr/src/linux/.config
    

    si la réponse est`y' ou `m', ça devrait aller, voir le Kernel-HOWTO, ou la version française du Kernel-HOWTO pour plus d'informations ou encore kernelconfig.free.fr qui est pratique et en français!
    Alternativement, vous pouvez entrer les commmandes suivantes si vous n'avez pas les sources du noyau sur votre machine:

    find /lib/modules -name "ppp.o"
    dmesg | grep PPP
    

    Vous pouvez considérez que si l'une ou l'autre de ces commandes vous renvoie "du texte", c'est que PPP est présent dans le noyau.

  2. une carte ethernet disponible et installée dans le dit ordinateur (cela s'achète chez un Taiwanais ou ailleurs, n'achetez pas du bas de gamme, ça ne coûte pas très cher et ça évite bien des problèmes. Vous devez disposer d'un noyau qui gère cette carte, pour plus d'info, voir Ethernet-HOWTO, ou l'Ethernet-HOWTO en français.
  3. pris rendez vous avec France Telecom au 10 14  qui vous a installé un filtre, un modem Alcatel (si c'est un ECI, vous n'êtes pas sur la bonne page, il faut vous renseigner sur les connexions PPOE, allez par exemple sur http://perso.club-internet.fr/oje/adslpage ou encore chez l'excellent gegeweb)
  4. une ligne adsl opérationnelle testée par le technicien de France Telecom qui a effectué l'installation
  5. pris un abonnement ADSL chez un Fournisseur d'Accès à Internet (liste des fournisseurs disponible chez insomnews) qui vous a donné les informations suivantes:
    • nom d'utilisateur
    • mot de passe utilisateur
    • adresse des serveurs de nom (DNS)
    • adresse email
    • mot de passe email
    • nom des serveurs de mail (en général pop et smtp)

Si vous vous abonnez par téléphone et que votre correspondant ne sait pas vous donner les noms de DNS et/ou mail, vous trouverez tout ça à insomnews

Avec tout ça on passe à l'installation

Installation du client pptp

Vous avez besoin du client pptp que vous pouvez téléchargez ici: pptp.tar.gz (clique droit, enregistrez sous si vous faites ça depuis Windows et Internet Explorer, il faut bien survivre!!)

Pour l'installer, vous allez bien être obligés de quitter Windows et de vous connecter root sur votre machine...

Dans un terminal, placez vous dans le répertoire où vous avez mis le fichier pptp.tar.gz et lancez la commande:

tar -zxf pptp.tar.gz

Vous avez maintenant un répertoire pptp.

Si vous avez un noyau 2.4, télécharger inet_addr.c et pptp_callmgr.c et remplacez les fichiers d'origine du répertoire pptp par ceux-ci.

Exécutez:

cd pptp
make

si tout s'est bien passé vous disposez d'un exécutable pptp. Copiez le fichiez pptp dans le répertoire /usr/sbin:

cp pptp /usr/sbin/pptp

Installation de ppp

Vous avez besoin de ppp généralement disponible dans toute distribution ou chez ftp://cs.anu.edu.au/pub/software/ppp/. Si vous l'installez "à la main, procédure analogue à pptp (après avoir récupéré l'archive ppp-2.3.11.tar.gz à l'adresse ci dessus):

tar -zxf ppp-2.3.11
cd ppp
./configure
make all install

Configuration de ppp

Les fichiers de configuration se trouvent dans /etc/ppp, /etc/ppp/options et /etc/ppp/pap-secrets. Si vous avez déjà utilisé ppp (pour une connexion internet par modem par exemple) ces fichiers peuvent déjà exister.

Dans /etc/ppp/options, vous devez avoir au minimum les lignes suivantes:

name "nom_utilisateur"
noauth
defaultroute
noipdefault
lcp-echo-interval 120
lcp-echo-failure 3
nodetach

nom_utilisateur est celui qui vous a été fourni par votre FAI. Vous pouvez rajouter debug pour localiser d'éventuels problèmes.

nauth permet de ne pas demander d'authentification à la machine distante sur laquelle vous vous connectez.

noipdefault permet à votre FAI de vous attribuer une adresse IP (peut-être modifié si vous avez un IP fixe, veinard!).

lcp-echo-interval donne en secondes un intervalle d'envois d'échos sur la machine distante.

lcp-echo-failure donne le nombre successif d'échos sans réponse qui déclenche un arrêt de ppp (utile pour détecter un dysfonctionnement du réseau). J'ai choisi 2 minutes entre 2 échos et l'arrêt de ppp si 3 échos successifs sont restés sans réponses. Vous pouvez ne pas utiliser ces paramètres si vous n'avez pas besoin d'automatiser les reconnexions. Ces deux paramètres, en conjonction avec les scripts checkip et uddns (voir plus loin) devraient permettre d'avoir des reconnexions avec des "trous" de taille minimale.

nodetach permet à ppp de ne pas être un process détaché et permet de garder un log de ses messages (dans /var/log/adsl dans les scripts adsl, checkip et ddns). Enlevez cette options si vous ne souhaitez pas utiliser les infos émanant de ppp.

Dans /etc/ppp/pap-secrets, vous devez rajoutez votre nom d'utilsateur et votre mot de passe sous la forme:

"nom_utilisateur"   *   "mot_de_passe"
Vérifiez bien que ce fichier n'est lisible que de root:
chmod go-rwx /etc/ppp/pap-secrets

Installation du réseau

Si vous n'avez qu'une seule carte réseau (celle où est connectée le modem), elle s'appelle eth0, sinon voyez dans /var/log/boot.msg comment elle s'appelle (eth0, eth1, eth2,...). Si ce fichier n'est pas présent, vous pouvez tenter un dmesg | eth. Le résultat devrait vous dire qui est qui à moins que vous n'ayez plusieurs cartes du même modèle, auquel cas il faudra les tester une par une (avec ping par exemple, voir plus bas).

Configurez l'adresse IP de cette carte en 10.0.0.1 en utilisant la procédure de votre distribution, soit en rajoutant:

ifconfig eth0 10.0.0.1

à votre script d'initialisation si eth0 est le nom de votre carte réseau. Il n'est pas nécessaire de configurer de masque de sous-réseau ni de passerelle par défaut, en fait il ne faut pas de passerelle par défaut.

ATTENTION: il est essentiel de ne pas configurer votre carte réseau en full duplex. Par exemple avec une carte 3com 3C595, le paramètre à ajouter à /etc/modules.conf (si vous utilisez un chargement du pilote par module) ou au paramétrage du noyau (si votre driver y est compilé) est full_duplex=0. Reportez vous à la doc de votre carte réseau et au module correspondant. sous Linux.
Remarque: le fichier modules.conf sous SuSe s'appelle conf.modules chez Red Hat ou Slackware.

Si vous avez un réseau local (et donc deux cartes Ethernet), je vous conseille de lui attribuer un autre sous réseau (par exemple 192.168.1.*) afin de clarifier les choses si vous utiliser samba par exemple. De toutes façons, vous allez bien être connecté à deux réseaux: votre "gentil" réseau interne et le grand méchant Internet...

Il est indispensable que la carte réseau attachée au modem ait un IP de la forme 10.0.0.*, car l'adresse du modem est configurée de manière interne à 10.0.0.138.

Pour vérifier l'état de votre réseau et du modem, lancez:

ping 10.0.0.1    # Pour tester la carte Ethernet
ping 10.0.0.138 # Pour tester le modem.

S'ils ne répondent pas, il va falloir revoir votre configuration réseau.

Configurez ensuite les adresses des serveurs de nom. Faites le soit par la procédure de votre distribution en y indiquant les adresses des serveurs de noms (DNS) communiqués par votre FAI, ou à la main entrez:

nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx

dans le fichier /etc/resolv.conf où xxx.xxx.xxx.xxx sont les adresses des serveurs de noms.

Ne configurez aucune passerelle par défaut.

Lancement manuel de la connexion

Cela se fait par la commande:

pptp 10.0.0.138

Devraient apparaître les messages de pptp et ppp vous informant de l'avancement de la connexion:

  • Montée de ppp0
  • Adresse IP locale
  • Adresse IP distante

Ca y est, vous pouvez aller chercher votre maillot et votre surf et/ou ouvrir une bouteille de Champagne!!

Un Ctrl- C dans la fenêtre ou vous avez lancé pptp suffit normalement à couper la connexion. Mais:

killall pptp
killall pppd
rm -rf /var/run/pptp

vous assure de pouvoir vous reconnecter proprement. pptp ne "rend pas pas la main" après avoir été lancé. Pour le lancer depuis un script, il faudra l'éxécuter en tâche de fond (&): de toutes façons, si vous avez l'adsl, c'est bien pour rester connecté en permanence et faire fortune grâce au futur serveur web que vous allez pourvoir bientôt mettre en place, non? Alors passons aux scripts de connexion, reconnexion et update de dns automatiques.

Scripts de connexion, reconnexion et update de dns

Quand je n'avais pas d'ip fixe (merci Nerim), j'utilisais un nom de domaine dynamique (et gratuit) à www.dyndns.org. Si vous voulez faire de même, prenez un nom d'utilisateur et un mot de passe chez eux, et configurez manuellement sur leur site votre IP et nom de domaine (en fait j'ai à présent la chance d'avoir un ip fixe gratuit chez Nerim, mais je continue à utiliser dyndns comme fournisseur de nom de domaine sur ip fixe pour d'autres serveurs hébergés chez linux-sottises)

Il existe plusieurs clients de mise à jour d'ip chez dyndns.org, je conseille le script python ipcheck.py qui a de nombreux avantages: mise à jours de plusieurs hôtes en une seule ligne, non exécution des mises à jours abusives ou inutiles, mise à jour au bout du délai imparti par dyndns en cas de non changement d'ip. Vous avez naturellement besoin d'installer Python... Voir http://ipcheck.sourceforge.net/ pour tous les détails et les mises à jour et http://support.dyndns.org/dyndns/clients/unix.shtml pour la liste des clients de mise à jour d'ip sous linux chez dyndns.

Le script adsl permet de lancer, arrêter et relancer la connexion, ainsi que checkip et uddns. Si vous n'avez pas besoin de uddns, commentez les lignes de adsl qui concernent uddns.

Le script checkip tourne en tâche de fond pour vérifier l'état de la connexion.

Le script uddns met à jour votre IP chez www.dyndns.org.
Dans uddns, remplissez login, password et la liste de vos noms de domaine. J'ai aussi fait figurer la configuration "test" de dyndns sur une ligne commentée par un #... Je vous conseille de tester votre configuration avec ce login/passwd de test.

Tous ces scripts sont contrôlés par un fichier de configuration que j'ai arbitrairement placé à /etc/adsl.conf. Vous pouvez changer cet emplacement, à condition de modifier les scripts eux-mêmes. Ce fichier contient les emplacements des programmes que les scripts utilisent. Ainsi, le mien contient :

ADSL=/etc/rc.d
CHECKIP=/usr/local/adsl
DDNS=/usr/local/adsl
DELAY=60
IFCONFIG=/sbin
IPDELAY=120
DDNSDELAY=  10
LOG=/var/log/adsl
MODEM=10.0.0.138
PPTP=/usr/sbin
  • ADSL est l'endroit où vous avez mis le script adsl
  • CHECKIP celui où vous avez mis checkip
  • DDNS celui où vous avez mis ipcheck.py
  • DELAY est le temps de latence de redémarrage (pour éviter les problèmes d'authentification après une déconnexion) vous estimez qu'attendre une minute votre ADSL est trop long, vous pouvez essayer de le reduire ("j'ai personnellement mis 10 s" déclare William Steve Applegate, moi je l'ai mis à 0, mais sur certaines connexions, il est nécessaire de le remonter...). Si le script adsl commence à émettre des erreurs, remontez la valeur de DELAY.
  • IFCONFIG s'obtient en tapant which ifconfig,
  • IPDELAY est le temps (en secondes) entre deux lancements de checkip.
  • DDNSDELAY est un paramètre de temporisation dans uddns au cas où la connexion soit un peu longue à se mettre en route (uddns tente la mise à jour tant que "ça ne marche pas" et est "tué" de toutes façons si checkip voit que la connexion est perdue)
  • LOG est l'endroit où vous voulez mettre les informations récueillies par les scripts.
  • MODEM n'est rien d'autre que l'IP du modem (a priori toujours 10.0.0.138).
  • PPTP idem (which pptp).

uddns récupère votre adresse IP actuelle, vous informe de son éventuel changement dans le log, et lance la mise à jour chez dyndns avec ipcheckip.py . L'adresse "précédente" est stockée dans $CHECKIP/pptp.ip. Il est donc nécessaire (uniquement pour la première fois où vous utilisez ce script) de créer un premier fichier pptp.ip dans le répertoire $CHECKIP (mettez n'importe quoi dedans)

Voilà pour la configuration.

J'ai installé par défaut adsl dans /etc/rc.d (ce qui correspond à la configuration pour les distributions SuSE et Red Hat.
Sur une Debian, le script irait dans /etc/init.d).
Il faut ensuite créer un lien sur ce fichier de la forme S??adsl dans le répertoire qui va bien avec votre distribution (autrement dit, chacune a ses spécificités et il n'y a hélas pas de solution générique). En admettant que vous vouliez l'ADSL lorsque vous démarrez en mode graphique, il vous faudra mettre le lien dans /etc/rc.d/rc3.d sur une SuSE "ancienne", et dans /etc/rc.d/rc5.d sur une Red Hat/Mandrake/SuSE "récente" ; quant à la Debian, quel que soit le mode, c'est dans /etc/rc2.d (le runlevel par défaut) qu'il faut mettre le lien.
Pour ce qui est des `??', vous devez les remplacer par un chiffre, qui indiquera à quel moment du lancement le script sera appelé. Si vous utilisez des clients réseau tels NTP, il faut que le script se charge avant eux (ainsi, si ntpdate est lancé par S22ntpdate, vous pouvez par exemple charger le script par S15adsl). D'autre part, il n'est pas inintelligent de penser à stopper le démon correctement. Ceci se fait par un lien de la forme K??adsl qui doit être placé au moins dans les répertoires rc0.d et rc6.d, éventuellement rc1.d.
En fait, l'initialisation System V demanderait un paragraphe à elle seule, le mieux est que vous étudiiez les scripts et liens dans ces répertoires pour en saisir le principe.

La syntaxe de adsl est classique :

adsl {start|stop|status|restart}

adsl start lance aussi checkip et uddns.

Il est possible que lors de l'arrêt (adsl stop ou par le lien dans /etc), vous obteniez une erreur du style « uddns: no process killed ». Ceci est normal, il n'y a pas lieu de s'affoler. Si vous êtes un(e) maniaque, vous pouvez modifier dans adsl le killall correspondant en rajoutant > /dev/null 2>&1.

J'ai placé les scripts checkip et uddns dans /usr/local/adsl. Mais vous pouvez les installer ailleurs, modifiez en conséquence le fichier de configuration /etc/adsl.conf.

checkip teste toutes les IPDELAY secondes que votre connexion est OK et l'arrête proprement et la relance si elle est coupée. Le test de connexion se fait en regardant si l'interface ppp0 est active (en plus des echos sur le peer de connexion dans /etc/ppp/options.

Ces trois scripts inscrivent tous leurs messages dans LOG que vous pourrez consulter pour trouver les dates et raisons des arrêts-redémarrages de votre machine et les updates de votre adresse de nom de domaine.

À présent que tout ça fonctionne (peut-être même auriez-vous dû le faire auparavant !), vous devriez installer un pare-feu : vous venez d'ouvrir en permanence la porte de votre domicile à la jungle d'Internet. Voir Partage et pare-feu.

Adaptation des scripts pour pppoa, modem alcatel usb avec drivers de Benoit Papillaut

Une page est désormais dédiée à ce sujet: speedtouch-usb

Tous les commentaires ou découvertes de bugs sur ces derniers scripts sont les bienvenus à tnka at linux-sottises.net


Dernière modification le jeudi 17 avril 2003 à 00:38:30 Paris
Webmaster: TNK
Valid HTML 4.01! Valid CSS! quanta anybrowser suse powered by

linux apache mod_gzip php mysql openssl modssl