Création d'un serveur PPP sous LINUX

Pierre Ficheux (pierre@alienor.fr)

Septembre 1998


0. Résumé

Cet article décrit la mise en place d'un serveur PPP sous LINUX. Ce serveur pourra être accessible depuis n'importe quel système équipé d'un modem et d'un logiciel d'accès à un réseau distant supportant le protocole PPP. Ceci permettra par exemple de créer simplement un BBS (Bulletin Board System) accessible depuis un navigateur standard. Ce type d'accès est très ineressant pour donner la possibilité à des utilisateur éloignés d'accèder à un Intranet d'entreprise.

La distribution LINUX utilisée dans cet exemple de configuration est une RedHat 5.0 version française.

1. Comment accèder à LINUX par modem ?

Un serveur LINUX équipé d'un modem peut être facilement accèdé depuis une machine distante en utilisant un terminal équipé d'une modem, un micro ordinateur ou même un simple Minitel (voirs article du numéro 1 de LMF). LINUX utilise pour cela un programme bien connu sur toutes les versions d'UNIX appelé getty. Le comportement de getty est paramètrable entre-autres par le fichier /etc/inittab :
# Run gettys in standard runlevels
1:12345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6


Dans l'exemple ci-dessus, le PC utilise 6 consoles virtuelles. Ce fichier devra être modifié ultérieurement afin de permettre l'utilisation d'une entrée modem.

2. Qu'est-ce que PPP ?

PPP (Point to Point Protocol), permet d'accèder à un réseau distant en utilisant le support physique d'une ligne série (de type RS-232) ou bien d'une connexion modem (cas le plus souvent utilisé). Une fois la connexion établie, la machine connectée peut accèder au réseau distant en utilisant les mêmes commandes que dans le cas d'une connexion réseau classique (ping, telnet, ftp, etc...). Ce protocole est aujourd'hui utilisé pour quasiment tous les types d'accès à des réseaux distants et ce quel que soit le système d'exploitation utilisé. Il faut cependant noter que certaines configurations utilisent des protocoles supplémentaires pour l'authentification lors de la connexion à un serveur, comme par exemple le protocole PAP (Password Authentification Protocol) sur le système Windows 95. Le serveur LINUX devra donc pouvoir supporter ce type de protocole si il veut pouvoir recevoir les appels de PC Windows 95.

Le support du protocole PPP est intégré au noyau LINUX à supposer que celui-ci ait été validé lors de la configuration du noyau. Cette option peut-être validée en cochant PPP (point-to-point) support lors de la config du noyau par exemple par un 'make menuconfig':

   [*] Network device support                                   
   <M> Dummy net driver support                                 
   < > EQL (serial line load balancing) support                 
   < > Frame relay DLCI support (EXPERIMENTAL)                  
   < > PLIP (parallel port) support                             
   <M> PPP (point-to-point) support                            

Dans le cas présent, le support PPP est présent sous forme de module chargeable.

3. Le programme mgetty

Le programme mgetty est une version très efficace du concept getty permettant de gèrer sur une même ligne série des connexions modems entrantes et sortantes, des connexion FAX et de connexions directes par terminal série. Ce programme est l'oeuvre de Gert Doering (gdoering@physik.tu-muenchen.de). Il est livré sous forme d'archives RPM binaires et sources sur les distributions RedHat 4 et 5.

3.1 Installer et configurer mgetty

Vous devez tout d'abord vérifier que mgetty est installé sur votre système pour cela taper:
rpm -qa | grep mgetty

qui doit répondre quelque chose comme:

    mgetty-1.1.9-3

Si il répond par une ligne vide, vous devez installer le package par

    rpm -ivh /mnt/cdrom/RedHat/RPMS/mgetty-1.1.9-3.i386.rpm
en supposant que votre CD RedHat est monté sur /mnt/cdrom.

