Capítulo 7
Red TCP/IP

El Internet hoy en día es una palabra que designa una red que físicamente abarca todo el planeta tierra, mas común aún se utiliza para describir una aplicación específica: www, o http. Pero en su percepción original es una colección de servicios y protocolos de red. TCP significa Transfer-Control-Protocol, e IP significa Internet Protocol. Si hablamos de redes Internet puede ser entonces la implementación mundial específica, pero también si en una oficina se conectan dos computadoras Linux via una red se trata de una red Internet. Para distinguir esta red pequeña de la red Internet mundial se le suele llamar Intranet a estas configuraciones, aunque el funcionamiento es idéntico.

La conexión de dos o mas computadoras siempre sigue los mismos mecanismos, los que se han identificados y normados por ejemplo en el modelo ISO-OSI de siete capas. Sin entrar en el detalle de este modelo nos adherimos al modelo de capas. Solamente contemplamos las capas de interés para la configuración del nucleo Linux. Desde “abajo” hacia “arriba” diferenciamos entre:


PICEjemplo de una conexión en red


El enrutamiento en realidad es parte de las capas inferiores. En la figura 7 se ilustra con la línea rayada la comunicación entre una computadora (izquierda) que utiliza el protocolo http para solicitar información de otra (derecha). Seguimos ahora el flujo de comunicación “real” desde la computadora izquierda a la computradora derecha. Se requiere de la seleción del destino (Dirección/puerto - información para el enrutamiento), los datos son empacados en un protocolo (ppp a la izquierda). Los driver del hardware, presuntamente en este caso para manejar un modem convierte los datos en señales analógicos que se transmiten a través de la línea telefónica. La “red” dibujado abajo puede contener multiples caminos para los datos, pero el enrutamiento asegura, que los datos llegan a la computadora específica indicada en la derecha, en nuestro caso presuntamente ya convertido en señales de una red local Ethernet. La tarjeta ethernet convierte estos en paquetes de datos, el driver “eth” extrae de estos la información TCP/IP y la remite en “texto claro” a la aplicación destino.

Se puede apreciar, que todos los componentes/todas las capas tienen que concordar en su configuración para que pueda establecerse una comunicación. A continuación en este capítulo se discuta la configuración de cada “capa” y los posibles problemas emergentes.

7.1 Drivers

Los driver de hardware es la parte del sistema operativo que comunica el mundo exterior a través de dispositivos de entrada/salida con los programas. Cada tipo de dispositivos requiere un driver específico. Por suerte hay ciertas normas, que permiten ordenar los dispositivos en grupos y escribir driver’s genéricos para un amplio rango de dispositivos reales.

Los dispositivos más comúnes para la conexión en red son:

modem
establece conexión a través de una línea telefónica mediante modulación/demodulación de datos en señales de diferentes frecuencias. Normalmente un modem es conectado en un puerto en serie (/dev/ttyS*), o lo simula. WinModems (HSP) no pueden ser usados en Linux, por un lado por falta de información técnica, ya que es propietaria, por otro lado porque funcionan un concepto técnico que requiere limitar la funcionalidad de la CPU de la computadora, lo que no se considera conveniente en Linux. Los protocolos usados para la transmisión de datos son PPP (Point-to-Point-Protocol), y SLIP (Serial-Line-Internet-Protocoll) que es obsoleto.
tarjeta“estrella”
con un cable individual por cada computadora, utilzando un concentrador (hup) para la interconexión. Hay diferentes velocidades de transmisión, siendo el cable coaxial mas lento, seguido por UTP/10MHz y recientemente UTP/100MHz.

Las tarjetas ethernet (NIC - Network Interface Card) existen para diferentes buses internos: ISA, PCI y otros. Según el circuito integrado que realiza la función de la codificación/decodificación hay diferentes “driver”, los más conocidos son NE2000, DEC/Tulip, 3COM. El dispositivo es accesible en linux como /dev/eth*.

puerto paralelo
Como una solución barata para conectar dos computadoras (point to point) se utiliza un cable especial que conecta en vez de una impresora otra computadora con el puerto paralelo. El interfaz es físicamente el del puerto paralelo, aunque hay variedades, el dispositivo es llamado /dev/plip*, ya que el puerto utiliza otra forma de control a que cuando se conecta una impresora.

El protocolo usado se llama PLIP (Parallel-Line-Internet-Protocoll). Existe el modo 0 y el modo 1 de transmisión. El modo 1 es más moderno y rápido y necesito otro tipo de cable y un puerto paralelo avanzado, mientras el modo 0 trabaja con cables “parallel Nullmodem” estándard y con cualquier tipo de computadora.

La configuración de estos dispositivos y redes se discutirá a través de ejemplos de aplicación concreta en otros capítulos.

7.2 Protocolos

La transferencia de información en TCP/IP se realiza a través de paquetes IP, que pueden ser de clase TCP o UDP.

Ambos disponen de un encabezado (sobre) en el cual el destino y el remitente son indicados en forma de números IP, que son representados como cuatro números decimales con un rango de 0 a 255 separados por un punto. Ej: 192.168.3.45

Para usos especiales se realizaron modificaciones del estándard original, ejemplos son:

ppp
Point to Point protocol. Un protocolo que se especializa en la transmisión de paquetes TCP/IP a través de canales intermitentes de un solo transmisor a otro, como pasa con líneas telefónicas. En este caso no hay requerimiento de enrutamiento (solo hay una posible ruta) por lo que se aplica compresión del volumen transmitido aprovechando la redundancia de los encabezados IP. ppp prove autentificación y negociación de múltiples parámetros de la transmisión, es un protocolo simétrico peer to peer, o sea, cada estación es independiente y autónoma y en ambos direcciones puede iniciarse el enlace.

