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:

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