Configuration d'un client et d'un serveur PPP sous Linux RedHat
M. Libes
Centre d'océanologie de Marseille - FR 6106 CNRS
v0.99
(fait chez moi le soir de temps en temps en dehors
des heures de boulot)
(vers Sept-Oct 1999)
Préambule: Ce document contient mes notes
personnelles pour
1. établir une connexion réseau
entre un PC Linux (client PPP) et un serveur (PPP), via le réseau
téléphonique RTC
2. mettre en place son propre serveur d'accès
PPP sur un PC sous Linux Redhat
NB : la majeure partie des informations figurant dans
ces pages ont été puisées dans
diverses documentations ci dessous ;-)) prises sur le Net ...
Je rajoute par ci par là 2 ou 3 éléments
d'informations personnels qui peuvent parfois les complémenter....
comme l'utilisation de minicom de netcfg et de kppp,
et
quelques problemes de permissions d'accès sur le port série
Le client PPP est décrit en mode ligne de commandes
sous un shell Unix, mais aussi par netcfg et kppp
Ces pages de documentation sont loins d'etre totalement
exhaustives sur le sujet...Toutefois elles suffisent pour obtenir une configuration
PPP qui fonctionne.
S'il manquait quelque chose d'essentiel, le lecteur n'hésitera
pas à le signaler à libes@com.univ-mrs.fr
Installer un client PPP sur PC Linux
-
Prérequis
-
Les fichiers nécessaires
au paramétrage réseau du PC Client
-
netcfg : utilitaire pour paramétrer
ces fichiers de façon globale (redhat)
-
Tester son modem
-
dialoguer avec son modem
-
Problèmes pour lancer
minicom
-
relever les échanges
entre le client et le serveur par "minicom"
-
Paramétrage et Lancement
d'un client PPP sur PC Linux
-
A/ Configurer un client en mode
ligne: ppp
-
L'authentification PAP de PPP
et le fichier d'authentification "pap-secrets":
-
Pour lancer la connexion PPP
:
-
vérifier la trace des
échanges pendant la connexion
-
vérifier l'activité
de la connexion
-
Pour stopper la connexion PPP
-
différent clients PPP
en mode graphique
-
B/ Configurer une connexion
PPP avec netcfg
-
C/ configurer une connexion
PPP avec KPPP
Installer un serveur PPP sur PC Linux
-
paquettages nécessaires
-
Gérer les appels
entrants sur le serveur PPP, avec mgetty
-
Lancer et Automatiser le lancement
de mgetty
-
Paramétrage du serveur
pppd
-
L'authentification des utilisateurs
sur la liaison PPPAccès PPP depuis un PC client
-
Accès PPP depuis un PC
client
-
Passerelle par défaut
(ipfwadm/ipchains)
-
Pour que mon PC fasse serveur
PPP automatiquement après les heures de bureau
Installer un client PPP sur PC Linux
Prérequis
Comme prérequis :
1. il faut que le noyau linux soit compilé avec le support
réseau, et le support PPP compilé sous forme de module
ppp.o
Ce module réseau ppp.o doit se trouver dans /lib/modules/<votre-noyau>/net/
. Par exemple pour un noyau 2.0.36, vérifiez que le module
ppp.o
est
présent dans:
$ ls /lib/modules/2.0.36-0.7/net/ppp.o
/lib/modules/2.0.36-0.7/net/ppp.o
Si "par hasard" le noyau Linux n'avait pas le support réseau et
PPP, eh bien il faut le recompiler. Comme c'est vraiment peu probable,
je ne parlerai pas ici de la recompilation du noyau...qu'on trouvera
ici [http://www.freenix.fr/linux/HOWTO/Kernel-HOWTO.html]
2. il faut avoir installé le paquetage "ppp" sur son PC.
Verifier par :
$ rpm -qi ppp
Name : ppp
Distribution: Manhattan
Version : 2.3.5
Vendor: Red Hat Software
Release : 1
Build Date: lun 08 jun 1998 15:18:34 MEST
Install date: lun 21 déc 1998 13:44:56 MET
Build Host: porky.redhat.com
Group : Networking/Daemons
Source RPM: ppp-2.3.5-1.src.rpm
Size : 282305
License: distributable
Packager : Red Hat Software <bugs@redhat.com>
Summary : Paquetage du démon ppp pour
Linux 1.3.xx et supérieur.
Description :
Ceci est le démon et la documentation pour le support PPP. Cela
réclame
un noyau supérieur au 2.0 et construit avec le support PPP.
Le noyau par
défaut de Red Hat contient le support PPP sous forme de module.
[A l'époque de la rédaction de ces
pages, mon PC est en Linux RedHat 5.2 (noyau 2.0.36),
et comme indiqué dans les informations du rpm PPP, normalement
le noyau de la RedHat est compilé par défaut pour avoir
le support PPP intégré sous forme de module!]
Note à Béné: Attention dans certaines distributions
de Linux actuelles (Sept.99), le paquettage ppp 2.3.7 installé
par
défaut fonctionnne mal!!! Il est absolument indispensable
de mettre à jour PPP (disponible sur tout bon serveur FTP dan le
répertoire updates de la distribution Linux) avec la derniere
version 2.3.8 de PPP
Les fichiers nécessaires au paramétrage réseau du
PC Client
Nous sommes dans le cas d'un PC Linux à la maison... ( probablement
sans carte éthernet)
-
/etc/hosts
Du coté du client PPP, en l'absence d'un DNS, ce fichier contient
les informations permettant d'indiquer le nom et l'adresse réseau
de la machine. Une ligne de ce fichier désigne une machine selon
le format suivant:
<adresse IP numérique>
<nom IP de la machine> <alias>
$ more /etc/hosts
127.0.0.1 localhost
localhost.localdomain
139.124.2.204 compp3.com.univ-mrs.fr
pcmaison #pc de ma maison en connexion PPP
-
/etc/host.conf
order hosts, bind
multi on
Ce fichier indique dans quel ordre il faut rechercher
les informations concernant les adresses IP de la machine. Dans notre cas,
on va chercher des adresses d'abord dans le fichier /etc/hosts,
puis utiliser un DNS si on n'a pas trouvé l'adresse recherchée
dans /etc/hosts
la ligne "multi on" indique qu'une machine peut avoir plusieurs noms
-
/etc/resolv.conf
fichier nécessaire et indispensable pour indiquer à
l'interface réseau du PC à quel domaine réseau il
appartient, et quel est le serveur de noms réseau de ce domaine
$more /etc/resolv.conf
search com.univ-mrs.fr
nameserver 139.124.2.103
nameserver 139.124.1.2
-
netcfg : utilitaire pour paramétrer ces fichiers de façon
globale (redhat)
On peut utiliser le programme netcfg de la RedHat pour paramétrer
de façon globale ces différents fichiers.....exemple avec
netcfg
(présent dans la distibution control-panel)
-
Bouton "Noms" : les paramètres ci dessous concernent le nom
du domaine réseau auquel appartient le PC ainsi que les serveurs
de noms (DNS) de ce domaine. Ces paramètres se retrouveront dans
le fichier /etc/resolv.conf
-
bouton "Hotes" : les paramètres ci dessous indiquent le nom
et l'adresse du PC en l'absence de DNS. Ils vont aller dans le fichier
/etc/hosts
-
Par le bouton "Interfaces" on définit les informations
concernant les interfaces réseau disponibles sur le
PC. Ces informations indiquent quelles interfaces réseau sont présentes
sur la machine et quelle est leur adresse IP
-
lo0 : la loopback interface (interface de bouclage locale de la machine)
-
eth0 : interface correspondant à une carte éthernet (on parlera
pas de celle ci, dans cette doc)
-
ppp0 : interface correspondant à la connexion réseau
en PPP via la ligne téléphonique (voir plus bas le paramétrage
de cette interface)....
-
l'interface ppp0 ci dessous a été créée en
cliquant sur le bouton "Ajouter"
Voir plus bas (Chapitre B) comment on crée la nouvelle interface
réseau PPP0 destinée à établir une connexion
TCP/IP via le réseau téléphonique commuté (RTC)
Après configuration on retrouvera ces informations concernant
la définition des interfaces réseau, par la commande
$ /sbin/ifconfig -a
lo Link encap:Local
Loopback
inet
addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP
BROADCAST
LOOPBACK RUNNING MTU:3584 Metric:1
RX
packets:35309769 errors:0 dropped:0 overruns:0 frame:0
TX
packets:35309769 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
eth0 Link encap:Ethernet
HWaddr 00:60:08:4F:AE:29
inet
addr:139.124.2.190 Bcast:139.124.2.255 Mask:255.255.255.0
UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:863230 errors:0 dropped:0 overruns:0 frame:0
TX
packets:425871 errors:0 dropped:0 overruns:0 carrier:0
collisions:1981
Interrupt:11
Base address:0x1040
-
Bouton "Routage" : permet de définir la passerelle
de routage par défaut. La passerelle par défaut permet
d'indiquer vers quelle machine il faut envoyer des paquets réseaux
dont l'adresse de destination n'appartient pas au domaine local...(tout
ce qui n'est pas connu sur le réseau local est envoyé vers
la passerele par défaut)
on retrouve ces informations de routage en tapant la commande
$netstat -r
Kernel IP routing table
Destination Gateway
Genmask Flags
MSS Window irtt Iface
139.124.2.0 *
255.255.255.0 U 1500 0
0 eth0
127.0.0.0 *
255.0.0.0 U
3584 0 0 lo
default 139.124.2.250
0.0.0.0 UG
1500 0 0 eth0
Tester son modem
Etablir une connexion réseau Internet via le réseau téléphonique
(RTC) nécessite que la chaine matérielle
[PC client -Modem] <----> RTC <----> [Modem-PC serveur]
fonctionne parfaitement.
Moi j'aime bien commencer par passer un coup de fil à travers
le modem pour m'assurer que le modem fonctionne correctement!
-
Commencer donc par vérifier que le fichier spécial
/dev/modem
existe bien sur le PC et que c'est un lien vers le port série
sur lequel est branché le modem (/dev/ttyS0 ou /dev/cua0) !! (évidemment
on DOIT connaitre sur quel port série est branché le modem
externe...(je ne parle pas dans cette doc de modem interne qui sont source
de nombreux problèmes)
$ls -l /dev/modem
lrwxrwxrwx 1 root
uucp
4 jun 22 11:18 /dev/modem -> cua0
ou...dans des versinos plus récentes de linux
$ ll /dev/modem
lrwxrwxrwx 1 root
root
5 Aug 19 10:01 /dev/modem -> ttyS0
-
Si ce lien n'est pas fait utilisez l'utilitaire modemtool
pour le créer (ou faites le à la main ca va plus vite, par
$ln -s /dev/ttyS0 /dev/modem (si le modem
est branché sur le port série ttyS0 évidemment..
le port ttyS0 correspond au premier port série (ttyS1 au second...))
dialoguer avec son modem
lancer le programme "minicom" (si vous ne l'avez pas, récupérez
le sur n'importe quel serveur ftp, et installez le rpm -Uvh minicom-1.82
par exemple) :
minicom doit commencer par initialiser le modem sur le
port série correspondant à /dev/modem ...Sous Linux, il n'ya
pas besoin de pilote (driver) spécial pour gérer un modem...
Le modem est géré par une application (fax ,minitel, ppp
...) via le port série, par un jeu de commandes que comprend le
modem..la plupart du temps un jeu de commandes dit "Hayes" qui sont des
commandes commencant par AT , que le modem recoit et interprète...
Ensuite, après avoir lancé minicom , taper la
commande ATI3 au clavier qui demande à votre modem
de s'identifier
Welcome to minicom 1.82
OPTIONS: History Buffer, F-key Macros, Search History Buffer,
I18n
Compiled on Jan 26 1999, 13:39:20.
Press CTRL-A Z for help on special keys
AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
OK
ATI3
U.S. Robotics Sportster MessagePlus 56000 Rev. 11.1.18
OK
Si le modem ne répond pas , inutile d'aller plus loin! il
y a un problème...Dans ce cas il faut vérifier un certain
nombre d'éléments (la connexion sur le port série,
et surtout les permissions du fichier spécial correpondant au port
série /dev/ttyS0 ... au passage lisez la FAQ modem :http://www.nfrance.com/intmodem.html
Problèmes pour lancer minicom?
Il se peut qu'on ait des problemes en lancant minicom en tant
que utilisateur Lambada! Dans ce cas,
-
il faut que le super user root ait lancé une première fois
minicom avec l'option -s pour créer le fichier /etc/minirc.fdl
-
mais surtout que un utilisateur Lambada ait le droit d'écrire
sur le fichier spécial dev/ttyS0 .correspondant au port série
ou est branché le modem
$minicom
minicom: cannot open /dev/modem: Permission non accordée
$ll /dev/modem
lrwxrwxrwx 1 root root
5 Aug 19 10:01 /dev/modem -> ttyS0
-
Vérifier les permissions que devrait avoir ce fichier . Pour
fonctionner avec un utilisateur non-root il devrait avoir les permissions
d'écriture soit au niveau du "groupe" "tty" , soit pour tout le
monde au niveau "other".
-
Si on choisit de limiter l'utilisation du modem au niveau groupe, il faudra
alors faire figurer les utilisateurs qui vont etre autorisés à
se servir du modem, dans le groupe tty présent dans le fichier
/etc/group.
tty::5:momo,zaza
puis de mettre les permissions de lecture écriture au niveau
groupe par $chmod g+rw /dev/ttyS0
$ll /dev/ttyS0
crwSrwSr-- 1 root tty
4, 64 Oct 30 11:52 /dev/ttyS0
-
Si on choisit d'ouvrir l'utilisation du modem à tout le monde, il
suffit de mettre les permission de lecture écriture au niveau
du groupe "other" par $chmod o+rw /dev/ttyS0
Avec ca, un utilisateur non "root" peut utiliser les programmes qui utilisent
le port série /dev/ttyS0
relever les échanges entre le client et le serveur
par "minicom"
Il va être nécessaire pour automatiser une connexion
PPP de répondre automatiquement au dialogue engagé entre
le client PPP et le serveur. Pour cela il nous faut connaitre
au préalable les chaines de caractères exactes envoyées
par le serveur sur la l igne téléphonique, auxquelles le
client PPP devra répondre.
Il se peut en outre que le serveur n'échange aucune chaine avec
le client, mais pour en etre sur et vérifier quelles chaines
exactes sont envoyées par le serveur PPP, on peut les capturer à
l'aide d'une connexion avec le programme minicom
1. lancer minicom, taper <ctrl-A Z> pour obtenir le menu, puis choisir
l'option "L" capture on/off qui permet de capturer
tous les échanges entre l'appelant et l'appelé. Le menu demande
dans quel fichier (minicom.cap par défaut) seront stockées
les chaines de caractères échangées entre l'appelant
et l'appelé!
Minicom Command Summary
Commands
can be called by CTRL-A <key>
Main Functions
Other Functions
Dialing directory..D
run script (Go)....G | Clear Screen.......C
Send files.........S
Receive files......R | cOnfigure Minicom..O
comm Parameters....P
Add linefeed.......A | Suspend minicom....J
Capture on/off.....L
Hangup.............H | eXit and reset.....X
send break.........F
initialize Modem...M | Quit with no reset.Q
Terminal settings..T
run Kermit.........K | Cursor key mode....I
lineWrap on/off....W
local Echo on/off..E | Help screen........Z
| scroll Back........B
2. choisir l'option "D Dialing directory" qui permet d'établir
une communication téléphonique avec le serveur PPP (Fournisseur
d'acces Internet=FAI).. Lancer l'appel téléphonique vers
le FAI , répondez au clavier à chaque demande de renseignements
envoyée par le serveur PPP (s'il y en a) , puis coupez la connexion!
3. tous les échanges sont alors inscrits dans le fichier
"minicom.cap"
$ more minicom.cap
Annex Command Line Interpreter *
Copyright (C) 1988, 1995 Xylogics, Inc.
Checking authorization, Please wait...
Annex username: libes
Annex password:
Access Code:
Permission granted
C.O.M. port 1: hangup
Resetting line and disconnecting.
on voit donc que le serveur PPP dans mon cas, a envoyé les chaines
exactes ci dessous. On va se servir de ces chaines pour automatiser une
connexion PPP dans un script appelé "chat-script".
Annex username:
Annex password:
Access Code:
C.O.M. port 1:
Note à Béné : il se peut très
bien que le serveur distant n'engage aucun échange de chaine avec
leclient. C'est le cas de bon nombre d'entre eux. Exemple de connexion
vers FREE.FR
où l'on a capturé l'échange sur
la ligne télephonique dans un fichier minicom.cap . On a dans ce
cas directement l'échange des paquets réseau TCP. (la connexion
PPP échouera puisque depuis minicom le lancement de ppp localement
sur le pc client ne sera pas fait)
more minicom.cap
~ÿ}#À!}!¿} }8}"}&} }*} } }#}$À#}%}&ÏçÕ}'}"}(}"}05~~ÿ}#À!}!À}
}8}"}&} }*} } }#}$À#}%}&ÏçÕ}'}"}(}":ú~~ÿ}#À!}!Á}
}8}"}&} }*} } }#}$À#}%}&ÏçÕ}'}"}(}"ós~~ÿ}#À!}!Â}
}8}"}&} }*} } }#}$À#}%}&ÏçÕ}'}"}(}"¹á~~ÿ}#À!}!Ã}
}8}"}&} }*} } }#}$À#}%}&ÏçÕ}'}"}(}"ph~~ÿ}#À!}!Ä}
}8}"}&} }*} }
Paramétrage et Lancement d'un client PPP sur PC Linux
A partir d'ici on rentre dans l'utilisation de la partie cliente de PPP.
On suppose que :
votre système est paramétré pour utiliser le réseau
tcp/ip :
ifconfig -a vous affiche l'interface de bouclage lo0 et la commande
ping
localhost fonctionne bien
vos fichiers réseau sont correctement paramétrés (voir
ci dessus)
le modem est branché et fonctionne! (il répond à
des commandes AT envoyées par minicom)
vous avez relevé les échanges de chaines entre le serveur
PPP et le client
A/ Configurer un client en mode
ligne: ppp
Meme si on souhaite utiliser une interface graphique pour paramétrer
et lancer PPP, i l est bon de savoir comment fonctionne la commande
de base pppd qui régit l'échange entre le client et le
serveur PPP.
-
En une phrase : "Pour établir une connexion entre un client PPP
et un serveur PPP, il suffit de lancer des 2 cotés (coté
client et coté serveur) la commande
/usr/sbin/pppd , avec
les bons paramètres! " . On dit que PPP fonctionne en mode
peer to peer (le meme programme des 2 cotés)
Mais....Quels sont ces parametres et ou les place-t'on ??
Il faut lire le man pppd et le PPP-Howto
pour une présentation détaillée de ces options!...
je ne présente ici que les paramètres les plus courants (c'est
à dire ceux que j'utilise et que j'ai compris) et qui suffisent
dans mon cas à établir une connexion qui fonctionne
correctement!!!
On peut taper la commande pppd sur la ligne de commande d'un shell Unix...
moi je préfère en faire un petit fichier de commandes
, que j'appelle connex-on par exemple
$more connex-on
/usr/sbin/pppd /dev/modem 115200
crtscts modem defaultroute \
noipdefault remotename ppp-labo
netmask 255.255.255.0 \
user libes connect '/usr/sbin/chat
-v -f /home/momo/PPP/chat-ppplabo'
NB: toutes les options qui
suivent la commande pppd , peuvent figurer indifféremment soit sur
la ligne de commande à la suite de "pppd", soit dans le fichier
/etc/ppp/options
115200 : indique la vitesse maximale de réception des données
entre le modem et l'UART du PC
crtscts : indique d'utiliser le controle de flux matériel
du port série (au lieu du controle logiciel par Xon/Xoff) .. Il
est impératif d'utiliser crtscts pour que les échanges se
déroulent correctement (voir la FAQ modem de L. Sintès
http://www.nfrance.com/intmodem.html
modem : indique d'utiliser le controle de ligne d'un modem. Dans
ce cas pppd attend le signal de la porteuse CD à l'initialisation
du port série
defaultroute : va ajouter une route par défaut à
la table de routage du systeme, et permet d'utiliser le serveur PPP (la
nouvelle interface réseau ppp0 créée) comme passerelle
extérieure!. On indique au systeme qu'on route les paquets IP vers
l'exterieur par la nouvelle interface PPP0
* Ainsi, avant la connexion, seule l'interface
de bouclage lo0 est présente
$netstat -r
Table de routage IP du noyau
Destination Passerelle
Genmask Indic
MSS Fenêtre irtt Iface
127.0.0.0 *
255.0.0.0 U
0 0 0 lo
* Pendant que la connexion PPP est active, on
voit qu'une autre route est mise en place
$ netstat -r
Table de routage IP du noyau
Destination Passerelle
Genmask
Indic MSS Fenêtre irtt Iface
127.0.0.0
*
255.0.0.0
U
0 0 0 lo
139.124.2.190 *
255.255.255.255 UH 0 0
0 ppp0
default
139.124.2.190 0.0.0.0
UG 0 0
0 ppp0
lock Permet un accès exclusif au modem. On indique
a pppd de créer un fichier verrou /var/lock/LCK..* lorsque le modem
est utilisé, afin d'eviter une seconde utilisation simultanée
par un autre utilisateur. Attention il faut pour cela qu'un utilisateur
Lambada ait les permissions pour écrire dans le répertoire
/var/lock ... Si ca coince vraiment, on peut oter l'option lock (surtout
si on est seul à travailler sur le PC, guère de chance que
quelq'un d'autre que vous utilise le port modem en meme temps! )
Attention: il se peut que vous n'ayez pas
mis l'option "lock" dans votre ligne de commande , mais que cette option
soit tout de meme active! pourquoi? parce que pppd va chercher également
ses options dans le fichier /etc/ppp/options et que par défaut
cette option "lock" figure par défaut dans ce fichier!
$ more /etc/ppp/options
lock
noipdefault : indique a pppd de ne pas assigner l'adresse
IP présente dans /etc/hosts ... l'adresse est affectée dynamiquement
au client PPP par le serveur PPP . Cela permet de gérer les affectations
d'adresse IP depuis le serveur!
netmask 255.255.255.0: c'est le masque de réseau qui indique
au protocole IP quelle est la partie réseau d'une adresse réseau
et quelle est la partie machine . Avec un masque 255.255.255.0 sur une
adresse 139.124.2.203 indique que l'adresse de réseau est 139.124.2
et que l'adresse de la machine dans ce réseau est 203 i.e 139.124.2.203
user libes : authentification auprès du serveur PPP
connect '/usr/sbin/chat-v -f /home/momo/PPP/chat-ppplabo'
: signifie que l'on va établir le dialogue (to chat = bavarder,
dialoguer en british) avec le serveur PPP distant, en utilisant le
fichier de paramètres /home/momo/PPP/chat-ppplabo
-
Qu-y-at'il dans le fichier chat-ppplabo ??? :
-
$ more chat-ppp2
-
'ABORT' 'BUSY'
-
'ABORT' 'ERROR'
-
'ABORT' 'NO CARRIER'
-
'ABORT' 'NO DIALTONE'
-
'ABORT' 'Invalid Login'
-
'ABORT' 'Login incorrect'
-
'' 'ATZ'
-
'OK' 'ATDT04 91 82 93 25'
-
'CONNECT' ''
-
'compc32.com.univ-mrs.fr
login: ' 'libes'
[en bleu les chaines envoyée depuis le serveur]
-
'Password: '
'tralala'
[en
vert les chaines de réponses du client]
-
Dans le cas d'un "serveur" qui n'échangera
pas de chaines de dialogue avec le "client" on aura un script plus simple...(pas
de chaines après la phase CONNECT)
-
$ more chat-ppp1
-
'ABORT' 'BUSY'
-
'ABORT' 'ERROR'
-
'ABORT' 'NO CARRIER'
-
'ABORT' 'NO DIALTONE'
-
'ABORT' 'Invalid Login'
-
'ABORT' 'Login incorrect'
-
'' 'ATZ'
-
'OK' 'ATDT04 96 12 30 00'
-
'CONNECT' ''
-
L'authentification PAP de PPP et le fichier d'authentification
"pap-secrets":
Lorsque la connexion PPP est établie avec le "serveur", le
"client" va devoir s'authentifier auprès du serveur par un protocole
spécial appelé PAP (Password Authentication Protocol). En
bref cela signifie que le client va devoir envoyer vers le serveur un
mot de passe "qui identifie la machine qui désire
se connecter"
Lorsqu'on utilise la commande pppd en mode ligne de commande, les informations
d'authentification doivent etre placées dans le fichier /etc/ppp/pap-secret
selon
le format suivant :
nom_de_machine_cliente identification_machine_serveur
mot_de_passe
qui signifie que :
"nom_de_machine_cliente" est autorisée à se connecter
sur "nom_machine_serveur" avec le mot de passe "mot_de_passe"
-
Il faut comprendre que le systeme d'authentification client-serveur
PAP est fait pour autoriser un ordinateur à se connecter
avec un autre au travers d'une liaison téléphonique. En
PAP la notion d'authentification d'un utilisateur qui se connecte n'existe
pas! Sur le serveur, on authentifie une machine extérieure
qui se connecte et non pas un utilisateur Unix. Cet aspect est
vérifiable car une fois que la liaison PPP est établie par
un utilisateur X entre client et serveur, n'importe quel utilisateur
Unix de la machine "cliente" peut utiliser la liaison réseau PPP
qui a été établie par quelqu'un d'autre! La
connexion réseau PPP est donc bien établie et autorisée
entre 1 machine cliente et le serveur, et non pas entre un utilisateur"
et le serveur.!!!!!!!!
-
Donc du coté du serveur PPP (FAI) le nom d'utilisateur qui
vous est donné (toto, m.libes) identifie davantage une machine
qui va se connecter chez eux, plutot qu'un individu. . En fait le nom de
connexion que fournit le FAI, meme si c'est un nom de personne,
identifie
la connexion d'une machine chez eux!
-
Par exemple, si free.fr m'a donné le nom de connexion "momo.libes"
pour se connecter chez eux,
-
"momo.libes" identifiera chez eux la connexion de la machine "momo.libes"
et non pas de l'utilisateur
-
Unix "momo.libes" (qui d'ailleurs n'existe pas) .
-
Bien entendu ces considérations (machine/utilisateur) n'ont AUCUN
sens dans le cas ou le client PPP est une machine Window95 !!!!. Puisque
ce systeme n'étant pas multi-utilisateurs il y a bijection
entre la connexion d'un ordinateur client et celui d'un utilisateur. Mais
sous un systeme multi-utilisateur comme Linux, la différence est
notoire! Puisque un utilisateur X peut lancer une connexion PPP vers un
serveur, et un utilisateur Y de la meme machine cliente pourra l'utiliser
cette connexion PPP établie par X. Ce qui prouve bien que le serveur
PPP a authentifié une machine et non pas un utilisateur X ou Y.
-
-
En définitive, je devrai indiquer dans mon fichier pap-secrets
(exemple)
-
momo.libes free.fr xyzuvw
##(où xyzuvw serait le mot de passe pour la connexion de la machine
momo.libes)
-
libes
ppplabo tralala ##(où
tralala mot de passe pour la connexion de la machine "libes" sur
serveur "ppplabo")
-
Ci dessous mon fichier pap-secret sur mon PC client, identifiant
4 connexions différentes vers 4 FAI (serveurs PPP) différents
-
$more /etc/ppp/pap-secrets
-
# Secrets for authentication using PAP
-
# client server
secret
IP addresses
-
### ppp1 connexion a univ-aix.fr
-
libes univaix mdp1
-
#
-
### pppuser connexion a mon pc linux
-
moi monpclinux mdp2
-
#
-
### ppp0 connexion a l'annex de mon labo
-
libes ppplabo mdp3
-
#
-
### ppp0 connexion a free.fr
-
m.libes free.fr
mdp4
-
Dans ces lignes:
-
le PREMIER CHAMP (libes, moi, libes, m.libes) représente
l'identification de la connexion vers le FAI (serveur PPP). Ainsi lors
de la connexion, les serveurs PPP respectifs (identifiés par
le 2ème champ) vont verifier que "libes" "moi" ou "m.libes"
sont autorisés à se connecter chez eux.
-
Ce champ sert d'index à la commande PPP via l'option "user"
de
la commande pppd cliente pour
-
aller chercher le bon mot de passe a fournir au serveur PPP
-
$more connex-on
-
/usr/sbin/pppd /dev/modem
115200 crtscts modem defaultroute \
-
noipdefault
netmask 255.255.255.0 user libes remotename ppplabo
\
-
connect '/usr/sbin/chat -v -f
/home/momo/PPP/chat-ppplabo'
-
le DEUXIEME CHAMP : "univaix", "monpclinux", "ppplabo", "free.fr"
représente l'identification du serveur PPP. Lors de la connexion
client/serveur, ce champ n'a aucun intéret en règle
générale, SAUF si un individu possède le meme
nom de connexion chez 2 FAI différents. Dans ce cas là
"pppd" doit pouvoir aller chercher le bon mot de passe pour un nom de connexion
chez un des "x" FAI différents (une ligne du fichier /etc/ppp/pap-secrets)
Ce choix de la ligne du fichier pap-secret se fait avec l'option "remotename"
de pppd
$more connex-on
/usr/sbin/pppd /dev/modem
115200 crtscts modem defaultroute \
noipdefault netmask
255.255.255.0 user libes remotename ppplabo
\
connect '/usr/sbin/chat -v -f
/home/momo/PPP/chat-ppplabo'
Avec la ligne de commande ci dessus, pppd va aller chercher
le mot de passe pour la connexion "libes" vers le FAI "ppplabo" (au
lieu de "libes" vers le FAI "univaix")
-
Pour lancer la connexion PPP :
lancer le script depuis un shell Unix :
$ connex-on
(évidemment, il doit avoir été rendu
exécutable par $chmod +x connex-on)
-
vérifier la trace des échanges pendant la connexion
Jeter un oeil au fichier de trace /var/log/message permet
de voir à quel niveau de la connexion se situe un probleme éventuel
!!
-
$ tail -f /var/log/messages
-
Aug 24 23:29:37 pcmaison chat[937]: abort on (Invalid Login)
-
Aug 24 23:29:37 pcmaison chat[937]: abort on (Login incorrect)
-
Aug 24 23:29:37 pcmaison chat[937]: send (ATZ^M)
-
Aug 24 23:29:37 pcmaison chat[937]: expect (OK)
-
Aug 24 23:29:38 pcmaison chat[937]: ATZ^M^M
-
Aug 24 23:29:38 pcmaison chat[937]: OK
-
Aug 24 23:29:38 pcmaison chat[937]: -- got it
-
Aug 24 23:29:38 pcmaison chat[937]: send (ATDT04 91 82 93
25^M)
-
Aug 24 23:29:39 pcmaison chat[937]: expect (CONNECT)
-
Aug 24 23:29:39 pcmaison chat[937]: ^M
-
Aug 24 23:30:01 pcmaison chat[937]: ATDT04 91 82 93 25^M^M
-
Aug 24 23:30:01 pcmaison chat[937]: CONNECT
-
Aug 24 23:30:01 pcmaison chat[937]: -- got it
-
Aug 24 23:30:01 pcmaison chat[937]: send (^M)
-
Aug 24 23:30:01 pcmaison chat[937]: expect (compc32.com.univ)
-
Aug 24 23:30:01 pcmaison chat[937]: 28800^M
-
Aug 24 23:30:01 pcmaison chat[937]: ^M
-
Aug 24 23:30:01 pcmaison chat[937]: ^MRed Hat Linux release
5.2 (Apollo)
-
Aug 24 23:30:01 pcmaison chat[937]: ^MKernel 2.0.36 on an
i586
-
Aug 24 23:30:01 pcmaison chat[937]: ^M
-
Aug 24 23:30:01 pcmaison chat[937]: ^M^M
-
Aug 24 23:30:01 pcmaison chat[937]: compc32.com.univ
-
Aug 24 23:30:01 pcmaison chat[937]: -- got it
-
Aug 24 23:30:01 pcmaison chat[937]: send (libes^M)
-
Aug 24 23:30:02 pcmaison chat[937]: expect (Password: )
-
Aug 24 23:30:02 pcmaison chat[937]: -mrs.fr login: libes^M
-
Aug 24 23:30:02 pcmaison chat[937]: Password:
-
Aug 24 23:30:02 pcmaison chat[937]: -- got it
-
Aug 24 23:30:02 pcmaison chat[937]: send (tralala^M)
-
Aug 24 23:30:02 pcmaison pppd[936]: Serial connection established.
-
Aug 24 23:30:02 pcmaison pppd[936]: Using interface ppp0
-
Aug 24 23:30:02 pcmaison pppd[936]: Connect: ppp0 <-->
/dev/modem
-
Aug 24 23:30:04 pcmaison kernel: PPP BSD Compression module
registered
-
Aug 24 23:30:04 pcmaison kernel: PPP Deflate Compression
module registered
-
Aug 24 23:30:04 pcmaison pppd[936]: Cannot determine ethernet
address for proxy ARP
-
Aug 24 23:30:04 pcmaison pppd[936]: local IP address
139.124.2.203
-
Aug 24 23:30:04 pcmaison pppd[936]: remote IP address 139.124.2.190
-
-
Pour stopper la connexion PPP : il suffit de faire un script qui
stoppe le processus client PPP (ce qui va couper la communication).. le
numéro (pid) du processus ppp en cours d'exécution
se trouve dans /var/run/ppp0.pid
il suffit alors de faire un script connex-off par
exemple qui ne fait quasiment que lancer la commande :
kill -INT `cat /var/run/ppp0.pid`
ce script pompé quelque part sur le Net, doit faire l'affaire!
[comme
il doit etre sous licnce GPL vous devriez pouvoir l'utiliser ;-)))
$cat connex-off
-
#!/bin/sh
-
#
-
# Determine the device to be terminated.
-
#
-
if [ "$1" = "" ]; then
-
DEVICE=ppp0
-
else
-
DEVICE=$1
-
fi
-
#
-
# If the ppp0 pid file is present then the program is running.
Stop it.
-
if [ -r /var/run/$DEVICE.pid ]; then
-
kill -INT `cat
/var/run/$DEVICE.pid`
-
#
-
# If the kill did not work then there is no process running
for this
-
# pid. It may also mean that the lock file will be left.
You may wish
-
# to delete the lock file at the same time.
-
if [ ! "$?" =
"0" ]; then
-
rm -f /var/run/$DEVICE.pid
-
# If the kill did not work then there is no process running
for this
-
# pid. It may also mean that the lock file will be left.
You may wish
-
# to delete the lock file at the same time.
-
if [ ! "$?" =
"0" ]; then
-
rm -f /var/run/$DEVICE.pid
-
echo "ERROR: Removed stale pid file"
-
exit 1
-
fi
-
#
-
# Success. Let pppd clean up its own junk.
-
echo "Lien PPP
vers $DEVICE terminé.. ."
-
exit 0
-
fi
-
#
-
# The ppp process is not running for ppp0
-
echo "ERROR: le lien PPP vers $DEVICE (annex-com) n'est pas
actif! "
-
exit 1
-
différent clients PPP en mode graphique permettant
de paramétrer et lancer une connexion cliente PPP vers
un serveur. Il ne faut surtout pas se priver de les utiliser
Je décris ci dessous la création et le lancement
d'une interface PPP avec les utilitaires netcfg et
kppp
B/ Configurer une connexion PPP avec netcfg
 |
Après avoir lancé netcfg, en sélectionnant
les options "interface" puis "ajouter" dans
la fenetre , on peut créer une nouvelle interface réseau
de type PPP
En cliquant sur le bouton "editer" on peut alors par la
suite configurer cette nouvelle interface PPP |
bouton "MATERIEL" : Utiliser impérativement
le controle de flux matériel RTC/CTS (voir la FAQ Modem
de L. Sintès http://www.nfrance.com/intmodem.html)
Bien entendu le périphérique /dev/modem doit
exister sur votre système... on utilisera l'utilitaire modemtool
de redhat qui permet de créer ce fichier spécial ... (en
fait ca fait juste un lien entre votre port série sur lequel est
branché" le modem et le fichier spécial /dev/modem. Soit
$ ln -s /dev/cua0 /dev/modem si le modem est
branché sur le premier port série cua0)

bouton "COMMUNICATION" : permet d'indiquer
quel est le numéro de téléphone du FAI (fournisseur
d'accès internet) ben oui ;-)) il faut donner le numéro
de téléphone du serveur PPP (appelé aussi FAI = fournisseur
d'accès Internet) et paramétrer éventuellement son
modem
Ce document ne peux faire l'inventaire exhaustif des problèmes de
connexion encontrés avec un modem... il faut impérativmenet
lire la FAQ Modem http://www.nfrance.com/intmodem.html
Tout ce que je peux dire c'est que j'ai utilisé un modem Olitec
28K depoche et un USRobotics sportster messagePlus 56K sans AUCUN probleme
pour les connexions PPP!!! avec les chaines d'init par défaut de
minicom par exemple
$minicom
Welcome to minicom 1.82
OPTIONS: History Buffer, F-key Macros, Search History Buffer,
I18n
Compiled on Jan 26 1999, 13:39:20.
Press CTRL-A Z for help on special keys
AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
OK
ati3
U.S. Robotics Sportster MessagePlus 56000 Rev. 11.1.18
le bouton "Communication" permet également d'indiquer quelle
sera la séquence de dialogue entre le client et le serveur
PPP... c'est à dire quelles chaines de caractères
le serveur envoie (et donc que le client doit attendre).. c'est typiquement
ce qu'on va retouver dans les fichiers de dialogue "chat" vus dans
le chapitre précedent!
Ci dessous le serveur envoie (i.e le client attend) la chaine "Annex
username:" le client répond alors en envoyant la chaine
"libes" (c'est moi)... idem avec la chaine "Annex password:"
qu'envoit
le serveur, et à laquelle le client répond par l'envoi de
la chaine "tralala" (mon mot de passe: si si....!)

Sur Linux RedHat, on va retrouver ces informations de dialogue dans le
fichier /etc/sysconfig/network-scripts/chat-ppp0
bouton RESEAU :
on va retouver ces parametres dans le script /etc/sysconfig/network-scripts/ifcfg-ppp0
bouton PAP : Enfin d'un point de vue sécurité, il
est nécessaire de n'autoriser la connexion réseau au serveur
PPP que par
l'intermédiaire d'un nom de connexion (je n'ai pas dit
nom d'utilisateur) valide et d'un mot de passe que le serveur PPP va
tester et authentifier, par le protocole PAP (password authentification
protocol)....voir plus haut les explications sur PAP
Ces informations correspondent bien entendu, à des
paramètres enregistrés également sur le serveur PPP
comme on le verra plus bas lors de la configuration d'un serveur
PPP .
Du coté du client on indique donc le nom de la machine
qui va se connecter et son mot de passe pour accéder au réseau!
Ci dessous le nom de connexion "libes" identifiant "une" machine appelée
"libes" du coté du serveur PPP. Cette chaine n'est ni plus ni moins
qu'un identifiant... ca n'est pas forcément un nom d'utilisateur
Unix ni un nom de machine .Ca identifie une connexion cliente/serveur
-
Les fichiers créés pour la nouvelle interface PPP
Les interfaces graphiques c'est bien beau mais on aimerait savoir quels
fichiers ca touche... Après avoir
utilisé netcfg et créé la nouvelle
interface réseau PPP , les fichiers créés sont placés
dans :
/etc/ppp et /etc/sysconfig/network-scripts
$ ls -l /etc/ppp
total 5
-rw------- 1 root daemon
78 jun 8 1998 chap-secrets
-rwxr-xr-x 1 root root
265 oct 15 1998 ip-down
-rwxr-xr-x 1 root root
349 oct 15 1998 ip-up
-rw-r--r-- 1 root daemon
0 jan 6 1999 options
-rw------- 1 root daemon
180 mar 12 17:24 pap-secrets
$ls -l /etc/sysconfig/network-scripts/
total 21
-rw------- 1 root
root 271 mar 12 17:23
chat-ppp0
-rwxr-xr-x 1 root root
386 aoû 24 11:11 ifcfg-eth0
-rwxr-xr-x 1 root root
115 aoû 24 11:11 ifcfg-lo
-rw-r--r-- 1 root
root 265 aoû
24 11:11 ifcfg-ppp0
-rwxr-xr-x 1 root root
445 oct 15 1998 ifdhcpc-done
lrwxrwxrwx 1 root root
20 jun 22 11:18 ifdown -> ../../../sbin/ifdown
-rwxr-xr-x 1 root root
267 oct 15 1998 ifdown-post
-rwxr-xr-x 1 root root
1191 oct 15 1998 ifdown-ppp
-rwxr-xr-x 1 root root
907 oct 15 1998 ifdown-sl
lrwxrwxrwx 1 root root
18 jun 22 11:18 ifup -> ../../../sbin/ifup
-rwxr-xr-x 1 root root
975 oct 15 1998 ifup-aliases
-rwxr-xr-x 1 root root
1023 oct 15 1998 ifup-ipx
-rwxr-xr-x 1 root root
724 oct 15 1998 ifup-plip
-rwxr-xr-x 1 root root
727 oct 15 1998 ifup-post
-rwxr-xr-x 1 root
root 2817 oct 15
1998 ifup-ppp
-rwxr-xr-x 1 root root
481 oct 15 1998 ifup-routes
-rwxr-xr-x 1 root root
1564 oct 15 1998 ifup-sl
-rw-r--r-- 1 root root
1084 oct 15 1998 network-functions
-
lancement de la connexion PPP avec netcfg
une fois que tout ce paramétrage est terminé, il ne
reste plus qu'à essayer de lancer une connexion... Pour cela revenir
sur la définition des interfaces réseau de netcfg ... Sélectionner
la nouvelle interface crée PPP0 et cliquer sur le bouton "activer"
..........
Le modem devrait numéroter et se connecter au serveur!
C/ configurer une connexion PPP avec KPPP
Les memes concepts avec KPPP !!!!! Après tout ne vous ennuyez
pas à utiliser netcfg... kppp me parait très bien et fonctionne
top!
Quand on a compris les quelques concepts nécessaire à
une connexion PPP, le paramétrage d'une connexion PPP (hors problème
vicieux) cliente se fait en 10 minutes maximum!
bouton SETUP pour créer une nouvelle configuration de connexion
vers un fournisseur d'accès Internet (le serveur PPP quoi!)
Cette fenetre permet d'indiquer le nom de connexion (libes) et le mot de
passe (****) qui vont etre autorisés à se connecter
sur le serveur identifié par "mon-linux"
Ces informations d'authentification seront celles échangées
dans la négociation PAP. C'est l'équivalent en mode
graphique des infrmations contenues dans le fichier /etc/ppp/papa-secrets
Notons qu'avec une interface graphique comme kppp le fichier /etc/ppp/pap-secrets
n'est pas utilisé
Les informations d'authentification pour kppp sont stockées
dans le fichier de configuration de kde ~/.kde/share/config/kppprc
Si le mot de passe de la connexion PPP est erroné, on
aura les messages suivant dans /var/log/messages
Nov 4 00:05:04 pcmaison pppd[576]: pppd
2.3.8 started by momo, uid 501
Nov 4 00:05:04 pcmaison pppd[576]: Using interface
ppp0
Nov 4 00:05:04 pcmaison pppd[576]: Connect: ppp0
<--> /dev/ttyS0
Nov 4 00:05:10 pcmaison pppd[576]: Remote message:
Password validation failure
Nov 4 00:05:10 pcmaison pppd[576]: PAP authentication
failed
Nov 4 00:05:15 pcmaison pppd[576]: Terminating
on signal 15.
Nov 4 00:05:15 pcmaison pppd[576]: Connection terminated.
bouton EDITER/SETUP pour définir le paramétrage
de la connexion vers le serveur PPP identifié par "mon-linux"
bouton DEVICE: on retrouve des concepts connus non? le modem
est branché sur le fichier spécial /dev/modem (ce
fichier doit exister et est un lien sur /dev/ttyS0) ... vérifiez...
au besoin modemtool pour créer ce fichier
On demande à ce que le controle de flux sur le port série
soit un controle de flux matériel rts/cts (indispensable)
souvenez vous du script écris à la main plus haut... on
retrouve ces options à travers l'interface graphique!
$more connex-on
/usr/sbin/pppd /dev/modem 115200
crtscts modem defaultroute \
proxyarp noipdefault netmask 255.255.255.0
remotename ppp2 ipparam ppp2 \
user libes connect '/usr/sbin/chat
-v -f /home/momo/PPP/chat-ppp2'
bouton MODEM : profitez en pour tester votre modem avec le bouton
QUERY MODEM
bouton PPP: rien de spécial à signaler... le
timeout correspond a l'échec de ppp si une connexion ne s'est pas
établie au bout de 30sec
revenons au bouton EDITER de la fenetre principale pour
définir tout le paramétrage de la connexion qui s'appelle
"mon-linux" et passons en revue les divers paramétrages
bouton DIAL; permet d'indiquer le numéro de téléphone
d'accès au FAI (serveur PPP) .. en l'occurence ici c'est mon PC
sous Linux au bureau du labo Authentification par PAP (password access
protocol) ...
bouton ARGUMENTS : voici les arguments de la commande pppd (ceux
qu'on retrouve également dans le script écrit à la
main).... souvenez vous du script écris à la main plus haut...
on retrouve ces options à travers l'interface graphique!
$more connex-on
/usr/sbin/pppd /dev/modem 115200 crtsctsmodem
defaultroute \
noipdefault netmask 255.255.255.0
\
user libes connect '/usr/sbin/chat
-v -f /home/momo/PPP/chat-ppp2'
j'ai rajouté quelques arguments ici
qui ne sont pas indispensables (mru et mtu), voir le "man pppd"
bouton IP : pour indiquer si l'adresse réseau du client
PPP après connexion est donnée statiquement (et localement
sur le PC client dans le fichier /etc/hosts) ou dynamiquement par le
serveur PPP?
La plupart du temps pour des raisons d'administration de réseau
, il est préférable que ce soit le serveur PPP (FAI) qui
attribue une adresse réseau IP dynamiquement
au PC client. (on verra plus loin dans la partie paramétrage
du serveur comment on fait sous Linux)
On choisira donc "Dynamic IP Address"; .... ce paramétre
correspond à l'option "noipdefault" de la ligne de commande.
le man pppd dit: " With this option, the peer
will have to supply the local IP address during IPCP negotiation
(unless it specified explicitly on the command line or in an
options file)."
bouton DNS: on indique à quel domaine réseau appartiendra
le PC connecté à l'internet via la connexion PPP, et quel
est le serveur de noms (DNS) de ce domaine
bouton "Login Script" : indique quel sera l'échange
(le dialogue) entre le serveur et le client (s'il y en a) ... Il faut bien
entendu connaitre les chaines échangées s'il y en a (on les
capture avec l'utilitaire minicom comme indiqué ci dessus)... dans
mon cas j'ai fait envoyer de la part de mon serveur PPP Linux les chaines
compc32.com.univ-mrs.fr login: puis
Password:
Lorsque tout ce paramétrage est terminé, (quand on sait
ce qu'on fait , il y en a pour 10 minutes maximum) la connexion est
prete...il ne reste plus qu' la lancer par le
bouton CONNECT
il est bien sur préférable de suivre la trace de connexion
avec l'option "show log window" pour repérer un problème
éventuel!
hope this helps et qu'il ya pas trop de c... écrites
ML
Installer un serveur PPP sur PC Linux
Passons du coté d'un serveur PPP sur un PC Linux... qui nous permet
d'etre notre propre Fournisseur d'accès Internet (si tant est que
le PC serveur soit également déjà relié
à l'Internet, évidemment)
paquettages nécessaires
Sur le PC qui va servir de serveur PPP, il est nécessaire d'avoir
un modem :-)) (ben il fallait le dire non?) et d'avoir installé
les paquettages logiciels suivants :
-
ppp (évidemment)
-
$rpm -q ppp
-
ppp-2.3.8-1
-
mgetty+sendfax : comme l'indique l'information du RPM
ce paquettage permet de gérer les connexions (login) sur une ligne
série via un modem . on va donc se servir de mgetty pour répondre
à la connexion téléphonique établie par le
client PPP . Dans ces grandes lignes, mgetty va :
-
décrocher la ligne en réponse à l'appel ,
-
envoyer certaines demandes d'information, puis
-
lancer pppd pour établir la connexion réseau IP
$ rpm -qi mgetty
Name : mgetty
Distribution: Manhattan
Version : 1.1.14
Vendor: Red Hat Software
Release : 5
Build Date: mar 13 oct 1998 02:57:38 MEST
Install date: lun 21 déc 1998 13:43:38 MET
Build Host: porky.redhat.com
Group : Networking/Utilities
Source RPM: mgetty-1.1.14-5.src.rpm
Size : 1194377
License: distributable
Packager : Red Hat Software <bugs@redhat.com>
Summary : Remplacement de getty
pour les modems données et fax.
Description :
Ce paquetage contient un getty intelligent permettant
les logins sur une
ligne série (via un modem, par exemple). Il autorise
le rappel automatique
et contient une gestion fax (mgetty-sendfax doit être
installé pour
utiliser pleinement cette gestion fax).
On peut aussi gérer les réponses aux appels
téléphoniques avec autre chose que mgetty sous Linux, mais
mgetty semble bien adapté aux gestions de modems compatibles hayes
:
Mgetty is a ``smart'' getty replacement,
designed to be used with hayes compatible
data and data/fax modems. Mgetty
knows about modem initialization, manual modem
answering (so your modem doesn't answer if the
machine isn't ready), UUCP locking (so you can use the same device
for dial-in and dial-out). Mgetty provides very extensive logging
facilities.
-
ipfwadm (ou ipchains pour les noyaux Linux > 2.2.0): pour
gérer le routage des paquets réseau IP depuis le serveur
PPP vers le reste de l'internet.. Sans cela le PC serveur PPP n'offrira
sans doute pas la connectivité totale au reste de l'Internet
Gérer les appels entrants sur le serveur PPP, avec mgetty
Après avoir installé le paquettage mgetty+sendfax, Les fichiers
de configuration de mgetty sont dans /etc/mgetty+sendfax:
$ll /etc/mgetty+sendfax/
total 28
-rw------- 1 root root
1172 May 11 23:26 dialin.config
-rw------- 1 root root
2593 May 11 23:26 login.config
-rw------- 1 root root
1559 May 11 23:26 mgetty.config
le fichier dialin.config controle l'acceptation ou le refus des
appels téléphoniques entrants, selon le numéro de
téléphone de l'appelant . Si on a besoin de controler ces
acces, lire la syntaxe adaptée à ce fichier, dans le
fichier lui meme.. Je ne traite pas de cet aspect de controle ici. En plus
il faut que vous ayiez un modem qui supporte l'option "callerId" qui permet
de connaitre le numero de téléphone de l'appelant.
Le fichier login.config controle comment et quand mgetty doit lancer
un autre programme lors de la connexion d'un utilisateur... et ceci
en lieu et place du login normal. On va faire lancer pppd
Dans ce fichier il est nécessaire d'enlever les commentaires
de la ligne /AutoPPP/ et d'y rajouter quelques options nécessaires
à la commande pppd qui va etre lancée pour établir
la liaison réseau.
/AutoPPP/ - a_ppp /usr/sbin/pppd
auth -chap +pap login modem debug crtscts ttyS0 38400
on indique juste qu'on veut valider l'authentification par "pap",
qu'on a un modem au cul du port série ttyS0, et qu'on veut controler
le flux de facon matérielle par rtscts
le fichier mgetty.config controle le paramétrage
de la ligne série ttyS0 sur lequel est branché le modem du
serveur
Il est juste nécessaire de modifier les lignes de paramètres
correspondant au port série ttyS0 sur lequel est branché
le modem c'est à dire ttyS0 dans notre cas.
On trouve dans ce fichier la chaine d'initialisation du modem que va
envoyer mgetty au modem... Comment la connaitre pour votre modem ??? soit
en lisant la FAQ-modem http://www.nfrance.com/intmodem.html
soit en magouillant un petit peu...
Moi , du coté du serveur PPP j'ai un USRobotics sportster Message
plus ... j'ai remplacé la chaine d'init présente par défaut
dans ce fichier par une que j'ai trouvé je sais plus ou!!!? ...
En tout cas celle la fonctionne pour mon USR message Plux 56K!
# Zoom V.FX 28.8, connected to ttyS0: don't do fax, less
logging
#
port ttyS0
speed 38400
debug 3
#init-chat "" \dAT&F&C1E0\d\r OK ATQ0&K3&D2S0=0
OK
init-chat "" \dAT&F1&K3&A2S0=2S13.0=1S27=128S44=5S9=12
OK
### ai desactive le &W qui ecrit la confiog en ram
du modem
#init-chat "" \dAT&F1&K3&A2S0=2S13.0=1S27=128S44=5S9=12&W
OK
#init-chat "" \dAT&F1&K3 S7=45 S0=0 L1 V1 X4 &c1
E1 Q0 OK
modem-type data
# data-only y
Lancer et Automatiser le lancement de mgetty
On va se servir du process init de linux et de son
fichier de parametre
/etc/inittab
pour automatiser le lancement
de mgetty !!
Pour cela il suffit de rajouter une ligne dans le fichier /etc/inittab
qui va permettre de relancer automatiquement le process mgetty par init
mgetty est lancé avec l'option -D sur la
ligne série ttyS0 qui signifie que la ligne série et le modem
doivent etre traités comme un modem échangeant des données
(et pas en mode fax )
-D Tells mgetty
that the modem is to be treated as a
DATA modem, no fax initalization is attempted.
g1:345:respawn:/sbin/mgetty -D /dev/ttyS0
En rajoutant cela dans le fichier /etc/inittab et en demandant
la relecture de ce fichier par le démon init (par /sbin/init
q) ca va lancer le processus mgetty en mémoire et initialiser
le port ttyS0 pour les besoins du modem!!!!
Regardez le man mgetty si vous voulez rajouter des options à
mgetty.. Personnellement à part -D je n'ai rien rajouté!
... on trouvera parmi les options interessantes ,
l'option -n qui indique a mgetty au bout de combien de sonneries
il décroche la ligne (1 sonnerie par défaut)
et surtout....
l'option -p qui indique a mgetty quel est le prompt
de login à afficher à l'utilisateur.... On peut à
l'aide de divers codes personnaliser son propre "prompt de connexion...
Par défaut ce prompt de connexion est celui qui figure dans le fichier
/etc/issue
Le manuel de mgetty indique que la chaine de prompt par défaut
est spécifiée lors de la compilation de mgetty...
Si comme moi vous n'avez pas compilé cette distribtution et que
vous avez juste installé la distrib à l'aide d'un RPM , le
mieux est de vérifier quelle chaine exacte mgetty vous
envoie avec un coup de connexion "à blanc" par minicom.... Appelez
votre serveur depuis le PC client par minicom et notez les échanges...
Dans mon cas sans aucune option -p à mgetty , voici les chaines
que je recois :
'compc32.com.univ-mrs.fr login: '
'Password: '
Après avoir lancé le processus mgetty en mémoire
(soit par init soit à la mimine) , il faut controler tout
de suite si cette initialisation avec la chaine d'init présente
dans /etc/mgetty+sendfax/mgetty.config s'est bien passée!!!!
Pour cela jeter un coup d'oeil au fichier de trace relatif à
mgetty qui se trouve dans /var/log/mgetty.log/ttyS0 , ainsi qu'a
/var/log/messages
s'il ya des erreurs, inutile d'aller plus loin..cela signifie que
le modem s'initialise mal et il est alors nécessaire d'en
trouver la raison.
exemples de problemes....
Sep 6 00:11:35 compc32 mgetty[4628]: cannot get terminal line
dev=ttyS1, exiting: Erreur d'entrie/sortie.
(je m'étais trompé de port série dans ce cas
j'avais mis ttyS1 à la place de ttyS0)
01/04 09:25:43 yS0 timeout in chat script, waiting for `RING'
01/04 09:25:43 yS0 huh? Junk on the line?
--
01/04 09:26:17 yS0 timeout in chat script, waiting for `RING'
01/04 09:26:17 yS0 huh? Junk on the line?
--
01/04 09:29:47 ##### failed dev=ttyS0, pid=2577, got signal 15,
exiting
exemple d'une bonne connexion à 22:56, L'utilisateur "libesppp"
s'est bien connecté....
08/31 22:56:04 ##### data dev=ttyS0, pid=1772, caller='none', conn='9600/ARQ/V34',
name='', cmd='/bin/login', user='libesppp'
A ce niveau, s'il n'y a pas eu d'erreur, mgetty est lancé
par init et est en attente d'appels téléphoniques...
Si le client ppp appelle, mgetty va répondre (modem décroche).
mgetty va envoyer des chaines pour demander une authentification
'compc32.com.univ-mrs.fr login: ' 'libesppp'
'Password: ' 'tralala'
auxquelles le script-chat du client va donner les chaines de
réponse...
si l'authentification est correcte (vérification dans /etc/passwd)
le "user" X sera alors connecté, en se connectant /usr/sbin/pppd
est lancé en tant que shell de connexion, (partie "serveur" de ppp)
le démon pppd est alors lancé (ligne /AutoPPP/
- a_ppp /usr/sbin/pppd auth -chap +pap
login modem debug crtscts ttyS0 38400 présente dans le fichier
login.config)..
et l'authentification "pap" a alors lieu (mots depasse de pap-secret)
la liaison réseau IP entre le client et le serveur sur RTC
est alors établie....
Paramétrage du serveur pppd
Comme pour la partie cliente, les options du démon pppd serveur
peuvent etre inscrites soit dans le fichier /etc/ppp/options. soit
comme parametre directement sur la ligne de commande de pppd
Attention, étant donné qu'il peut y avoir
plusieurs modems sur les différents ports séries d'un
PC, ce fichier option peut exister en différents exemplaires pour
différent ports série...Auquel cas ils devront s'appeller
/etc/ppp/options.ttyS0
ou
encore /etc/ppp/options.ttyS1 etc... pour référencer
les options du port série ttyS0 ou ttyS1
L'attribution d'une adresse IP dynamique par le serveur, pour le client
PPPP
On a vu dans le paramétrage d'un client PPP que l'adresse
IP qu'il recoit est attribuée dynamiquement par le serveur PPP ...(du
moins que c'est mieux ainsi pour l'administation puisque le serveur controle
les adresses IP de ses clients!!)
Cette adresse sera placée dans le fichier /etc/ppp/options
(on est du coté serveur toujours hein!?)
NB: Du coté du client, cette adresse devra etre placée
dans lefichier /etc/hosts (si elle ne figure pas dans le DNS du domaine)
pour que la résolution de nom s'effectue correctment
$ more options.ttyS0
::::::::::::::
lock
-detach
:139.124.2.203
<---- adresse envoyée dynamiquement au client PPP
asyncmap 0
netmask 255.255.255.0
proxyarp
defaultroute
crtscts
modem
(les autres options ont été commentées pour la partie
cliente... ce sont les memes ici, du coté du serveur)
L'option proxyarp permet au serveur de jouer le role de serveur arp
et faire apparaitre le PC client sur le réseaul local ethernet
"Add an entry to this system's ARP [Address Resolution
Protocol] table with the IP address of the
peer and the ethernet address of this system. This will have
the effect of making the peer appear to other systems to be
on the local ethernet."
L'authentification des "connexions" sur la liaison PPP
Pour qu'un utilisateur X puisse se connecter, il est nécessaire
de créer des comptes d'accès au réseau pour les utilisateurs
se connectant depuis le PC client.
-
Pour cela il faut créer de nouvelles entrées dans le
fichier /etc/passwd du coté serveur
Ainsi pour un accès pour l'utilisateur "libesppp" on
créera un compte spécial dans "/etc/passwd" . Le
shell du login est remplacé par le lancement de pppd
libesppp:LO2QP457L8RXc:801:801:compte PPP pour libes:/home/ppp:/usr/sbin/pppd
Bien sur, le programme pppd devra pouvoir etre lancé par n'importe
quel utilisateur... il faut donc vérifier les permissions pour exécuter
pppd..le mieux est de placer le bit suid root par chmod u+s /usr/sbin/pppd
ls -l /usr/sbin/pppd
-rwsr-xr-x 1 root root
106876 jun 8 1998 /usr/sbin/pppd
mgetty envoie par défaut au client (cela dépend de comment
il a été compilé) le nom IP du PC
serveur, suivi de "login:" ... Chaine à laquelle
il faudra répondre par un nom de connexion Unix valide!!!
(un qui figure dans /etc/passwd)
puis dans le 2eme échange mgetty envoie la chaine "passwd"
à laquelle il faut répondre par le password de l'utilisateur
qui se connecte par le RTC
-
Lorsque le client PPP est kppp par exemple l'échange de ces chaines
est géré par l'onglet "Login script"
de l'interface kppp
-
Lorsque le client ppp est lancé en ligne de commande, les réponses
a ces chaines sont faites par le chat-script de connexion (argument "connect"
de pppd)...le fichier pap-secrets n'est pas consulté
Ces chaines echangées, vont se retrouver dans mon chat-script
de connexion PPP du coté du client, tel qu'on l'a vu plus haut
-
$more chat-ppp2
-
'ABORT' 'BUSY'
-
'ABORT' 'ERROR'
-
'ABORT' 'NO CARRIER'
-
'ABORT' 'NO DIALTONE'
-
'ABORT' 'Invalid Login'
-
'ABORT' 'Login incorrect'
-
'' 'ATZ'
-
'OK' 'ATM0DT04 99 82 93 26'
-
'CONNECT' ''
-
'compc32.com.univ-mrs.fr login: ' 'libesppp'
-
'Password: ' 'tralala'
-
En mode ligne de commande (lancement de pppd sur le shell unix), l'authentification
PAP est faite avec la paire nom_user/passwd échangée dans
le chat-script... Le fichier /etc/ppp/pap-secrets n'est pas consulté.
Le mot de passe provient du chat-script
-
En mode graphique avec kppp idem la seul authentification est faite avec
le "Login script"
[on dirait que pap n'est pas activé? pourtant je l'ai placé
dans la ligne
/AutoPPP/ - a_ppp /usr/sbin/pppd
auth -chap +pap login modem debug crtscts ttyS0 38400 ]
Connexion au serveur PPP linux établi ci dessus, depuis
un PC client
Bref rappel de ce qui a été exposé plus haut,
juste pour montrer la ligne de commande qui permet d'établir une
connexion PPP depuis un client Linux
./linux-on
/usr/sbin/pppd /dev/modem 115200 crtscts modem defaultroute
\
proxyarp noipdefault netmask 255.255.255.0 \
connect '/usr/sbin/chat -v -f /home/momo/PPP/chat-ppp2'
avec le fichier "chat-ppp2"
-
$more chat-ppp2
-
'ABORT' 'BUSY'
-
'ABORT' 'ERROR'
-
'ABORT' 'NO CARRIER'
-
'ABORT' 'NO DIALTONE'
-
'ABORT' 'Invalid Login'
-
'ABORT' 'Login incorrect'
-
'' 'ATZ'
-
'OK' 'ATM0DT04 99 82 93 26'
-
'CONNECT' ''
-
'compc32.com.univ-mrs.fr login: ' 'libesppp'
Dans le cas de cette connexion a un serveur PPP linux via mgetty, les options
"user" et "remotename" de pppd ne sont pas utiles ici , le fichier /etc/ppp/pap-secrets
n'est
pas consulté, l'authentification est faite lors de la connexion
de l'utilisateur "libesppp" sur le serveur PPP linux
Passerelle par défaut avec ipchains/ipfwadm
A l'issue de ces paramétrages, le lien PPP est établi,
et le PC Linux du coté serveur fait fonction de serveur PPP et de
passerelle pour le réseau local éthernet... toutefois il
ne permet pas de router les paquets réseaux destinés à
des adresses IP extérieures au réseau local!!
Pour permettre un accès total au reste de l'internet via l'interface
ppp0 par laquelle on est connecté, il faut modifier
les regles de routage du noyau Linux coté serveur.. Pour cela il
faut installer sur le PC serveur le paquettage ipfwadm (ou
ipchain pour les noyaux > 2.2.0)
et modifier les règles
de routage
$Name : ipfwadm
Distribution: Manhattan
Version : 2.3.0
Vendor: Red Hat Software
Release : 6
Build Date: ven 08 mai 1998 04:58:22 MEST
Install date: lun 23 aoû 1999 11:29:40 MEST
Build Host: porky.redhat.com
Group : Utilities/System
Source RPM: ipfwadm-2.3.0-6.src.rpm
Size : 87848
License: GPL
Packager : Red Hat Software <bugs@redhat.com>
Summary : Pare-feu IP et outil d'adminitration
des accès
Description :
Ceci est l'outil d'administration de firewall et de connexion IP.
Il est utilisé si vous avez besoin d'utiliser un firewall (une
machine
qui agit comme une passerelle sûre vers Internet.
Je ne vais pas rentrer dans le détail fin des règles de
routages à adopter pour le serveur PPP ...Lire le man ipfwadm
/sbin/ipfwadm -F -a accept -P all
Il faut vérifier que les règles de routages présentes
sur lenoyau Linux du serveur PPP laissent passer les paquets tcpip en sortie
.. Du coté du serveur, on doit avoir qq chose comme
$ /sbin/ipfwadm -F -l
IP firewall forward rules, default policy: accept
$ /sbin/ipfwadm -F -l
IP firewall forward rules, default policy: accept
type prot source
destination ports
acc all anywhere
anywhere
n/a
$netstat -r
Kernel IP routing table
Destination Gateway
Genmask Flags
MSS Window irtt Iface
compp2.com.univ *
255.255.255.255 UH 1500 0
0 ppp0
139.124.2.0 *
255.255.255.0 U 1500 0
0 eth0
127.0.0.0 *
255.0.0.0 U
3584 0 0 lo
default gw-lum
0.0.0.0 UG
1500 0 0 eth0
Pour que mon PC fasse serveur PPP automatiquement après les heures
de bureau
Au boulot j'ai qu'une ligne de tél dans mon bureau... pendant
la journée je ne peux pas mobiliser cette ligne pour en faire un
serveur d'accès internet. En revanche le soir de 20:00 jusqu'à
6:00 du mat' j'aime bien que ma ligne soit disponible pour les connexions
internet depuis chez moi... Aussi, je lance un script en perl
par cron qui me lance automatiquement mgetty et me modifie /etc/inittab
De 20:00 à 6:00 mon PC fait alors service d'accès Internet
et je peux me connecter depuis chez moi sur mon propre serveur...A
6:00 du mat' , le script se redéclenche, modifie inittab et relance
init
Voici ce script d'envergure pppd.pl placé sous licence
GML (General Momo Licence ;-))
#!/usr/bin/perl
ML: 10/10/99
## lancé par CRON chaque jour à 20h du soir
./pppd.pl ON
##
à 6h du mat ./pppd.pl OFF
## pour modifier le fichier /etc/inittab et relancer le démon
/etc/init
## de maniere a activer le démon mgetty qu ipermet
d'etablir une connexion ppp
## a distance via le RTC
## le PC se transforme alors en serveur PPP
##
$chaine="mgetty";
$MOI="libes";
if ($#ARGV == -1) {
print(" Usage: $0 <ON | OFF>
\n");
exit;
}
$arg=$ARGV[0];
unless (($arg eq ON) || ($arg eq OFF)) { die
"argument incorrect $arg";}
open(MAIL,"| mail -s\"gestion mgetty\" $MOI");
open (INITTAB,"/etc/inittab");
@tabinit=<INITTAB>;
foreach (@tabinit) {
if (/$chaine/) {
$trouve=1;
s/^(.)(.+)/$1$2/;
$first=$1; $suite=$2 ; ##pour analyser
le 1er caractere
##modification de la variable courante
$_ a la volée
## le tableau tabinit s'en trouve
automatiquement modifié
if ( ($first eq "#") &&
($arg eq "ON")) {
$change=1;
s/^(\W)(.*)/$2/;
print "changement
$arg: $_";
print MAIL "changement
$arg: $_";
};
if ( ($first ne "#") &&
($arg eq "OFF") ) {
$change=1;
s/(.*)/#$1/;
## on rajoute # devant la ligne
print "changement
$arg: $_";
print MAIL "changement
$arg: $_";
};
if (! $change) {
print "fichier
inchangé \n";
print MAIL "fichier
inchangé \n";
}
}
}
if (! $trouve) { print "chaine $chaine absente \n"};
close(INITTAB); close(MAIL);
if ($change) {
&ecrit_tab("/etc/inittab",@tabinit);
print("Rechargement de /sbin/init \n");
print MAIL "Rechargement de /sbin/init \n";
## on cree un sous process fils et on lui fait executer
le relancement de init
if (! fork) {
exec("/sbin/init Q");
}
}
print "fin...\n\n";
##--------------------subroutines
sub ecrit_tab {
local($nomfic,@values);
($nomfic,@values)=@_;
open(OUT,">$nomfic") || die "erreur ouverture fichier
sortie";
foreach $_ (@values) {
# print $_ ;
print OUT $_;
}
close(OUT);
}
Autres documentations sur PPP et Linux
Y en a tellement! certaines sont meilleures, mais toutes se
complémentent !
............Hope this helps -
Marseille-Obélisque de mazargues : vers le 4/09/1999