ppp puede usarse favorablemente también para conexiones experimentales entre dos computadoras, p.ej líneas de transmisión “caseras”, equipos de infrarojo, ultrasonido, radio, etc.

slip
Serial Line Internet Protocol. Es el predecesor de ppp e inferior en calidad. Sin embargo se utiliza a veces para conexiones virtuales, p.ej. existe un programa en Linux que marca una línea telefónica por demanda - diald, que utiliza slip como enlace de control.
plip
es otro protocolo de punto a punto, que utiliza el puerto paralelo de una computadora para enviar y recibir datos. En este caso los paquetes no se transmiten en forma serial sino de cuatro en cuatro bits (nibbles) o en de ocho en ocho (bytes) según la capacidad del hardware. plip es la norma de desensamble/ensamble de los paquetes y las reglas de sincrónización - handshake entre las dos computadoras involucradas.

Los números IP en Internet son asignados por instituciones coordinadas (p.ej. www.nic.ni), para que ningunas dos computadoras tengan configurados el mismo número. Si configuramos un Intranet nosotros tenemos que cumplir esta tarea. Existen playas de números “privadas” que son reservados en Internet para la configuración de Intranets. Un rango que usamos en este libro para ilustrar nuestros ejemplos es: 192.168.0.0 - 192.168.255.255

Por ende vale mencionar, que los números IP no designan computadoras, sino dispositivos de red. Comunmente una computadora, especialmente si es de mesa, solo dispone de una conexión a la red, y por lo tanto es accesible solamente con un número IP. En este caso solemos identificar la computadora con su número IP.

Sin embargo imaginémonos la situación de una computadora de mesa con un modem conectado al Internet, a la cual conectamos una portatil via el puerto paralelo. En este caso la computadora de mesa dispone de dos números IP, una hacia el Internet que es asignada en el momento de conectarse via ppp y otra, que nosotros configuramos a la hora de instalar el interfaz plip hacia la computadora portatil.

7.3 Tabla de enrutamiento

En computadoras de mesa y muchas veces en servidores sencillos es suficiente despachar los paquetes de información de una manera fija - estática. Para esto, el núcleo de Linux dispone de una tabla de enrutamiento - routing table. La tabla de enrutamiento es una lista de especificaciones de rangos (playas) de direcciones IP, asociados con el dispositivo de red que se utilizará para despachar paquetes con destino en este rango. Eventualmente se puede configurar un “gateway” que es un número IP que designa una computadora capáz de remitir un paquete hacia otros segmentos de la red.

rango-ip -->  dispositivo

rango-ip -->  gateway -->  dispositivo

El comando “route” es utilizado para modificar y analizar la tabla de enrutamiento. Evocando este comando sin parámetro arroja la lista de rutas (routes) en la pantalla. “route add . . . ” agrega rutas y “route del . . . ” borra rutas de la tabla. La palabra “default” es una abreviación para una ruta por defecto que entra en función cuando no hay ninguna ruta establecida para una dirección IP específica.

En este momento vale mencionar, que el enrutamiento por número IP es un “enrutamiento externo”, que permite establecer comunicación entre dos computadoras en una red ámplia. Hay también un “enrutamiento interno”, que permite realizar una variedad de conexiónes lógicas entre estas dos computadoras. Esto se realiza a través de los “puertos” TCP. Prácticamente cada servicio Internet tiene asignado oficialmente un puerto, que no es nada más que un número de 16 Bit, que identifica un canal de comunicación, dentro de un conexión física establecida entre dos computadoras. Entre todos los paquetes intercambiados se filtran para cada aplicación los paquetes correspondientes a su canal a través del número del puerto. Para poder utilizar el mismo servicio más que una vez, al comienzo de una conexión entre las dos computadoras se negocia en el puerto estándar un canal (puerto) libre, el cual se utiliza a continuación.

7.4 Servicios Internet

En el archivo /etc/services se relacionan nombre de servicios con su respectivo número de puerto. Este archivo es coordinado por el comité regulador de Internet y viene con asignaciones estándardizados, sin embargo puede ser ampliado o modificado al gusto del administrador del sistema. Casi todos los programas clientes y servidores tienen la opción de especificar puertos alternativos a los indicados en /etc/services, sin embargo esta opción se usará solamente en casos especiales.

Todos los servicios implementan una relación cliente servidor, es decir, al conectarse a una computadora (remota) mediante un programa ’cliente’ se establece una comunicación con un programa ’servidor’. Al establecer una conexión el servidor en muchos casos le exige autentificación al cliente y le puede denegar el servicio según el resultado.El servidor en muchos casos implementa un “lenguaje” de comandos en texto claro (ASCII). Estos lenguajes son definidos en los documentos RFC – Request-For-Comment lo que en realidad significa propuesta para comentarios, sin embargo suelen a llegar a ser “normas”.

He aquí algunos (pocos) de los servicios de red que se usan más frecuentemente.

telnet 
’sniffer’ en texto claro. Inclusive la clave del login se transmite sin encripción.

Telnet se puede utilizar para comprobar la disponibilidad de un servicio IP en un host mediante la especificación del puerto correspondiente.

ftp
es un protocolo para la transferencia de archivos. Como tál permite el acceso al directorio home del usuario autentificado y puede transmitir archivos del y hacia la computadora remota (get archivo, put archivo). con mget y mput se pueden seleccionar archivos múltiples, con dir o ls se puede leer el contenido de un directorio. Ftp transmite en modo binario (image) o en modo ascii, hay que cerciorse siempre que se utiliza el modo binario, especialmente el cliente MS no lo tiene configurado por omisión.

