26.3. Utiliser PPP intégré au noyau
Contribution originale de Gennady B. Sorokopud et Robert Huff.
26.3.1. Configurer PPP intégré au noyau
Avant de configurer PPP sur votre machine, vérifiez
que pppd
est bien dans le répertoire
/usr/sbin
et que le
répertoire /etc/ppp
existe.
La commande pppd
peut fonctionner selon
deux modes:
Comme “client” — si vous
désirez connecter votre machine au monde
extérieur via une liaison PPP série ou un
modem.
Comme “serveur” — si votre machine
est sur le réseau, et sert à y connecter
d'autres ordinateurs avec PPP.
Dans les deux cas, vous devrez renseigner un fichier
d'options (/etc/ppp/options
ou
~/.ppprc
si vous avez plus d'un
utilisateur sur votre machine utilisant PPP).
Vous aurez également besoin d'un logiciel
“modem/série” (de préférence
comms/kermit
), pour
appeler et établir la connexion avec la machine
distante.
26.3.2. Utiliser pppd
comme client
Basé sur des informations fournies
par Trev Roydhouse.
Le fichier /etc/ppp/options
suivant
pourrait être utilisé pour se connecter à la
liaison PPP d'un concentrateur Cisco:
crtscts # contrôle de flux matériel
modem # liaison par modem
noipdefault # adresse IP affectée par le serveur PPP distant
# si la machine distante ne vous donne pas d'adresse
# IP lors de la négociation IPCP, retirez cette option
passive # attendre les paquets LCP
domain ppp.foo.com # mettre ici votre nom de domaine
:<remote_ip> # mettre ici l'adresse IP de la machine PPP distante
# elle servira à router des paquets via la liaison PPP
# si vous n'avez pas précisé l'option noipdefault
# changez cette ligne en <ip_locale>:<ip_distante>
defaultroute # mettre cette ligne si vous voulez que le serveur PPP soit
# votre routeur par défaut
Pour se connecter:
Appelez la machine distante en utilisant
kermit (ou un autre programme
pour modem), puis entrez votre nom d'utilisateur et mot de
passe (ou ce qu'il faut pour activer PPP sur la machine
distante).
Quittez kermit (sans
raccrocher la ligne).
Entrez la commande suivante:
#
/usr/src/usr.sbin/pppd.new/pppd /dev/tty01
19200
Assurez-vous d'utiliser la vitesse et le nom de
périphérique adéquats.
Votre ordinateur est maintenant connecté via PPP.
Si la connexion échoue, vous pouvez ajouter l'option
debug
au fichier
/etc/ppp/options
, et consulter les
messages sur la console pour tracer le problème.
La procédure /etc/ppp/pppup
ci-dessous effectuera automatiquement ces trois
étapes:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.dial
pppd /dev/tty01 19200
/etc/ppp/kermit.dial
est une
procédure kermit qui appelle
et fournit toutes les informations d'authentification
nécessaires à la machine distante (un exemple
d'une telle procédure est donné à la fin de
ce document).
Utilisez la procédure
/etc/ppp/pppdown
suivante pour terminer
la session PPP et vous déconnecter:
#!/bin/sh
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'arrêt de pppd, PID=' ${pid}
kill -TERM ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de kermit, PID=' ${pid}
kill -9 ${pid}
fi
/sbin/ifconfig ppp0 down
/sbin/ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.hup
/etc/ppp/ppptest
Vérifiez si pppd
tourne toujours
en lançant la procédure
/usr/etc/ppp/ppptest
, qui devrait
ressembler à ceci:
#!/bin/sh
pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'pppd actif: PID=' ${pid-NONE}
else
echo 'Pas de pppd en cours d'exécution.'
fi
set -x
netstat -n -I ppp0
ifconfig ppp0
Pour raccrocher la ligne, exécutez
/etc/ppp/kermit.hup
, qui devrait
contenir:
set line /dev/tty01 ; mettre ici le périphérique pour votre modem
set speed 19200
set file type binary
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
pau 1
out +++
inp 5 OK
out ATH0\13
echo \13
exit
Voici une autre méthode qui utilise
chat
au lieu de
kermit
.
Les deux fichiers suivants suffisent à
établir une connexion avec
pppd
.
/etc/ppp/options
:
/dev/cuaa1 115200
crtscts # contrôle de flux matériel
modem # liaison par modem
connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
noipdefault # adresse IP affectée par le serveur PPP distant
# si la machine distante ne vous donne pas d'adresse
# IP lors de la négociation IPCP, retirer cette option
passive # attendre les paquets LCP
domain <your.domain> # mettre ici votre nom de domaine
: # mettre ici l'adresse IP de la machine PPP distante
# elle servira à router des paquets via la liaison PPP
# si vous n'avez pas précisé l'option noipdefault
# modifier cette ligne en <ip_locale>:<ip_distante>
defaultroute # mettre cette ligne si vous voulez que le serveur PPP soit
# votre routeur par défaut
/etc/ppp/login.chat.script
:
Note:
Ce qui suit doit être tapé sur une seule
ligne.
ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<numéro_de_téléphone>
CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <nom_d_utilisateur>
TIMEOUT 5 sword: <mot_de_passe>
Une fois que ces fichiers sont installés et
correctement modifiés, tout ce dont vous avez besoin de
faire est de lancer pppd
, comme
suit:
#
pppd
26.3.3. Utiliser pppd
comme serveur
Le contenu du fichier
/etc/ppp/options
devrait être
semblable à ce qui suit:
crtscts # contrôle de flux matériel
netmask 255.255.255.0 # masque de sous-réseau (facultatif)
192.114.208.20:192.114.208.165 # adresses IP des machines locales et distantes
# l'adresse locale ne doit pas être la même que
# celle que vous avez assignée à l'interface
# Ethernet (ou autre) de la machine.
# l'adresse IP de la machine distante est
# l'adresse IP qui lui sera affectée
domain ppp.foo.com # votre nom de domaine
passive # attendre LCP
modem # liaison modem
La procédure /etc/ppp/pppserv
ci-dessous demandera à pppd
de se comporter comme un serveur:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de kermit, PID=' ${pid}
kill -9 ${pid}
fi
# réinitialiser l'interface ppp
ifconfig ppp0 down
ifconfig ppp0 delete
# activer le mode réponse automatique
kermit -y /etc/ppp/kermit.ans
# lancer ppp
pppd /dev/tty01 19200
Utilisez cette procédure
/etc/ppp/pppservdown
pour arrêter
le serveur:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'arrêt de kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.noans
La procédure kermit
ci-dessous (/etc/ppp/kermit.ans
) activera
ou désactivera le mode réponse automatique de
votre modem:
set line /dev/tty01
set speed 19200
set file type binary
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
pau 1
out +++
inp 5 OK
out ATH0\13
inp 5 OK
echo \13
out ATS0=1\13 ; remplacer cela par ATS0=0\13 si vous voulez désactiver
; le mode réponse automatique
inp 5 OK
echo \13
exit
Une procédure nommée
/etc/ppp/kermit.dial
est utilisée
pour appeler et s'authentifier sur la machine distante. Vous
devrez l'adapter à vos besoins. Mettez-y votre nom
d'utilisateur et votre mot de passe; vous devrez
également modifier les entrées en fonctions des
réponses que vous envoient votre modem et la machine
distante.
;
; mettre ici la liaison série à laquelle est raccordé le modem:
;
set line /dev/tty01
;
; mettre ici la vitesse du modem:
;
set speed 19200
set file type binary ; transfert 8 bits
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
set modem hayes
set dial hangup off
set carrier auto ; puis SET CARRIER si nécessaire,
set dial display on ; puis SET DIAL si nécessaire,
set input echo on
set input timeout proceed
set input case ignore
def \%x 0 ; compteur d'ouverture de session
goto slhup
:slcmd ; mettre le modem en mode commande
echo Put the modem in command mode.
clear ; vider le tampon d'entrée
pause 1
output +++ ; séquence d'échappement Hayes
input 1 OK\13\10 ; attendre OK
if success goto slhup
output \13
pause 1
output at\13
input 1 OK\13\10
if fail goto slcmd ; si le modem ne répond pas OK, réessayer
:slhup ; raccrocher la ligne
clear ; vider le tampon d'entrée
pause 1
echo Hanging up the phone.
output ath0\13 ; commande Hayes pour raccrocher
input 2 OK\13\10
if fail goto slcmd ; si pas de réponse OK, passer le modem en mode commande
:sldial ; composer le numéro
pause 1
echo Dialing.
output atdt9,550311\13\10 ; mettre ici le numéro de téléphone
assign \%x 0 ; mettre le compteur à zéro
:look
clear ; vider le tampon d'entrée
increment \%x ; compter les secondes
input 1 {CONNECT }
if success goto sllogin
reinput 1 {NO CARRIER\13\10}
if success goto sldial
reinput 1 {NO DIALTONE\13\10}
if success goto slnodial
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 60 goto look
else goto slhup
:sllogin ; ouverture de session
assign \%x 0 ; mettre le compteur à zéro
pause 1
echo Looking for login prompt.
:slloop
increment \%x ; compter les secondes
clear ; vider le tampon d'entrée
output \13
;
; put your expected login prompt here:
;
input 1 {Username: }
if success goto sluid
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 10 goto slloop ; essayer 10 fois d'obtenir une invite de session
else goto slhup ; raccrocher et recommencer après 10 échecs
:sluid
;
; mettre ici votre nom d'utilisateur:
;
output nom-d-utilisateur-ppp\13
input 1 {Password: }
;
; mettre ici votre mot de passe:
;
output mot-de-passe-ppp\13
input 1 {Entering SLIP mode.}
echo
quit
:slnodial
echo \7Pas de tonalité. Vérifiez votre ligne téléphonique!\7
exit 1
; local variables:
; mode: csh
; comment-start: "; "
; comment-start-skip: "; "
; end: