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 longyear@netcom.com. 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.