Eventualmente (y en Internet muy común) se permite acceso a un usuario ’anonymous’ al cual se le pide como clave su dirección de correo electrónico. A este usuario se le brinde acceso ’world’ a un directorio especifico, donde se depositan archivos disponibles para la publicidad. ftp-anonymous crea una debilidad de seguridad en un servidor.

http
es un protocolo para la transferencia asimétrica de archivos. La transferencia es solamente desde el servidor hacia el cliente. Este servicio se utiliza para la carga de páginas Web. Las solicitudes de los archivos se efectuan a través del envió de un ’URL’-unified resource locator. Los archivos se llaman recursos, ya que pueden llevar información de cualquier tipo. El protocolo es mejor optimizado que ftp y no necesariamente se interrumpe la comunicación al ocurrir un error de transmisión.
smtp
es el protocolo para el envío de correo electrónico. Smtp es un protocolo en texto claro y dado su carácter de transmisión de información confidencial el protocolo más problemático en cuanto a la privacidad. Esta situación ha llevado al desarrollo de técnicas muy maduras de encripción PGP y sus succesores GPG y otros. Smtp no solamente se utiliza para intercambio de mensajes entre humanos sino también para el acoplamiento de procesos técnicos y control de flujo. Smtp no provee un mecanismo de autentificación, ya que el enrutamiento del mensaje no se efectúa directamente sino a través de una meta-red de Servidores MX (Mailexchange). Un mensaje es injectado a la red en un servidor normalmente mediante un programa MUA (Mail-User-Agent) hacia un programa MTA (Mail Transfer Agent), el cual se preocupa por enrutarlo hacia su destino. En algún momento el mensaje llega a un servidor (MTA) que lo reconoce como mensaje local y lo deposita en su correspondiente apartado. Desde allí puede retirarse, otra vez con un MUA, o eventualmente con el protocolo pop (post office protocol) o imap. Entonces se reconocen tres fases de transferencia: MUA->MTA, MTA->MTA, MTA->Depósito (delivery).
pop3
el Post-Office-Protocol versión 3, se utiliza para recoger remotamente, de un casillero electrónico los mensajes. La mayoría de los programas lectores de correo (MUA) utilizan este protocolo para retirar correo del servidor. También es un protocolo que prove poca proteción de privacidad de los mensajes.
rpc
Remote-Process-control es un servicio para ejecución remota de procesos. Fue diseñado junto con una variedad de otros protocolos por Sun Microsystems, como el nfs e yp. Estos protocolos utilizan un sistema de redirección de puertos, lo que implica un tratamiento diferente a los otros protocolos mencionados. La seguridad e integridad de estos protocolos ya no concuerda con los estándardes de la investigación actual y se han diseñado varias alternativas, sin embargo son tán populares – ya que proveen servicios que son altamente solicitado en trabajo en grupo y computación distribuida – que hasta hoy no han sido reemplazados.
nfs
Network-File-System es el protocolo que permite compartir directorios de una computadora con otra a través de una conexión TCP/IP. Ambas computadoras tienen acceso a los archivos compartidos y para ambos se presentan como archivos común y corrientes de Unix.
otros
tftp, dhcp, bootp, ssh, xdmcp, rsync, cvs, dns, imap, nfs, yp, etc.

7.5 Configuraciónes ejemplares

7.5.1 Conexión telefónica a redes

Este tipo de conexión es altamente vulnerable, ya que se basa en una técnica de transmisión y conexión de baja calidad y robustéz en comparación con otras tecnologías. Además hay varios niveles en los cuales pueden ocurrir problemas. Por eso vamos a analizar este ejemplo muy a detalle, aunque en la actualidad existen herramientas de configuración muy versátiles que simplifican sustancialmente la tarea de configuración y conexión.

A nivel de dispositivo podemos contar con un modem externo o interno.

Modem externo

Este se conecta a través de un puerto en serie, o COM-Port. Hay que configurar la velocidad de conexión entre modem y computadora, así como los demás parámetros, mediante el comando setserial. Mientras en viejas distribuciones se utilizaron puertos /dev/cua* actualmente se considera el uso de /dev/ttyS* donde ttyS0 = COM1, ttyS1=COM2, etc.

Modem modernos pueden utilizar hasta la velocidad máxima (IBM-Compatibles 115200 Bd), pero hay modem que requieren una velocidad específica máxima, un valor seguro puede ser 9600 Bd, muy seguro: 2400 Bd. Esta velocidad solo tiene que ver con la velocidad de conexión telefónica en el sentido, que no se puede transmitir más rápido en la línea telefónica que en la conexión entre computadora y modem. Sin embargo puede haber una conexión mas lenta en el teléfono que en el cable serial, así que es recomendable usar velocidades reducidas solamente para pruebas.

Hay que asegurarse, que se utiliza un cable correcto. Las computadoras PC utilizan tradicionalmente un conector DB25 para el puerto paralelo y para el puerto serial. Estos se distinguen, en que el puerto serial usa pines (macho). Con el modelo PS2 se introdujo el uso de conectores de DB9 (9 pines) para el puerto en serie, que por cierto es contra la norma RS232C, pero viene siendo práctico para reducir el tamaño de las cajas de computadoras. En todo caso el cable debe tener en un lado un conector DB25 con pines que se conecta en el modem en un conector “hembra”, y entonces queda por lo general solamente la elección entre uno o dos conectores seriales en la computadora. Eventualmente se requiere de un convertido DB9 a DB25 - este también existe en dos formas y hay que fijarse bien cual tipo es necesario. También recuerda conectar el cable al modem primero.

Hay cables “incompletos” que no tienen conectados todas las líneas. Se puede realizar una conexión serial entre dos modem (o computadoras) con tres hilos, sin embargo esto no es recomendado porque requiere un mecanismo llamado Software-Handshake (Xon-Xoff) que no es tan confiable y además reduce la velocidad de transmisión de datos. En efecto en el conector DB25 no se ocupan todos los pines, en el conector DB9 sí. El uso de Software-Handshake requiere una configuración especial y no lo contemplamos aquí. Si utilizamos un cable incompleto (o con algún hilo quebrado!) pueden haber problemas de conexión, que no son detectables instantaneamente.

En caso que no hay posibilidad de distinguir cual conector corresponde a cual puerto serial hay varios posibilidades. Lo más recomendable es abrir la caja y verificarlo físicamente. A veces en la tarjeta madre o en la tarjeta serial se puede leer el número del puerto asociado con el conector respectivo.

Un método seguro es la utilización de un probador de puertos seriales en conjunto con un software para controlar el puerto, p.ej. el emulador de terminales “minicom”, kermit, sayon, u otro.

Habiendo detectado el conector no necesariamente identifica el dispositivo ttyS* ya que este puede cambiarse eventualmente mediante jumper o en el CMOS-Setup (BIOS) de la computadora, así que posblemente hay que referirse al manual de la tarjeta y/o al CMOS-Setup de la computadora. Los valores estándard para los puertos utilizados son:





COM* ttyS* IO-Port Irq








Com1 ttyS0 0x3f8 4




Com2 ttyS1 0x2f8 3




Com3 ttyS2 0x378 ?




Com4 ttyS3 0x278 ?




En las computadoras modernas puede que el puerto USB o el puerto infrarojo utiliza un dispositivo serial (el secundario), así que en el CMOS-Setup se puede configurar a cual puerto correspondiente al dispositivo restante (el primario), y con eso determinar el ttyS* a usar para el modem.

Modem interno

En este tipo de modems se ahorran los problemas con los cables, sin embargo es requerida la configuración del puerto y de la interrupción. Esto se realiza en modems “viejos” con conector ISA o EISA mediante el sistema PnP (Plug ’n Praise). La utilidad “pnpdump” arroja en la pantalla todas las posibles configuraciones para un modem PnP, en una forma que permite de manera fácil crear un archivo de configuración (p.ej. /etc/isapnp.conf). Este debe cargarse antes de usar setserial mediante la utilidad “isapnp”, (p.ej: isapnp /etc/isapnp.conf)

A veces se requiere reinicializar la computadora para este paso, inclusive puede ser necesario apagarla. No culpen al Linux por eso, hablen con . . .

Modems internos con conector PCI también utilizan PnP pero “de lo bueno” y su configuración se puede detectar con la utilidad “lspci”, o con el comando “cat /proc/pci” (en núcleos con versiones inferiores de 2.4.0).

Generalmente se utiliza la velocidad de 115200 Bd para modems internos, ya que es un valor no relevante, pués no existe un conexión serial entre la tarjeta-modem y la computadora; sin embargo se tiene que usar un valor compatible con el driver serial.

Conectividad con el modem

Una utilidad bastante sencilla para comprobar la funcionalidad básica de un modem es el programa minicom, que permite conectarse al modem en modo “terminal”. Cada tecla que se aprieta se envia mediante el puerto serial al modem, cada caracter que el modem remite al puerto serial se visualiza como caracter en la pantalla.

Como root tiene que configurarse el puerto a usar (C-A O), es importante salir (C-A X) y volver a entrar de minicom para que los cambios tengan efecto (al menos conmigo). Al volver a entrar normalmente ya se puede apreciar un diálogo entre minicom y el modem. La mayoría de los modem utilizan comandos “Hayes” para su control. Estos inician con los caracteres “AT” (ATtention). El modem refleja cada caracter y remite una respuesta, si el comando es exitoso la respuesta es “CR-LF”, o sea, el cursor de la terminal pasa a la siguiente línea.

A continuación una lista de comandos básicos:





AT*
Parámetros
Significado
Comentarios








ATZ Reinicializar Modem




ATH 1/0 “levantar”/colgar el telefono A veces solo se puede usarATH y ATH0




ATD # telefónico Marcar un número (dial) El modem espera estableceruna conexión de datos. Estose indica con “CONNECT”.En caso que no se puede conectardespués de un tiempo se recibeun mensaje de error.




ATA Contestar (Answer) Si entra una llamada el modemenvia el texto “RING” altermnial. Si se contesta el modemespera sincronizarse con unmodem remoto y señaliza estehecho con “CONNECT”.




El modem trabaja en uno de dos modos: en modo de “comando” podemos enviar los comandos al modem, pero después de establecer una conexión el modem trabaja en modo “transparente”, donde todos los caracteres se envian al modem remoto es decir a la computadora remota respectivamente ya que el modem remoto también está en modo transparente. De este modo se puede regresar al modo comando por falla de conexión: interferenica, interrupción de la línea etc., o con una secuencia específica de caracteres.

Establecer un enlace

