Linux PPP, Foire Aux Questions
Par Alfred Longyear, adaptation Francaise Rene Cougnenc
27 Janvier 1994
Ce document contient les reponses aux questions frequemment posees
concernant l'implementation de PPP sous Linux, il s'agit de la traduc-
tion Francaise et d'une mise en forme SGML du fichier contenu dans
l'archive de distribution du paquetage PPP. Depuis, Al Longyear dif-
fuse un ``PPP-HOWTO''. Ce document ayant ete realise avant, il con-
serve le nom de PPP-FAQ et est un peu different du HOWTO original; en
fait il est plus complet.
1. Mentions legales
"Linux PPP Frequently Asked Questions" est Copyright (c) 1994 Alfred
Longyear.
Ce document peut etre reproduit en tout ou partie a condition que son
origine soit clairement mentionnee et que ce present copyright soit
present. Aucune modification du texte n'est autorisee.
Microsoft est une marque deposee de Microsoft Corporation. Morning
Star est une marque deposee de
Morningstar Technologies Incorporated. Tous les autres produits
mentionnes sont des marques deposees des compagnies en etant
proprietaires.
2. Introduction
Voici les reponses aux questions frequemment posees concernant
l'utilisation de PPP sous Linux.
Envoyez toute correction que vous jugerez necessaire a l'adresse
[email protected]. Attention ! consultez le texte original Anglais
auparavant; l'auteur, Alfred Longyear, n'est pas concerne par les
eventuelles erreurs introduites dans cette adaptation Francaise.
Ce document sera occasionnellement remis a jour, mais surement pas
tres regulierement, realiser ce genre de choses prend un temps non
negligeable et n'est pas un travail passionnant. Sa diffusion sera
tout aussi peu precise, nous tacherons de le rendre disponible sur les
principaux sites diffusant Linux en France. Le source original est
realise en SGML et formate par le systeme Linux-doc-SGML mis au point
par Matt Welsh pour la documentation du systeme Linux. Vous
disposerez par consequent de ce texte dans differents formats, qui
sont:
o Sortie DVI apres formatage LaTeX, que vous pourrez par exemple
afficher sous X-Window par la commande xdvi,
o Sortie PostScript, permettant directement l'impression papier du
plus bel effet,
o Sortie HTML, qui vous autorisera a parcourir ce document sous forme
hypertexte dans Chimera, Mosaic ou tout autre client WWW,
o Sortie ASCII, desaccentuee et pas tres jolie, mais si vous ne
pouvez pas faire autrement elle sera lisible sur n'importe quoi,
o Et bien sur du texte source SGML ayant permis la realisation de ces
precedents formats.
La mise en page n'est pas extraordinaire, le kit Linux-doc-sgml
n'etant pas destine a realiser des productions aussi peaufinees que
celles faites directement sous LaTeX.
Tout au long de ce document, il est fait usage du terme "distant" pour
designer "systeme situe a l'autre bout de la connexion modem", que
l'on appelle souvent "peer". Son adresse IP est l'adresse 'P-t-P'
indiquee par la commande 'ifconfig'.
3. Questions et reponses
3.1. Qu'est-ce que PPP ?
PPP, ou "Point-to-Point Protocol", est un protocole internet
``officiel''. Il est destine a l'echange de paquets IP (ou autre type
de reseau) sur une liaison serie. Sa description se trouve dans le RFC
1661.
Contrairement a ce que beaucoup de personnes pensent, PPP ne signifie
pas du tout "Peer to Peer Processing", bien qu'il soit possible
d'effectuer des communications "peer-peer" en utilisant TCP/IP sur une
liaison PPP.
3.2. Mon entreprise (universite) ne supporte pas PPP. Puis-je
l'utiliser ?
En general, non. Une implementation ``classique'' de PPP necessite des
modifications aux routages et interfaces reseau du systeme
d'exploitation. Cela peut necessiter la recompilation du noyau du
systeme distant.
Ce n'est pas une tache de simple utilisateur. Si vous arrivez a
convaincre vos administrateurs systeme que PPP est une ``bonne
chose'', alors vous aurez une chance de voir ce protocole installe. Si
ils sont refractaires a cette idee, vous ne pourrez probablement pas
utiliser PPP.
Malgre tout, si vous utilisez un systeme qui est supporte par les gens
qui vendent "TIA" ("The Internet Adapter") il y a un petit espoir.
Nous n'avons pas beaucoup d'informations sur ce paquetage, mais nous
avons entendu dire qu'ils comptent supporter PPP dans les prochaines
versions. (Ces informations sont sans doute tres anciennes, contactez-
les directement. Vous trouverez des renseignements sur TIA sur
ftp.marketplace.com dans le repertoire /pub/tia).
Un portage Linux est prevu.
Si votre systeme n'est pas supporte par TIA et que vous ne pouvez
convaincre vos administrateurs de l'utilite de PPP, essayez d'utiliser
le paquetage "term".
3.3. Ou et sous quelle forme se trouve PPP ?
Il se decompose en deux parties, dont la premiere est dans le noyau,
incluse depuis Linux 1.1.13.
NE REMPLACEZ PAS LE PILOTE FOURNI AVEC LE NOYAU PAR UNE VERSION
TROUVEE DANS LE PAQUETAGE PPPD !!!
La seconde partie est le "demon pppd". Ce programme est INDISPENSABLE,
ses sources se trouvent dans le fichier ppp-2.1.2b.tar.gz sur les
sites diffusant Linux.
Pour les noyaux de version inferieure a 1.1.13, le pilote necessaire
est inclus dans un sous-repertoire de cette archive. C'est le seul cas
ou vous devez utiliser ces fichiers systeme, mais il est plutot
preferable que vous mettiez a jour votre noyau.
3.4. Je viens de recuperer PPP. Quelle est la suite des operations ?
Lisez la documentation fournie. Elle a ete ecrite pour vous !
Commencez par lire les fichiers README et README.linux. Diverses
autres sources de documentation sont indiquees ci-apres.
3.5. Quelles autres documentations sur PPP sont disponibles ?
(Ou est la doc ? Ou est la FAQ ? etc.)
Il existe plusieurs sources d'information concernant le protocole PPP
tel qu'il est implemente sous Linux.
o Le fichier README contenu dans l'archive des sources.
o Le fichier README.linux au meme endroit.
o Le document Linux Net-2-HOWTO.
o Le "Network Admin Guide".
o La page de manuel du programme "pppd".
o La FAQ de PPP (Ce n'est pas le document que vous lisez ici).
Le fichier HOWTO peut se telecharger sur les sites habituels diffusant
Linux, par exemple sur ftp.ibp.fr dans le repertoire
/pub/linux/docs/HOWTO.
Le Network Admin Guide fait partie du projet de documentation Linux,
vous trouverez ce livre sous forme electronique au meme endroit. Il
sera prochainement publie par O'Reilly et disponible en version
Francaise. Si vous desirez un document de presentation
professionnelle, vous pourrez alors acheter cet ouvrage plutot que de
le telecharger et l'imprimer vous-meme.
Les pages de manuel sont fournies avec les sources. Il vous faudra les
placer dans les repertoires standard, /usr/man/man8 pour que la
commande man puisse les traiter. Vous pouvez bien entendu les examiner
directement a l'aide de groff.
La FAQ de PPP decrit le protocole en lui-meme et ses diverses
implementations sur differents systemes. Vous trouverez ce document
dans le forum Usenet comp.protocols.ppp, ou encore dans news.answers
et il est bien entendu archive sur rtfm.mit.edu dans le repertoire
/usenet. Il est a l'heure actuelle compose de huit parties.
3.6. Ou dois-je poser des questions relatives a PPP ?
Il est preferable de les poser dans le groupe comp.protocols.ppp. Il
est fait pour cela. Helas, beaucoup d'utilisateurs ont tendance a
exposer d'abord leur problemes dans les groupes comp.os.linux.*, ou
ils recoivent des reponses bien que ce ne soit pas l'endroit ideal.
Tres peu de questions sur PPP sont directement liees a son
implementation sous Linux. La plupart des problemes poses sont d'ordre
general, concernent l'utilisation du paquetage PPP et les reponses
sont applicables a n'importe quel autre systeme d'exploitation.
Aussi, pour reduire le trafic dans les groupes Linux, et pour toucher
les vrais specialistes de PPP, si vous devez utiliser Usenet a ce
sujet, utilisez absolument le groupe comp.protocols.ppp.
3.7. PPP ne marche pas, pppd se termine apres l'appel. SOS !!!
C'est l'une des questions les plus irritantes. Nous nous rendons bien
compte que c'est un appel a l'aide, mais il est inutile de poster un
tel message SANS AUCUNE AUTRE INFORMATION. La plupart des gens
susceptibles de pouvoir vous aider l'ignoreront, purement et
simplement.
Il vous faut fournir les logs systeme (syslog) produits lorsque vous
lancez le programme pppd avec l'option debug. De plus, si vous
utilisez chat pour l'appel du service, utilisez son option -v pour
obtenir une trace du dialogue.
Fournissez egalement le log de demarrage de votre noyau Linux. Il
informe des differentes configurations propres a votre systeme, comme
la version de PPP, le type de port serie, etc.
Enfin, rajoutez toute information que vous pensez relative a votre
probleme. Bien entendu, votre machine, disques durs, boutons de
souris, terminaux, n'ont aucun interet... Ce qui compte est surtout le
systeme que vous tentez de contacter, la version de PPP ou de serveur
de terminaux qu'il utilise, les types et vitesses de modem de part et
d'autre, etc.
Faites attention, editez soigneusement ces informations, en supprimant
eventuellement tout numero de telephone, login et mot de passe
susceptibles d'apparaitre. Ils n'ont aucune utilite pour le deboguage,
et les diffuser sur Usenet ne serait pas tres malin. Supprimez aussi
les lignes qui ne viennent pas du noyeau ou de pppd.
Ne postez jamais integralement le log du programme pppd lance avec
l'option kdebug 7 !
Si le probleme demande une analyse du flux de donnees, vous serez
contacte par courrier electronique et l'on vous demandera la trace par
ce biais. Usenet coute deja bien trop cher pour beaucoup de gens.
L'information est ecrite sous plusieurs niveaux. Les messages de
deboguages sont au niveau debug. Ceux d'information le sont au niveau
info, les erreurs au niveau error. Incluez tous les niveaux par le
groupe local2, issu du processus pppd.
De plus, surtout ne supprimez pas les informations horaires, elles
sont tres importantes.
3.8. Je cherche une implementation de PPP ailleurs que sous Linux.
Existe-t-il des versions pour HP-UX, AIX, ou... bien d'autres systemes
?
Lisez les documentations mentionnees plus haut.
AIX sera supporte dans la version 2.2 du paquetage pppd. HP-UX n'est
a notre connaissance supporte que par la version commerciale
MorningStar.
Si vous ne trouvez vraiment aucun renseignement, demandez dans
comp.protocols.ppp, mais surtout pas dans un groupe Linux, qui n'est
en aucun cas concerne.
3.9. Saviez vous qu'il existe une autre implementation nommee "dp" ?
Oui, nous sommes au courant. Le paquetage "dp" fut envisage au tout
debut de l'implementation de PPP sous Linux. Il est tres bien, il
supporte l'appel a la demande. Il ne peut fonctionner que sur un
systeme supportant les streams, c'est a dire principalement le nouveau
SunOS (Solaris).
Linux, pour l'instant, ne supporte pas les streams.
Il existe d'autres ensembles PPP disponibles par l'Internet. Le
paquetage Portable ppp ressemble beaucoup au code TIA; une autre
implementation se nomme tout simplement ppp, et on trouve du code pour
PPP dans l'excellent paquetage KA9Q.
De toutes ces versions, pppd etait le plus proche de ce que Linux
necessitait pour assurer un portage correct.
(Si vous desirez plus d'informations sur ces autres implementations,
demandez dans comp.protocols.ppp.
3.10. Quels RFC decrivent le protocole PPP tel qu'implemente sous
Linux ?
L'implementation courante de PPP est un melange de plusieurs. La plus
grande partie du code de PPP est realisee selon les RFC 1331 et 1332.
Ces documents sont maintenant obsoletes; le 1331 fut remplace par le
1548 qui, a son tour, fut remplace par le 1661 six mois plus tard.
Vous trouverez une liste complete dans la FAQ PPP.
La plupart des implementations de PPP converseront sans problemes avec
celle de Linux.
Tous les RFC 1134, 1171, et 1172 (et, de ce fait, 1055) sont
maintenant obsoletes. Ils ne sont interessants que si vous comptez
deboguer une connection avec une ancienne implementation de PPP, et si
vous vous demandez pourquoi, par exemple, elle vous a demande l'option
IPCP 2 avec une longueur de 4 seulement, et un type de compression
0x0037. (Il en circule encore de nombreuses versions, faites
attention).
Le PPP de Linux ne supportera pas ces vieilleries.
3.11. PPP peut il converser avec SLIP ?
Non. SLIP fonctionne avec SLIP, PPP fonctionne avec PPP.
Quelques distributeurs peuvent offrir des produits fonctionnant a la
fois en SLIP et PPP. Toutefois, ils doivent etre configures dans l'un
de ces deux modes. Il n'existe actuellement aucune methode permettant
de determiner a la connexion quels types de protocoles SLIP, ou PPP,
est attendu.
3.12. Quel est le meilleur ? PPP ou SLIP ?
CELA DEPEND DE NOMBREUX FACTEURS !
Les gens qui posent ce genre de question n'ont en general pas lu le
moindre document sur ces protocoles, a commencer par le Net-2-HOWTO.
Un articles tres interessant sur ce sujet est disponible sur le
serveur Web de Morning Star, www.morningstar.com.
3.13. Quel est le mieux ? L'authentification CHAP ou PAP ?
Si vous avez le choix, prenez CHAP. Sinon, PAP sera mieux que rien.
3.14. Que doit contenir le fichier /etc/ppp/pap-secrets ?
Le protocole pap est le plus souvent implemente sous la forme de votre
nom d'utilisateur associe a un mot de passe. Vous devez mettre le nom
du systeme distant, votre nom d'utilisateur, et le mot de passe.
Prenons un exemple: L'utilisateur abbot veut appeler costello.
L'entree sera la suivante:
#remote account password IP address list
costello abbot firstbase
3.15. Que doit contenir le fichier /etc/ppp/chap-secrets ?
Le probleme le plus courant est que les gens ne reconnaissent pas
cette negociation CHAP par un couple de secrets. Chacun des deux
ordinateurs devant se relier doivent connaitre les deux secrets pour
que la communication aboutisse.
Par exemple, si abbot veut communiquer avec costello, le fichier sur
abbot contiendra:
#local remote secret IP address list
abbot costello firstbase
costello abbot who
Et celui de costello sera:
#local remote secret IP address list
abbot costello firstbase
costello abbot who
3.16. J'ai des erreurs lors de la compilation...
J'ai des erreurs lors de la compilation du noyau quand j'inclus le
pilote ppp.c. Ce noyau est en version 1.1.8. Que faire ?
Avez-vous edite le fichier ppp.c pour lui indiquer la configuration du
noyau que vous utilisez ? Il y a deux #define qui doivent etre
correctement definis si vous comptez compiler le code pour PPP.
._____________________.__________________._________________________.
| | | |
| version du noyau | NET02D | NEW_TTY_DRIVERS |
|_____________________|__________________|_________________________|
| | |
| < 1.0.0 | MISE A JOUR NECESSAIRE !!!! |
|_____________________|__________________._________________________|
| 1.0.0 - 1.0.* | #define | #undef |
| 1.1.0 - 1.1.3 | #define | #undef |
| 1.1.4 - 1.1.12 | #undef | #undef |
|_____________________|__________________|_________________________|
| | |
| 1.1.13 | MISE A JOUR NECESSAIRE !!! |
|_____________________|__________________._________________________|
| | | |
| 1.1.14 - ... NOTE | #undef | #define |
|_____________________|__________________|_________________________|
Le troisieme #define au debut du fichier s'appelle OPTIMIZE_FLAG_TIME.
Il peut etre ou non defini avec n'importe quelle version du noyau
supportant PPP. Vous trouverez plus de details en lisant ppp.c.
NOTE: A partir du noyau 1.1.14, ne remplacez pas les fichiers
drivers/net/ppp.c et include/linux/ppp.h. Ils sont adaptes a votre
version.
Donc, comme vous le voyez dans le tableau ci-dessus, pour le noyau
1.1.8 par exemple, il faut definir a la fois NET02D et
NEW_TTY_DRIVERS. De meme, une version 1.1.18 contient deja tout ce
qu'il faut, vous n'avez aucune modification a faire.
3.17. Que signifie le message: unable to create pid file ?
Vous devez creer le repertoire /var/run. Dans certaines
distributions, il s'agit d'un lien symbolique vers le repetoire /etc.
Ce n'est qu'un avertissement, qui n'empeche pas PPP de fonctionner
correctement. Toutefois, le script ppp-off depend de ce fichier, il
est donc preferable de regler le probleme.
L'entete POSIX path.h definit l'endroit du fichier pid sous le nom
_VAR_RUN. Si vous desirez utiliser un autre repertoire pour PPP ou
d'autres programmes, changez la valeur de cette definition et
recompilez les programmes.
3.18. Que veut dire /etc/ppp/options: no such file or directory ?
Vous devez creer le repertoire /etc/ppp et y mettre un fichier nomme
options. Il doit etre lisible par le processus pppd (root).
Ce fichier peut etre vide, tout simplement. Dans ce cas, utilisez la
commande touch pour le creer. Lisez la page de manuel de pppd pour
obtenir une description de ce fichier.
Il est possible de compiler pppd pour qu'il n'utilise pas ce fichier;
dans ce cas il faut supprimer (commenter) la ligne SECURE_FLAGS =
-DREQ_SYSOPTIONS=1 dans le Makefile.
3.19. Le programme ``dip'' reference PPP...
Lorsque je tente d'utiliser mode ppp depuis dip j'obtiens une erreur
disant que le mode PPP n'est pas supporte. Est-il prevu d'utiliser
dip avec PPP ?
Le programme dip controle l'etablissement d'une liaison SLIP. Puisque
le processus pppd doit faire plusieurs choses a des moments differents
que dans un lien SLIP, il y a fort peu de chances pour que dip et pppd
puissent s'entendre un jour.
La commande dip peut neanmoins etre utilisee pour l'appel telephonique
et le lancement de PPP sur le systeme distant. Dans ce cas il est
preferable de le lancer en tant qu'argument connect de pppd.
3.20. Comment arreter PPP ? Existe-t-il un ``dip -k'' pour PPP ?
Non, il n'y en a pas.
Dans le repertoire chat, vous trouverez un script appele ppp-off. Il
arretera la liaison PPP de la meme facon que votre dip -k .
Le voici ci-dessous. Copiez-le dans un fichier que vous rendrez
executable par la commande chmod +x et le tour sera joue.
______________________________________________________________________
#!/bin/sh
DEVICE=ppp0
#
# Si le fichier pid de ppp0 est present, alors c'est que le programme
# tourne. Arretons-le.
if [ -r /var/run/$DEVICE.pid ]; then
kill -INT `cat /var/run/$DEVICE.pid`
#
# Si ca n'a pas marche, c'est qu'il n'y a plus de processus actifs
# correspondant a ce pid. Cela peut aussi signifier que le fichier
# de verrouillage a ete laisse en place. Il faut supprimer ce verrou.
if [! "$?" = "0" ]; then
rm -f /var/run/$DEVICE.pid
echo 'ERROR: Removed stale pid file'
exit 1
fi
#
# Succes. Laissons pppd faire son propre menage.
echo 'PPP link to $DEVICE terminated.'
exit 0
fi
#
# Le processus pppd n'est pas actif sur ppp0
echo 'ERROR: PPP link is not active on $DEVICE'
exit 1
______________________________________________________________________
3.21. deconnecte. Je dois l'arreter manuellement pour que getty
reprenne la main. Le processus pppd ne se termine pas lorsque le
modem se
Avez-vous lance le programme avec le parametre modem ?
Ce parametre indique a pppd d'honorer les signaux relatifs au statut
du modem sur la ligne, qu'il ignore par defaut. Il est decrit dans la
page de manuel de pppd.
Est-ce que votre modem reflete bien l'etat de la communication par la
ligne DCD ?
La commande Hayes positionnant ce comportement est generalement &C1.
Si vous remettez l'appareil a zero par ATZ lors de la communication,
assurez-vous bien qu'il gere toujours le signal DCD. La configuration
d'usine fournie par beaucoup de constructeurs est helas d'ignorer ce
Carrier Detect.
Le signal DTR est genere par l'ordinateur et indique au modem de
raccrocher la ligne. La sequence Hayes pour cela est generalement
&D1 ou &D2, la seconde etant preferee pour utiliser PPP. La
configuration par defaut des constructeurs etant souvent d'ignorer
DTR.
N'utiliseriez-vous pas un cable de liaison bon marche, incomplet, ne
transmettant pas la ligne DCD ? Les cables de Macintosh classic, par
exemple, ont la reputation de poser ce probleme. Cet ordinateur
n'utilise pas ce signal.
Pour les connexions en mode serveur, avez-vous fait executer pppd
correctement ? Le processus doit etre lance par un appel exec; si vous
le lancez depuis le shell comme une simple commande, ce sera le shell
qui recevra SIGHUP et non pas le processus pppd.
Le script doit avoir un format du type suivant:
______________________________________________________________________
#!/bin/sh
exec pppd -detach modem ...
______________________________________________________________________
3.22. bien lorsque je fais un ``get''. Les transferts FTP echouent
quand je fais un ``put'' mais se passent
Est-ce que le controle de flux est bien en service ? Il se valide par
l'option crtscts de pppd, pour ce qui est du controle de flux materiel
RTS/CTS, et par l'option xonxoff pour XON/XOFF. Sans controle de flux,
vous perdrez des caracteres et le resultat sera desastreux pour la
compression vj, entre autres.
3.23. Comment utiliser le controle de flux XON/XOFF ?
Le mieux est de ne pas l'utiliser, et de choisir RTS/CTS. Toutefois,
si vous ne pouvez faire autrement, vous devez operer selon les trois
points suivants:
o Vous devez specifier l'option xonxoff a pppd. Cela indiquera au
programme de configurer le port serie pour le controle de flux
XON/XOFF, en indiquant ces caracteres au pilote.
o Vous devez specifier les deux caracteres XON et XOFF dans le
parametre asyncmap de pppd. Cela indiquera au systeme distant qu'il
doit encoder XON et XOFF lorsqu'il doit les envoyer en tant que
caracteres normaux. Il suffit en principe d'indiquer asyncmap
a0000.
o Bien sur, n'oubliez pas d'indiquer au modem d'utiliser ce type de
controle de flux. Consultez la documentation de votre appareil pour
determiner la commande Hayes necessaire.
3.24. Le modem ne semble jamais se connecter aux vitesses rapides.
Mettez la vitesse desiree dans la commande de pppd. Si vous ne
l'indiquez pas, ce sera celle qui est initialisee au moment ou vous
lancez le programme qui sera utilisee, et elle peut etre quelconque :
tous les programmes ne remettent pas correctement les parametres du
port serie qu'ils ont trouve en arrivant. Certains peuvent meme
laisser des valeurs etranges amenant un fonctionnement curieux (Une
vitesse de 0, par exemple !).
3.25. Pourquoi ne puis-je lancer pppd si je ne suis pas root ?
Le processus pppd a besoin de modifier le parametrage du reseau, et
ceci n'est autorise qu'au super-utilisateur. Si vous desirez pouvoir
lancer pppd sous un autre nom d'utilisateur, le programme doit alors
etre ``suid root'':
chown root pppd
chmod 4755 pppd
Si vous voulez n'autoriser pppd qu'a un petit groupe de personnes,
attribuez-le a ce groupe et interdisez a tous les autres son
execution.
3.26. Je peux atteindre la machine distante, mais aucune autre.
N'auriez-vous pas oublie le parametre defaultroute ? Il rajoute une
route par defaut dans vos tables de routage, de maniere a ce que les
paquets vers toutes les autres adresses IP soient envoyes par
l'interface PPP.
Le programme ne remplacera pas une route par defaut deja existante.
Ceci est volontaire, cela evite de detruire la route par defaut vers
d'eventuels routeurs Ethernet par accident. Dans ce cas, un message
d'avertissement est envoye au systeme de ``log'' de la machine, via
syslog, et ce sera a vous d'effectuer les operations que vous jugerez
necessaires.
3.27. J'ai une route par defaut mais je ne peux toujours pas me con-
necter ailleurs !
Cela ne provient pas de votre systeme Linux local, mais probablement
d'un probleme de routage sur la machine distante.
Le systeme distant a besoin d'une route vers vous, tout comme vous en
avez une vers lui. Ceci peut etre realise de quatre facons
differentes. Chaque methode a ses avantages et inconvenients; vous
devez en choisir une, et une seule.
1. Utiliser une route de type ``host''. Sur chaque machine du site
distant, rajouter une route vers votre adresse IP Linux, avec comme
passerelle le serveur de terminaux que vous utilisez pour votre
acces local. Cette methode fonctionnera si vous avez un nombre
limite de machines et un reseau tres simple.
2. Utiliser une route de type ``network''. Subdivisez les adresses IP
distantes de maniere a ce que l'adresse IP locale a votre machine
Linux, celle de votre serveur distant, et celle de l'interface
Ethernet de ce dernier soient dans le meme domaine IP.
Cette methode fonctionnera si vous possedez des adresses a
distribuer. Elle sera parfaite si vous possedez un reseau de
classe B et pouvez assigner toutes les adresses distantes dans le
meme domaine IP. Ajoutez alors une route reseau sur chacune des
passerelles et routeurs de facon que toute adresse du reseau
distant soit accedee par le serveur de terminaux. Beaucoup de
configurations possedent beaucoup de machines mais tres peu de
routeurs. (A sii.com, nous avons plus de 300 systemes actifs et
seulement 3 routeurs).
3. Utilisez le programme gated sur toutes les passerelles et sur le
serveur de terminaux. Cela fera diffuser par le serveur de
terminaux des informations vers les passerelles, indiquant qu'il
peut accepter des paquets pour votre adresse IP. Puisque les
machines auront une route par defaut vers l'une de ces passerelles,
ces dernieres genereront les requetes ICMP de redirection et le
routage s'etablira automatiquement.
4. Utilisez ``proxy ARP'' sur le serveur de terminaux. Cette methode
ne fonctionnera que si votre adresse IP locale correspond a l'un
des domaines IP des cartes reseau.
En resume, il n'y a pas de solution miracle, simple et unique. Vous
devez faire votre choix parmi l'une de ces quatre la.
3.28. est toujours refuse (NAK). Le systeme ne se connecte pas. Je
n'arrete pas de recevoir le message disant que le ``magic number''
La probabilite que les deux systemes aient choisi le meme nombre
magique est d'une chance sur un billion. Si vous obtenez
continuellement cette erreur, prenez un billet de loterie et/ou
surveillez votre femme :-)
Les deux causes les plus courantes de ce probleme sont:
1. Le modem s'est deconnecte immediatement apres avoir realise la
connexion et l'acces au systeme distant. Beaucoup de modems sont
configures pour renvoyer l'echo des donnees qu'on leur injecte, et
vos dialoguez avec l'echo local.
2. Les programmes realisant PPP ne sont pas en service sur le systeme
distant au moment ou vous tentez d'etablir le lien. Est-ce que la
machine distante est bien configuree pour PPP ? Est-ce que les
programmes s'y trouvent bien accessibles, tant en chemin d'acces
qu'en permissions ?
Cela tendrait a indiquer que c'est le shell qui vous realise un
echo local des donnees que vous envoyez.
Quoi qu'il en soit, le systeme Linux envoie des donnees que l'autre
cote retourne immediatement. Ce n'est pas une condition acceptable,
vous avez ce que l'on appelle une "boucle".
3.29. par le message ``Could not determine local IP address''. Je
tente de me connecter a un Telebit Netblazer, et il termine
Le Netblazer n'a pas votre adresse IP. Vous n'avez pas non plus votre
adresse IP. La liaison ne s'effectuera pas tant que ces deux
parametres ne seront pas connus.
On a du vous donner une feuille de papier sur laquelle ces deux
adresses IP sont indiquees. Vous devez signaler au Netblazer l'adresse
a utiliser. Indiquez alors ces deux adresses, locale et distante,
comme parametres lors du lancement du programme pppd, selon le format
suivant:
adresse_locale:adresse_distante
N'oubliez surtout pas les deux points (:) de separation.
3.30. par le message ``Could not determine remote IP address''. Je
tente de me connecter a un Telebit Netblazer, et il termine
Lisez donc la reponse a la question precedente...
3.31. Je ne peux pas ``pinguer'' mon adresse IP locale.
Vous ne pouvez pas parceque vous n'avez pas de route vers cette
adresse. C'est le fonctionnement normal. N'essayez pas.
Si vous voulez faire un ping sur votre propre systeme, utilisez
l'adresse loopback: 127.0.0.1.
Vous devriez pouvoir ``pinguer'' l'adresse distante. Toutefois,
certains serveurs interdisent cette operation.
En regle generale, n'essayez pas ping sur l'une ou l'autre de ces
adresse. Choisissez en une troisieme, que vous savez accessible sur le
reseau distant.
3.32. de mon serveur PPP ? Puis-je utiliser la meme adresse IP
locale pour toutes les lignes
Oui.
L'adresse locale n'est pas significative pour le systeme local. Vous
devez avoir une adresse IP distante unique. Le routage est fait en
fonction de l'adresse distante et non locale.
3.33. plaint de se voir refuser le protocole fffb. Qu'est-ce que
c'est que ca ? J'utilise un serveur de terminaux Xyplex et pppd se
Le serveur de terminaux Xyplex est trouble par la compression
d'entetes Van Jacobson. Utilisez l'option -vj de pppd pour ne pas
l'utiliser.
3.34. Le log contient souvent Alarm. Est-ce grave ?
Non.
Cela signifie simplement qu'une mesure de temps s'est ecoulee, c'est
une partie necessaire de la phase d'etablissement du protocole.
3.35. que c'est que cette histoire ? Le log indique protocol reject
for protocol c025. Qu'est-ce
Le site distant voudrait mettre en service le protocole d'analyse de
qualite de liaison sur la machine Linux. (LQR, ``Link Quality
Reporting''). Ce protocole n'est pas encore supporte, ce n'est pas
une erreur. Linux signale en substance: ``L'autre m'a demande ca, je
lui ai dit que je ne sais pas le faire pour l'instant et qu'il ne
m'embete pas avec''.
L'implementation MorningStar tentera toujours LQR. C'est normal.
3.36. ne jamais se terminer. Le peripherique n'est jamais ``UP'', et
finalement le programme raccroche. Que se passe-t-il ? La connexion
s'effectue mais la sequence d'initialisation semble
Essayez avec l'option debug et examinez les traces systeme. (Vous
aurez de toutes facons besoin de ces traces si vous comptez demander
de l'aide). Si elles montrent que vous envoyez la sequence `` LCP-
request'' continuellement et que la valeur d'``id'' ne s'incremente
pas, c'est qu'il n'y a pas de PPP a l'autre bout.
Les trois causes les plus courantes sont:
o PPP n'est pas lance sur la machine distante. Vous envoyez des
demandes de negociation a un programme quelconque, qui est
probablement en train de vous repondre ``Qu'est-ce que c'est que ce
charabia ?''
Assurez-vous que le protocole PPP est bien lance a l'autre bout
avant d'entrer dans la phase de negociation du protocole.
Essayez d'utiliser un programme de communications normal et simulez
la session a la main. Vous devriez alors voir nettement la
tentative de negociation PPP vous arriver, c'est facile a
identifier: il s'agit de trains d'environ 16 caracteres, contenant
beaucoup d'accolades ouvrantes. Il ne doit pas y avoir de retour-
chariot dedans et ils sont envoyes par saccades.
o La liaison n'est pas ``8 bits clean''. Cela signifie que pour
utiliser PPP, vous devez etre configure en 8 bits de donnees, pas
de parite et un bit de stop. PPP ne peut fonctionner qu'en 8 bits.
Le programme pppd passera automatiquement la ligne sous ce format.
La machine distante doit egalement se conformer a cette
configuration sous peine de nombreuses erreurs de format et parite.
PPP encode certains caracteres. Il ne lui est pas possible de
travailler au niveau bit comme kermit peut le faire. PPP ne
fonctionne pas sur une liaison 7 bits.
Il y a une option de compilation dans le pilote ppp.c (qui fait
partie du noyau) appelee CHECK_CHARACTERS, qui ajoute du code
destine a effectuer des tests supplementaires sur les caracteres
recus. Elle pourra vous indiquer si la parite etait validee ou si
le systeme distant envoyait du 7 bits.
o Le systeme distant est configure pour demander l'authentification
PAP ou CHAP. Vous n'avez pas configure votre systeme local pour le
faire. Par consequent, l'autre cote refuse tous vos paquets jusqu'a
en rencontrer un d'identification, que vous n'enverrez jamais.
Dans ce cas, il vous fait soit configurer la machine distante pour
qu'elle ne demande pas d'authentification, ou configurer le systeme
local pour qu'il le fasse.
3.37. La connexion echoue sur une erreur ioctl(TIOCSCTTY).
Utilisez l'archive ppp-2.1.2b.tar.gz. Il s'agit d'un bug qui n'etait
pas gere avant la diffusion de ppp-2.1.2a.
3.38. n'arrive pas a trouver l'adresse MAC avec Linux 1.0. J'essaie
d'utiliser proxyarp. La fonction proxyarp
Utilisez l'archive ppp-2.1.2b.tar.gz. Le programme pppd etait compile
par erreur sous Linux 1.1.8 et utilisait les definitions Net-3 plutot
que celles de l'ancien Net-2.
3.39. des versions 4.6 des bibliotheques partagees ! Alors ??? Bon
sang ! J'ai recupere ppp-2.1.2b et il dit qu'il a besoin
Desole, on s'est trompe, nous travaillons avec vos programmes du
futur, que voulez-vous. Un jour ou l'autre, vous disposerez egalement
de ces librairies.
En attendant,il va vous falloir recompiler le code vous-meme, avec les
bibliotheques dont vous disposez. C'est tres facile:
Allez dans le repertoire pppd, effacez le mauvais binaire, et tapez la
commande ``make''. Faites de meme dans le repertoire chat si vous
comptez utiliser ce programme.
Une autre solution est de vous procurer une version de ces
bibliotheques et de jouer les Alpha-testeurs :-)
3.40. ou bien ioctl(PPPIOCSINPSIG): I/O error . Allo, Docteur ? La
connection echoue avec des erreurs comme ioctl(TIOCGETD): I/O error
Regardez les messages du noyau lors de l'amorcage de votre systeme
Linux. Si il affiche PPP version 0.1.2, vous avez une version
beaucoup trop ancienne du pilote ppp.c.
Si vous voyez PPP version 0.2.7, vous disposez de la version a jour,
mais qui cependant n'a pas ete compilee avec les memes definitions
pour les valeurs d'ioctl().
Verifiez que vous disposez bien d'un fichier, ppp.h, qui doit se
trouver dans le repertoire include/linux des sources du noyau. Dans ce
cas, recompilez le noyau, puis le programme pppd.
3.41. ``ioctl(TIOCSETD): I/O error'' et ``ioctl(TIOCNXCL): I/O
error''. Pourquoi donc ? Quelquefois, j'obtiens les messages
``ioctl(PPPIOCGDEBUG): I/O error'',
Parceque le systeme distant a raccroche le telephone. Les pilotes tty
retablissent alors la discipline correcte sur le port serie, et ces
erreurs sont le resultat du processus pppd, tentant de faire la meme
chose.
Tout cela est parfaitement normal, il n'y a pas d'inquietudes a avoir.
3.42. J'essaie d'utiliser le reseau merit, et je me fais jeter.
Des utilisateurs de ce reseau ont signale qu'il necessite PAP. Avez-
vous essaye l'authentification PAP ?
3.43. adresse MAC bizarroide. Mon ifconfig affiche autre chose que
ce qui suit. Il indique l'interface ppp comme ``unknown'' et une
ppp0 Link encap Point-to-Point Protocol
inet addr 192.76.32.2 P-t-P 129.67.1.165 Mask 255.255.255.0
Ce n'est pas grave. Cet affichage n'est la que pour information. Si
vous utilisez un noyeau 1.1. recent, mettez a jours vos programmes
reseau.
3.44. et route et ca ne marche toujours pas ! J'ai lu ca dans le
Net-2-HOWTO; ou est l'erreur ? Mon systeme ne marche pas. J'utilise
slattach,ifconfig
N'utilisez jamais slattach et ifconfig avec PPP. Ces programmes ne
sont utiles que pour SLIP. Le processus pppd s'occupe de ces
fonctions tout seul au moment opportun, c'est a dire apres l'echange
des protocoles LCP et IPCP.
Vous ne pouvez pas remplacer pppd par slattach et ifconfig. La plus
grande partie du protocole PPP se trouve dans pppd. Le noyau ne
connait que IP (et IPX dans l'avenir).
La route vers le site distant sera automatiquement ajoutee par pppd.
Il n'y a pas d'option pour supprimer cette operation. Le programme se
terminera si la route ne peut pas etre rajoutee a la table de routage.
La route par defaut peut etre automatiquement ajoutee, ou non. Ceci
est controle par l'option defaultroute. Si vous avez deja une route
par defaut, elle ne sera pas modifiee.
Si vous devez router un reseau entier, mettez la commande dans le
script /etc/ppp/ip-up. Les parametres passes a ce script sont:
o $0 - nom du script (/etc/ppp/ip-up ou /etc/ppp/ip-down)
o $1 - nom de l'interface reseau (comme ppp0)
o $2 - nom du peripherique (comme /dev/cua0)
o $3 - vitesse du peripherique en bits par seconde (comme 38400)
o $4 - l'adresse IP locale
o $5 - l'adresse IP distante
3.45. et non pas la route vers le host. Comment faire ? D'accord,
j'ai les parametres. Mais je veux la route vers le reseau
Sur sunsite.unc.edu se trouve un paquetage du nom de devinfo.tar.gz.
Il contient quelques petits utilitaires pratiques qui extraient les
donnees concernant un peripherique et font differentes operations sur
les notations d'adresses IP.
La documentation est fournie sous forme de pages de manuel.
Par exemple, si vous voulez router le domaine IP entier vers le site
distant, vous pouvez mettre les choses suivantes dans le script
/etc/ppp/ip-up.
Bien entendu, si les valeurs ne sont pas variables, il vous suffit
d'utiliser les entrees appropriees avec la commande route.
______________________________________________________________________
# Obtention du masque reseau pour l'interface ppp0 (ou autres)
NETMASK = `devinfo -d $1 -t mask`
# Obtention du domaine IP (sans l'adresse host en supprimant les bits ad hoc)
DOMAIN = `netmath -a $5 $NETMASK`
# Rajout de la route vers le reseau que nous connaissons maintenant
route -net add $DOMAIN gw $5
______________________________________________________________________
3.46. Quand Linux supportera-t-il la numerotation sur demande ?
J'en ai absolument besoin !
Mercredi prochain !
Plus serieusement, la numerotation sur demande devait se trouver dans
la prochaine version. Toutefois, le paquetage pppd est l'oeuvre de
Paul Mackerras (nous ne faisons que le portage) et il a prefere
commencer par ce qu'il preferait, c'est a dire la compression BSD.
Aussi, cela viendra apres que ce code de compression soit diffuse. Il
y a deja quelques volontaires s'etant propose pour travailler sur le
projet. Vous pouvez vous y mettre aussi !
3.47. Quid du filtrage ? Quand allez-vous implementer ca ?
Rien n'est prevu a ce sujet dans le code de PPP. Utilisez le code
ipfirewall, c'est disponible sur sunsite.unc.edu. Aidez l'auteur a
deboguer la chose, et ca fera ce que vous desirez que ca fasse.
3.48. Quid de IPX ?
L'addition du support pour IPX se fait tranquillement. J'ai (Al
Longyear) commence a y travailler pour quelqu'un me l'ayant demande
sur l'IRC (Internet Relay Chat). Je dois d'abord approfondir les
manuels Novell pour comprendre quelles sont les valeurs correctes pour
les fonctions de routages necessaires pour IPXCP. (IPXCP est le
protocole de controle d'IPX).
3.49. Quid de NETBIOS ?
Il existe un protocole PPP Netbios. Toutefois, la meilleure solution
serait que vous utilisiez TCP/IP et le code ``samba''.
Microsoft et compagnie ont utilise le protocole PPP Netbios. C'est
generalement un savant melange tres proprietaire et une implementation
ne fonctionne pas forcement avec une autre.
Je laisse ces machins a quelqu'un d'autre.
3.50. documentation et c'est vide...Pourquoi ? Je viens de regarder
/proc/net/dev comme indique dans la
Avez-vous juste tape la commande ``ls -l /proc/net'' en vous etonnant
de trouver une taille de zero octets ? Si c'est le cas, c'est normal.
Vous devez faire:
cat /proc/net/dev
Vous devriez alors voir le contenu de ce fichier, qui ne doit pas etre
vide. Sa taille est toujours indiquee comme etant nulle, c'est le
systeme de fichiers ``proc''qui veut ca. Ce ne sont pas de vrais
fichiers, ils sont simules par le noyau. Ne tenez pas compte de la
taille, tapez la commande indiquee.
3.51. avec le PPP Microsoft. Pourquoi diable ? Je ne peux pas con-
necter de/vers mon code Windows NT (Daytona)
Le PPP de Microsoft envoie une authentification de type 0xC207, alors
que le PAP normal est 0xC203.
Microsoft a choisi d'utiliser un protocole d'authentification non
standard dans Windows NT. C'est leur droit le plus strict, a condition
qu'ils aient enregistre leur numero de protocole avec l'IANA. (C'est
le cas). Toutefois, ils sont dans l'obligation de supporter la
sequence de refus du protocole, ce qui est logique. Il y avait un
bogue dans les beta-versions Daytona, qui peut encore se trouver dans
les versions definitives, qui fait que cette sequence n'est pas
supportee. Il insiste pour que le systeme Linux supporte cette
authentification.
Par consequent, allez dans la configuration des parametres TCP/IP pour
Daytona et supprimez la sequence d'authentification. Du coup, tout
marchera avec des implementations standard de PPP, comme celle de
Linux.
Le protocole d'authentification de Microsoft est du type PAP, avec
leur propre algorithme d'encryptage des mots de passe. Le PAP normal
envoie les mots de passe en clair, ce qui violerait la securite C2.
3.52. les News ? Avez-vous un lecteur de courrier compatible PPP ?
et pour
Heu... ?
Vous vous trompez de groupe si vous cherchez des bricoles MSDOS. PPP
n'a rien a voir du tout avec l'agent de transport de courrier ! Ils
sont tous ``compatibles'' avec PPP :-)
4. Courts exemples a titre de pense-bete
Cette section ne constitue pas un mode d'emploi, elle contient
quelques trucs epars qui peuvent rendre service, sans aller chercher
dans la documentation generale.
4.1. Verifier que le noyau contient bien le pilote PPP
On utilise le systeme de fichiers /proc, tres pratique pour ce genre
de choses:
bash$ cat /proc/net/dev
Inter-| Receive | Transmit
face |packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 0 0 0 0 0 0 0 0 0 0 0
ppp0: 0 0 0 0 0 0 0 0 0 0 0
ppp1: 0 0 0 0 0 0 0 0 0 0 0
ppp2: 0 0 0 0 0 0 0 0 0 0 0
ppp3: 0 0 0 0 0 0 0 0 0 0 0
sl0: 0 0 0 0 0 0 0 0 0 0 0
sl1: 0 0 0 0 0 0 0 0 0 0 0
sl2: 0 0 0 0 0 0 0 0 0 0 0
sl3: 0 0 0 0 0 0 0 0 0 0 0
eth0: 0 0 0 0 0 0 0 0 0 0 0
Si vous avez les quatre lignes ppp0, le pilote PPP est bien la. Les
lignes sl0 concernent SLIP et eth0 l'Ethernet, vous pouvez ne pas en
disposer bien sur.
4.2. Connexion a un serveur PPP via modem.
Pour utiliser PPP, vous invoquez le programme pppd avec les options
appropriees. Tout ce que vous avez besoin de savoir sur ce programme
est contenu dans la page de manuel de pppd(8). Voici un exemple assez
general.
La commande ci-apres peut etre directement tapee sous shell, ou de
facon plus pratique faire l'objet d'un petit shell-script.
______________________________________________________________________
pppd connect 'chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: sesame' \
/dev/cua1 38400 -detach debug crtscts modem defaultroute 192.1.1.17:
______________________________________________________________________
Adaptez ces valeurs aux votres bien entendu.
4.3. Verifier la connexion
Tout d'abord, tapez /sbin/ifconfig, vous devez obtenir quelque chose
comme ce qui suit, ce qui compte est la partie ppp0:
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast 127.255.255.255 Mask 255.0.0.0
UP LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0
ppp0 Link encap Point-Point Protocol
inet addr 192.76.32.2 P-t-P 129.67.1.165 Mask 255.255.255.0
UP POINTOPOINT RUNNING MTU 1500 Metric 1
RX packets 33 errors 0 dropped 0 overrun 0
TX packets 42 errors 0 dropped 0 overrun 0
Vous aurez l'etat du lien PPP, et les adresses IP etablies lors de la
negociation. Verifiez les routes par la commande route ou netstat -r,
et essayez trois ou quatre ping.
5. Creer un compte pour recevoir des connexions PPP
Creez un compte nomme par exemple, ppp, comme ceci:
ppp:(mot de passe crypte):102:50:PPP LOGIN:/tmp:/etc/ppp/ppplogin
Le fichier /etc/ppp/ppplogin sera un shell-script executable contenant
par exemple:
______________________________________________________________________
#!/bin/sh
exec /usr/etc/pppd :192.1.2.23
______________________________________________________________________
Dans cet exemple, pppd insistera pour que la machine qui appelle se
voit attribuer l'adresse IP 192.1.2.23, l'adresse locale pour le
serveur sera celle trouvee dans /etc/hosts puisqu'elle n'est pas
precisee.
6. Rajouter des canaux PPP supplementaires
Par defaut, vous disposez de 4 canaux, ce qui permet 4 connexions
simultanees (sur 4 modems par exemple). Si vous en desirez plus, vous
pouvez tres facilement reconfigurer le noyau pour les obtenir. Cela se
fait en deux etapes.
Tout d'abord vous devez editer le fichier
/usr/src/linux/drivers/net/Space.c. Il contient une section qui
ressemble a ceci:
______________________________________________________________________
#if defined(CONFIG_PPP)
extern int ppp_init(struct device *);
static struct device ppp3_dev = {
"ppp3", 0x0, 0x0, 0x0, 0x0, 3, 0, 0, 0, 0, NEXT_DEV, ppp_init, };
static struct device ppp2_dev = {
"ppp2", 0x0, 0x0, 0x0, 0x0, 2, 0, 0, 0, 0, &ppp3_dev, ppp_init, };
static struct device ppp1_dev = {
"ppp1", 0x0, 0x0, 0x0, 0x0, 1, 0, 0, 0, 0, &ppp2_dev, ppp_init, };
static struct device ppp0_dev = {
"ppp0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, &ppp1_dev, ppp_init, };
#undef NEXT_DEV
#define NEXT_DEV (&ppp0_dev)
#endif /* PPP */
______________________________________________________________________
Cela doit vous sembler evident. Rajoutez les entrees dont vous avez
besoin, n'oubliez pas de terminer par NEXT_DEV sur la premiere ligne
et ne vous trompez pas dans la numerotation.
Ensuite, vous devez modifier une ligne dans le fichier
include/linux/ppp.h:
#define PPP_NRUNIT 4
Mettez la nouvelle valeur. Enfin, recompilez le noyau et reamorcez la
machine. Les messages lors du demarrage, ainsi que l'affichage de
/proc/net/dev devraient refleter vos modifications.