%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                       Legal Notice                            %
%                                                               %
% This document is copyright (C) Olaf Kirch, okir@monad.swb.de  %
%                                                               %
% For copying conditions, please refer to the file COPYING.	%
%                                                               %
% The author is not liable for any damages, direct or indirect, %
% resulting from the use of information provided in this        %
% document.                                                     %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% When viewing this document with vi on an 80-columns screen,   %
% do a ':se nonumber' first.                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Traduccion realizada por Juan Jose Amor
% Envie sus comentarios a:
%       jjamor@ls.fi.upm.es (INTERNET)
%       2:341/12.19         (FIDONET)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Revisado en 24-Febrero-1999 por:
%   Juan Jose Amor <jjamor@ls.fi.upm.es>
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%               S T A R T   O F   C H A P T E R                 %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{SLIP: IP por l\'{\i}nea serie}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip}
\index{IP!acceso telef\'onico}
\index{IP!l\'{\i}nea serie}
\index{acceso telef\'onico IP}
\index{tel\'efono, transmitir datos por el}
\index{Internet!conexi\'on a}
\index{configuraci\'on!SLIP|(}

Los protocolos de l\'{\i}nea serie, SLIP y PPP, permiten a los ``pobres''
tener conexi\'on a Internet. S\'olo se necesita un m\'odem y un puerto serie
con buffer~FIFO. Utilizarlo no es m\'as complicado que usar un buz\'on, y
cada vez existen m\'as proveedores que le ofrecen acceso telef\'onico IP a
un coste asequible para todos.


En \linux\ hay controladores tanto de SLIP como de PPP. SLIP es m\'as
veterano y por tanto m\'as estable. PPP para \linux\ ha sido
recientemente desarrollado por Michael Callahan y Al Longyear; y se
describir\'a en el pr\'oximo cap\'{\i}tulo\footnote{N. del T.: Actualmente,
podemos decir que PPP ya es suficientemente estable. De hecho, SLIP
cada vez se utiliza menos}.


\section{Requisitos generales}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip.general}
\index{SLIP|(}
\index{PPP}

Para utilizar SLIP o PPP, hay que configurar algunas caracter\'{\i}sticas
de red que ya se han descrito en cap\'{\i}tulos anteriores, por
supuesto. Por lo menos, debe tener el interfaz de bucle ({\it loopback})
y el sistema
de traducci\'on de nombres. Cuando se conecte a Internet, querr\'a usar,
por supuesto, el DNS. Lo m\'as f\'acil es poner la direcci\'on de alg\'un
servidor de nombres en el fichero \file{resolv.conf}; este servidor se
usar\'a tan pronto como SLIP conecte. Lo mejor es poner el servidor de
nombres m\'as cercano.


\index{configuraci\'on!servidor de nombres s\'olo con {\it cache}}
\index{configuraci\'on!DNS junto a SLIP/PPP}
\index{servidor de nombres s\'olo con {\it cache}}
\index{servidor de nombres!s\'olo con {\it cache}}
Sin embargo, esta soluci\'on no es la \'optima, ya que las b\'usquedas de
nombres seguir\'an yendo por la conexi\'on SLIP o PPP. Si le interesa
consumir menos ancho de banda, puede instalarse un servidor de nombres
\emph{s\'olo con cache}. No requiere un dominio ya que s\'olo actuar\'a como
{\it relevo}, es decir, pasar\'a a otro servidor las peticiones que
Vd. realice. La ventaja es que construir\'a una {\it cache} de modo que
al pedir un nombre varias veces seguidas, s\'olo se contactar\'a con el
servidor externo la primera vez. Un fichero \file{named.boot} que
sirva para esto puede ser el siguiente:


\begin{tscreen}
\begin{verbatim}
; fichero named.boot para un servidor solo con cache
directory                            /var/named

primary       0.0.127.in-addr.arpa   db.127.0.0 ; interfaz "loopback"
cache         .                      db.cache   ; servidores raiz
\end{verbatim}
\end{tscreen}


Adem\'as debe tener un fichero \file{db.cache} con una lista de
servidores ra\'{\i}z v\'alidos. Este fichero est\'a descrito al final del
cap\'{\i}tulo dedicado a la configuraci\'on del servidor de nombres.


\section{Utilizaci\'on de SLIP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip.operation}
\index{SLIPDISC}
\index{tty!disciplina de l\'{\i}nea}
\index{disciplina de l\'{\i}nea}

Los servidores de IP~por tel\'efono suelen ofrecer servicios SLIP
mediante cuentas de usuario especiales. Despu\'es de entrar en una
cuenta no se entra en un int\'erprete de comandos normal, sino en un
programa o {\it shell script} que se ejecuta para activar el manejador
SLIP del servidor y configurar la interfaz con la red. En ese momento
tiene que hacer lo mismo en su m\'aquina.


En algunos sistemas operativos, el manejador de SLIP es un programa de
usuario, pero bajo \linux\ es parte del n\'ucleo, cosa que lo hace mucho
m\'as r\'apido. Requiere, sin embargo, que la l\'{\i}nea serie sea
expl\'{\i}citamente convertida a modo SLIP. Esto se hace mediante una
disciplina de l\'{\i}nea especial llamada SLIPDISC. Mientras que un
terminal (tty) est\'a en modo normal (DISC0), intercambiar\'a datos s\'olo
con procesos de usuario, mediante las llamadas \func{read(2)} y
\func{write(2)} habituales, y el manejador de SLIP no podr\'a escribir o
leer del terminal. En el modo SLIPDISC se cambian los papeles: ahora
los programas de usuario no podr\'an acceder a la l\'{\i}nea pero todos los
datos que lleguen se pasar\'an al manejador SLIP.


\index{Compresi\'on de cabeceras de Van Jacobson}
\index{compresi\'on de paquetes TCP/IP}
\index{IP por linea serie, comprimida}
\index{CSLIP}
El manejador de SLIP entiende por s\'{\i} mismo varias versiones del
protocolo, incluyendo CSLIP, que realiza la llamada compresi\'on de
cabeceras de Van Jacobson en los paquetes~IP salientes.\footnote{La
compresi\'on de cabeceras de Van Jacobson se describe en el RFC~1441.}
Esto aumenta el rendimiento de las sesiones interactivas. Adem\'as, hay
versiones de seis bits de estos protocolos.


\index{slattach@\prog{slattach}}
Una forma f\'acil de convertir una l\'{\i}nea serie a modo SLIP es usar la
utilidad \prog{slattach}. Suponiendo que tenemos un m\'odem en
\file{/dev/cua3} y que se ha entrado correctamente en el servidor de
SLIP, se deber\'a ejecutar:


\begin{tscreen}
 \# slattach /dev/cua3 \&
\end{tscreen}


Esto cambiar\'a el modo de l\'{\i}nea de \file{cua3} a SLIPDISC, y la
enganchar\'a a uno de los interfaces SLIP disponibles. Si es la \'unica
conexi\'on SLIP se enganchar\'a al interface \file{sl1}, si es la segunda,
a \file{sl2}, etc. Los n\'ucleos actuales soportan hasta ocho enlaces
SLIP simult\'aneos.


\index{CSLIP}
La encapsulaci\'on por defecto que elige \prog{slattach} es CSLIP. Puede
elegirse otra con la opci\'on \option{-p}. Para usar SLIP sin compresi\'on
deber\'a ponerse:


\begin{tscreen}
 \# slattach -p slip /dev/cua3 \&
\end{tscreen}


Otros modos son \option{cslip}, \option{slip6}, \option{cslip6} (para
la versi\'on de 6 bits) y \option{adaptive} para SLIP adaptativo, que
deja al n\'ucleo averiguar qu\'e encapsulaci\'on de SLIP usa el otro extremo
de la comunicaci\'on.

Observe que debe utilizarse el mismo sistema de encapsulaci\'on que use
el otro extremo. Por ejemplo, si \host{cowslip} usara CSLIP, tendr\'a
que usarlo Vd. tambi\'en. El s\'{\i}ntoma t\'{\i}pico de una selecci\'on incorrecta
es que la orden \prog{ping} a una m\'aquina remota no tendr\'a
respuesta. Si la otra m\'aquina le hace \prog{ping} a Vd, recibir\'a
mensajes del tipo ``\term{Can't build ICMP header}'' {\it (no se puede
construir la cabecera ICMP)} en la consola. Una forma de intentar
evitar este tipo de problemas es usar SLIP adaptativo.


De hecho, \prog{slattach} no s\'olo le permite activar SLIP, sino
tambi\'en otros protocolos serie como PPP o KISS (protocolo que se usa
en packet-radio). Para m\'as detalle, vea el manual en l\'{\i}nea de
\file{slattach(8)}.


Despu\'es de preparar la l\'{\i}nea para SLIP, tendr\'a que configurar el
interfaz de red. De nuevo, se har\'a esto mediante los programas
est\'andares \prog{ifconfig} y \prog{route}. Suponiendo que desde la
m\'aquina \host{vlager} hemos llamado al servidor \host{cowslip}, se
deber\'{\i}a ejecutar:


\begin{tscreen}
\begin{verbatim}
# ifconfig sl0 vlager pointopoint cowslip
# route add cowslip
# route add default gw cowslip
\end{verbatim}
\end{tscreen}


El primer comando configura la interface como un enlace a
\host{cowslip} punto a punto, mientras que el segundo y el tercero
sirven para a\~nadir la ruta correspondiente a \host{cowslip} como ruta
por defecto y configurar esa m\'aquina como pasarela de todos nuestros mensajes.

Cuando se quiera terminar el enlace SLIP, debe empezarse por eliminar
todas las rutas a trav\'es de \host{cowslip} mediante el comando
\prog{route} con la opci\'on \option{del}, desactivar el interface y
enviar al proceso \prog{slattach} la se\~nal SIGHUP. Despu\'es de esto
se deber\'a colgar el m\'odem usando un programa de terminal de nuevo:


\begin{tscreen}
\begin{verbatim}
# route del default
# route del cowslip
# ifconfig sl0 down
# kill -HUP 516
\end{verbatim}
\end{tscreen}



\section{Utilizaci\'on de \prog{dip}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip.dip}
\def\dipvar#1{\keyword{\${#1}}}
\index{configuraci\'on!dip@\prog{dip}}
\index{dip@\prog{dip}|(}

Lo visto hasta ahora no es dif\'{\i}cil de hacer. Sin embargo, puede que
desee automatizar los pasos de modo que s\'olo tenga que invocar un
comando. El programa \prog{dip} hace esto.\footnote{\prog{dip}
significa \emph{Dialup IP} y fue escrito por Fred van~Kempen.} La
versi\'on que existe en este momento es la~3.3.7. Ha sido parcheada por
mucha gente, con lo que no podremos hablar simplemente de \emph{el} programa
\prog{dip}. Las modificaciones ser\'an incorporadas en futuras
versiones.


\prog{dip} tiene un int\'erprete de un lenguaje {\it script} sencillo
que puede manejar autom\'aticamente el m\'odem, convertir la l\'{\i}nea a modo
SLIP y configurar las interfaces. Es bastante restrictivo por lo
simple que es, pero suficiente para la mayor\'{\i}a de los casos. Una nueva
versi\'on de este programa podr\'a traer una versi\'on m\'as completa del lenguaje.


\index{SLIP!iniciaci\'on}
\index{acceso!concesi\'on}
\index{seguridad!SLIP}
Para ser capaces de configurar el interfaz SLIP, \prog{dip} necesita
tener permisos de superusuario. Puede hacerse poniendo el programa con
el bit {\it setuid} y de propiedad del usuario \user{root}, de modo
que cualquier usuario sin privilegios podr\'a poner en marcha el
programa. Esto es, sin embargo, muy peligroso, ya que una
configuraci\'on incorrecta del encaminamiento de {\it dip} puede
estropear el encaminamiento de su red local. Adem\'as, dar\'a a los
usuarios la posibilidad de conectarse a {\it cualquier} servidor SLIP,
y lanzar ataques peligrosos a la red. Si a\'un quiere permitir a los
usuarios activar conexiones SLIP, escriba peque\~nos programas para cada
servidor de modo que cada uno invoque a \prog{dip} con el {\it script}
espec\'{\i}fico. Estos programas pueden tener privilegios sin
peligro.\footnote{
\prog{diplogin} puede (y debe) ser ejecutado como superusuario. Vea la
secci\'on del final de este cap\'{\i}tulo.
}


\subsection{Un script de ejemplo}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip.dip.sample}

\begin{figure}[p]
\small
\begin{verbatim}
 # Script de dip para conectarse al servidor cowslip

 # Preparar nombres local y remoto
 get $local vlager
 get $remote cowslip

 port cua3                # seleccion de puerto serie
 speed 38400              # poner velocidad maxima
 modem HAYES              # poner tipo de modem
 reset                    # reiniciar modem y terminal (tty)
 flush                    # limpiar buffer de respuesta del modem

 # Prepararse para marcado.
 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

 # Ahora ya estamos conectados
 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 hey-jude\n
 wait running 30
 if $errlvl != 0 goto error

 # Ahora ya estamos en la cuenta. Lancemos SLIP.
 print Conectado a $remote with address $rmtip
 default                  # Hacer que este enlace sea nuestra ruta por defecto
 mode SLIP                # Pasemos a modo SLIP
 # en caso de error se ejecuta lo siguiente

error:
 print Fallo de la conextion SLIP con $remote .
\end{verbatim}
\caption{
 \label{slip.fig.script}
 Un script de ejemplo para \prog{dip}
}
\end{figure}


Un script de ejemplo se encuentra en la
figura~\ref{slip.fig.script}. Puede utilizarse para conectarse a
\host{cowslip} invocando a \prog{dip} de esta forma:


\begin{tscreen}
\begin{verbatim}
# dip cowslip.dip
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.

conectado a cowslip.moo.com with addr 193.174.7.129
#
\end{verbatim}
\end{tscreen}


Despu\'es de conectar a \host{cowslip} y activar SLIP, \prog{dip} pasar\'a
a ejecutarse en segundo plano. Ahora puede conectarse a trav\'es del
enlace SLIP mediante los programas habituales de red. Para terminar la
conexi\'on, ejecute \prog{dip} con la opci\'on \option{-k}. Esto enviar\'a
una se\~nal de colgar al proceso \host{dip}, cuyo n\'umero se encontrar\'a
almacenado en el fichero \file{/etc/dip.pid}.\footnote{Vea el grupo
\ngrp{alt.tla} si desea conocer m\'as abreviaturas en Ingl\'es que sean
pal\'{\i}ndromas, como este caso.}

% Aqui ponia kill -k, cosa que el traductor ha corregido :-)
\begin{tscreen}
\begin{verbatim}
# dip -k
\end{verbatim}
\end{tscreen}


En el lenguaje que interpreta \prog{dip} las palabras precedidas con
un signo de d\'olar se corresponden con nombres de variables. \prog{dip}
tiene un conjunto predefinido de variables que se listar\'a a
continuaci\'on. \dipvar{remote} y \dipvar{local}, por ejemplo, contienen
los nombres de m\'aquina local y remoto, respectivamente, involucrados
en el enlace SLIP.


Las dos primeras sentencias del ejemplo son los comandos \prog{get},
que sirven para establecer variables. Aqu\'{\i}, las m\'aquinas local y
remota han sido \host{vlager} y \host{cowslip}, respectivamente.


\index{di\'alogo con m\'odem!SLIP}
Las cinco sentencias que siguen preparan la l\'{\i}nea serie y el m\'odem. La
palabra \keyword{reset} env\'{\i}a una cadena de reinicio al m\'odem; que
ser\'a el comando \keyword{ATZ} para m\'odems compatibles con Hayes. La
siguiente sentencia limpia el buffer de salida del m\'odem, para
conseguir que el di\'alogo de entrada (login y password) funcione
correctamente. Este di\'alogo es extremadamente simple: llama al n\'umero
41988, que es el n\'umero de \host{cowslip}, entra en la cuenta
\keyword{Svlager} mediante la clave de acceso \keyword{hey-jude}. El
comando \keyword{wait} hace que se espere a la aparici\'on de la cadena
que sigue a esta orden, mientras que su segundo argumento especifica
el tiempo de espera en segundos. Los comandos \keyword{if} sirven para
ir comprobando la correcci\'on del procedimiento de entrada en la cuenta.


Los comandos finales, ejecutados tras entrar en la cuenta, son
\keyword{default}, que hace que el enlace SLIP sea la ruta por defecto
para todos los destinos y \keyword{mode}, que pone la l\'{\i}nea en modo
SLIP y configura autom\'aticamente el interface y la tabla de encaminamiento.


\subsection{Gu\'{\i}a de Referencia de \prog{dip}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip.dip.reference}
Aunque se utiliza mucho, \prog{dip} aun no est\'a muy documentado. En
esta secci\'on, daremos una peque\~na gu\'{\i}a de referencia de los comandos
de \prog{dip}. Puede obtenerse un resumen de los comandos ejecutando
\prog{dip} en modo de prueba (opci\'on \option{-t}), e introduciendo el
comando \prog{help}. Para
obtener ayuda sobre un comando se debe ejecutar sin argumentos; por
supuesto esto no funcionar\'a con comandos que no tengan argumentos.


\begin{tscreen}
\begin{verbatim}
$ dip -t
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.

DIP> help
DIP knows about the following commands:

	databits default  dial     echo     flush    
	get      goto     help     if       init     
	mode     modem    parity   print    port     
	reset    send     sleep    speed    stopbits 
	term     wait     

DIP> echo
Usage: echo on|off
DIP> _
\end{verbatim}
\end{tscreen}

En los siguientes apartados, los ejemplos que muestran el {\it prompt} 
\term{DIP$>$} indican c\'omo se introducir\'{\i}a el comando en modo prueba,
y qu\'e salida producir\'{\i}a. Los ejemplos que no muestren este {\it prompt}
deben tomarse como trozos de {\it scripts}.


\subsubsection{Comandos del m\'odem}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Existe un conjunto de comandos de \prog{dip} pensados para configurar
la l\'{\i}nea serie y el m\'odem. Algunos son de uso obvio, como
\keyword{port}, que sirve para elegir el puerto serie, y
\keyword{speed}, \keyword{databits}, \keyword{stopbits}, y
\keyword{parity}, que establecen los par\'ametros habituales de las
l\'{\i}neas serie.


El comando \keyword{modem} selecciona el tipo de m\'odem. Actualmente
s\'olo est\'a soportado el tipo \keyword{HAYES}\footnote{Deben respetarse
las may\'usculas}. Debe decirse el tipo, pues si no \prog{dip} se negar\'a
a ejecutar los comandos \keyword{dial} y \keyword{reset}. Este \'ultimo
comando env\'{\i}a la cadena de reinicio al m\'odem, la cual depende
del tipo de m\'odem elegido. Para modems compatibles Hayes, esta cadena
es \keyword{ATZ}.


La orden \keyword{flush} puede utilizarse para vaciar las respuestas
anteriores de la memoria del m\'odem. De otro modo, un {\it script} de
di\'alogo con el m\'odem podr\'{\i}a fallar, porque lea la respuesta
\keyword{OK} que proceda de \'ordenes anteriormente enviadas al m\'odem.


El comando \keyword{init} selecciona la cadena de inicializaci\'on
enviada al m\'odem antes de marcar, que para modems Hayes es, por
defecto, la cadena ``\keyword{ATE0 Q0 V1 X1}'', que activa el eco de
los comandos, hace que el m\'odem d\'e los c\'odigos de resultado en modo
extendido (es decir, por palabras y no n\'umeros de c\'odigo) y selecciona
marcado a ciegas, sin esperar tono de marcado.


El comando \keyword{dial} env\'{\i}a la cadena de inicializaci\'on al m\'odem y
llama al sistema remoto. El comando de marcado por defecto en los
modems Hayes es \keyword{ATD}.


\subsubsection{Comandos \keyword{echo} y \keyword{term}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
El comando \keyword{echo on} se usa con prop\'ositos de depuraci\'on, ya que
hace que \prog{dip} copie en la consola todo lo que env\'{\i}e al puerto
serie. Puede desactivarse despu\'es con una orden \keyword{echo off}.


\prog{dip} tambi\'en puede salirse temporalmente a un modo terminal, de
modo que Vd. pueda dialogar manualmente con el m\'odem. Para ello se usa
el comando \keyword{term}, y para salir de este modo se pulsa \key{Ctrl-]}.


\subsubsection{Comando \keyword{get}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
La orden \keyword{get} sirve para poner valores a las variables
internas. Puede usarse como se vio en ejemplos anteriores, o bien de
forma interactiva, a\~nadiendo la palabra \keyword{ask}:


\begin{tscreen}
\begin{verbatim}
DIP> get $local ask
Enter the value for $local: _
\end{verbatim}
\end{tscreen}


Un tercer uso de este comando es intentar obtener el valor de la
m\'aquina remota. Aunque extra\~no pueda parecer, resulta \'util en muchos
casos: muchas veces el servidor SLIP no permite que nosotros nos pongamos
cualquier direcci\'on IP, sino que nos la asignar\'a de un conjunto
predeterminado y nos informar\'a de ello mediante una frase tal como
``\term{Your address: 193.174.7.202}'' ({\it Su direcci\'on:
193.174.7.202}). De esta frase querremos que \prog{dip} ajuste
autom\'aticamente nuestra direcci\'on IP, para lo que haremos lo siguiente
(observar que se usa el par\'ametro \keyword{remote}):


\begin{tscreen}
\begin{verbatim}
... dialogo de entrada en la cuenta ....
wait address: 10
get $locip remote
\end{verbatim}
\end{tscreen}


\subsubsection{Comando \keyword{print}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Este es el comando para enviar textos a la consola. Cualquier variable
puede enviarse a la consola mediante comandos de este tipo, por ejemplo:


\begin{tscreen}
\begin{verbatim}
DIP> print Utilizando puerto $port con velocidad $speed
Utilizando puerto cua3 con velocidad 38400
\end{verbatim}
\end{tscreen}


\subsubsection{Nombres de las variables}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\prog{dip} s\'olo entiende un conjunto predefinido de variables. Un
nombre de variable siempre empieza con un s\'{\i}mbolo de d\'olar y debe
escribirse en min\'usculas.


Las variables \dipvar{local} y \dipvar{locip} contienen
respectivamente el nombre de nuestra m\'aquina y su
direcci\'on~IP. Poniendo el nombre de la m\'aquina, \prog{dip} guardar\'a
dicho nombre en la variable \dipvar{local}, al tiempo que guardar\'a la
direcci\'on~IP en la variable \dipvar{locip}.


Las variables \dipvar{remote} y \dipvar{rmtip} hacen lo mismo pero con
la m\'aquina remota. Por otro lado, \dipvar{mtu} contiene el valor del
MTU para la conexi\'on actual.


Esas cinco variables son las \'unicas que pueden actualizarse mediante
un comando \keyword{get}. Otras deben actualizarse mediante comandos
espec\'{\i}ficos, aunque siempre pueden sacarse por pantalla con el comando
\keyword{print}. Esas variables son \dipvar{modem}, \dipvar{port},
y \dipvar{speed}.


La variable \dipvar{errlvl} sirve para conocer el resultado del \'ultimo
comando ejecutado, siendo de valor 0 si fue bien, o distinto de 0 si
hubo alg\'un problema.



\subsubsection{Comandos \keyword{if} y \keyword{goto}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
El comando \keyword{if} es un salto condicional. Su sintaxis es

\begin{tscreen}
 if \var{variable} \var{oper} \var{numero} goto \var{etiqueta}
\end{tscreen}

\noindent
donde la expresi\'on puede ser una simple comparaci\'on entre una de las
variables siguientes: \dipvar{errlvl}, \dipvar{locip}, y
\dipvar{rmtip}. El segundo operando debe ser un n\'umero entero; el
operador \var{oper} puede ser uno de los siguientes: \verb|==|,
\verb|!=|, \verb|<|, \verb|>|, \verb|<=|, y \verb|>=|.


El comando \keyword{goto} lanza la ejecuci\'on a partir de la situaci\'on
de la etiqueta, que debe ponerse al principio de una l\'{\i}nea seguida de
dos puntos.



\subsubsection{Comandos \keyword{send}, \keyword{wait} y \keyword{sleep}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Estos comandos ayudan a implementar sencillos {\it scripts} de
di\'alogo. \keyword{send} env\'{\i}a su argumento a la l\'{\i}nea serie. No pueden
ponerse variables, pero entiende secuencias de escape al estilo del
lenguaje C, como \keyword{\bs n} y \keyword{\bs b}. El car\'acter de
tilde (\keyword{\tld}) puede usarse como abreviatura del retorno de carro.


El comando \keyword{wait} hace que \prog{dip} espere a que por la
l\'{\i}nea serie se reciba la palabra pasada como primer argumento. El
segundo argumento, que es opcional, fija un tiempo de espera m\'aximo,
en segundos. Si la palabra no se recibe en ese tiempo, el comando
fallar\'a actualizando la variable \dipvar{errlvl} con el valor 1.


La orden \keyword{sleep} puede usarse para esperar cierto tiempo, por
ejemplo para esperar pacientemente una invitaci\'on a entrar en la
cuenta. Una vez m\'as, el tiempo se especificar\'a en segundos.


\subsubsection{Comandos \keyword{mode} y \keyword{default}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Se utilizan para cambiar el puerto entre modo SLIP o normal, y
configurar la interface.

El comando \keyword{mode} es el \'ultimo que ejecuta \prog{dip} antes de
pasar al segundo plano (daemon). A menos que suceda un error, de este
comando no se retorna.


Este comando tiene un argumento, que es el protocolo. Actualmente se
reconocen los protocolos \keyword{SLIP} y \keyword{CSLIP}, es decir,
la versi\'on actual de \prog{dip} no soporta SLIP adaptativo.

Despu\'es de poner la l\'{\i}nea en modo SLIP, \prog{dip} ejecutar\'a un
comando \prog{ifconfig} para configurar la interface como enlace punto
a punto y otro \prog{route} para cambiar las tablas de encaminamiento
apuntando a la m\'aquina remota.


Si, adem\'as, se ejecuta \keyword{default} antes que \keyword{mode}, el
programa har\'a que el camino por defecto de nuestros paquetes vaya al
enlace SLIP.


\section{Funcionamiento en Modo Servidor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{slip.server}
\index{diplogin@\prog{diplogin}}
\index{configuraci\'on!servidor SLIP}

Curiosamente, configurar su m\'aquina como servidor SLIP va a ser mucho
m\'as sencillo que configurarla como cliente.


Una forma de hacerlo es usar \prog{dip} en modo servidor, que puede
conseguirse si se ejecuta como \prog{diplogin}. Su configuraci\'on
principal se encontrar\'a en \file{/etc/diphosts}, que asocia nombres de
cuenta con direcciones de m\'aquina asignadas. Alternativamente, puede
usar \prog{sliplogin}, una utilidad procedente de BSD que proporciona
un esquema de configuraci\'on que le permite ejecutar {\it shell
scripts} cuando las m\'aquinas se conectan y desconectan. Actualmente,
su desarrollo est\'a en fase beta.


\index{Dent, Arthur}
Ambos programas necesitan que se tenga una cuenta por cada cliente
SLIP. Por ejemplo, si proporcion\'aramos un servicio SLIP a Arthur Dent
en \host{dent.beta.com}, deber\'{\i}a crearse una cuenta \user{dent}
a\~nadiendo la siguiente l\'{\i}nea al fichero \file{/etc/passwd}:


\begin{tscreen}
\begin{verbatim}
dent:*:501:60:Cuenta SLIP de Arthur Dent:/tmp:/usr/sbin/diplogin
\end{verbatim}
\end{tscreen}


\noindent
Luego, se pondr\'{\i}a la clave usando el programa \prog{passwd}.


\index{diphosts@\file{diphosts}}
Ahora, cuando \user{dent} entre, \prog{dip} entrar\'a en modo
servidor. Para comprobar si est\'a autorizado para usar SLIP, buscar\'a su
nombre de usuario en \file{/etc/diphosts}. Este fichero detalla
derechos de acceso y par\'ametros de conexi\'on para cada usuario. Una
entrada de este fichero ser\'a tal como:


\begin{tscreen}
 dent::dent.beta.com:Arthur Dent:SLIP,296
\end{tscreen}

\index{CSLIP}
El primer campo de los separados por dos puntos, es el nombre de la
cuenta. El segundo campo puede contener una clave adicional (vea m\'as
adelante). El tercero es el nombre o direcci\'on~IP de la m\'aquina
llamante. El siguiente es un campo informativo acerca del usuario, por
el momento
sin utilidad. Por \'ultimo, se describen separados por comas los
par\'ametros de la conexi\'on: el protocolo (\keyword{SLIP} o
\keyword{CSLIP}) seguido del valor de MTU.


Cuando \user{dent} entra en su cuenta, \prog{diplogin} extrae la
informaci\'on acerca de \'el y si hay clave de acceso en la l\'{\i}nea
correspondiente de \file{/etc/diphosts}, la pedir\'a como ``clave
externa de seguridad'', que se compara con la existente en el fichero
(que no va encriptada). Si no coinciden, el intento de entrada ser\'a rechazado.


En otro caso, \prog{diplogin} proceder\'a a cambiar el modo a SLIP o
CSLIP, y preparar\'a la interfaz y el encaminamiento. Esta conexi\'on
permanecer\'a hasta que el m\'odem opuesto cuelgue, momento en que
\prog{diplogin} dejar\'a la l\'{\i}nea en modo normal y terminar\'a.


\index{acceso!concesi\'on}
\index{seguridad}
\prog{diplogin} necesita privilegios de superusuario. Si no tiene
puesto el bit setuid, deber\'a copiar el programa con el nombre
\prog{diplogin} y ponerle a \'este los privilegios. A \prog{diplogin} se
le pueden dar sin miedo, sin afectar al estado de \prog{dip} en s\'{\i} mismo.

\index{dip@\prog{dip}|)}
\index{configuraci\'on!SLIP|)}
\index{SLIP|)}