El primer paso para conectarse a un servidor internet es marcar el número, lo que efectuamos con el comando “ATD” seguido por el número del servidor. El modem marca primero el número y si la línea no está occupada se puede esperar que al otro lado contesta el modem del servidor. En este momento los dos modem intentan sincronizar la velocidad y el protocolo de transmisión sobre la línea telefónica, un proceso que no siempre es exitoso, especialmente con altas velocidades de transmisión y cuando la línea telefónica sufre interferencias.

Una vez que se “entienden” los modems lo notifican a la computadora; normalmente con el texto “CONNECT”, y a veces seguido por la velocidad y los parámetros de la conexión, y pasan inmediatamente al modo transparente.

Ahora le toca el turno al proveedor del servicio. En la actualidad prácticamente todos los proveedores de servicios Internet via la línea telefónica utilizan el protocolo PPP para establecer el enlace de red, y nosotros vamos a enfocar en este.

Aunque PPP incluye un método de autentificación, muchos proveedores requieren una autentificación en texto pleno, normalmente con un diálogo como lo escribimos en los capítulos iniciales (3.1). Podemos realizar la autentificación manualmente, pero también hay utilidades para automatizar este proceso, dos de ellos (los más usados) son “chat” y “runscript”. Este último es parte de minicom. Para curios@s refiero a las páginas manuales de estos programas y a las noches interminables que pueden pasar cuando empiezan a experimentar con ellos. Sin embargo hay que mencionar una cosa: La autentificación en texto pleno es un atentado contra la seguridad y es preferible cambiar de proveedor antes de acceptar esta clase de anacronismo. La utilización de scripts de conexión requiere por lo general escribir la clave de una (o varias) cuentas en un archivo texto y por lo tanto directamente legible para quien tenga acceso al archivo. Por lo tanto aumentamos también con esto la vulnerabilidad de nuestro sistema.

En algunos casos el proveedor configuró el servidor de tal manera, que después de la autentificación se lanza inmediatamente el servidor ppp, en otros casos nosotros tenemos que iniciarlo desde una línea de comando remota, por ejemplo con el comando “ppp<Enter>”. En ambos casos hay que lanzar a continuación inmediatamente el enlaze ppp localmente. Si nos estamos conectando con minicom u otro emulador de terminal tenemos que terminar este sin reinizialización del modem o corte del enlace. Terminar: porque el puerto serial va siendo bloqueando por cada aplicación que lo occupa, para que no haya conflictos en su uso; Sin reinizializar: normalmente los programas que usan un puerto serial modifican sus parametros al usarlo y tratan de reestablecer los parametros anteriores antes de ceder el dispositivo. En el caso de minicom se puede lograr estas dos condiciones con la secuencia de teclas: “C-a q”.

Dispositivo virtual de red: ppp

La conexión transparente entre las dos computadoras ahora se utiliza para realizar una conexión TCP/IP, mediante dos dispositivos de red, que se crean transitoriamente mediante el daemon pppd (en caso de una máquina Unix). Este es un programa que lee caracteres en su stdin y escribe en el stdout. Si lo lanzamos, especificando como uno de los parámetros de la línea de comandos un dispositivo de caracteres, pppd utiliza este dispositivo como stdin/stdout, en nuestro caso le especificamos entonces el puerto serial donde está conectado el modem.

pppd realiza la conexión con el pppd remoto en tres etapas:

  1. Establecimiento del enlace via LCP (Link Control Protocol) y configuración de diferentes parametros de la red como MTU, número IP de ambos participantes, servidor de nombres, modos de compresión de datos/encabezados, etc.
  2. Autentificación mutua. ppp es un protocolo simétrico y en principio ambas computadoras tienen que comprobar el derecho de conectarse a la respectiva otra parte. En el caso de un enlace hacia un proveedor de servicios internet normalmente el “cliente” no puede exigir autentificación al “servidor”, un hecho que tiene que reflejarse en la línea de comando del pppd o en los archivos de configuración.
  3. Intercambio de paquetes TCP/IP.

pppd puede ser configurado de una manera que le permite asignar al lado opuesto uno de un rango de números IP (eventualmente el rango solo consiste de un número), esto se hace cuando pppd es usado como “servidor”. En “nuestro” lado local podemos acceptar la configuración propuesta remotamente, pero también se podría insistir en un número IP fijo. Otro parámetro importánte para el daemon local es, “defaultroute” que inserta en la tabla de enrutamiento de paquetes IP una salida por defecto a través del dispositivo transitorio que ha creado el daemon (ppp0, ppp1, etc.). Al cerrar la conexión la ruta por defecto original se restablece. De nuevo: si utilizamos ppp para conexiones, por ejemplo via un enlace radio hacia un subdominio de nuestra red comercial intranet, no se establecería una ruta por defecto, sino solamente para este subdominio, por lo cual la configuración sería diferente.

Existen dos formas de autentificación: PAP y CHAP.

Password Autentication Protocol
el daemon local envia un nombre y una clave hacia el daemon remoto. Este por su parte compara los dos datos con todas las líneas del archivo /etc/ppp/pap-secrets (las claves en ppp son llamados secretos). Se se encuentra una línea correspondiente se autoriza la conexión, de otra manera el enlace se cierra.

La clave puede archivarse en /etc/ppp/pap-secrets en forma encriptada (unix-crypt) y se puede exigir que solamente secretos encriptados sean acceptados (en la configuración del daemon remoto - pruebelo con su proveedor). Crypt hoy en día no es una encripción fiable, cualquier computadora común puede descubrir un secreto encriptado con unix-crypt dentro de minutos.