Les fichiers de configuration de mgetty sont localisés sur le répertoire /etc/mgetty+sendfax:

 /etc/mgetty+sendfax:
  total 13
  drwxr-xr-x   2 root     root         1024 sep 18 16:21 .
  drwxr-xr-x  24 root     root         3072 sep 18 16:27 ..
  -rw-------   1 root     root         1172 oct 29  1997 dialin.config
  -rw-------   1 root     root         2580 jui 17 11:45 login.config
  -rw-------   1 root     root         1782 sep 18 16:21 mgetty.config

Le fichier dialin.config (qui définit les numéros ayant le droit d'appeler votre système) n'a normalement pas besoin de modification.

Le fichier login.config nécessite de valider la ligne commençant par /AutoPPP/. Ceci a pour effet de valider la réponse à des connexions entrantes de type PPP :

#
# Automatic PPP startup on receipt of LCP configure request (AutoPPP).
#  mgetty has to be compiled with "-DAUTO_PPP" for this to work.
#  Warning: Case is significant, AUTOPPP or autoppp won't work!
#  Consult the "pppd" man page to find pppd options that work for you.
#
#  NOTE: for *some* users, the "-detach" option has been necessary, for 
#        others, not at all. If your pppd doesn't die after hangup, try it.
#
/AutoPPP/ -	a_ppp	/usr/sbin/pppd auth -chap +pap login modem debug crtscts

L'option +pap valide la reconnaissance d'une connexion utilisant le protocole PAP.

Le fichier mgetty.config est le plus important pour la réalisation d'un premier test de connexion modem car il permet de règler entre-autres l'initialisation des modems connectés aux diverses lignes séries.
La première partie du fichier définit les paramètres communs à toutes les lignes séries comme par exemple:

# access the modem(s) with 38400 bps
speed 38400

La deuxième partie définit le paramètrage de chaque port, exemple:

port ttyS1
  speed 57600
  init-chat ""  \dAT&F&C1E0\d\r OK ATQ0&K3&D2S0=0 OK
  modem-type data

Dans le cas de la ligne /dev/ttyS1 (équivalent à COM2), la vitesse de la jonction PC/modem sera de 57600 bits/s, la séquence d'initialisation du modem sera:

\dAT&F&C1E0\d\r OK ATQ0&K3&D2S0=0 OK

le modem étant de type data.

Cette séquence d'initialisation sera envoyée lors de chaque démarrage du programme mgetty sur cette ligne (au démarrage de la machine ou bien lorsque mgetty reprend le controle de la ligne après utilisation de celle-ci par un autre programme). Cette séquence est bien entendu à adapter suivant le type du modem.

Quelques remarques:

3.2 Configurer /etc/inittab

Il reste maintenant à indiquer au système que la ligne /dev/ttyS1 sera désormais utilisée par mgetty. Il suffit pour cela d'aujouter au fichier /etc/inittab la ligne:

    m1:2345:respawn:/sbin/mgetty -D /dev/ttyS1

et de taper:

    init q
afin de forcer le système à lire de nouveau le fichier /etc/inittab. On peut alors suivre l'initialisation des modems en consultant le fichier /var/log/log_mg.ttyS1:

09/18 16:27:18 yS1  mgetty: experimental test release 1.1.9-Aug17
09/18 16:27:18 yS1  check for lockfiles
09/18 16:27:18 yS1  locking the line
09/18 16:27:19 yS1  lowering DTR to reset Modem
09/18 16:27:20 yS1  send: \dAT&F&C1E0\d[0d][0d]
09/18 16:27:21 yS1  waiting for ``OK'' ** found **
09/18 16:27:21 yS1  send: ATQ0N2&K3&D2S0=0[0d]
09/18 16:27:21 yS1  waiting for ``OK'' ** found **
09/18 16:27:21 yS1  waiting...

Le modem est alors en attente d'un appel entrant. L'appel du serveur par un simple émulateur de terminal (plus un modem bien sûr) doit permettre d'obtenir le login sur le serveur).

4. Accès par PPP

4.1 Configuration de l'accès

L'accès PPP peut être validé simplement en créant un ou plusieurs comptes spécifiques ainsi qu'une adresse IP affectée au client PPP pour le temps de sa connexion.
Il suffit pour cela d'ajouter la ligne suivante au fichier /etc/passwd:

    pppuser::501:500:Accès PPP:/tmp:/usr/sbin/pppd

Il suffit ensuite de définir le mot de passe de cet utilisateur en utilisant la commande.

    passwd pppuser

et ce en étant super-utilisateur (root).

Pour l'adresse IP, il faut ajouter une ligne du type:

192.168.3.2 ipguest

au fichier /etc/hosts. Il faut également spécifier cette adresse dans le fichier /etc/ppp/options (fichier de paramètrage du démon pppd):

lock
:192.168.3.2

La config ci-dessus indique :

Si vous désirez que le PC serve de passerelle vers le réseau local (c'est à dire que le client connecté ait accès à d'autres machines du réseau), il faut ajouter à ce fichier l'option proxyarp. Si vous utilisez plusieurs lignes séries, les options de chacune des connexions seront à spécifier dans /etc/ppp/options.ttySi (i étant le numéro de la ligne).

4.2 Test de l'accès par un client

Il faut maintenant tester la connexion au serveur en appelant celui-ci à l'aide d'une autre machine équipée elle aussi d'un modem et d'un logiciel compatible PPP. Nous donnerons ci-dessous les procédures à utiliser pour tester depuis LINUX et Windows95.

Test depuis LINUX

Sous LINUX il existe diverses méthodes pour définir une connexion PPP cliente comme par exemple l'utilisation d'un utilitaire graphique comme Vppp (Visual PPP) ou EZppp (Easy PPP). Une autre méthode est de définir un bon vieux script comme ci-dessous:

#!/bin/sh
/usr/sbin/pppd connect /etc/ppp/connect_test /dev/modem 57600  -detach +ua \
/etc/ppp/test.pap lock debug crtscts modem defaultroute

puis de définir les deux fichiers auxiliaires /etc/ppp/connect_test:

#!/bin/sh
/usr/sbin/chat -v ABORT BUSY ABORT "NO CARRIER" \
"" AT\&F\&K3\&D2\&C1M1 OK ATDTnuméro_de_téléphone CONNECT

et /etc/ppp/test.pap:

pppuser
mot_de_passe

Quelques remarques:

Si tout se passe bien, l'utilisation du script doit aboutir à l'établissement d'une connexion PPP entre votre client et le serveur. Une fois cette connexion établie, vous pouvez utiliser n'importe quelle fonctionnalité réseau entre les deux machines. L'arrêt de la connexion se fera par exemple en tuant le processus pppd par un:

    kill `cat /var/run/ppp0.pid`

Test depuis Windows95

Le plus simple est de configurer un nouvel accès réseau distant. je ne vous ferais pas l'affront d'expliquer comment on définit l'accès à un réseau distant sous Windows95, je me bornerai à préciser la configuration du Type de serveur comme indiqué ci-dessous (obtenue par les propriétés de la connexion définie):

Première remarque, il semblerait qu'à Redmond les seuls types de serveurs connus soient Win95/NT et vaguement 'Internet' ;-).

Il est conseillé dans notre cas de décocher toutes les options sauf TCP/IP puis de finir la config en cliquant sur Paramètres TCP/IP pour obtenir l'écran suivant:

L'adresse sera normalement affectée automatiquement par le serveur LINUX (voir paramètre du fichier /etc/ppp/options. Si vous désirez utiliser un serveur de nom (DNS), il faudra préciser sont adresse IP à ce niveau la.

Une fois la configuration terminée, il suffit de double-cliquer sur l'icone de connexion définie pour obtenir l'écran suivant:

puis de cliquer sur Connecter.

5. Conclusion

LINUX contient de base tous les composant logiciels pour la création d'un serveur PPP destiné soit à servir de passerelle d'accès vers un réseau local existant, soit à supporter directement une arborescence de documents HTML. Dans ce dernier cas, le logiciel serveur HTTP Apache devra être installé sur la machine LINUX (ce qui est en général le cas lors d'une installation d'un serveur LINUX).

6. Bibliographie