Logo de AulaDigital

PPP Como 15

Linux PPP Cómo: Automatizando sus conexiones - Creando los scripts de conexión Página siguiente Página anterior Índice general

15. Automatizando sus conexiones - Creando los scripts de conexión

Aunque usted pueda seguir conectándose a mano tal y como se mostró antes, es mucho mejor configurar algunos scripts que permitan hacer esto automáticamente.

Un conjunto de scripts automatiza la conexión y el arranque de PPP de manera que todo lo que tenga que hacer (como root o como miembro del grupo PPP) es ejecutar una única orden que inicie su conexión.

15.1 Scripts de conexión para autentificación tipo Nombre de usuario/Contraseña

Si su ISP no necesita el uso de PAP/CHAP, estos son los scripts para usted.

Si el paquete ppp está instalado correctamente, debería tener dos ficheros de ejemplo. Para PPP 2.1.2 están situados en /usr/sbin y para PPP 2.2 están en /etc/ppp/scripts. En Red Hat Linux se encuentran en el subdirectorio /scripts del directorio de documentación del paquete ppp (/usr/doc/ppp-x.x.x/) Se denominan

en PPP-2.1.2

ppp-on
ppp-off

en PPP-2.2 o superiores

ppp-off
ppp-on
ppp-on-dialer

Ahora, si utiliza PPP 2.1.2, le recomiendo que borre los ficheros de ejemplo. Hay grandes problemas potenciales con ellos - (y no me diga que funcionan bien). Yo los usé durante años (incluso los recomendaba en las primeras versiones de este documento COMO).

Para el beneficio de los usuarios PPP 2.1.2, aquí dejo disponibles versiones de plantilla MEJORES, tomadas de la distribución PPP 2.2. Le sugiero que los copie y utilice estos scripts en lugar de los antiguos scripts de PPP-2.1.2.

15.2 El script ppp-on

Este es el primero de un PAR de scripts que inicializan la conexión.


#!/bin/sh
#
# El script para iniciar la conexión PPP. Esta es la primera parte del 
# par de scripts. No es un par de scripts seguro ya que los códigos son 
# visibles con la orden 'ps'. Sin embargo, es simple.
#
# Estos son los parámetros. Modifíquelos según lo necesite.
TELEPHONE=555-1212      # El número de teléfono para la conexión
ACCOUNT=george          # La cuenta de acceso para la conexión
PASSWORD=gracie         # La clave para esta cuenta de acceso
LOCAL_IP=0.0.0.0        # Dirección IP local, si se conoce. Dinámica = 0.0.0.0
REMOTE_IP=0.0.0.0       # Dirección IP remota, si desea. Usualmente = 0.0.0.0
NETMASK=255.255.255.0   # La máscara de red si es necesaria
#
# Exportar las necesarias para que esten disponibles por 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# Esta es la parte del script que marca el teléfono y se conecta. Por favor,
# utilice el nombre de fichero absoluto ya que la variable $PATH no se usa
# la opción de conexión. (Hacer esto con una cuenta de root sería un agujero
# de seguridad).
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Iniciar la conexión
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
        $LOCAL_IP:$REMOTE_IP \
        connect $DIALER_SCRIPT

Este es el código del script ppp-on-dialer:-


#!/bin/sh
#
# Esta es la segunda parte del script ppp-on. Realiza el protocolo de
# conexión para la conexión deseada
#
/usr/sbin/chat -v                                                 \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \
        ogin:--ogin:    $ACCOUNT                        \
        assword:        $PASSWORD

Para PPP-2.2, el script ppp-off tiene este aspecto:-


#!/bin/sh
##############################################################
########
#
# Determina el dispositivo a finalizar
#
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi

##############################################################
########
#
# Si el fichero pid de ppp0 está presente cuando el programa se ejecuta,
# pararlo.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# Si la detención no funcionó entonces no había ningún proceso ejecutándose
# con ese pid. Puede también significar que el fichero de bloqueo
# permanecerá. Puede desear eliminar el fichero de bloqueo al mismo tiempo.
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERROR: Eliminado fichero de bloqueo huérfano"
                exit 1
        fi