Challenge Handshake Autentication Protocol
Con este método nunca se intercambia el secreto en línea. El daemon remoto inicializa la autentificación, enviando su “nombre” y un número al azar - el “reto” (challenge). El daemon local produce un código único1 desde el reto y desde la clave que encuentra en el archivo /etc/ppp/chap-secrets en la línea que contiene el nombre del daemon remoto. Este código único es remitida al daemon remoto, quien es el único que puede comprobar la validez, porque solamente él comparte el “secreto” y puede crear el mismo código único para la validación de la identidad del daemon local. CHAP usualmente repite el proceso de autenticación constantemente en ciertos intervalos. De esta manera se intenta evitar un ataque man-in-the-middle.

A continuación una línea de comando típica, que puede usarse experimentalmente para conectarse con un daemon ppp remoto:

pppd /dev/ttyS0 modem crtscts defaultroute noauth

Para averiguar problemas en una conexión se pueden utilizar las siguientes opciones:

debug
escribe información sobre todos los paquetes de control en el syslog. Esta información puede rastrearse entonces con: “tail -f /var/log/syslog” (Debian), o “tail -f /var/log/messages” (RedHat).
logfile nombre
escribe la información de purificación también al archivo “nombre”.
show-password
muestra la clave en texto pleno en el archivo log. Redunda decir, que esta opción preferiblemente no se utiliza, mucho menos de manera constante.
kdebug #
muestra en el archivo log también información de paquetes IP desde el núcleo.

Los archivos que contienen los secretos para PAP y para CHAP tienen la misma estructura:

# Comentario

# Nombre_de_cuenta Nombre_de_Computadora Secreto

l2310ka                  ikarus          el_sol_quema

lodemas                  *               3i4fe0es65

# un asterisco es válido para cualquier nombre de computadora

# en todas las conexiones menos con (ikarus) se usara el nombre lodemas

# con su secreto (encriptado)

Por fín hay que saber, que por lo general pppd es ejecutado sin opciones de la línea de comando, ya que todas las opciones se pueden grabar en los archivos de configuración, en primero lugar en /etc/ppp/options.

El mundo real es más dulce

En muchos casos desde una computadora no solo se conecta a un proveedor, sino eventualmente a varios, o se utiliza por lo menos diferentes números telefónicos para el enlace. Sea así, o haya solamente una conexión, no es factible que todo el mundo aprenda utilizar minicom, syslog y pppd desde la línea de comando para poder configurar su conexión telefónica a redes. A continuación una lista de programas que se han hecho para facilitar la configuración y la conexión, pero primero algunos aspectos desde el punto de vista de su utilización.

Se requiere de la configuración que se pueda introducir las características para una conexión. Estas se dividen en dos grupos: el dispositivo a usar: puerto serial, velocidad, modem, y los parámetros de conexión: número telefónico del servidor, nombre de la cuenta, secreto, y parámetros: autentificación previa, CHAP/PAP entre otros. Tienen que poderse manejar diferentes configuraciones, que se identifican y manejan a través del “nombre de la conexión”.

Después se necesita utilidades que facilitan el control de la conexión: establecerla, cortarla y poder saber si se está conectado o no, asi como el tiempo transcurrido, la cantidad de información enviada y recibida, y eventualmente el costo incurrido:

modemtool
configuración: de RedHat, con un interfáz gráfico/X que es muy intuitivo en el uso.
wvdial nombre
configuración: (elaborado por World Vision - wv) que detecta y configura el/los modem/s utilizado/s automáticamente y crea archivos de configuración llamado “nombre”, que puede completarse manualemente con un editor de texto para agregar los datos de autentificación.
pppconfig
configuración: la utilidad que prove Debian, cuenta con un interfáz gráfico/texto. Fácil de usar. Hay una conexón por defecto llamado “provider”
pon, poff
control: son scripts que establecen/cortan la conexión con “provider”. Se puede especificar otro nombre de conexión en la línea de comando.
masqdialer
es un daemon en forma cliente/servidor, que permite el control de un modem para la conexión telefónica desde una red local. El servidor: mserver tiene que configurarse en una computadora donde ya existen todas las conexiones con su nombre. Estas (y otros datos mas) se le comunica a mserver a través de archivos de configuración. Un “dial”-cliente manda comandos al mserver via TCP/IP, y el mserver le prove información estatística sobre la conexión (tiempo, volumen, velocidad). Hay clientes texto, gráficos/X, gráficos/gtk, etc. masqdialer permite establecer permisos de acceso por computadora y por usuario por lo que puede configurarse bien quien gasta teléfono en qué servidor y quien no.
Apletts
Hay varios utilidades para X-Windows, que consisten en esencial en un botón y una “luz”. Haciendo Click en el botón establece/corta el enlace. La luz cambia de color si se está conectado.
Desde adentro

algunos conceptos que hacen pppd interesante para redes locales.

ip-up/ip-down
Muchas veces se requiere realizar algunas tareas específicas al momento de establecer un enlace con la red: en primer lugar para establecer rutas especiales, reglas firewall para el interfáz u otras configuraciones especiales de la red, pero también por ejemplo para enviar automáticamente todo el correo en cola, y para bajar correo o noticias del internet, cuando el enlace se establece. Para esto pppd puede ejecutar un script al establecer el enlace, y otro al cerrarlo. En las instalaciones modernas este script accede a un directorio /etc/ppp/ip-up.d y /etc/ppp/ip-down.d en el cual pueden ubicarse de manera ordenada diferentes scripts, que se ejecutan en orden específico (alfabético). El mecanismo es parecido al que se utiliza con “init” del sistema V de unix. De esta manera cada paquete de software puede agregar y quitar tareas según necesidad y sin interferir con otros paquetes.
/etc/ppp/peers /etc/chatscripts
Para establecer un enlace tienen que compaginar el discado y la configuración del pppd. En el sistema Debian se encuentran los scripts chat para la primer tarea bajo el directorio /etc/chatscripts, y la configuración del pppd bajo /etc/ppp/peers, bajo el mismo nombre. pppconfig modifica ambos archivos al configurar un enlace nombrado. Eventuales cambios manuales pueden realizarse allí mismo.


