Lo visto anteriormente es simple. Sin embargo, se pueden automatizar estas tareas. Es mucho más práctico tener solamente un orden que realice los pasos necesarios para activar la línea serie, que el módem llame al proveedor de Internet, comenzar la sesión, activar la disciplina de línea SLIP, y por último, configurar la interfaz de red. Para todo esto esta la orden dip.
dip significa Dialup IP (enlace IP telefónico). Fue escrito por Fred van Kempen y ha sufrido bastantes modificaciones de mucha gente. Es actualmente utilizado por todo el mundo. La versión dip337p-uri, se encuentra en casi todas las distribuciones de GNU/Linux actuales, o también a través de FTP en metalab.unc.edu.
dip provee un intérprete para un lenguaje de guiones simple que puede manejar el módem , convertir la línea a modo SLIP y configurar las interfaces. Este lenguaje de guiones es poderoso a la hora de manejar diferentes configuraciones.
Para poder configurar la interfaz SLIP, dip requiere privilegios de superusuario. Puede hacerse cambiando al programa dip el bit setuid como root para que todos los usuarios puedan conectarse a cualquier servidor SLIP sin tener privilegios de superusuario. Esto es muy peligroso, ya que una configuración incorrecta del encaminamiento de dip puede estropear el encaminamiento en su red. Aun peor, esto dará a los usuarios la posibilidad de conectarse a cualquier servidor SLIP y lanzar desde allí, peligrosos ataques a su red. Si desea que los usuarios puedan activar conexiones SLIP, escriba pequeños programas empaquetados por cada perspectiva de conexión a los diferentes servidores SLIP y que esos pequeños programas invoquen a dip con guiones (scripts) específicos para establecer las conexiones. Bien escritos, estos programas pueden ser fácilmente habilitados con el bit setuid de superusuario (root).[1] Una alternativa un poco más flexible, es darle a los usuarios, acceso verdadero a dip como superusuario, utilizando alguna herramienta como por ejemplo sudo.
Asumiendo que el servidor al cual nos queremos conectar vía SLIP se llama cowslip, y que se ha escrito un guión para que dip lo interprete llamado cowslip.dip, el cual hará la conexión. Al programa dip, hay que pasarle como argumento, el nombre del guión:
# dip cowslip.dip DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93) Written by Fred N. van Kempen, MicroWalt Corporation. connected to cowslip.moo.com with addr 192.168.5.74 # |
El codigo del guión es mostrado en el Ejemplo 7-1.
Ejemplo 7-1. Un ejemplo de guión para dip
# Ejemplo de guión en dip para conectarse al servidor cowslip # Configurar los nombres locales y remotos y las direcciones get $local vlager-slip get $remote cowslip port ttyS3 # Selección del puerto serie speed 38400 # Configurar la velocidad máxima modem HAYES # Selección del modelo del Módem reset # reiniciar el módem y la terminal flush # limpiar el búffer de respuesta del módem # Prepararse para marcar. send ATQ0V1E1X1\r wait OK 2 if $errlvl != 0 goto error dial 41988 if $errlvl != 0 goto error wait CONNECT 60 if $errlvl != 0 goto error # Bien, se estableció la conexión sleep 3 send \r\n\r\n wait ogin: 10 if $errlvl != 0 goto error send Svlager\n wait ssword: 5 if $errlvl != 0 goto error send knockknock\n wait running 30 if $errlvl != 0 goto error # Se comenzó la sesión, y del extremo remoto se activó SLIP. print Conectado a $remote con dirección $rmtip default # hacer que este enlace sea la ruta predeterminada mode SLIP # Pasemos a modo SLIP # en caso de error se ejecuta lo siguiente error: print La onexión SLIP a $remote ha fallado. |
Una vez conectado a cowslip y activo el SLIP, dip pasará a ejecutarse en segundo plano. Ahora puede empezar a trabajar con sus los programas habituales de red a través del enlace SLIP. Para terminar la conexión, simplemente invoque a dip con el parámetro –k. Esto envía la señal de cortar (hangup) a dip, junto con el identificador de proceso que dip escribió en el fichero /etc/dip.pid al comenzar:
# dip -k |
En el lenguaje de guiones que dip interpreta, las palabras clave precedidas con el signo de dólar significan nombre de variables. dip tiene un conjunto de variables que están listadas a continuación. $remote y $local, por ejemplo, contienen los nombres de los computadores remoto y local involucrados en la conexión SLIP.
Las dos primeras declaraciones en el ejemplo, son órdenes get, que es la forma en que dip declara una variable. Aquí, los nombres de las computadoras local y remota son vlager y cowslip, respectivamente.
las cinco declaraciones siguientes preparan la terminal de línea y el módem . la orden reset envía la cadena de reinicio al módem. La siguiente sentencia limpia el búffer de salida del módem , para conseguir que el diálogo de registro (login) en las siguientes líneas trabaje correctamente. Este dialogo es extremadamente simple: simplemente marca 41988, el número telefónico de cowslip, y ae regiatra en la cuenta Svlager usando la contraseña knockknock. La orden wait hace que dip espere una cadena dada como primer argumento; el número dado como segundo argumento es el tiempo (en segundos) que se debe esperar por esa cadena. la orden if ,en el proceso de entrada, revisa que no se produzcan errores.
Las órdenes finales, tras un correcto registro, son default, que hace que el enlace SLIP sea la ruta predeterminada a todos los servidores, y mode, que activa el modo SLIP en la línea y configura la interfaz y la tabla de rutas.
En esta sección, se hará referencia a las órdenes de dip más usadas. usted puede obtener un vistazo de todos los órdenes reconocidos invocando a dip en modo prueba e introduciendo la orden help. Para conocer más sobre la sintaxis de una orden, se debe teclear sin argumentos. Recuerde que esto no funcionará con órdenes que no aceptan argumentos. El siguiente ejemplo ilustra el funcionamiento de la orden help:
# dip -t DIP: Dialup IP Protocol Driver version 3.3.7p-uri (25 Dec 96) Written by Fred N. van Kempen, MicroWalt Corporation. Debian version 3.3.7p-2 (debian). DIP> help DIP knows about the following commands: beep bootp break chatkey config databits dec default dial echo flush get goto help if inc init mode modem netmask onexit parity password proxyarp print psend port quit reset securidfixed securid send shell skey sleep speed stopbits term timeout wait DIP> echo Usage: echo on|off DIP> |
En los párrafos siguientes, los ejemplos que muestran el cursor DIP > indican como teclear un orden en modo prueba y cual será su respuesta. Los ejemplos mostrados sin el cursor, deben tomarse como trozos de guiones.
dip provee algunas órdenes para configurar el puerto serie y el modem . Algunos son obvios como la orden port, que selecciona el puerto serie, y speed, databits, stopbits, y parity, que configura los parámetros más comunes de la línea. La orden módem selecciona el tipo de módem . Actualmente, sólo esta soportado el tipo HAYES (en mayúsculas). Se debe proveer a dip con el tipo de módem , o éste se negará a ejecutar las órdenes dial y reset. La orden reset envía la cadena de reinicio (reset) al módem; el tipo de cadena depende del modelo y marca del módem. Para modems compatibles con Hayes, esta cadena es ATZ.
la orden flush puede usarse para vaciar todas las respuestas que el módem envió hasta ese momento. De otro modo, un guión de diálogo que ejecute un reset podría confundirse si leyese un OK como respuesta de algún orden anterior.
La orden init selecciona la cadena de inicialización enviada al módem antes de marcar. predeterminada, para modems Hayes es “ATE0 Q0 V1 X1”, que activa el eco de las órdenes y los códigos de retorno, además selecciona el modo de marcado a ciegas (no comprueba si la línea tiene tono). Los modems modernos, vienen con una buena configuración de fabrica, así que esto es un poco innecesario, pero no hace daño alguno.
La orden dial envía la cadena de inicialización al módem y llama al sistema remoto. La orden predeterminada para modems tipo Hayes es ATD.
La orden echo sirve como depurador. Invocar echo on hace que dip copie en la consola todo lo que se envía por el puerto serie. Este modo puede desactivarse invocando echo off.
dip Puede salir del modo guión temporalmente para entrar en modo terminal. En este modo, usted puede usar a dip como cualquier programa de terminal ordinario, enviando caracteres a través de la línea serie, leyéndolos y mostrarlos. Para abandonar este modo, presione Ctrl-].
la orden get es la forma en que dip carga una variable. Su uso más simple es inicializar una constante, como se vió en el ejemplo de cowslip.dip. usted también puede utilizarlo desde la consola en conjunto con ask:
DIP> get $local ask Enter the value for $local: _ |
Un tercer método, es usado para obtener el nombre del servidor remoto. Aunque extraño parezca al principio, es muy útil en algunos casos. Algunos servidores, no permiten que usted use su propia dirección IP en un enlace SLIP, sino que le asignará una de un conjunto ya establecido cuando se establezca la conexión, mostrando un mensaje que le informe que dirección le fue asignada. Si el mensaje luce parecido a “Your address: 192.168.5.74”, el siguiente ejemplo hará que dip use la dirección asignada:
# finish login wait address: 10 get $locip remote |
Esta orden es usado para enviar cualquier texto a la consola cuando se invoque a dip. Cualquier variable usada por dip puede ser utilizada para enviar mensajes, como por ejemplo:
DIP> print Usando puerto $port a la velocidad de $speed baudios Usando puerto ttyS3 a la velocidad de 38400 baudios |
dip entiende solamente un grupo predefinido de variables. Un nombre de variable siempre debe comenzar con el signo de dólar y debe estar en minúsculas.
Las variables $local y $locip contienen el nombre de la máquina local y su dirección IP. Cuando se guarda el nombre canónico de la máquina local en $local, dip intentará resolverlo para conseguir la dirección IP y guardarla en la variable $locip. Un proceso similar, pero al revés, sucede cuando se guarda la dirección IP en la variable $locip; dip intentará resolver el nombre de la máquina local a partir de la dirección IP y guardarlo en la variable $local.
Las variables $remote y $rmtip operan de la misma manera, pero con el nombre y la dirección IP de la máquina remota. la variable $mtu contiene el valor MTU para la conexión actual.
Estas cinco variables son las únicas que pueden ser asignadas con valores usando la orden get. El contenido de algunas variables, son el resultado de configuraciones realizadas por órdenes que llevan el mismo nombre, pero pueden ser utilizadas junto con la orden print; Estas variables son $modem, $port, y $speed.
La variable $errlvl contiene el resultado de la última orden ejecutada. Un nivel de error 0 indica que la orden se ejecutó satisfactoriamente, si este número es mayor o menor, indica que hubo algún problema en la ejecución.
la orden if ejecuta un salto condicional, y se comporta de la misma manera que su par usado en programación. Su sintaxis es:
if var op number goto label |
La expresión, realiza una simple comparación entre una de estas variables $errlvl, $locip, y $rmtip. var debe ser un numero entero (integer); el operador op debe ser uno de estos: ==, !=, <, >, <=, y >=.
La orden goto (ir a) hace que la ejecución del guión continúe donde se encuentra definida la etiqueta pasada como parámetro a la orden (label). Una etiqueta (label) debe ser la primer palabra en una línea, seguida de dos puntos(:)
Estas órdenes ayudan a implementar sencillos guiones de diálogo en dip. la orden send envía sus argumentos a la línea serie. No soporta el uso de variables, pero entiende todas las secuencias de escape al estilo del lenguaje C, como \n para nueva línea y \b para retroceso. El carácter de tilde (~) puede ser usada como una abreviatura del carácter de retorno de carro / nueva línea.
La orden wait toma una palabra como argumento y leerá todo lo que entre por la línea serie hasta que detecte una secuencia de caracteres que coincida con esa palabra. Esa palabra no puede contener caracteres en blanco. Opcionalmente, se le puede pasar a wait un tiempo de espera como segundo argumento; Si la palabra esperada, no es recibida en ese tiempo de espera la variable $errlvl se cargará con un 1. Esta orden se usa generalmente en la detección de registros (login) y otros símbolos de espera.
La orden sleep puede usarse para esperar una determinada cantidad de tiempo; Por ejemplo, esperar pacientemente a que la secuencia de ingreso se complete. Nuevamente, el intervalo se expresa en segundos.
Estas órdenes se usan para pasar la línea de modo serie a modo SLIP y para configurar la interfaz.
La orden mode es la última ejecutada por dip antes de pasar al modo demonio. A menos que ocurra un error, esta orden no retorna.
mode toma el nombre del protocolo como argumento. La versión actual de dip reconoce los siguientes: SLIP, CSLIP, SLIP6, CSLIP6, PPP, y TERM como nombres válidos. Esta versión de dip no entiende SLIP adaptable.
Después de poner la línea en modo SLIP, dip ejecuta ifconfig para configurar la interfaz como enlace punto a punto, e invocar a route para cambiar el encaminamiento hacia el servidor remoto.
Si, además, el guión se ejecutase la orden default antes que mode, dip hará que el camino predeterminado de los paquetes sea encaminado al enlace SLIP.
[1] | diplogin debe activarse con el bit setuid como root. Examine la sección al final de este capítulo. |