#
# Exito. Hagamos que pppd quite sus cosas de enmedio.
        echo "Enlace PPP a $DEVICE finalizado."
        exit 0
fi
#
# El proceso ppp no está ejecutándose para ppp0
echo "ERROR: El enlace PPP no está activo para $DEVICE"
exit 1

15.3 Editar los scripts de inicio PPP suministrados

Ya que los nuevos scripts vienen en dos partes, los editaremos por turnos.

El script ppp-on

Necesitará editar el script para que refleje SU nombre de usuario en su ISP, SU contraseña en su ISP y el número de teléfono de su ISP.

Cada una de las líneas como TELEPHONE= realmente establecen variables que contienen la información a la derecha de '=' (excluyendo los comentarios, por supuesto). Edite cada uno de esos ficheros para que sea correcto para su ISP y conexión.

Así mismo, como usted configura la dirección IP (si necesita hacerlo) en el fichero /etc/ppp/options, BORRE la línea que dice


$LOCAL_IP:$REMOTE_IP \

También, asegúrese de que la variable DIALER_SCRIPT apunta a la ruta y nombre completos del script de marcado que realmente va a utilizar. Por tanto, si ha movido o renombrado este script, asegúrese de que edita esta línea correctamente en el script ppp-on.

El script ppp-on-dialer

Este es el segundo de los scripts que arranca la conexión ppp

Nota: un script chat suele escribirse en una sola línea. Las barras inversas se emplean para permitir continuaciones a lo largo de varias líneas física (para permitir legibilidad humana) y no forman parte del script mismo.

Sin embargo, es muy util mirarlo en detalle para que entendamos qué es lo que (se supone que) hace.

15.4 Qué quiere decir un script Chat...

Un script chat es una secuencia de parejas "cadena esperada " "cadena enviada". En particular, fíjese que SIEMPRE esperamos algo antes de enviar nada.

Si vamos a enviar algo SIN recibir nada antes, debemos usar una cadena esperada vacía (indicada por "") y de manera similar al esperar algo sin enviar nada. También, si una cadena está formada por varias palabras (como NO CARRIER), debe entrecomillar la cadena para que sea vista como una sola por chat.

La línea de chat en nuestra plantilla es:-


exec /usr/sbin/chat -v

Al llamar a chat, la opción -v hace que chat copie toda su I/O al registro del sistema (normalmente /var/log/messages). Una vez que sabe que el script chat funciona bien, edite esa línea para quitar la -v y ahorrar información innecesaria de su syslog.


TIMEOUT         3

Esto ajusta el retardo para la recepción de entradas esperadas a tres segundos. Puede necesitar incrementar esta a 5 o 10 segundos si utiliza un módem realmente lento.


ABORT           '\nBUSY\r'

Si se recibe la cadena BUSY, abortar la operación.


ABORT           '\nNO ANSWER\r'

Si se recibe la cadena NO ANSWER, abortar la operación.


ABORT           '\nRINGING\r\n\r\nRINGING\r'

Si se recibe la cadena (repetida) RINGING, abortar la operación. Eso es porque alguien esta llamando a su teléfono.


"              \rAT

No esperar nada del módem y enviar la cadena AT.


OK-+++\c-OK   ATH0

Esto es algo más complicado ya que utiliza alguna de las capacidades de recogida de errores de chat.

Lo que quiere decir es... Esperar OK. Si no se recibe (porque el módem no está en modo de órdenes) entonces enviar +++ (la cadena que hace que un módem compatible con el estándar Hayes pase a modo de órdenes) y esperar un OK. Entonces enviar ATH0 (el módem descuelga). Esto permite a su script tomar la situación si su modem estaba atascado en línea.


TIMEOUT         30

Ajustar el retardo a 30 segundos para el resto del script. Si experimenta problemas con el script chat que aborta debido a finalizaciones del tiempo de espera, incremente esto a 45 segundos o más.


OK              ATDT$TELEPHONE

