Next Previous Contents

4. Configuration d'un serveur de connexion par ligne téléphonique sousLinux

v1.3, 13 février 1999, publié dans le Numéro 38 de la Linux Gazette

Par Josh Gentry

Mars 1999

4.1 Résumé

Ce document est un guide pas à pas de la configuration d'un serveur d'accès sous Linux qui autorise des connexions SLIP et PPP sur une ligne téléphonique.

Copyright 1999 Josh Gentry

La redistribution de ce document est encouragée, qu'elle soit commerciale ou non commerciale. Je souhaiterais être averti de toute redistribution. Il ne vous est PAS permis de modifier le contenu de ce document bien que je n'ai que faire des changements de présentation.

Remerciements

Pour la plus grande part, les informations contenues dans ce document ont été glanées dans les HOWTO suivants du LDP (Linux Documentation Project) :

Beaucoup d'informations ont été trouvées dans la documentation en ligne de Gert Doering pour mgetty+sendfax. De plus, les documents ont été d'une grande aide dans la configuration d'AutoPPP dans mgetty :

La plupart des informations sur PAP ont été tirées du Guide des Administrateurs Réseaux sous Linux (NAG) d'Olaf Kirch's et la base de données de support de S.u.S.E. ( http://wi-pc44.fh-konstanz.de/support-db/sdb_e/kfr_17.html).

La majorité des informations de ce document a été originellement rassemblée dans l'optique de configuration d'un serveur par connexion téléphonique sous un Linux RedHat 5.1 pour Mr. James Hart. Mr. James Hart est un professeur au Technical/Vocational Institute d'Albuquerque, NM. Tony Lucero a été mon assistant pour ce projet. Leur aide et leurs conseils ont été d'un grand prix.

Pour finir, merci à tous ceux qui ont contribué au développement du noyau Linux et d'applications Linux. Ce document est ma modeste contribution à leurs efforts.

Garantie

Ce document ne comporte pas de garantie explicite ou implicite. Il n'y a également aucune garantie que les informations contenues dans ce document sont fiables. Il est offert dans l'espoir de pouvoir être utile aux autres mais son utilisation est à vos risques et périls. L'auteur ne saurait être tenu responsable de quelque dommage que ce soit qui résulterait de l'utilisation de ce document.

4.2 Introduction

Un serveur de connexion par ligne téléphonique est un hôte équipé d'un modem et d'une ligne téléphonique qui permet à d'autres hôtes équipés eux aussi d'un modem et d'une ligne téléphonique de l'appeler et de s'y connecter. Il existe plusieurs raisons pour lesquelles quelqu'un voudrait faire cela; pour utiliser les ressources du serveur ou, si le serveur est sur un réseau, pour employer le serveur comme point de connexion au réseau. De plus, si le réseau local est connecté à Internet, le client sera alors en mesure d'accéder à Internet via le serveur.

Raison d'être

La majorité des informations nécessaires pour la configuration d'un serveur de connexion par ligne téléphonique sous Linux est disponible via les HOWTOs du LDP. Cependant, quand j'ai consulté ces documents pour configurer un tel serveur, la fragmentation des informations s'est trouvée être un problème majeur. Ce document rassemble la plupart des informations nécessaires et les présente sous la forme d'un guide pas à pas.

Ce document comme guide

Configurer un serveur de connexion par ligne téléphonique est une tâche courante mais pas simple de mise en oeuvre. Ce document tend à présenter de manière rigoureuse sous forme de guide les étapes à suivre pour y arriver. Il est cependant probable que vous aurez à faire appel à d'autres documents. Les HOWTOs du LDP mentionnés ci-dessus sont des compagnons de valeur de ce document et devraient être consultés dans l'ordre indiqué ci-dessus. Par ailleurs, ne négligez pas la documentation fournie avec vos paquetages getty et PPP.

Clients et serveurs

Les protocoles utilisés pour connecter deux hôtes via une ligne téléphonique sont techniquement des protocoles point à point; il n'y a aucune différence réelle entre la machine appelante et la machine appelée. Cependant, conceptuellement parlant, il est plus simple de penser en termes de client/serveur. "Quand vous composez le numéro d'un site pour établir une connexion PPP, vous êtes un client. La machine à laquelle vous vous connectez est le serveur." ( Linux PPP HOWTO de Hart). J'utiliserai cette convention tout au long de ce document.

Configurer un serveur par connexion téléphonique consiste en :

Différences entre les distributions Linux

Mon expérience se base sur la RedHat Linux 5.1. Je pense que la plupart des informations contenues dans ce document s'appliquera à toutes les distributions. Lorsque j'ai connaissance ou je suspecte l'existence de différences entre les distributions, je le mentionne dans le texte.

Paquetages logiciels traités

4.3 Installation d'un modem

Pour qu'un hôte puisse faire office de serveur de connexion par ligne téléphonique, il doit être physiquement possible de lui téléphoner. Ceci nécessite que l'hôte ait au moins un modem et une ligne téléphonique. Les modems sont des périphériques série, il est donc vivement recommandé de lire le Serial HOWTO Linux ainsi que le Modem HOWTO Linux.

Type de modem

Les modems Plug-and-Play ne sont pas très bien supportés par Linux. Ceci signifie qu'il vous faut plutôt un modem configurable par jumper ou un modem externe. Commencez par demander à votre revendeur quelle marque il vous recommande.

Ports

Les ports série, comme tous les ports d'E/S, ont une adresse. Par défaut, Linux initialise quatre périphériques série. Ils peuvent vous être familiers sous la dénomination que leur donne Microsoft : COM 1-4. Sous Linux, ces ports sont référencés comme ttyS0-ttyS3. Par exemple, le port COM1 pour Microsoft sera ttyS0 sous Linux.

Veuillez noter que si vous utilisez une adresse de port différente des quatre mentionnées plus haut, vous devrez initialiser ce port avec setserial. Voir la page de manuel de setserial.

Les modems externes se branchent sur les ports série externes (RS-232) de votre PC. Ces ports reçoivent automatiquement une adresse sous Linux.

Les modems internes se connectent sur les ports internes PCI ou ISA de votre PC. Un modem interne est en fait à la fois un modem et un port série. Il en intègre un et c'est le port série de votre modem que vous connectez sur le port interne. Pour ces modems, vous choisissez l'adresse du port sur le modem. C'est pourquoi il vous faut un modem configurable par jumper. Vous utilisez les jumpers pour choisir manuellement l'adresse et l'IRQ. La documentation de votre modem devrait expliquer comment régler les jumpers en fonction de l'adresse du port et de l'IRQ.

Veuillez noter que si votre PC dispose de deux ports série externes (RS-232) comme c'est le cas pour la plupart des PC, le Modem HOW-TO Linux vous recommande de prendre comme adresse de votre modem interne ttyS2 ou plus.

4.4 Support par le noyau

Vous entrez dans la partie de la configuration qui est la plus susceptible de faire peur aux nouveaux venus à Linux. Cela m'a fait peur. Ceci dit, ce n'est pas aussi dur que cela semble être et si vous faites une erreur, il vous suffit de recompiler une nouvelle fois votre noyau. Je vous recommande de lire le Linux Kernel HOWTO.

Il existe une alternative à la compilation du gestionnaire PPP dans le noyau. Vous pouvez installer le gestionnaire en tant que module chargeable. Les avantages consistent en l'absence de recompilation et en la taille inférieure du noyau Linux. Le gestionnaire est lié au noyau et chargé dans l'espace mémoire seulement quand il le faut. Je pense que l'argument qui peut faire préférer la compilation du gestionnaire dans le noyau est que PPP s'exécute plus vite s'il est compilé dans le noyau.

Vous pouvez lier le module chargeable au noyau en recompilant le noyau comme décrit ci-dessous mais, comme Matt Kressel me l'a fait remarquer, si vous avez ma commande insmod installée sur votre système, il n'est pas nécessaier d'effectuer la recompilation. Exécutez la commande insmod ppp pour installer le gestionnaire PPP sous forme de module chargeable. J'ai découvert qu'il me fallait exécuter la commande insmod slhc avant de pouvoir installer le PPP avec la commande insmod ppp . Je ne sais pas trop pourquoi mais insmod ppp ne fonctionnera pas sans le module slhc. La commande lsmod liste les modules chargeables installés sur le système au moment de son appel. C'est également une commande pour retirer des modules. Si ces commandes sont installées sur votre système, il serait bon que vous lisiez les pages de manuel. Faites un man insmod pour plus d'information.

4.5 Noyau et code source

Le noyau est un binaire, un programme exécutable. Les développeurs n'écrivent pas le noyau comme un exécutable, ils écrivent du code qui est donné à un compilateur qui produit alors l'exécutable à partir du code source.

Avec Linux, vous disposez du code source qui est utilisé pour produire le noyau exécutable. Ceci signifie que vous pouvez adapter votre noyau à vos besoins en incluant seulement les fonctionnalités qu'il vous faut : le résultat sera un noyau plus juste et plus petit. De ce fait, vous ne pouvez considérer qu'un noyau inclut le support de tâches spécialisées telles que celles que requiert le fonctionnement en réseau. Il va vous falloir le vérifier et, si votre noyau ne contient pas le support nécessaire, il va vous falloir recompiler votre noyau.

Recompiler le noyau

Pour compiler le noyau, vous créez un fichier de configuration. Vous pouvez consulter le fichier de configuration actuel pour voir si les fonctionnalités nécessaires sont déjà compilées dans votre noyau. La plupart des serveurs de connexion par ligne téléphonique seront des hôtes sur un réseau local. Ce document assume que l'hôte est déjà configuré comme une partie intégrante du réseau local. Si ce n'est pas le cas, vous devriez aller chercher des informations dans d'autres documents du LDP avant de continuer, le Guide des Administrateurs Réseaux sous Linux par exemple.

Je préfère utiliser xconfig. C'est un outil graphique qui permet la visualisation et la modification du fichier de configuration du noyau. Il nécessite qu'X Window soit installé et lancé. Par ailleurs, Tk doit aussi être installé. Dans xconfig, vous trouverez les options concernant le support de PPP et SLIP dans la catégorie Périphériques réseau ("Network devices"). Ceux-ci doivent être supportés par un serveur de connexion par ligne téléphonique. Si le serveur doit assurer un accès à un réseau, le noyau doit fournir le support pour la transmission IP. Dans xconfig, on trouve cette fonctionnalité dans la catégorie Options réseau ("Network options").

Si vous devez recompiler le noyau, il est grandement recommandé de lire le Kernel HOWTO Linux. Voici les étapes de base :

  1. Faites une copie de votre noyau actuel en cas de problème
  2. cd /usr/src/linux-(numéro de version du noyau)
  3. Exécutez la commande make config. Si vous êtes sous X-windows, vous pouvez essayer make xconfig pour utiliser une interface à cliquer de ce processus.
  4. Dites "yes" à toutes les options de réseau concernées : SLIP, PPP, transmission IP, etc (votre réseau local devrait déjà être configuré).
  5. Sauvez et quittez
  6. Exécutez la commande make dep
  7. Exécutez la commande make clean
  8. Exécutez la commande make zImage
  9. cd /usr/src/linux-(numéro de version du noyau)/arch/i386/boot
  10. cp zImage /vmlinuz (où l'endroit où se trouve votre noyau
  11. Exécutez la commande lilo

Cela devrait suffire. Le Kernel HOWTO Linux indique qu'il devrait vous être possible d'exécuter la commande make zlilo après que vous ayez construit le zImage et qu'en faisant cela, zlilo copiera et installera le nouveau noyau pour vous. Cela n'a toutefois pas fonctionné sur mon système.

4.6 Getty

Vous aurez besoin d'un getty pour pouvoir gérer les communications par modem. Une fois démarré, généralement à partir de inittab, le getty tourne en tâche de fond. Votre getty modem sera en veille jusqu'à ce que le modem reçoive un appel. À partir de ce moment, il va répondre au téléphone et négocier les détails de la communication de modem à modem avec le client. Il existe plusieurs getty qui peuvent être utilisés pour cette tâche. Vous pouvez récupérer le paquetage mgetty+sendfax et la documentation officielle sur le site web de Gert Doering à http://www.leo.org/~doering/mgetty. C'était inclus dans la RedHat 5.1 et résidait dans /sbin/mgetty et /etc/mgetty+sendfax.

Veuillez noter que chaque fois que vous voyez quelque chose tel que /sbin/mgetty, c'est simplement le chemin vers le fichier. Les fichiers peuvent se situer à des emplacements différents dans l'arborescence de machines différentes et selon la distribution. De plus, le chemin vers le fichier devrait être différent. Vous devrez vérifier l'emplacement de tous les fichiers nécessaires sur le système.

Il y a de nombreuses options à mgetty que vous pouvez éditer pour adapter votre configuration, la plupart se situant dans /etc/mgetty+sendfax/mgetty.config. Référez vous à la documentation de mgetty si vous avez besoin d'effectuer des changements aux valeurs par défaut. Les valeurs par défaut ont fonctionné pour nous. Si vous voulez activer AutoPPP, vous devrez éditer /etc/mgetty+sendfax/login.config. Des instructions détaillées à ce sujet apparaissent un peu plus loin dans cette section.

Pour démarrer mgetty, éditez /etc/inittab. Encore une autre étape pour laquelle les HOWTO sur les périphériques série et modem seront utiles. Vous devez indiquer à mgetty quels ports série il doit surveiller. Sous Linux, ces ports sont numérotés de 0 à 3 et sont dénommés ttyS* pour la connexion par ligne téléphonique. Pour un modem installé par nos soins sur le troisième port interne, nous avons ajouté cette ligne à /etc/inittab :

S2:2345:respawn:/sbin/mgetty ttyS2 -D /dev/ttyS2

L'option -D dit à mgetty de n'attendre que des données, pas des faxs. Après avoir effectué cette modification, exécutez la commande kill -1 1 pour forcer initd à relire inittab. Cela permettra que mgetty se lance.

Veuillez noter que si vous utilisez une carte à port série multiple, ces ports peuvent porter d'autres noms que ceux des 4 ports que Linux intialise par défaut. Dans son excellent document sur mgetty et AutoPPP, Mick Dennis signale que les ports sur sa Cyclade Cyclom 16YeP s'appellent /dev/ttyC*.

En utilisant les réglages par défaut, mgetty négocie une connexion SLIP (Protocole Internet sur Ligne Série) et permet l'authentification par le biais de /etc/passwd. C'est un système fonctionnel qui permet à un utilisateur de se loguer sur un compte shell. Si vous le souhaitez, un dispositif peut permettre aux utilisateurs de démarrer pppd après s'être logué par le biais de la connexion SLIP. Tout d'abord, assurez vous que tous les utiisateurs ont le droit d'exécuter pppd en exécuant la commande :

chmod u+s /usr/sbin/pppd

Ajoutez ensuite cette ligne à /etc/bashrc :

alias ppp="exec /usr/sbin/pppd -detach"

Par ce biais, après que l'utilisateur se soit logué par l'intermédiaire de la connexion SLIP, ils peuvent démarrer pppd en tapant ppp. Cette manière de procéder provient du PPP HOWTO Linux de Robert Hart. Une autre option est de créer un compte PPP. L'entrée dans /etc/passwd devrait être du type :

ppp:x:351:230:pppclient:/home/ppp:/usr/sbin/pppd

Quand un utilisateur se connecte, il se logue simplement en tant que ppp. Une fois qu'ils ont donné un mot de passe, pppd démarre automatiquement.

Pour que les clients Microsoft fonctionnent sous cette configuration, le client doit être configuré de manière à fournir un écran de terminal après la connexion. Cela n'est pas le comportement par défaut. Voici les étapes à franchir sous Windows 95 :

  1. Cliquez sur Poste de travail
  2. Cliquez sur Connexion à distance
  3. Faites un clic droit sur l'icône de la connexion
  4. Cliquez sur Propriétés
  5. Cliquez sur Configurer
  6. Cliquez sur Options
  7. Cliquez sur la boîte à côté de "Afficher un fenêtre terminal après la composition du numéro"

AutoPPP et mgetty

La plupart des utilisateurs de Windows n'apprécieront pas de devoir utiliser un écran de login après la connexion au serveur. Il est possible pour l'administrateur système de supprimer cette étape supplémentaire en tirant parti de la possibilité qu'a mgetty de démarrer pppd à l'intialisation d'une connexion. Pour ce faire, vous activez AutoPPP.

Compiler mgetty

Note : plusieurs personnes m'ont signalé que quand ils décidaient d'installer mgetty à partir de leur distribution Redhat 5.2, mgetty était d'ores-et-déjà compilé de manière à inclure AutoPPP.

Pour qu'AutoPPP fonctionne, vous devez éditer le makefile avant la compilation. Aux environs de la ligne 110, il vous faudra indiquer :

CFLAGS=-02 -Wall -pipe -DAUTO_PPP

Après cette modification, compilez mgetty en suivant les instructions qui figurent dans la documentation de mgetty.

Ensuite, il vous faut éditer /etc/mgetty+sendfax/login.config de manière à ce qu'il ressemble à cela aux alentours de la ligne 50 :

/AutoPPP/ - - /usr/sbin/pppd file /etc/ppp/options.server

Une fois que vous avez fini ces étapes de configuration, mgetty démarrera automatiquement pppd quand il recevra la requête de configuration de LCP. (Pour plus d'informations sur LCP, voyez la page de manuel de pppd.) L'option file dit à pppd de lire le fichier /etc/ppp/options.server à la place du fichier par défaut /etc/ppp/options. Compte tenu du fait que pppd utilise /etc/ppp/options par défaut quand il agit en client ou en serveur (souvenez vous que c'est du point-à-point), utiliser cette option vous aide à conserver les options souhaitées séparées pour les rôles de client et de serveur.

En considérant que vous avez édité /etc/mgetty+sendfax/mgetty.config selon vos désirs, vous avez fini. Veuillez noter qu'à chaque fois que vous changez les options pour un processus, le processus doit être redémarré avant que les nouvelles options puissent prendre effet.

Si vous voulez être en mesure de composer un numéro avec un modem qui est contrôlé par mgetty, il vous faudra faire attention au périphérique que le programme de communication utilise. Voir http://www.leo.org/~doering/mgetty/mgetty_10.html#SEC10.

4.7 PPP (Protocole Point-à-Point)

Le protocole Point-à-Point est le protocole le plus populaire utilisé pour la connexion d'hôtes par une ligne téléphonique.

Compiler pppd

Référez vous à la documentation du paquetage PPP. Si vous souhaitez utiliser les shadow passwords, il vous faudra utiliser la commande suivante :

make HAS_SHADOW=1

Pour utiliser l'option MS-DNS pour la compatibilité et les shadow, utilisez :

make USE_MS_DNS=1 HAS_SHADOW=1

Pour plus d'informations à ce sujet, référez vous à http://oh3tr.ele.tut.fi/~oh3fg/ppp/ppps.html.

Configuration de pppd

Le PPP se configure en éditant les fichiers d'options lus par pppd dans /etc/ppp. Rappelez-vous que dans cette configuration, pppd lira /etc/ppp/options.server lorsqu'il sera démarré par mgetty. La liste la plus complète des options de pppd que j'ai trouvée se trouve dans la page de manuel de pppd. Si vous n'utilisez pas PAP ou CHAP, votre fichier /etc/ppp/options.server devrait être du genre :


-detach
asyncmap 0
modem
crtscts
lock
proxyarp
ms-dns aa.bb.cc.dd
ms-dns ee.ff.gg.hh

Sa signification est la suivante :

-detach

ne pas faire de fork pour devenir un processus en tâche de fond

asyncmap 0

pour permettre à pppd de fonctionner sur une connexion rlogin ou telnet

modem

utiliser les lignes de contrôle du modem

crtscts

utiliser le contrôle de flux matériel

lock

spécifie que pppd utilise le verrouillage de style UUCP sur le périphérique série

proxyarp

ajoute une entrée dans la table ARP avec l'adresse IP du client et l'adresse IP du NIC

ms-dns

spécifie l'adresse du serveur DNS à utiliser par les clients Microsoft (Autant que je sache, il n'existe pas d'option équivalente pour les clients non-Microsoft. Un client Linux doit avoir l'adresse du DNS dans le /etc/hosts.)

Configuration avec PAP

PAP (Protocole d'Authentification par Password) est l'un des deux protocoles que PPP utilise pour l'authentification des postes. L'autre protocole s'appelle CHAP (Challenge Handshake Authentication Protocol). CHAP est un protocole bien plus sécurisé mais n'est pas aussi supporté que PAP. Par là même, ce document ne traite que de l'utilisation de PAP. Pour plus d'informations sur PAP et CHAP, voyez le Guide de l'Administrateur Réseau sous Linux d'Olaf Kirch.

Compte tenu du fait que PPP est un protocole point à point, PAP autorise l'authentification dans les deux sens. Ceci signifie que non seulement le serveur peut demander au client de s'authentifier mais que l'inverse est également possible. Dans la pratique, on ne le fait pas souvent. La plupart des serveurs PPP ne sont pas configurés pour s'authentifier auprès de clients. authenticate themselves to clients.

Il n'est pas difficile de configurer votre serveur PPP pour l'utilisation de PAP. Ajoutez simplement ce qui suit à votre fichier /etc/ppp/options.server :


require-pap
refuse-chap

Sous cette configuration, pppd vérifiera les logins et les mots de passe des clients en se basant sur le fichier /etc/ppp/pap-secrets. Le client ne verra sa connexion acceptée que dans le cas où il correspond à une entrée de /etc/ppp/pap-secrets.

Par exemple :

#user           server      secret        addrs 
jdoe               *        password       * 

Si les champs server et addres sont renseignés, le client ne se verra autoriser l'accès que si le login et le mot de passe proviennent du serveur et de l'adresse IP ou du nom de domaine pleinement qualifié indiqués.

PAP en utilisant /etc/password

Si vous ne voulez pas créer une entrée dans /etc/ppp/pap-secrets pour chaque client auquel vous autorisez l'accès PPP, vous pouvez dire à pppd de chercher les logins et les mots de passe dans /etc/passwd plutôt que dans /etc/ppp/pap-secrets. Ajoutez l'option login dans /etc/ppp/options.server. Dans cette configuration, votre fichier /etc/ppp/options.server ressemblera à cela :


-detach
asyncmap 0
modem
crtscts
lock
require-pap
refuse-chap
login
proxyarp
ms-dns aa.bb.cc.dd
ms-dns ee.ff.gg.hh

Si l'option login est utilisée, le fichier /etc/ppp/pap-secrets n'a pas besoin d'exister. En fait, il peut même interférer avec le bon fonctionnement de PAP. Vous pouvez effacer le fichier ou bien lui faire contenir la ligne suivante :

* * ""

L'avantage de maintenir un /etc/ppp/pap-secrets qui comporte cette ligne est que cela vous laisse le choix d'interdire l'accès PPP à des comptes individuels qui possèdent une entrée dans /etc/passwd. Pour ce faire, au-dessus de la ligne indiquée plus haut, mettez la ligne suivante :

username * -

username est le nom d'utilisateur du compte auquel vous voulez interdire l'accès PPP. Par exemple :

#user           server          secret        addrs 
   *              *               ""            * 
jdoe              *               -             * 

Allocation d'adresse IP avec PPP

Pour que PPP fonctionne, le client doit avoir une adresse IP. La plupart des clients de connexion n'auront pas leur propre adresse IP, il est donc nécessaire d'assigner une adresse IP au port série à travers lequel le client se connecte. Plut tôt, nous avons créé un fichier d'options PPP qui spécifie la configuration des connexions PPP que fournit le serveur dans /etc/ppp/options.server. Il est également possible de créer un fichier d'options qui soit spécifique aux connexions effectuées sur un port série donné. Par exemple, pour créer un fichier pour ttyS2, vous créez ke fichier /etc/ppp/options.ttyS2.

Une des options qui peut être mentionnée dans un tel fichier est l'adresse IP assigné au port pour les connexions PPP. Voici le format de cette option :

ii.jj.kk.ll:mm.nn.oo.pp

La première adresse IP, de gauche à droite, est l'adresse IP du serveur. La seconde adresse IP est l'adresse assignée au port série pour les connexions PPP.

Veuillez noter qu'il est extrêmement important pour vous de vérifier que l'adresse IP que vous assignez est une adresse IP valide sur votre sous-réseau et qu'elle n'est pas assignée à un autre périphérique sur le réseau.

4.8 Félicitations

Voilà, c'est fini.

Tout retour quant à ce document sera apprécié : contactez moi via mon email jgentry@swcp.com.

----------------------------------------------------------------

Copyright © 1998, Josh Gentry - Adaptation française de Pierre Tane

"Linux Gazette...making Linux just a little more fun!"


Next Previous Contents