Manual de FreeBSD
Anterior | Capítulo 25. PPP y SLIP | Siguiente

# 25.3. Uso de Kernel PPP

Partes originalmente desarrolladas por Gennady B. Sorokopud y Robert Huff.

## 25.3.1. Configurando Kernel PPP

Antes de comenzar a configurar PPP en su maquina, asegurese de `pppd` se localiza en `/usr/sbin` y de que existe el directorio `/etc/ppp`.

`pppd` puede trabajar de dos maneras

1. Como un “cliente” -- cuando desea conectar su maquina al mundo exterior utilizando PPP, por medio de una conexión serial o bien una línea de modem.

2. como un “servidor” -- cuando su maquina esta conectada a una red y es utilizada para que otras maquinas se conecten utilizando ppp.

En ambos casos, será necesario configurar un fichero de opciones (`/etc/ppp/options` o bien `~/.ppprc` si se cuenta con más de un usuario que utilizará ppp en la misma maquina.

También deberá de contar con un software para hacer la conexión por medio de módem (de preferencia kermit), de manera que pueda hacer la conexión con un host remoto.

## 25.3.2. Uso de `pppd` como Cliente

Basedo en información provista por Trev Roydhouse.

El siguiente archivo de configuración `/etc/ppp/options` puede utilizarse para realizar la conexión a una terminal CISCO, por medio de PPP.

    crtscts         # habilita el flujo de controls de hardware
    modem           # línea de control del modem
    noipdefault     # el servidor PPP remoto asignará la dirección IP
                    # si el servidor no envia una dirección IP durante IPCP
                    # remueva esta opción.
    passive         # espere por los paquetes LCP
    domain ppp.foo.com      # escriba su nombre de dominio aqui

    :<remote_ip>    # escriba la IP del host remoto aqui
                    # este será utilizado para el ruteo de paquetes por medio
                    # de PPP, si no especifica esta opción, cambie la
                    # línea a quedar  <local_ip>:<remote_ip>

    defaultroute    # establezca esta opción si el servidor su ruteador
                    # por default

Para conectarse:

1. Realice el llamado al host remoto, utilizando kermit (o cualquier otra aplicación de este tipo), ingrese su nombre de usuario y contraseña (o cualquier info que sea necesaria para habilitar PPP en el host remoto).

2. Salga de kermit (sin colgar la línea).

3. Ingrese lo siguiente:

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

   Asegurese de utilizar el dispositivo y la velocidad adecuados.

Ahora su computadora esta conectada por medio de PPP. Si la conexión falla, puede añadir la opción `debug` en el fichero `/etc/ppp/options` de tal forma que pueda verificar la que esta ocurriendo y pueda resolver el problema.

El siguiente script; `/etc/ppp/pppup` realizará los 3 pasos de forma automática:

    #!/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 'killing 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 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi

    ifconfig ppp0 down
    ifconfig ppp0 delete

    kermit -y /etc/ppp/kermit.dial
    pppd /dev/tty01 19200

El fichero `/etc/ppp/kermit.dial` es un script de kermit, uqe realiza el marcado y negocia la autorización necesaria con el host remoto (un ejemplo de este script se encuentra al final de este documento).

Utilice el siguiente script, llamado `/etc/ppp/pppdown` para desconectar la línea PPP:

    #!/bin/sh
    pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
    if [ X${pid} != "X" ] ; then
            echo 'killing 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 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi

    /sbin/ifconfig ppp0 down
    /sbin/ifconfig ppp0 delete
    kermit -y /etc/ppp/kermit.hup
    /etc/ppp/ppptest

Verifique que su PPP aun se esta ejecutando, por medio de `/usr/etc/ppp/ppptest`, que deberá verse algo similar a esto:

    #!/bin/sh
    pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
    if [ X${pid} != "X" ] ; then
            echo 'pppd running: PID=' ${pid-NONE}
    else
            echo 'No pppd running.'
    fi
    set -x
    netstat -n -I ppp0
    ifconfig ppp0

Para colgar el módem, ejecute `/etc/ppp/kermit.hup`, que deberá contener:

    set line /dev/tty01    ; aqui va el dispositivo del 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

He aqui un metodo alterno, donde se utiliza `chat` en lugar de utilizar `kermit`.

Los siguientes dos ficheros deben ser suficiente, para realizar una conexión por medio de `pppd`.

    /dev/cuaa1 115200

    crtscts     # habilita el control de flujo por medio de hardware
    modem       # línea de control del módem
    connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
    noipdefault # el servidor remoto debe asignar la dirección IP.
                # si el servidor no asigna una IP durante la negociación
                    # IPCP , remueva esta línea y espere por los
    passive         # paquetes LCP
    domain <your.domain>  # aqui va su dominio

    :       # escriba la IP del host remoto aqui
                    # si no ha especificado la opción noipdefault
                    # cambie esta línea a quedar <local_ip>:<remote_ip>

    defaultroute    # escriba esto, si desea que el servidor PPP sea su
                    # router por default

`/etc/ppp/login.chat.script`:

> Nota: Lo siguiente debe ir en una sola línea.

    ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<numero.de.telefono>
      CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <nombre.usuario>
      TIMEOUT 5 sword: <contraseña>

Una vez que estos ficheros han sido modificados correctamente e instalados, todo lo que necesita es ejecutar el comando `pppd`, algo como:

    # pppd

## 25.3.3. Uso de `pppd` como Servidor

El fichero `/etc/ppp/options` debe contener algo similar a lo siguiente:

    crtscts   # control de flujo por Hardware
    netmask 255.255.255.0           # mascara de red (no es requisito)
    192.114.208.20:192.114.208.165  # direcciones ip del host local y remoto
                                    # la dirección ip local debe ser
                                    # diferente a la que le haya asignado a su
                                    # dispositivo de red ethernet (u otro)
                                    # la dirección ip remota que será
                                    # asignada a la maquina remota
    domain ppp.foo.com              # su dominio
    passive                         # espera por LCP
    modem                           # línea de modem

El siguiengte script, llamado `/etc/ppp/pppserv` habilitará pppd, para que actue como servidor:

    #!/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 'killing 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 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi

    # reset ppp interface
    ifconfig ppp0 down
    ifconfig ppp0 delete

    # enable autoanswer mode
    kermit -y /etc/ppp/kermit.ans

    # run ppp
    pppd /dev/tty01 19200

Utilice el script `/etc/ppp/pppservdown` para detener el servidor:

    #!/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 'killing 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 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi
    ifconfig ppp0 down
    ifconfig ppp0 delete

    kermit -y /etc/ppp/kermit.noans

El siguiente script de kermit (`/etc/ppp/kermit.ans`) habilita/deshabilita el modo de autorespuesta en su módem. Y debe verse algo similar a lo siguiente:

    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   ; cambiar esto a quedar out ATS0=0\13 si desea deshabilitar el modo
                    ; de autorespuesta
    inp 5 OK
    echo \13
    exit

Un script llamado `/etc/ppp/kermit.dial` es utilizado para llamar y autentificarse en un host remoto. Es necesario que edite este fichero, de acuerdo a sus necesidades. Escriba su nombre de usuario (login) y contraseña (password) en este fichero, también será necesario cambiar su metodo de conexión, de acuerdo a lo que se ajuste a sus necesidades.

    ;
    ; ingrese el dispositivo que esta apuntando a su módem:
    ;
    set line /dev/tty01
    ;
    ; escriba la velocidad del módem:
    ;
    set speed 19200
    set file type binary            ; full 8 bit file xfer
    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                ; Posteriormente SET CARRIER si es necesario
    set dial display on             ; despues SET DIAL si es necesario
    set input echo on
    set input timeout proceed
    set input case ignore
    def \%x 0
    goto slhup

    :slcmd                          ; cambio a modo de comando
    echo Put the modem in command mode.
    clear                           ; Limpieza del buffer de entrada
    pause 1
    output +++
    input 1 OK\13\10                ; esperar para OK
    if success goto slhup
    output \13
    pause 1
    output at\13
    input 1 OK\13\10
    if fail goto slcmd              ; si el modem no responde Ok, intentar de nuevo

    :slhup                          ; colgar el teléfono
    clear                           ; Limpieza del buffer de entrada
    pause 1
    echo Hanging up the phone.
    output ath0\13
    input 2 OK\13\10
    if fail goto slcmd              ; si no hay un OK como respuesta, poner el modem en modo de comando

    :sldial                         ; marcar el numero telefonico
    pause 1
    echo Dialing.
    output atdt9,550311\13\10               ; escriba el numero de telefono
    assign \%x 0                    ; asignar cero al contador

    :look
    clear                           ; Limpieza del buffer de entrada
    increment \%x                   ; Conteo de segundos
    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                        ; login
    assign \%x 0                    ; asignar cero al contador
    pause 1
    echo Looking for login prompt.

    :slloop
    increment \%x                   ; Conteo de segundos
    clear                           ; Limpieza del buffer de entrada
    output \13
    ;
    ; escriba su login prompt aqui:
    ;
    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         ; intentar 10 veces para obtener un login
    else goto slhup                 ; colgar y empezar de nuevo si a la decima falla

    :sluid
    ;
    ; escriba su nombre de usuario:
    ;
    output ppp-login\13
    input 1 {Password: }
    ;
    ; escriba su contraseña:
    ;
    output ppp-password\13
    input 1 {Entering SLIP mode.}
    echo
    quit

    :slnodial
    echo \7No dialtone.  Check the telephone line!\7
    exit 1

    ; local variables:
    ; mode: csh
    ; comment-start: "; "
    ; comment-start-skip: "; "
    ; end:

Anterior | Inicio | Siguiente
Uso de User PPP | Subir | Uso de PPP sobre Ethernet (PPPoE)

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.