Esperar OK (la respuesta del módem al comando ATH0) y marcar el número de teléfono al que deseamos llamar.


CONNECT         ''

Esperar CONNECT (que es lo que nuestro módem envía cuando el módem remoto contesta) y no enviar nada como respuesta.


ogin:--ogin:    $ACCOUNT

De nuevo, tenemos una tecnología de recuperación de errores. Esperamos el la petición de entrada al sistema (...ogin:) pero si no recibimos esto debido a la finalización del tiempo de espera, enviar un retorno de carro y entonces buscar de nuevo la petición de entrada al sistema. Cuando se ésta se reciba, enviar el nombre de usuario (guardado en la variable $ACCOUNT).


assword:        $PASSWORD

Esperar la petición de contraseña y enviar nuestra contraseña (otra vez, guardada en una variable).

Este script chat tiene una capacidad razonable de recuperación de errores. Chat tiene muchas más características que las aquí demostradas. Para más información consulte la página de manual de chat (man 8 chat).

Arrancando PPP en el lado del servidor

Aunque el script ppp-on-dialer es adecuado para los servidores que arrancan automáticamente pppd una vez que usted ha entrado en el sistema, algunos servidores requieren que usted arranque explícitamente PPP.

Si necesita ejecutar una orden para arrancar PPP en el servidor, TAMBIEN necesita editar el script ppp-on-dialer.

Al FINAL del script (después de la línea de contraseña) añada un par adicional esperado enviado - este debería ser como su línea de órdenes (cuidado con los caracteres que tienen un significado especial en el shell Bourne - como el $ y [ o ] (los corchetes).

Una vez que chat haya encontrado la línea de órdenes de su shell, deberá ejecutar la orden que arranque ppp en el servidor PPP de su ISP.

En mi caso, mi servidor PPP utiliza la línea de órdenes estándar de Bash para Linux


[hartr@kepler hartr]$

y requiere que teclee


ppp

para arrancar PPP en el servidor.

Es una buena idea permitir aquí una recuperación de errores, por lo que en mi caso utilizo


 hartr--hartr    ppp

Esto es, si no recibo la línea de órdenes en el tiempo del retardo, envío un retorno de carro y busco de nuevo la línea de órdenes.

Una vez que se recibe la línea de órdenes, envío la cadena ppp.

Nota: no olvide añadir una \ al final de la línea anterior para que chat todavía piense que el script chat está en una sola línea.

Desafortunadamente, algunos servidores producen un juego muy variable de líneas de órdenes. Puede que necesite conectar muchas veces utilizando minicom para comprender qué sucede y escoger las cadenas "esperadas" estables.

15.5 Un script chat para conexiones autentificadas por PAP/CHAP

Si su ISP utiliza PAP/CHAP, su script chat es mucho más simple. Todo lo que el script chat debe hacer es marcar el teléfono, esperar la conexión y dejar que pppd maneje la entrada en el sistema.


#!/bin/sh
#
# Esta es la segunda parte del script ppp-on. Realiza el protocolo de
# conexión para la conexión deseada.
#
exec /usr/sbin/chat -v                                  \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \

15.6 Las opciones de pppd debug y file fichero_opciones

Como ya hemos visto, puede conectar la información de registro de depuración si arranca pppd con la opción -d. La opción "debug" es equivalente a esta.

Ya que estamos estableciendo una nueva conexión con un nuevo script, deje la opción de depuración por ahora. (Atención: si tiene poco espacio en el disco duro, registrar los intercambios de pppd puede hacer ampliar su fichero de registro de sistema y meterle en problemas - pero para hacerlo debe fallar su conexión y seguir intentándolo durante bastantes minutos).

Una vez que usted sabe que todo funciona adecuadamente, usted puede eliminar esta opción.

Si ha llamado a su fichero de opciones ppp de alguna manera distinta a /etc/ppp/options o /etc/ppp/options.ttySx, especifique el nombre de fichero a pppd con la opción file.


exec /usr/sbin/pppd debug file options.miservidor /dev/ttyS0 38400 \


Página siguiente Página anterior Índice general