PIC

Ejemplo de uso de ppp para una red local


pppoe
es el acrónimo para PPP Over Ethernet. En este caso se utiliza una conexión Ethernet para el enlace transparente.
pptp
es el acrónimo para Point to Point Tunnelling Protocol. Es usado para establecer una conexión bajo DSL/ADSL ([Asyncronios] Digital Subscriber Line).
ippp
es el protocolo ppp utilizado por conexiónes ISDN (Integrated Services Digital Network).
y otros
ppp es muy versátil para establecer conexiones TCP/IP de punto a punto. Por lo tanto es utilizado muchas veces para redes WAN. El “costo” de desarrollar la tecnología entonces se reduce a la tarea de establecer un canal transparente. Nosotros podemos hacer lo mismo. Por ejemplo pueden enlacarse dos departamentos distantes de una institución mediante la planta telefónica, o eventualmente con un simple cable de dos hilos que simula una línea telefónica (requiere alimentación electrica). En el último caso nos podemos valer del hecho, que los modem intentan establecer una conexión con el comando “ATD”, aunque no especificamos un número telefónico. Por otro lado, con el comando ”ATA” podemos iniciar la negociación de velocidad, aunque no se reciba la señal de marcado (“RING”). Para que el modem primero no corte la línea por falta de tono (“NO DIALTONE”) se puede omitir esta condición con el comando “ATX3”. En la imagen 7.5.1 se muestra solamente una rama de la configuración. La computadora a la izquierda utiliza (al arrancar) el modem y ppp para tratar de conectarse a la computadora a la derecha. Todas las computadoras en la Lan del departamento 1 utilizan esta computadora como Gateway para la Lan del departamento 2. Si el enlace no se puede establecer, la computadora a la izquierda pone el modem en modo answer (“ATA”) con un timeout infinito. La misma configuración se realiza con la segunda computadora.
demand dialing, dialdcost
El programa diald (dial-daemon), utiliza un enlaces virtual (en este caso SLIP), para detectar si alguna computadora de una LAN solicita una conexión con Internet. En este caso establece un enlace ppp con el modem y enruta la conexión a través de ella. Si durante un cierto tiempo no hay tráfico la línea telefónica se corta. De esta manera se puede tener un enlace casi contínuo, sin tener que pagar el costo de una línea dedicada, los usuarios solamente tienen que tener un poquito de paciencia para permitir que se establece el enlace.

Junto con configuraciones de este estilo vienen práctico utilidades que permiten sumar el costo total de la conexión, llevar el control de cuando se establece y cuando se corta la conexión, y hasta que usuari@ ha consumido cuánto tiempo de conexión. El programa dialdcost y ip-account se occupan de estas tareas.

7.5.2 Syncronización de una Portatil con una PC de Escritorio

En vez de utilizar disquetes, o unidades externos de almacenamiento de datos como ZIP-Drives etc. para copiar datos entre una computadora portatil y su PC “de casa” y de oficina se pueden enlazar mediante una conexión de cable. Hay soluciones en MS-Dos y Windows, que siguen un esquema de maestro – esclavo donde una parte inicia la comunicación y domina el proceso de copiado. El programa posiblemente más antíguo es “kermit”, que utiliza un puerto serial en ambas computadoras. El puerto serial tiene la desventaja de una velocidad baja y la serialización de los datos: un caracter requiere aproximadamente 10 ciclos para su transmisión.

Una salida de este cuello de botella es el uso del puerto parallelo, desvirtuando las funciones de las líneas de control. La idea es, utilizar cuatro líneas de datos (de los ocho disponibles) como salida parallela, y cuatro de las líneas de señalización como entradas. Estas líneas normalmente usa la impresora conectada para señalizarle a la computadora fallas como la falta de papel o su estado para recibir datos (occupado/listo). Las “entradas” se conectan a traves de un cable especialmente preparado a las “salidas” de otra computadora. Ambas computadora por supuesto utilizan un programa especial, con el cual pueden intercambiar datos serializados en nibbles. Haciendose común este arreglo fue tomado en cuenta por los diseñadores del hardware de las computadoras y actualmente hay puertos parallelos que pueden reconfigurar las ocho líneas de datos como entrada y/o salida y se pueden utilizar las líneas de señalización para el control. El hardware permite de esta manera a veces inclusive transferencia de bloques grandes de datos mediante DMA, aliviando la CPU del trabajo de controlar la conexión. Tambien esta forma de conexión utiliza un cable especial, de ningúna manera puede usarse un cable de impresora para interconexión de dos puertos parallelos.

Linux provee una alternativa al enfoque maestro – esclavo, proveyendo un dispositivo de red a través del puerto parallelo. El protocolo utilizado permite el transporte bidirecional de paquetes TCP/IP a través del puerto parallelo y se llama PLIP: Parallel Line Interface Protocol. El driver (módulo de núcleo) y el nombre del dispositivo de red llevan este mismo nombre.

Es recomendable que el driver se compilado como módulo de núcleo, y no integrado fijamente a este, ya que de esta manera se puede cargar y descargar de la memoria y liberar el puerto parallelo después de usar la conexión PLIP. Si se compila fijamente, no será posible utilizar el puerto parallelo para otra cosa, como por ejemplo la impresión2.

