This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

Configurer PPP intégré au noyau

15.2. Configurer PPP intégré au noyau

Contribution de Gennady B. Sorokopud .

Avant de lancer PPP sur votre machine, vérifiez que pppd est bien dans le répertoire /usr/sbin et que le répertoire /etc/ppp existe.

pppd fonctionne de deux façons:

  1. comme ``client'', i.e. si vous voulez connecter votre machine au monde extérieur via un liaison PPP série ou un modem.

  2. comme ``serveur'', i.e. 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 s'il y a plus d'un utilisateur sur votre machine qui utilisent PPP).

Il vous faudra aussi un logiciel ``modem/série'' (de préférence kermit) pour appeler et établir la connexion avec la machine distante.

15.2.1. Utiliser le client PPP

J'ai utilisé le fichier /etc/ppp/options suivant pour me 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, ne mettez pas cette option
    passive         # attendre les paquets LCP 
    domain ppp.foo.com      # mettez ici votre nom de domaine
    
    :<ip_éloigné>   # mettez ici l'adresse IP de la machine PPP distante
                    # elle servira à router des paquets via la liaison PPP
                    # si vous n'avez pas utilisé l'option noipdefault
                    # changez cette ligne en <ip_local>:<ip_éloigné>
    defaultroute    # mettez cette ligne si vous voulez que le serveur PPP soit
                    # votre routeur par défaut

Pour vous connecter:

  1. Appelez la machine éloignée avec kermit (ou un autre programme pour modem) et donnez votre nom et votre mot de passe (ou ce qu'il faut pour activer PPP sur la machine distante).

  2. Quittez kermit (sans raccrocher la ligne).

  3. Entrez:

        # /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200
    

    Utilisez la vitesse et le nom de périphérique adéquats.

Votre ordinateur est maintenant connecté par PPP. Si la connexion échoue pour une raison ou une autre, vous pouvez ajouter l'option debug au fichier /etc/ppp/options et consulter les messages à la console pour trouver la cause du problème.

La procédure /etc/ppp/pppup ci-dessous fera tout cela automatiquement:

    #!/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 la procédure kermit qui appelle et fournit les informations d'authentification à la machine distante. (Il y a une exemple de procédure de ce type à la fin de ce document.)

Utilisez la procédure /etc/ppp/pppdown ci-dessous 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

Pour voir si PPP tourne toujours (/usr/etc/ppp/ppptest):

    #!/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 actif.'
    fi
    set -x
    netstat -n -I ppp0
    ifconfig ppp0

Pour raccrocher la ligne modem (/etc/ppp/kermit.hup):

    set line /dev/tty01    ; mettez 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:

Contribution de Robert Huff .

Les deux fichiers suivants suffisent à établir une liaison ppp.

/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, ne mettez pas cette option
    passive         # attendre les paquets LCP 
    domain ppp.foo.com      # mettez ici votre nom de domaine
    
    :<ip_éloigné>   # mettez ici l'adresse IP de la machine PPP distante
                    # elle servira à router des paquets via la liaison PPP
                    # si vous n'avez pas utilisé l'option noipdefault
                    # changez cette ligne en <ip_local>:<ip_éloigné>
    defaultroute    # mettez cette ligne si vous voulez que le serveur PPP soit
                    # votre routeur par défaut

/etc/ppp/login.chat.script:

(Ceci 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 contiennent ce qu'il faut, vous n'avez plus qu'à taper:

    # pppd

Cet exemple est avant tout basé sur des informations fournies par: Trev Roydhouse <Trev.Roydhouse@f401.n711.z3.fidonet.org> et utilisées avec son autorisation.

15.2.2. Utiliser le serveur PPP

/etc/ppp/options:

    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 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 lancera le serveur ppp sur votre machine:

    #!/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 active ou désactive le mode réponse automatique de votre modem (/etc/ppp/kermit.ans):

    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   ; remplacez par ATS0=0\13 pour désactiver 
                    ; le mode réponse automatique
    inp 5 OK
    echo \13
    exit

La procédure /etc/ppp/kermit.dial établit la connexion et ouvre la session sur la machine distante. Vous devrez l'adapter à vos besoins propres. Mettez-y votre nom d'utilisateur et votre mot de passe, et modifiez aussi les chaînes attendues en réponse selon ce que vous envoient votre modem et la machine distante.

    ;
    ; mettez ici la liaison série à laquelle est raccordé le modem:
    ;
    set line /dev/tty01
    ;
    ; mettez 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                          ; met le modem en mode commande
    echo Modem en mode commande.
    clear                           ; vide le tampon d'entrée
    pause 1
    output +++                      ; séquence d'échappement Hayes
    input 1 OK\13\10                ; attendre un 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
    clear                           ; vider le tampon d'entrée
    pause 1
    echo On raccroche.
    output ath0\13                  ; commande HAYES pour raccrocher
    input 2 OK\13\10
    if fail goto slcmd              ; si pas de réponse OK, passez en mode commande
    
    :sldial                         ; composer le numéro
    pause 1
    echo On appelle.
    output atdt9,550311\13\10       ; mettre ici le numéro de téléphone
    assign \%x 0                    ; mettre le compteur de secondes à 0 
    
    :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 de secondes à 0
    pause 1
    echo Attente de l'invite de session.
    
    :slloop
    increment \%x                   ; compter les secondes
    clear                           ; vider le tampon d'entrée
    output \13
    ;
    ; Mettez ici l'invite que vous attendez:
    ;
    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'avoir l'invite
    else goto slhup                 ; raccrocher et recommencer après 10 échecs
    
    :sluid
    ;
    ; Mettez ici votre nom d'utilisateur:
    ;
    output nom-d-utilisateur-ppp\13
    input 1 {Password: }
    ;
    ; Mettez 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:

For questions about FreeBSD, e-mail <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.