Manuel FreeBSD
Précédent | Chapitre 25. PPP et SLIP | Suivant

# 25.3. Utiliser PPP intégré au noyau

Contribution originale de Gennady B. Sorokopud et Robert Huff.

## 25.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:

1. Comme ``client'' -- si vous désirez connecter votre machine au monde extérieur via une liaison PPP série ou un modem.

2. 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.

## 25.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:

1. 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).

2. Quittez kermit (sans raccrocher la ligne).

3. 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

## 25.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:

Précédent | Sommaire | Suivant
Using User PPP ** Traduction en Cours ** | Niveau supérieur | Utiliser PPP sur Ethernet (PPPoE)

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.