7.5.3 Preparación del puerto paralelo para PLIP

PLIP requiere el uso de la interrupción hardware para el puerto paralelo. Normalmente este no está activado, ya que el uso del puerto paralelo para la impresión no lo requiere, y las interrupciones son un recurso muy valioso como para ocuparlo innecesariamente. Por lo tanto necesita activarse la interrupción, o a la hora de cargar el módulo del driver del puerto paralelo (parport_pc), o posteriormente mediante el sistema virtual de archivos ’proc’.

Notese, que hay (por lo menos) dos cambios esenciales entre las versiones de núcleo antes de y apartir de la versión 2.4. respectivamente. El primero es la ubicación de los módulos de núcleo en una jerarquía de directorios en /lib/modulos, y la segunda es la estructura de la información del núcleo en el sistema virtual de archivos /proc. A continuación se presenta la información pre-2.4. Para núcleos 2.4 y adelante hay que cambiar los parámetros.

driver:
insmod /lib/modules/<version-del-núcleol>/misc/parport_pc io=<puerto> irq=<número>
proc:
echo <número> > /proc/parport/<número-puerto paralelo>/irq

donde:

<número>
es el número de la interrupción que utiliza el hardware y
<puerto>
la dirección de I/O (entrada/salida) correspondiente.

En la siguente tabla se dan algunos valores estándard:





Puerto I/O Irq nombre en dos








/dev/lp0 0x378 7 LPT1:




/dev/lp1 0x278 5 LPT2:




/dev/lp2 0x3bc - En tarjetas monocromaticas




A esta altura tenemos un dispositivo de red disponible (se puede visualizar en /proc/net/dev), normalmente llamado “plip0”. El próximo paso es:

7.5.4 Configuración del enlace TCP/IP

Por supuesto tiene que efectuarse el anterior paso con éxito en las dos computadoras que se pretenden comunicar. A continuación hay que configurar en ambas el interfáz plip0 para que pueda comunicarse con la otra computadora. En la mayoría de los casos el enlace será temporal por lo que utilizamos números IP privados. Si queremos conectar una portatíl en diferentes computadoras de mesa, p.ej: en casa, en el trabajo, en la universidad, donde un cliente, etc. una posible configuración es, configurar en todas las computadoras de mesa el mismo número IP, digamos que sea: 192.168.255.254. La portatíl se configuraría con un número fijo, sea: 192.168.255.253, y se puede facilitar el trabajo dandole un nombre a estos números IP en el archivo /etc/hosts, p.ej plippc para las computadoras de mesa y pliplap para la portatil respectivamente.

Los enlaces plip tienen que configurarse con la opción punto a punto:

ifconfig plip0 192.168.255.253 pointopoint 192.168.255.254

en la portatil y

ifconfig plip0 192.168.255.254 pointopoint 192.168.255.253

en la(s) computadora(s) de mesa respectivamente.

Para más completo aquí una sección del archivo /etc/hosts, que sería iqual para todas las computadoras

192.168.255.253 pliplap

192.168.255.254 plippc

Una configuración ejemplar que funcionaría con la mayoría de las computadoras actuales puede ser:

echo 7 >/proc/parport/0/irq

modprobe plip

ifconfig plip0 192.168.255.253 pointopoint 192.168.255.254

Este segmento de comandos se puede grabar en una archivo script, p.ej. llamado plipon y ejecutar cuando se quiere conectar las dos computadoras. Obviamente hay que modificar la última línea de acuerdo a qué máquina se trata.

7.5.5 Observaciones adicionales

En caso que no se puede iniciar el uso del puerto como interfáz plip, puede ser que hay trabajos de impresión pendiente y el daemon de la cola de impresión “lpd” está occupando el puerto. Este hecho se puede revisar por ejemplo con el comando lpq, o lpstat. Si hay trabajos en cualquier cola de impresión que utilize el puerto de impresión en cuestión (revisar /etc/printcap y las entradas :lp=<puerto>:) tienen que terminarse o cancelarse estos primero.

El puerto paralelo puede existir con varias capacidades:

SPP
es el modo estándard compatible con *todas* las computadoras PC (Standard Parallel Port)
EPP
es un modo mejorado (Enhanced Parallel Port), en el cual la computadora puede leer informaciones de identificación de una impresora conectada (y compatible con IEEE 1284)
ECP
prove mas “capacidades” (Extended Capabilities Port)

Si las dos computadoras disponen de puertos paralelos con dispositivos mejorados se puede posiblemente utiliza el modo de transferencia de un byte completo llamado también Modo 1. Para esto se requiere de un cable especial, que solamente se debe utilizar con las dos computadoras configurados para este modo, ya que de otra manera podrían causarse daños en los dispositivos de hardware. En resumen: El modo estándard, o Modo 0 utiliza un cable “especial”, llamado cable “Parallel-Null-Modem” (que es el mismo que utiliza LapLink para MS-DOS/Windows), y que no puede dañar al hardware (del puerto de impresión), pero por supuesto no puede usarse para imprimir. Este modo es lento ya que solo transmite un nibble - medio byte a la vez. El modo más rápido, Modo 1, requiere de: puertos mejores que SPP en ambos lados, un cable “especial” y que las computadoras estén configuradas ambas en Modo 1. La información como hacer estos cables se encuentra p.ej. en los archivos fuente del núcleo en el subdirectorio Documentation/networking/PLIP.txt

7.5.6 Intranet con LAN/Ethernet