Gu�a de Administraci�n de Redes con Linux | ||
---|---|---|
Anterior | Cap�tulo 8. El Protocolo Punto-a-Punto | Siguiente |
Uno de los problemas que puede haberle dado el ejemplo anterior es que ten�a que establecer la conexi�n manualmente antes de poder ejecutar pppd. Al contrario que dip, pppd no tiene su propio lenguaje de scripts para llamar al sistema remoto y entrar en �l, sino que conf�a en otro programa externo para que haga esto. El comando que tiene que ser ejecutado puede d�rsele pppd con la opci�n connect en la l�nea de �rdenes. El pppd redirigir� la entrada y salida est�ndar de �rdenes a la l�nea serie.
El paquete pppd incluye un programa muy simple llamado chat que es capaz de automatizar secuencias de registro simples. Hablaremos sobre este programa con detalle.
Si su secuencia de registro es compleja, necesitar� algo m�s potente que chat. Una alternativa �til que deber�a considerar es expect, escrito por Don Libes. Tiene un lenguaje basado en Tcl, y fue dise�ado exactamente para este tipo de aplicaci�n. Aquellos de vosotros cuyas secuencias de registro requieran, por ejemplo, autentificaci�n por reto/respuesta con generaci�n de claves encontrar�is expect lo suficientemente potente para ocuparse de la tarea. Puesto que hay tantas posibles variaciones de este tema, no describiremos como desarrollar un gui�n de expect apropiado en este libro. Es suficiente decir, que usted llama a su gui�n expect especificando su nombre con la opci�n connect de pppd. Tambi�n es importante se�alar que cuando el gui�n est� ejecut�ndose, la entrada y la salida est�ndar estar�n desviadas al m�dem, y no a la terminal que invoc� al pppd. Si usted necesita interactuar como usuario, usted deber� hacerlo mediante un terminal virtual compartido, o mediante otros medios.
La orden chat le permite especificar un script del estilo de los de UUCP. B�sicamente, un script de chat consiste en una secuencia alterna de cadenas que esperamos recibir del sistema remoto y las respuestas que hemos de enviar. Las llamaremos respectivamente, cadenas esperadas y cadenas enviadas. Este es un extracto de un t�pico script de chat:
ogin: b1ff ssword: s3|<r1t |
Este script le indica a chat que espere a que el sistema remoto le env�e el mensaje de petici�n de usuario y entonces le devuelve el nombre del usuario b1ff. S�lo esperamos por ogin: para que no importe si el mensaje de registro empiece por l may�scula o min�scula, o si llega con basura. La siguiente cadena es una cadena esperada que hace que chat espere al mensaje de petici�n de contrase�a y le env�e nuestra contrase�a como respuesta.
Esto es b�sicamente lo que hacen los scripts de chat. Un script completo para llamar a un servidor PPP deber�a, adem�s, incluir las �rdenes apropiados para el m�dem. Suponga que su m�dem entiende los comandos Hayes, y que el n�mero de tel�fono del servidor es el 318714. En ese caso, la l�nea completa de chat para que pudi�semos establecer una conexi�n con c3po ser�a:
$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN |
Por definici�n, la primera cadena que damos a chat tiene que ser una cadena esperada, pero como el m�dem no dir� nada hasta que hablemos con �l, hacemos que chat la ignore especificando una cadena vac�a. Continuamos enviando ATZ, la orden de inicializaci�n para los m�dems compatibles Hayes, y esperamos a que nos responda con (OK). La siguiente cadena env�a a chat la orden de marcado junto con el n�mero de tel�fono, y espera a que aparezca el mensaje CONNECT como respuesta. Esto est� seguido de otra cadena vac�a otra vez, porque ahora no queremos enviar nada, sino esperar a que aparezca el mensaje de petici�n de registro. El resto del script de chat funciona exactamente como antes. Esta descripci�n probablemente parezca algo confusa, pero veremos en un momento que hay una forma de hacer los scrips chat mucho m�s f�ciles de entender.
La opci�n –v hace que chat capture todas las actividades hacia la facilidad local2 del demonio syslog. [1]
El escribir el script de chat directamente en la l�nea de �rdenes implica un cierto riesgo, pues los usuarios pueden ver la l�nea de �rdenes de un proceso con la orden ps. Puede evitar esto colocando el script del chat en un fichero, por ejemplo llamado dial-c3po. Entonces, podr� hacer al chat leer el script del fichero en vez de la l�nea de comando utilizando la opci�n –f, seguida por el nombre del fichero.Esto supondr� el beneficio a�adido de hacer nuestra secuencia de chat expect m�s f�cil de entender. Al modificar nuestro ejempo, nuestro fichero dial-c3po tendr� ahora un aspecto como �ste:
'' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN |
Por lo tanto la invocaci�n completa al pppd tendr� ahora un aspecto como �ste:
# pppd connect "chat -f dial-c3po" /dev/ttyS3 38400 -detach \ crtscts m�dem defaultroute |
Adem�s de la opci�n connect que se refiere al script de llamada, hemos a�adido dos opciones m�s a la l�nea de �rdenes: –detach, que le indica al pppd que no se separe de la consola y se convierta en un proceso en segundo plano. La palabra modem activa algunas acciones espec�ficas para m�dem sobre el dispositivo serie, como colgar la l�nea antes y despu�s de la llamada. Si no utiliza esta opci�n, pppd no se preocupar� de la l�nea DCD del puerto, y por lo tanto no podr� detectar si el extremo remoto cuelga de forma imprevista.
Los ejemplos anteriores eran bastante simples; chat permite el uso de scripts mucho m�s complejos. Una caracter�stica muy �til es la capacidad de especificar cadenas frente a las cuales parar chat con un error. Unas cadenas t�picas para parar pueden ser mensajes como BUSY o NO CARRIER, que son los que su m�dem produce cuando el n�mero al que llama comunica o cuando la l�nea no tiene tono. Para hacer que chat las reconozca inmediatamente en vez de esperar, puede introducirlas al principio del script utilizando la opci�n ABORT:
$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ... |
Igualmente, puede variar el valor del tiempo de espera para algunas partes de los scripts de chat insertando opciones TIMEOUT.
Algunas veces, tambi�n querr� disponer de alg�n tipo de ejecuci�n condicional de algunas partes del script de chat. Por ejemplo, cuando reciba el mensaje de petici�n de registro (login) desde el extremo remoto, puede que quiera enviar un BREAK, o un retorno de carro. Puede conseguir esto a�adiendo un sub-script a la parte de la cadena esperada. Consiste en una secuencia de cadenas de env�o y esperadas, de la misma forma que el script en su totalidad, pero separadas por guiones. El sub-script es ejecutado desde el momento en que la cadena esperada a la que est�n ligados no es recibida a tiempo. Para este ejemplo, modificar�amos el script de chat de la siguiente manera:
ogin:-BREAK-ogin: ppp ssword: GaGariN |
Ahora, cuando chat no recibe el mensaje de login del sistema remoto, se ejecuta el sub-script enviando un BREAK y esperando de nuevo por el mensaje de login. Si ahora ya aparece, el script contin�a como usualmente y si no, termina con un error.
[1] | Si edita el syslog.conf para redirigir estos mensajes a un fichero, aseg�rese de que este fichero no pueda ser le�do por cualquiera, pues chat tambi�n captura todo el script de entrada por omisi�n - incluyendo las contrase�as. |