Depto. Automática y computación
Universidad Pública de Navarra
Daniel Morató
daniel.morato@unavarra.es

Laboratorio de Programación de Redes

Práctica 1 - Interconexión por puerto serie

    1. Objetivos

    En las prácticas de esta asignatura vamos a trabajar con routers CISCO y PCs con sistema operativo Linux. Una de las formas de configurar un router CISCO es a través de una conexión desde el puerto serie de un ordenador al puerto de consola del router. Por ello, lo primero que haremos es aprender a utilizar el puerto serie del PC. Conectaremos dos PCs directamente a través de sus puertos serie o empleando modems y una llamada telefónica (configuración típica para cuando el router está en un lugar alejado).

    2. Material

    3. Avisos generales

    En los ordenadores dispuestos para la realización de estas prácticas se han creado dos usuarios para el empleo por los grupos de prácticas: el usuario guest (password invitado) y el usuario root (password telemat). El primero de ellos es un usuario normal que se deberá emplear en todas aquellas tareas que no requieran privilegios de superusuario. El segundo (root) es el superusuario de la máquina, cuando se esté trabajando como superusuario se debe tener mucho cuidado para no borrar o estropear ficheros accidentalmente. Si va a editar un fichero del sistema haga antes una copia de seguridad (por ejemplo con el mismo nombre añadiendo .bak).

    En las máquinas está instalado un servidor de X y un administrador de ventanas sencillo. Puede arrancarlos con startx y dispone de editores de texto como nedit y el navegador web gráfico mozilla. Para la mayor parte de las prácticas no necesitará las X, puede emplear editores de texto no gráficos. Le recomandamos vi, principalmente porque es uno de esos programas que sabe podrá encontrar en casi cualquier sistema UNIX así que es útil aprender a utilizarlo. Pero puede utilizar cualquier otro que esté instalado (como por ejemplo dav). Las máquinas disponen de 32MB de RAM así que es probable que tenga que padecer cierta lentitud si intenta trabajar con el entorno gráfico durante todas las prácticas.

    Cree un directorio dentro del HOME del usuario guest (/home/guest) y otro dentro del HOME del usaurio root con nombre grupoXY donde XY es su número de grupo de prácticas. No cree o edite ningún fichero fuera de esos directorios salvo que sea necesario. Al finalizar la sesión de prácticas borre todos los ficheros nuevos que haya creado. Tenga en cuenta que los discos duros de los ordenadores están casi llenos.

    Cree un fichero de texto en el directorio /home/guest con nombre dia-mes-grupoXY y dentro del fichero los nombres de las personas que han estado trabajando en ese PC ese día.

    Si quiere conservar cualquier fichero entre sesiones guárdelo en un disquete.

    4. Devices (dispositivos)

    El acceso a los perifericos en Linux se realiza a traves de los devices. Los devices están en el sistema de ficheros de Linux por lo que parecen ficheros pero al abrirlos y leer y escribir sobre ellos en realidad estamos pidiento al kernel de Linux que envíe o reciba información a un dispositivo determinado. El device que hace referencia al primer puerto serie (y el único en el PC de que dispone) suele tener de nombre /dev/ttyS0. Compruebe su existencia en su ordenador con ls -l. Podrá ver que hay varias diferencias con la salida para un fichero normal, por ejemplo:

    $ ls -l /dev/ttyS0
    crw-------   1 root     tty        4,  64 May  5  1998 /dev/ttyS0
    

    Por un lado vemos que en la sección de permisos, la primera letra, que no es un permiso sino un indicador del tipo de fichero, vale c. Esto es lo que indica que éste no es un fichero ordinario, si fuera un fichero ordinario aparecería -, si fuera un directorio aparecería d. La c indica que el fichero es un device para un dispositivo a caracteres. Eso quiere decir que hace referencia a un dispositivo al cual se escribe byte a byte sin emplear un buffer.

    También aparecen dos números que son toda la información que contiene este fichero. No es que haya un contenido del fichero, en realidad, el fichero solo sirve para indicar esos dos números. El primero es lo que se llama el major number y hace referencia al driver dentro del kernel que debe emplear el sistema cuando abramos este fichero, leamos o escribamos en él. El segundo número es lo que se llama el minor number y se le pasará al driver como argumento (qué haga con él depende del driver en concreto, en uno de disco por ejemplo sirve para indicar la partición sobre la que trabajar). Podemos saber qué driver es el que se emplea con el major number indicado mirando el contenido del fichero /proc/devices. Para saber más sobre cómo crear devices consulte el manual de mknod.

    El device ttyS0 se utiliza normalmente para comunicarse con dispositivos conectados al puerto serie. Algunos programas que trabajan con módems conectados al puerto serie suelen buscar un device llamado /dev/modem por lo que normalmente suele haber un link suave a /dev/ttyS0 con ese nombre. Compruebe si este link existe en su ordenador y si no existe constrúyalo con el comando ln. (Consulte el manual de ln para mas información sobre los links).

    5. minicom

    El programa minicom nos permite enviar información al puerto serie y dar ordenes al posible módem conectado a él, así como configurar la velocidad a la que funcionará el puerto serie. Lance el programa minicom como root. Lo que escriba se envía por el puerto serie a la velocidad configurada en ese momento. Pulsando Control-A seguido de Z aparece el menú de configuración de minicom. Aprenda a cambiar la velocidad del puerto serie.

    Con ayuda de sus compañeros de mesa pruebe a conectar dos PCs mediante un cable serie cruzado. Configure los puertos serie de los dos con minicom a la misma velocidad y escriba texto que debería enviarse de un PC a otro. Observe qué sucede si configura distintas velocidades y después intenta enviar información. Pruebe las opciones ECHO y LINEFEED del minicom y configúrelo para realizar un chat entre los dos PCs.

    Observe que la configuración del puerto serie no es algo interno a minicom sino que se queda configurada en el dispositivo. Para probarlo configure una velocidad en minicom y cierre el programa sin resetear el dispositivo (Quit with no reset en el menu). Ahora puede probar que /dev/ttyS0 se comporta como un fichero UNIX solo que en lugar de escribir a fichero se envía por el puerto serie y en lugar de leer de fichero se recibe por el puerto. Con el comando cat copie un fichero a /dev/ttyS0 (cat fichero > /dev/ttyS0) y en el ordenador conectado con cable serie cruzado copie /dev/ttyS0 a otro fichero (cat < /dev/ttyS0 > fichero).

    Dos PCs con enlace punto-a-punto

    Una última nota sobre el /dev/modem, /dev/ttyS0 . Al comportarse como un fichero UNIX varios programas podrían tenerlo abierto al mismo tiempo pero al llegar datos por el puerto serie el sistema se lo entregará al primero en reaccionar de los programas que estén esperando. Para arbitrar esto se utiliza un fichero de lock (/var/lock/LCK..modem). Un programa, antes de abrir /dev/modem, mira si ya existe el fichero lock y si no existe lo crea, con lo que se considera el dueño del dispositivo. Al finalizar el uso del device borra el fichero. minicom es uno de los programas que usa esto por lo que si se cierra de forma incorrecta y no borra el fichero se negará a volverse a abrir hasta que desaparezca el lock. Para arreglarlo solo tiene que borrar el fichero LCK..modem

    6. Configuración de IP empleando PPP sobre una línea serie

    Hemos visto que podemos comunicar dos ordenadores empleando el puerto serie pero la comunicación ha sido muy rudimentaria dado que leíamos y escribíamos directamente del dispositivo serie. Esto será todo lo que necesitemos para comunicarnos con un router CISCO por su puerto de consola, sin embargo, para comunicación entre PCs lo que nos gustaría es que ese puerto serie se comportara como un interfaz de red por el que podamos mandar paquetes IP. En ese caso nos encontraríamos ante un enlace punto-a-punto dado que no puede haber más máquinas en esa red.

    PPP son las siglas de Point-to-Point Protocol. PPP es un protocolo para encapsular paquetes para enviarlos por líneas serie. Además incluye otros protocolos para configurar el enlace serie y comprobar su correcto funcionamiento. PPP nos permite encapsular múltiples protocolos, no solo IP y para algunos protocolos (como IP) ofrece ademas funciones para negociar direcciones (en el caso de IP para negociar entre los dos extremos la dirección IP que debe emplear cada uno).

    Dos PCs con enlace punto-a-punto con IP sobre PPP

    Conecte el puerto serie de su ordenador con el de sus compañeros de mesa mediante un cable cruzado. A continuación lanzaremos el demonio pppd en cada PC. Este demonio se encarga de realizar todas las tareas del protocolo PPP (ayudado por un módulo en el kernel). Láncenlo con las siguientes opciones:

    [1]% pppd ttyS0 noauth nodetach debug IPLOCAL:IPREMOTA
    

    Donde hemos especificado el puerto serie ttyS0. La opción noauth indica que no se debe usar autentificación para establecer la conexión (más adelante veremos cómo se usa la funcionalidad de autentificación que ofrece PPP). Con nodetach hacemos que pppd siga usando el terminal y no se quede corriendo como demonio (así podremos matarlo con Ctrl+C). La opción debug hará que nos muestre información sobre los pasos de establecimiento del enlace con el otro extremo y finalmente hemos indicado las direcciones IP que deseamos que empleen ambos extremos. Use por ejemplo 10.0.0.grupo donde grupo es el número de su grupo de prácticas. IPLOCAL es la IP que queremos que tenga el interfaz serie del PC donde estamos lanzando pppd e IPREMOTA la del otro extremo. Evidentemente habría que cambiar el orden de las direcciones al ejecutar el comando en la otra máquina. En realidad basta con que uno de los extremos PPP especifique las direcciones IP, durante el proceso de configuración inicial de PPP se las comunicará al otro extremo.

    Con esto podrá observar los paquetes que envía PPP para establecer el enlace y elegir dirección IP para cada extremo del mismo. Desde un terminal puede ver el enlace funcionando como un interfaz empleando el comando ifconfig. También puede comprobar con el comando ping que puede llegar hasta el otro extremo del enlace.

    Checkpoint
    Muestre al responsable de prácticas que el enlace les funciona correctamente

    Para finalizar el enlace PPP es suficiente con cerrar uno de los dos pppd implicados (Con Ctrl-C en el terminal). Otra opción es usar kill para matar el proceso. Normalmente deberá usar kill si no usa la opción nodetach ya que en ese caso el proceso pppd no está asociado al terminal sino que se queda como proceso de fondo por lo que no puede hacer un Ctrl-C. Pruebe a no utlilizar la opción nodetach. Cuando pppd no está asociado al terminal sus mensajes van al fichero /var/log/messages. Puede usar tail -f /var/log/messages para ver los mensajes conforme aparecen.

    Finalmente pruebe a establecer el enlace PPP empleando diferentes velocidades (opción del comando pppd). Tenga en cuenta que ambos extremos deben especificar la misma velocidad. Compruebe los cambios de velocidad con el retardo que nos indica el ping.

    7. Módems y comandos Hayes

    A continuación vamos a establecer un enlace PPP con IP entre los dos PCs pero esta vez los PCs representan máquinas en ubicaciones alejadas, por lo tanto no podemos conectarlas mediante un simple cable serie. Lo que vamos a hacer es colocar unos modems que conviertan las señales de nuestros puertos serie en señales que se puedan transmitir por una línea telefónica tradicional. En nuestro caso realizaremos la llamada a través de una de las centralitas telefónicas disponibles.

    Conecte el módem a su puerto serie y utilize minicom para configurarlo. Observe que minicom envía una cadena de caracteres para configurar el módem (AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0) y que el módem responde OK. Pruebe a escribir AT y pulsar ENTER. Este tipo de comandos que permiten dar ordenes al módem son un conjunto de comandos estándar que soportan la gran mayoría de modems y que se denominan comandos HAYES. Puede conseguirlos fácilmente en Internet o en el manual de la mayoría de los modems (si no los encuentra, aquí http://docs.kde.org/en/3.1/kdenetwork/kppp/appendix-hayes-commands.html tiene una lista).

    Familiarícese con los comandos HAYES. Averigue qué hace la cadena de inicialización que emplea minicom.

    Conecte su módem a la centralita telefónica (que hará las veces de red telefónica básica con una población de 8 usuarios de números de teléfono 11, 12, ... 18). Averigüe su número de teléfono y compruébelo llamando desde un terminal telefónico a su número. Observe qué recibe minicom desde el device al producirse la llamada.

    Busque los comandos HAYES necesarios para ordenar al módem realizar una llamada a un número de teléfono. Con la colaboración de su vecino de mesa pruebe a ordenar al módem que llame al módem del vecino y observe el resultado (o pruebe a llamar a un teléfono y escuchar el intento de conexión).

    Busque el comando HAYES para contestar una llamada. Pruebe a contestar una llamada y observe que la conexión tarda en establecerse. El comando hace que el módem descuelgue y acepte la llamada pero durante un tiempo los modems se ponen de acuerdo en la máxima velocidad a la que pueden comunicarse según el tipo de cada módem y la calidad de la línea telefónica. Esto es lo que se conoce como handshaking. A partir de este momento el módem informa al usuario (minicom en este caso) de que ha establecido la conexión. A partir de aquí los datos que enviamos al dispositivo se envían al otro extremo por el módem.

    Compruebe la utilización del comando +++ que si estamos en el modo de transmisión al otro extremo nos permite volver a dar comandos al módem. Averigüe cómo podemos volver al modo de transmisión y cómo se puede finalizar la conexión.

    Utilice lo aprendido hasta ahora para establecer un chat entre los dos PCs a través de una conexión telefónica.

    Al igual que en el caso de la conexión directa por el puerto serie puede salir del minicom sin resetear el módem, dejando la conexión establecida. Compruebe que puede utilizar el comando cat para copiar ficheros.

    8. Configuración de IP empleando PPP sobre una línea serie con módem

    A continuación vamos a configurar un interfaz con IP sobre una línea serie que emplea un módem.

    Establezca una llamada telefónica con su vecino de mesa de igual forma que hizo con anterioridad. A continuación cierre el programa minicom sin resetear el módem.

    Lance el demonio pppd en ambos extremos igual que antes y compruebe que tiene conectividad IP con la otra máquina.

    Dos PCs con enlace punto-a-punto por módem

    Checkpoint
    Muestre al responsable de prácticas que el enlace les funciona correctamente

    9. Automatización de la conexión por módem

    Hasta ahora, cuando hemos empleado un módem hemos tenido que realizar la llamada manualmente. En este apartado vamos a realizar el mismo tipo de conexionamiento entre las máquinas que con anterioridad pero de forma automática.

    Consulte el manual del comando chat. Utilice el comando chat para inicializar el módem y hacer una llamada sin usar minicom. Utilice en el otro extremo el comando chat para inicializar el módem y aceptar la llamada. Tenga en cuenta que el comando chat lee de la entrada estándar y escribe por la salida estándar así que deberá indicarle el dispositivo a utilizar redirigiéndole ambas hacia él.

    Escriba un script de nombre llama que al ejecutarse llame al número que se le pase por la línea de comandos (por ejemplo llama 17) y otro script llamado contesta que conteste a una llamada. Finalmente escriba un script de nombre cuelga que cuelgue la llamada en curso.

    Checkpoint
    Muestre al responsable de prácticas que los scripts le funcionan correctamente

    10. Automatización de la conexión por módem empleando IP sobre PPP

    El programa pppd incorpora opciones para controlar el módem. Vea en la página del manual de pppd las opciones connect e init. Utilice scripts similares a los que ha creado con anterioridad para hacer la llamada y contestar. Un script lanzado desde pppd ya tendrá redirigida la entrada y la salida hacia el dispositivo del módem.

    También se pueden poner las opciones de pppd en un fichero de nombre options en el directorio /etc/ppp. De esta forma se puede establecer la conexión con sólo escribir pppd. Se pueden poner también opciones diferentes según el puerto serie a usar, empleando los ficheros options.nombredevice (en nuestro caso sólo options.ttyS0). Configure un PC para que al hacer pppd espere una llamada y otro que al hacer pppd llame y establezca un enlace PPP por módem.

    Checkpoint
    Muestre al responsable de prácticas que esto funciona correctamente

    11. Autentificación en PPP

    Hasta ahora hemos aprendido cómo establecer una llamada telefónica y emplear PPP sobre ella, obteniendo un interfaz de red con IP. Esto es básicamente lo que hacen un proveedor de Internet (ISP) y un usuario. El ISP es el que acepta la llamada y el usuario el que llama. Sin embargo, lo normal es que el ISP no quiera aceptar llamadas de cualquier usuario, por lo tanto debe asegurarse de que el que intenta conectarse es uno de sus clientes. pppd permite a cada lado de la conexión requerir que el otro extremo pruebe su identidad (PPP a muchos efectos es simétrico, aunque uno de los extremos haya realizado la llamada esto no es relevante para PPP).

    Para que pppd requiera al otro extremo que se autentifique hemos de retirar la opción noauth que veníamos usando hasta ahora. Hay que retirarla en el extremo que va a exigir al otro que se identifique. La autentificación se realiza mediante un esquema de usuario/contraseña y hay dos protocolos para llevar a cabo esta autentificación:

    La información de usuario y contraseña para autentificarse en un servidor o para comprobar que el otro extremo es quien dice ser se guarda en el fichero /etc/ppp/pap-secrets (o chap-secrets si usamos CHAP), que contendrá algo parecido a esto:

    # Secrets for authentication using PAP
    # client        server       secret            IP addresses
    jose            isp1         passenisp1        *
    jose            isp2         passenisp2        *
    cli1            *            laquesea          *
    

    Los campos * quieren decir que aceptaremos cualquier valor. El campo client se refiere al extremo que debe probar su identidad y el campo server al que va a comprobarla. secret es la contraseña y IP address las IPs permitidas para alguien que se identifique con esa línea.

    Al lanzar un pppd hay varias opciones (y combinaciones de ellas) para indicar cuál o cuáles de las líneas del fichero de secrets utilizar:

    Estas opciones típicamente se colocan en un fichero dentro del directorio /etc/ppp/peers e indicamos qué fichero con la opción call.

    Pruebe la autentificación sobre un enlace serie con cable cruzado. Establezca un enlace serie en el que uno de los dos extremos desconfía del otro y exige que se autentifique indicando el nombre de usuario serialuser y la contraseña Se-rie.

    Compruebe que se está produciendo la autentificacion tal y como se pide.

    A continuación establezca una conexión en la que cada extremo exige al otro que se identifique con un usuario de la máquina. Podrá emplear como usuario a guest. Encontrará cómo hacerlo en la página del manual de pppd.

    Checkpoint
    Muestre al responsable de prácticas que puede conectarse empleando un usuario UNIX

    Cuestiones:
    Qué diferencias habría si quisiéramos autentificar teniendo un enlace por módem?

    12. Conclusiones

    En esta práctica hemos aprendido a emplear el puerto serie de un PC con Linux. Lo hemos usado para realizar una conexión directa entre dos PCs empleando IP sobre el enlace. Hemos visto también que podemos colocar un par de modems en la línea entre los dos PCs y emplear con ello la red telefónica para comunicarlos. Finalmente hemos añadido un poco de seguridad (autentificación) a estos esquemas.


    Depto. Automática y computación
    Universidad Pública de Navarra
    Daniel Morató
    daniel.morato@unavarra.es