2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% INTERCONEXION DE REDES PROYECTO: Creación de una red de datos con enlaces WAN y LAN en plataforma Linux Parte I: Algunos conceptos básicos 1. ENCAPSULACIÓN IPIP Parece extraño encapsular un data grama IP dentro de data grama IP. Bueno, aquí tenemos un par de ejemplos comunes en los que se usa: Mobile-IP e IP-Multicast. Posiblemente su uso más extendido o al menos el mejor conocido es Amateur Radio. Las reglas convencionales de encaminamiento de redes IP comprenden direcciones de red y máscaras de red. Esto hace que conjuntos de direcciones contiguas sean encaminadas mediante una sola regla de encaminamiento. Esto es muy conveniente, pero significa que sólo puede usar una dirección IP en particular cuando está conectado a alguna parte de la red a la que pertenece. En la mayoría de los casos esto vale, pero si suele desplazarse entonces no será capaz siempre de conectar desde el mismo sitio. La encapsulación IP/IP (IP tunneling) le permite saltarse esta restricción permitiendo que los data grama que están destinados a su dirección IP sean encapsulados y dirigidos a otra dirección IP. Si sabe que va a estar durante un tiempo trabajando en otra red IP entonces podrá poner a punto una máquina de su red habitual para que acepte los data grama que van dirigidos a su IP y que los reenvíe a la dirección que esté usando de manera temporal. CONFIGURACIÓN DE RED CON TUNELES !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO La figura ilustra otra posible razón para usar encapsulación IPIP, las redes privadas virtuales. Este ejemplo presupone que tiene dos máquinas cada una con una sola conexión ppp a Internet. Cada máquina tiene una sola dirección IP. Tras cada una de estas máquinas hay algunas redes privadas de área local configuradas con direcciones de red IP reservadas. Supongamos que quiere permitir que cualquier máquina en la red A se conecte con cualquier máquina en la red B, como si estuvieran conectadas a Internet por una ruta de red. La encapsulación IP se lo permitirá. Tenga en cuenta que la encapsulación no resuelve el problema de cómo hacer que las máquinas las redes A y B se comuniquen con otras máquinas en Internet, ya que para esto seguimos necesitando trucos como el Enmascaramiento IP. La encapsulación la realiza normalmente una máquina que esté funcionando como enrutador. La conexión una vez configurada en los equipos se leería como: RED B-> RED A: Envía cualquier data grama destinado a 192.168.30.0 dentro de un data grama IPIP con dirección de destino 192.168.30.2. RED A-> RED B: Envía cualquier data grama destinado a 172.16.30.0 dentro de un data grama IPIP con dirección de destino 172.16.30.2. Las configuraciones son recíprocas en cada extremo. El dispositivo de túnel usa el getway dado en la ruta como destino del data grama IP en el que encerrará el data grama que ha recibido para encaminar. Esa máquina debe saber cómo desencapsular data grama IPIP, esto es, debe también estar configurada con un dispositivo túnel. En esta página se mostrará como realizar la INTERCONEXIÓN DE REDES a través de un enlace PPP, o en otras palabras como realizar el ejemplo anterior de encapsulación IPIP. a. CONFIGURACION DE MÁQUINAS CON ENCAPSULAMIENTO IP. No tiene por qué estar enrutando una red entera. Por ejemplo puede estar encapsulando una sola dirección IP. En este caso podría configurar el dispositivo tunl en la máquina `remota' con su dirección IP y el extremo A usará la máquina enrutadora (y Proxy Arp) en lugar encaminar la red a través del dispositivo túnel.. Ahora tenemos una máquina B que quiere actuar y comportarse como si estuviera conectada a Internet y al mismo tiempo fuera parte de una red remota soportada por la máquina A Esta clase de configuración es más típica de aplicaciones Mobile-IP, donde una máquina quiere moverse por Internet y mantener una única IP fija. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO 2. PROTOCOLO IP El IP es un protocolo de data grama no confiable, sin conexión y principalmente responsable del direccionamiento y enrutamiento de los paquetes entre servidores. Sin conexión significa que una sesión no se establece antes de intercambiar los datos. No confiable significa que la entrega no está garantizada. El IP siempre hace un mejor esfuerzo para intentar entregar un paquete. Un paquete IP podría perderse, entregarse fuera de secuencia, duplicado o retrasado. El IP no intenta recuperarse de este tipo de errores. La confirmación de la entrega de los paquetes y la recuperación de paquetes perdidos es responsabilidad de un protocolo de alguna capa superior, tal como el TCP. EL IP está definido en el RFC 791. Un paquete IP consiste de una cabecera IP (IP header) y una carga IP (IP payload). El protocolo IP define el mecanismo de entrega de paquetes en la red de redes. Existen tres razones que convierten el protocolo IP en un elemento fundamental de Internet. 1. Define la unidad básica para la transferencia de paquetes utilizada a través de una red de redes TCP/IP. 2. El software IP realiza la función de ruteo, seleccionando la ruta por la que los datos serán enviados. 3. Además de aportar especificaciones formales para el formato de los datos y el ruteo, el IP incluye un conjunto de reglas que le dan forma a la idea de entrega de paquetes no confiable con el mejor esfuerzo. Las reglas caracterizan la forma en que las computadoras y ruteadores deben procesar los paquetes, cómo y cuando se deben generar los mensajes de error y las condiciones bajo las cuales los paquetes pueden ser descartados. 3. PROTOLOS A NIVEL DE ENLACE DATOS EN LA WAN a. PROTOCOLO PPP PPP(Protocolo punto a punto) definido en el RFC 1661. PPP realiza detección de errores, reconoce múltiples protocolos, permite la negociación de direcciones IP en el momento de la conexión, permite la verificación de autenticidad y tiene muchas mejoras respecto a SLIP. Para este protocolo no existe el concepto de Cliente - Servidor ya que el manejo de los data grama y servicios sobre IP es exactamente iguales en ambos casos, para crear la conexión un equipo realiza una solicitud de conexión a un equipo remoto, este último le revisa ciertos permisos y le permite el acceso a su red. Por claridad llamaremos Cliente al equipo que hace la solicitud y Servidor al equipo que presta el servicio, pero una ves creado el enlace PPP ambos equipos son exactamente iguales para el protocolo. PPP proporciona: 1. Permite usar tcp/ip sobre una línea serie, sea una línea de teléfono con un módem, o una línea dedicada. 2. Un método de enmarcado que delinea sin ambigüedades el final de una trama y el inicio de la siguiente, sumas de control de trama (FCS) fiables. El formato de trama también maneja detección de errores. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO 3. Un protocolo de control de enlace para activar líneas, probarlas y negociar opciones y desactivarlas ordenadamente cuando ya no son necesarias, este protocolo se llama LPC (link control protocol). 4. Un mecanismo para negociar opciones de capa de red con independencia del protocolo de red de usado. También puede transportar otros tipos de paquetes, no solamente IP (IPX por ejemplo). Solo se puede considerar desfavorable el hecho de que las cabeceras de los paquetes son más largas que en el método SLIP. Formato de trama ppp b. PROTOCOLO SLIP Y CSLIP SLIP (Serial Line Internet Protocol) le permite usar tcp/ip sobre una línea serie, sea una línea de teléfono con un módem, o una línea dedicada. Por supuesto para usar SLIP necesitará tener acceso a un servidor SLIP de algún tipo. Muchas universidades y empresas de todo el mundo proporcionan acceso mediante SLIP. Protocolo diseñado por Rick Adams en l984; para conectar estaciones Sun a Internet a través de una línea de discado usando módems. El protocolo descrito en el RFC 1055, es muy sencillo. La estación sólo envía paquetes IP en bruto a través de la línea, con un byte indicador (0xCO) al final para delimitar la trama, introduce una sobrecarga muy pequeña en la comunicación debido a que las cabeceras añadidas a los paquetes son cortas. SLIP usa los puertos serie de su máquina para transportar data grama IP.Versiones mas recientes de SLIP (CSLIP) efectúan cierta comprensión de encabezados TCP e IP. Lo que hacen es aprovechar que los paquetes consecutivos con frecuencia tienen muchos campos de encabezado en común; se comprimen omitiendo aquellos campos que son iguales a los campos del paquete IP previo. Aunque aun se utiliza ampliamente, SLIP tiene serios problemas: 1. No efectúa detección o corrección de errores, por lo que es responsabilidad de las capas superiores detectar y recuperar tramas perdidas, dañadas o fusionadas. 2. En segundo lugar, SLIP solo reconoce IP, lo cual limita su uso a redes TCP/IP (Internet). 3. No proporciona ninguna forma de verificación de autenticidad, por lo que las partes no sabe realmente con quien esta hablando. 4. SLIP no es un estándar aprobado por Internet, por lo que existe muchas versiones (e incompatibles). !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO c. PROTOCOLO PLIP plip (Parallel Line IP), se parece a SLIP en que se usa para proporcionar conexiones punto a punto entre dos máquinas, excepto en que está diseñado para usar los puertos paralelos de impresora de la máquina en lugar de los puertos serie (se incluye un diagrama de cableado en la sección de diagramas de cableado más adelante). Como es posible transmitir más de un bit a la vez con un puerto paralelo, es posible obtener mayores velocidades con la interfaz plip que con los dispositivos serie estándar. Además, puede aprovecharse incluso el más sencillo de los puertos paralelos, el puerto de impresora, en lugar de tener que comprar una UART 16550AFN, comparativamente más cara, para los puertos serie. PLIP usa mucha CPU si lo comparamos con un enlace serie y casi seguro que no será una buena opción si puede obtener algunas tarjetas Ethernet baratas, pero funcionará cuando no esté disponible nada más y además lo hará bastante bien. Se puede esperar una tasa de transferencia de alrededor de 20 kilobytes por segundo cuando el enlace está funcionando correctamente. Los controladores de dispositivo de PLIP compiten con el controlador de dispositivo paralelo por el hardware del puerto paralelo. Si desea usar ambos controladores deberá compilar los dos como módulos para asegurarse de que es capaz de elegir qué puerto quiere que use PLIP y qué puertos usará como dispositivos para la impresora. Lea el Modules mini-Howto para obtener más información sobre la configuración de los módulos en el núcleo. Por favor tenga en cuenta que algunos portátiles usan circuitería que no funcionará con PLIP porque no permiten algunas combinaciones de señales en las que se basa PLIP, que las impresoras no usan. 4. DIRECCIONAMIENTO IP Cada servidor TCP/IP está identificado por una dirección IP lógica. Una dirección IP única es necesaria para cada servidor y componente de red que se comunique usando TCP/IP. Cada dirección IP incluye un identificador de red y un identificador de servidor. El identificador de red (también conocido como dirección de red) identifica los sistemas que están localizados en la misma red física rodeados por enrutadores IP. Todos los sistemas en la misma red física deben tener el mismo identificador de red. El identificador de red debe ser único en la red global. El identificador de servidor (también conocido como dirección de servidor) identifica una estación de trabajo, servidor, enrutador u otro dispositivo TCP/IP dentro de una red. La dirección de cada servidor debe ser única al identificador de red. Una dirección IP tiene 32 bits de longitud. En lugar de trabajar con 32 bits a la vez, es una práctica común segmentar los 32 bits de la dirección IP en cuatro campos de 8 bits llamados octetos. Cada octeto es convertido a un numero decimal (al sistema de numeración de base 10) en el rango de 0 a 255 y separados por un punto. Este formato es llamado notación decimal punteada. 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% Ejemplo de una dirección IP en formato binario y decimal punteado. Formato Binario Formato decimal punteado 11000000 10101000 00000011 00011000 192.168.3.24 Clases de direcciones. La comunidad de Internet originalmente definió cinco clases de direcciones para acomodar redes de diferentes tamaños. La clase de direcciones define cuales bits son usados para el identificador de red y cuales bits son usados para el identificador de servidor. También define el número posible de redes y el número de servidores por red. Clase A Las direcciones de clase A son asignadas a redes con un número muy grande de servidores. El bit de orden alto en una dirección de clase A siempre es igual a cero. Los siguientes siete bits (completando el primer octeto) completan el identificador de la red. Los restantes 24 bits (los últimos tres octetos) representan el identificador del servidor. Esto permite 126 redes y 16,777,214 de servidores por red. Clase B Las direcciones de clase B son asignadas a redes de mediano a gran tamaño. Los dos bit de orden más alto en una dirección de clase B son siempre iguales al binario 10. Los siguientes 14 bits (completando los primeros dos octetos) completan el identificador de red. Los restantes 16 bits (los últimos dos octetos) representan el identificador del servidor. Esto permite 16,384 redes y 65,534 servidores por red. Clase C Las direcciones de clase C son utilizadas para pequeñas redes. Los tres bits de orden más alto en una dirección de clase C son siempre iguales al binario 110. Los siguientes 21 bits (completando los primeros tres octetos) completan el identificador de red. Esto permite 2,097,157 redes y 254 servidores por red. Clase D Las direcciones de clase D están reservadas para direcciones IP multicast. Los cuatro bits de orden más alto en una dirección de clase D son siempre iguales al binario 1110. Los bits restantes son para la dirección que los servidores interesados reconocerán. Microsoft soporta direcciones de clase D para que las aplicaciones transmitan por multicast datos a servidores con capacidad multicast en una red. Clase E Las direcciones de clase E son direcciones experimentales reservadas para uso futura. Los bits de orden más alto en la dirección de clase E son iguales a 1111. Resumen de las clases de direcciones A, B y C que pueden ser utilizados para direcciones de servidores IP. Clase A Porción del Valor para identificador de w1 red 1-126 W Porción del i identificador de servidor x.y.z Redes disponibles Servidores por Red 126 16,777,214 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% B C 128-191 192-223 w.x w.x.y y.z z 16,384 2,097,152 65,534 254 1 La dirección de clase A 127.x.y.z está reservada para las pruebas de loopback y para la comunicación interprocesos en la computadora local. Direcciones públicas y privadas. Si su red no está conectada a Internet, cualquier direccionamiento IP puede ser utilizado, si se desea conectividad a Internet directa (enrutada) o indirecta (por proxy o traductor), entonces hay dos tipos de direcciones, direcciones públicas y privadas. Direcciones públicas Las direcciones públicas son asignadas por InterNIC y consisten de identificadores de red basados en clases o de bloques de direcciones CIDR (llamados bloques CIDR) que están garantizados como únicos globalmente en Internet. Cuando se asignan direcciones públicas, los enrutadores son programados en los enrutadores de Internet, de tal manera que el tráfico a las direcciones públicas asignadas pueda llegar a su destino. El tráfico hacia las direcciones públicas es visible en Internet. Direcciones Ilegales. Las intranets privadas que no tienen intención de conectarse a Internet pueden elegir las direcciones que quieran, incluso direcciones públicas que han sido asignadas por InterNIC. Si una organización luego decide conectarse a Internet, su esquema de direcciones actual podría incluir direcciones ya asignadas por InterNIC a otras organizaciones. Esas direcciones estarían duplicadas o serían direcciones en conflicto y son conocidas como direcciones ilegales. La conectividad desde direcciones ilegales a localizaciones de Internet no es posible. Direcciones privadas Para aquellos servidores dentro de la organización que no requieren acceso directo a Internet, se necesitan direcciones IP que no dupliquen direcciones públicas ya asignadas. Para resolver este problema de direcciones, los diseñadores de Internet reservaron una porción del espacio de direcciones IP y lo nombraron el espacio de direcciones privadas. Una dirección IP en el espacio de direcciones privadas nunca es asignada a una dirección pública. Las direcciones IP dentro del espacio de direcciones privadas son conocidas como direcciones privadas. Debido a que los espacios de direcciones públicas y privadas no se traslapan, las direcciones privadas nunca duplican direcciones privadas. El espacio de direcciones privadas especificada en el RFC 1597 está definido por los siguientes tres bloques de direcciones: Es un identificador de red clase A que permite el siguiente rango de direcciones IP La red privada válidas: desde 10.0.0.1 hasta 10.255.255.254. La red privada 10.0.0.0/8 tiene 24 10.0.0.0/8 bits de servidor que pueden ser utilizados para cualquier esquema de subredes dentro de una organización privada. Puede ser interpretada, ya sea como un bloque de 16 identificadores de red clase La red privada B o como un espacio de direcciones asignables de 20 bits (20 bits de servidor), el 172.16.0.0/12 cual puede ser utilizado para cualquier esquema de subredes dentro de la !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO organización privada. La red privada 172.16.0.0/12 permite el siguiente rango de direcciones IP válidas: desde 172.16.0.1 hasta 172.31.255.254. Puede ser interpretada ya sea como un bloque de 256 identificadores clase C o como un espacio de direcciones asignables de 16 bits (16 bits de servidor), el cual La red privada puede ser usado para cualquier esquema de subredes dentro de una organización 192.168.0.0/16 privada. La red privada 192.168.0.0/16 permite el siguiente rango de direcciones IP: desde 192.168.0.1 hasta 192.168.255.254 El resultado de que muchas organizaciones utilicen direcciones privadas es que el espacio de direcciones es rehusado, ayudando a prevenir la depleción de direcciones públicas. Debido a que las direcciones IP en el espacio de direcciones privadas nunca será asignado por InterNIC como direcciones públicas, nunca existirán rutas en los enrutadores en Internet para las direcciones privadas. El tráfico hacia las direcciones privadas no es visible en Internet. Por lo tanto, el tráfico de Internet desde un servidor que tiene una dirección privada debe ya sea enviar su petición a un gateway de la capa de aplicación (tal como un servidor Proxy), el cual tendría una dirección pública válida, o tener traducida su dirección privada a una dirección pública válida usando un traductor de direcciones de red (network address translator, NAT), antes de enviarla a Internet 5. ENRUTAMIENTO El enrutamiento es el proceso de redirigir un paquete basado en la dirección IP destino. Un enrutador (router) es un dispositivo que redirige los paquetes de una red a otra. Los enrutadores también son comúnmente referidos como gateways. En ambos casos, con el servidor que envía y con el enrutador, una decisión tiene que tomarse respecto hacia donde va a ser redirigido el paquete. Para tomar estas decisiones, la capa del IP consulta una tabla de enrutamiento que está almacenada en la memoria. Los elementos de las tablas de enrutamiento son creados por defecto cuando el TCP/IP se inicializa y elementos adicionales son agregados ya sea manualmente por un administrador del sistema, o automáticamente a través de la comunicación con los enrutadores. La tabla de enrutamiento IP : Una tabla de enrutamiento está presente en todos los nodos IP. La tabla de enrutamiento almacena la información acerca de las redes IP y de cómo pueden ser alcanzadas (directa o indirectamente). Debido a que todos los nodos IP hacen alguna clase de enrutamiento IP, las tablas de enrutamiento no son exclusivas de los enrutadores IP. Cualquier nodo que cargue el protocolo TCP/IP tendrá una tabla de enrutamiento. El resultado del proceso de determinación de la ruta es la elección de una sola ruta en la tabla de enrutamiento. La ruta elegida da lugar a una dirección IP de redirección (la dirección IP del siguiente HOP) y una interfase (el puerto). Si el proceso de determinación de la ruta falla en encontrar una ruta, el IP declara un error de enrutamiento para el servidor que envía, un error de enrutamiento IP es indicado internamente a los protocolos de capas superiores tales como TCP y UDP. Para un enrutador, un mensaje ICMP de Destination Unreachable-Network Unreachable es enviado al servidor de origen. 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% Parte II: Requerimientos 6. CABLES Y CABLEADO a. Cable serie Módem NULO (NULL MODEM) No todos los cables Módem NULO son iguales. Muchos cables módem nulo hacen poco más que un pequeño truco para que el computador crea que están presentes todas las señales apropiadas, cruzando los cables de transmisión y recepción. Esto sirve, pero significa que deberá usar programas de control de flujo software (XON/XOFF), que es menos eficiente que el control de flujo hardware (RTS/CTS). Aquí presentamos dos tipos de Módem NULO con tres conectores DB25, DB9 y DB25 a DB9 CONECTOR DB25 CONECTOR DB9 FULL MÒDEM DB25 1 PGND <->1 PGND 2 TxD ---> 3 RxD 3 RxD <--- 2 TxD 4 RTS ---> 5 CTS 5 CTS <--- 4 RTS 7 GND <--> 7 GND 6 DSR <---20 DTR 8 DCD <-/ 20 DTR---> 6 DSR \-> 8 DCD NULL MODEM BÁSICO DB9 DB25 - DB9 3 TxD ---> 2 RxD 2 RxD <--- 3 TxD 7 RTS ---> 8 CTS 8 CTS <--- 7 RTS 5 GND <--> 5 GND 6 DSR <--- 4 DTR 1 DCD <-/ 4 DTR ---> 6 DSR \-> 1 DCD 2 TxD ---> 2 RxD 3 RxD <--- 3 TxD 4 RTS ---> 8 CTS 5 CTS <--- 7 RTS 7 GND <--> 5 GND 6 DSR <--- 4 DTR 8 DCD <-/ 20 DTR---> 6 DSR \-> 1 DCD DB25 1 PGND <->1 PGND 2 TxD ---> 3 RxD 3 RxD <--- 2 TxD 7 GND <--> 7 GND DB9 3 TxD ---> 2 RxD 2 RxD <--- 3 TxD 5 GND <--> 5 GND 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% b. Cable de puerto paralelo (cable PLIP) Si pretende usar el protocolo PLIP entre dos máquinas, entonces este cable funcionará independientemente del tipo de puertos paralelos que tenga instalados. Nombre Patilla STROBE D0->ERROR D1->SLCT D2->PAPOUT D3->ACK D4->BUSY D5 D6 D7 ACK->D3 BUSY->D4 PAPOUT->D2 SLCT->D1 FEED ERROR->D0 INIT SLCTIN GROUND Patilla 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 25 Línea Patilla * 15 13 12 10 11 * * * 13 13 13 5 6 4 3 * 2 * * 25 Notas: • • • No conecte las patillas marcadas con un asterisco, *. Las tomas de tierra extra son 18,19,20,21,22,23 y 24. Si el cable que está usando tiene apantallamiento metálico, debería estar conectado a la carcasa DB-25 en sólo uno de los extremos. Cuidado: Un cable PLIP mal hecho puede destruir la tarjeta controladora. Sea muy cuidadoso y examine dos veces cada conexión para asegurarse de que no va a hacer más trabajo ni a llevarse más infartos de lo necesario. Aunque puede que sea capaz de tener cables PLIP para grandes distancias, debería evitarlo. Las especificaciones del cable permiten una longitud de alrededor de 1 metro. Por favor, tenga mucho cuidado cuando tienda cables PLIP largos, ya que las fuentes de campos electromagnéticos fuertes, como los rayos, cables de corriente y emisoras de radio pueden interferir en los controladores, y a !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO veces dañarlos. Si realmente quiere conectar dos ordenadores a larga distancia, debería intentar obtener un par de tarjetas Ethernet para thin-net (red de cable fino) y tender cable coaxial. 7. MODEM - Opcional Configuraciones más complicadas o comportamientos extraños de algunos proveedores no se cubren en este documento. Hay varios componentes involucrados en el acceso por módem a la red: módem, gestores de dispositivos del núcleo (kernel drivers), programas de llamada y conexión (dip/chat), procesos residentes (daemons) como pppd. Lo que se pretende es que introduciendo un simple comando, por ejemplo link-up, el computador ejecute la secuencia de órdenes adecuada para obtener el acceso a la red Internet. A más bajo nivel, esto implica que algún programa deberá inicializar el canal serie utilizado por el módem, le enviará algunas cadenas (strings) de inicialización al módem y marcará el número de teléfono. Cuando se consiga la conexión a nivel de módem, otro programa deberá ajustar la línea serie para uno de los modos serie del TCP/IP (ppp o slip), asignará una dirección IP a cada uno de los extremos de la conexión y añadirá una ruta dentro del núcleo para los paquetes que entrarán/saldrán con el protocolo IP. Cuando se termine la conexión, todos estos pasos deberán deshacerse y todo quedará tal como estaba. a. CONFIGURACION Esta sección contiene información sobre como configurar el módem para que trabaje correctamente bajo Linux. El sistema deberá funcionar con la mayoría de módems. HARDWARE Algunos módems utilizan la CPU del PC para realizar tareas como la compresión de datos y la corrección de errores (RPI). Estos dispositivos tienden a no funcionar bajo Linux, o lo hacen a baja velocidad. Otro tipo de módems que será poco probable que funcionen bajo Linux son aquellos que requieren la carga del firmware por medio de un driver DOS/Windows, o los que configuran su dirección base y la IRQ por el método del 'Plug and Play'. 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% Los módem externos deberán conectarse al PC a través de un puerto COM. La configuración de los módems internos se realiza normalmente con 'DIP switches' o 'jumpers', así que asegúrese de que está correctamente realizada antes de colocar el módem dentro del PC. El caso más normal es el de configurar el módem como COM3 o COM4, para evitar conflictos con el COM1/COM2 que puedan existir en el PC. El otro valor a configurar es el de la IRQ que será utilizada por el COM del módem. Este valor deberá escogerse de manera que no entre en conflicto con otras IRQ del PC. Configuraciones estándar del los puertos COM del PC PUERTO DIRECION BASE IRQ nombre Linux COM1: 3F8 4 /dev/ttyS0 COM2: 2F8 3 /dev/ttyS1 COM3: 3E8 4 !!! /dev/ttyS2 COM4: 2E8 3 !!! /dev/ttyS3 Note que el estándar define la misma IRQ para COM1/COM3 y la misma IRQ para COM2/COM4. Esto es una fuente de problemas, ya que la arquitectura del PC no admite la compartición de IRQ, por lo que no podría utilizarse COM1/COM3 o COM2/COM4 al mismo tiempo. Cuando ya se conoce la configuración hardware del módem, es el momento de instruir a Linux sobre ella. Esto se hace con el programa setserial, deberá insertar una llamada al mismo en uno de sus scripts de arranque, que están normalmente localizados en el directorio /etc/rc.d. Para una comprobación rápida podremos ejecutar setserial desde la línea de comandos, los valores permanecerán efectivos hasta el Siguiente arranque. Un ejemplo, si su módem está configurado como COM3 y utiliza IRQ 5 es: setserial /dev/ttyS2 port 0x3E8 irq 5 Otras opciones que puede necesitar pasar a setserial son spd_hi o spd_vhi. Esto depende de las capacidades de compresión de su módem y de la velocidad de comunicación de módem a PC. Para módems de 14400 bps que usen el protocolo V42.bis deberá utilizar spd_hi, para módems de 28800 o más deberá especificar spd_vhi. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Estas opciones cambian la interpretación que hace el núcleo de un valor de baudios de 38400, spd_hi le hace utilizar 57600 y spd_vhi le hace utilizar 115200.Por ejemplo: setserial /dev/ttyS2 port 0x3E8 irq 5 spd_hi o setserial /dev/ttyS2 port 0x3E8 irq 5 spd_vhi Puede consultar la página de manual (man page) sobre setserial para una descripción más detallada de las opciones soportadas. SOFTWARE La configuración software del módem se refiere a las cadenas (strings) que deben enviarse al módem antes de utilizarlo. Estas cadenas serán enviadas por el programa que desea utilizar el módem. El manual de su módem es la fuente de información para encontrar esas cadenas. El caso más sencillo es enviar al módem ATZ y luego AT&F. La primera causa un reset del módem y la segunda le carga los parámetros por defecto, que acostumbran a ser bastante buenos para empezar. Estas cadenas, también llamadas cadenas de inicialización, se utilizarán más tarde en los scripts de conexión. COMPROBAR CONFIGURACION DEL MÒDEM Tras ejecutar setserial (ya sea en los script de inicialización o a mano), se puede realizar una comprobación simple para determinar si el módem está funcionando correctamente. Asumiendo que el módem está en COM3 (/dev/ttyS2 bajo Linux), cambie a otra consola virtual (con ALT+F2 por ejemplo) e introduzca la siguiente orden: dd if=/dev/ttyS2 bs=1 Retorne a la consola original (con ALT+F1) y ejecute: echo -e 'AT\r\n' > /dev/ttyS2 Vuelva a conmutar de consola con ALT+F2, deberá ver algo así: AT OK Pulse CTRL+C para abortar el proceso dd. Este test es muy básico, pero nos permitirá determinar si el módem funciona. De hecho puede utilizar este mecanismo para comprobar cualquier cadena del módem. Hay que tener cuidado con cadenas que contengan símbolos especiales del shell, deberá escaparlos con \ o delimitando la cadena con comillas, por ejemplo 'AT&F' ó AT\&F. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Un conjunto de cadenas de módem interesantes son las ATIn, siendo n un número. Estas provocan que el módem retorne información de identificación. Las siguientes son ejemplos de las respuestas generadas por un módem: echo -e 'ATI0\r\n' 144 OK echo -e 'ATI1\r\n' 044 OK echo -e 'ATI3\r\n' WS-1414IV7G VERSION 0.10.1 01-05-01-01 OK echo -e 'ATI4\r\n' UMC V.32bis/FAX/VOICE MÒDEM OK echo -e 'ATI5\r' COUNTRY DEFAULT : 022 COUNTRY SETTING : 022 OK b. PROVEEDOR INTERNET Esta es la compañía o persona que le proporciona acceso a la red a través del módem. Deberá conocer algunos datos relativos acerca de ella: Número de teléfono Modo de acceso (SLIP o PPP) Procedimiento de entrada (login) Dirección IP del servidor de nombres Modalidad de asignación de direcciones IP (estática o dinámica) Dirección IP remota (en caso de asignación estática) Dirección IP local (en caso de asignación estática) Todos estos datos son necesarios. Las direcciones IP remota y local no se necesitan si el proveedor le asigna una diferente cada vez que conecta, lo que se conoce como asignación de IP dinámica. MODO DE ACCESO (SLIP o PPP) Este elemento determina los componentes que necesitará para conectar. Existen dos métodos ampliamente utilizados para encapsular paquetes TCP/IP a través de líneas serie, SLIP y PPP. Para conectar con el método SLIP se requiere un solo programa, dip. Para PPP se requieren dos programas, pppd y chat. En ambos casos necesitará tener el soporte adecuado compilado en el núcleo linux, veremos más detalles luego. PROCEDIMIENTO DE ENTRADA (LOGIN) DEL PROVEEDOR !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Este elemento determina la secuencia de sucesos que debe seguir su computador para ser reconocido por el otro extremo de la conexión, su proveedor. Este procedimiento suele ser muy parecido al procedimiento de entrada que debe seguirse al iniciar una sesión de linux. La mayoría de proveedores de Internet están corriendo UNIX o derivados en sus ordenadores, así que es común encontrarse con un procedimiento de entrada: login: xxxxxx password: xxxxxx Esto implica que el software que está utilizando sea capaz de reconocer estas cadenas y enviar las respuestas adecuadas. Tanto dip como chat son capaces de esto, así que no se preocupe, dispone de las herramientas. Es posible que el procedimiento de entrada sea innecesario si su proveedor utiliza PPP, dado que éste provee otros métodos para autentificar a los usuarios (PAP/CHAP). De esto hablaremos en la sección dedicada al PPP. TCP/IP El paquete TCP/IP está instalado si los siguientes archivos están presentes en el directorio /etc/rc.d: rc.inet1 rc.inet2 Estos son los archivos de configuración del TCP/IP durante el arranque de sistema. Otros paquetes necesarios son pppd y dip. c. RESOLUCION DE NOMBRES (DNS) Cada ordenador en la red debe tener una única dirección numérica, pero normalmente se accede a ellos por nombre. La transformación entre nombres y números se realiza por un servicio llamado Servidor de Nombres de Dominio, el acrónimo inglés es DNS. El DNS más básico se implementa con un archivo llamado hosts localizado en el directorio /etc. En este archivo tenemos una línea para cada una de las máquinas en la red, que contiene la dirección IP numérica y el nombre correspondiente. La resolución de nombres cuando nos conectemos a Internet deberá realizarla un ordenador dedicado a ello, que normalmente formará parte de la red de su proveedor de Internet. La dirección IP de ese computador deberemos ponerla en el archivo /etc/resolv.conf, pero solo cuando estemos conectados. Cuando nos conectemos, éste archivo deberá ser modificado para contener el dominio de su proveedor y la dirección IP de su máquina DNS. Mientras no estemos conectados no es deseable tener esos valores en el archivo, pues el servidor de nombres no puede ser alcanzado y se provocarían largos retrasos en programas que intentan acceder a la red. d. ACCESO CON PPP !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Después de la configuranción del módem y el TCP/IP, deberemos ejecutar algún programa que nos de la deseada conexión a Internet. En esta sección vamos a hablar de PPP, que involucra a los programas pppd y chat. El programa chat es una utilidad muy simple que es utilizado por pppd para establecer la conexión con el módem, su funcionalidad queda reducida a esto. No tiene muchas utilizaciones por si solo, si intentamos ejecutarlo en una línea de mandatos no conseguiremos nada útil. Por otro lado, pppd es un programa potente y es el que realmente realiza el trabajo de mover paquetes IP por la línea serie. Para poder ejecutar estos programas deberá haber entrado en el sistema como root, o puede alternativamente hacer pppd suid con chmod (consulte las páginas man pertinentes). A continuación se presentan dos ejemplos, uno con un proveedor que requiere una secuencia de entrada estilo UNIX y otro que no utiliza secuencia de entrada pero requiere PAP para la autentificación. En ambos casos se asume que la asignación de direcciones IP es dinámica, aunque habrán notas sobre asignación de IP estática. Pienso que estos dos son los casos más comunes, aunque podría darse la necesidad de utilizar secuencia de entrada y autentificación PAP. En ambos ejemplos se asume que el módem está en COM3, /dev/ttyS2 bajo Linux. Los ejemplos son shell para bash, si está utilizando otro shell deberá de adaptarlos para él. También podrá instalar bash y cambiar la primera línea de los guiones a #!/bin/bash. El programa pppd requiere ciertos archivos de configuración en el directorio /etc/ppp. El primero es options, que debe estar presente. Puede estar vacío, dado que las opciones pueden pasarse a pppd en la línea de comandos, pero DEBERÁ existir. En los ejemplos se utilizan las opciones para pppd en el archivo /etc/ppp/options , porque son siempre las mismas y no requieren ser cambiadas de forma frecuente. Para casos en los que la configuración de pppd deba cambiar frecuentemente, recomiendo dejar ese archivo vacío y pasar todas las opciones a pppd en la línea de comando. EJEMPLO PPP CON PROCEDIMIENTO DE 'LOGIN' Se asumen los siguientes datos acerca de nuestra conexión imaginaria: módem en COM3, /dev/ttyS2 bajo Linux. Número de teléfono 5553223, marcado por tonos. Secuencia de entrada estilo UNIX, usuario alguien y password divertido. Dominio del proveedor fakeprov.net. Dos servidores de nombres, con direcciones IP 194.211.47.10 y 194.211.41.11. Asignación dinámica de IP. Opciones del PPP Introduzca lo siguiente en el archivo /etc/ppp/options: mòdem lock crtscts !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO defaultroute noipdefault asyncmap a0000 SCRIPT PARA CHAT Este script contiene comandos que instruyen al programa chat sobre como establecer la conexión con nuestro proveedor a través del módem. Se utilizará un script chat porque se enviará un identificador de usuario y una clave, si las especificásemos en la línea de comandos cualquiera utilizando nuestra máquina podría verlas con la utilidad ps. Los script chat están formados por parejas de cadena a enviar y cadena esperada. La cadena a enviar se manda al módem y luego chat espera recibir la cadena esperada durante un tiempo por defecto. También puede contener algunas palabras clave para definir timeouts y cadenas de error de módem. Lo que no pueden contener son comentarios al estilo # algún texto, tal como soportan los guiones de shell. En el ejemplo el número de teléfono es 5553223 y se marca por tonos, el identificador de login es alguien y la password es divertido. Para marcar por pulsos, cambiar la cadena ATDT5553223 por ATDP5553223. Tome su editor de texto favorito y cree un archivo llamado chatscript en el directorio /etc/ppp. Rellenarlo con las siguientes líneas. También puede cortarlas de este texto e incluirlas en el archivo que está creando: ------------------------cortar desde línea siguiente ---------------------ABORT BUSY ABORT 'NO CARRIER' ABORT 'NO DIALTONE' ABORT ERROR \ ATZ OK 'AT&F' OK ATDT5553223 CONNECT '' ogin: someone ssword: funny ------------------------- cortar hasta línea precedente --------------------Note la utilización de comillas simples para incrustar espacios en las cadenas. También notará que algunas cadenas parecen incompletas, como ogin: o ssword:. Esto es intencionado y es para prevenir fallos del guión debidos a caracteres perdidos en los inicios de cadena enviados por el proveedor o para evitar errores de mayúsculas/minúsculas. SCRIPT DE CONEXION SIMPLE Ahora crearemos el siguiente eslabón de la cadena, un shell para ejecutar el programa pppd. Se asume que el archivo /etc/resolv.conf deberá ser modificado con los datos correctos antes de conectar, para evitar el tener que hacerlo manualmente. Utilice de nuevo su editor favorito y cree el siguiente script, llámelo ppplink-up y colóquelo en algún directorio que esté en el PATH. /usr/bin o /usr/local/bin pueden ser buenos lugares: ------------------------- cortar desde línea siguiente ---------------------#!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH # datos de configuración, cambiarlos por los reales de su proveedor DEVICE=/dev/ttyS2 SPEED=38400 PROVDOMAIN='fakeprov.net' !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO NAMESRV1='194.211.47.10' # quitar línea siguiente si solo disponemos de un servidor de nombres NAMESRV2='194.211.41.11' CONNSCRIPT='/etc/ppp/chatscript' # hacer copia de seguridad de /etc/resolv.conf if [ -f /etc/resolv.conf ]; then cp -f /etc/resolv.conf /etc/ppp/resolv.conf.orig fi # crear nuevo /etc/resolv.conf con datos del proveedor echo domain $PROVDOMAIN > /etc/resolv.conf echo nameserver $NAMESRV1 >> /etc/resolv.conf # quitar línea siguiente si solo disponemos de un servidor de nombres echo nameserver $NAMESRV2 >> /etc/resolv.conf # intenta ejecutar pppd if ! pppd $DEVICE $SPEED connect "chat -v -f $CONNSCRIPT"; then echo "Error al ejecutar pppd..." # restaurar /etc/resolv.conf original cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf # aborta el script exit 1 fi echo "pppd está corriendo ahora..." exit 0 ------------------------- cortar hasta línea precedente --------------------- Deberá hacer el script ejecutable con chmod 0755 ppplink-up. Después de esto, ejecute el script como root: ppplink-up Si todo está correcto, el script regresará inmediatamente al indicador de mandatos, dado que pppd se ejecuta en segundo plano. Puede monitorizar el proceso ejecutando lo siguiente en una línea de mandatos: tail -f /var/log/messages /var/log/syslog /var/log/debug Deberá verse en la consola un volcado del progreso de la llamada del módem y de la negociación del pppd. Cuando vea algo como: Nov 26 03:55:47 hansolo pppd[254]: Serial connection established. Nov 26 03:55:48 hansolo pppd[254]: Using interface ppp0 Nov 26 03:55:48 hansolo pppd[254]: Connect: ppp0 <--> /dev/ttyS2 Nov 26 03:55:50 hansolo pppd[254]: Remote message: Nov 26 03:55:51 hansolo pppd[254]: local IP address ... Nov 26 03:55:51 hansolo pppd[254]: remote IP address ... La conexión está lista. Puede pulsar CTRL+C para cancelar el proceso tail y empezar a correr sus aplicaciones Internet favoritas. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Este script es muy básico y limitado. El siguiente es más complejo, pues esperará a que el enlace se establezca, lanzará el volcado de progreso de conexión automáticamente y le informará también sobre posibles errores. Se asume que tiene instaladas varias utilidades adicionales: egrep, tail, ifconfig, sleep, ps y kill. SCRIPT DE CONEXION MEJORADO ------------------------- cortar desde línea siguiente ---------------------#!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH # datos de configuración, cambiarlos por los reales de su proveedor DEVICE=/dev/ttyS2 SPEED=38400 PROVDOMAIN='fakeprov.net' NAMESRV1='194.211.47.10' # quitar línea siguiente si solo disponemos de un servidor de nombres NAMESRV2='194.211.41.11' CONNSCRIPT='/etc/ppp/chatscript' MONFILES='/var/log/messages /var/log/debug /var/log/syslog' # hacer copia de seguridad de /etc/resolv.conf if [ -f /etc/resolv.conf ]; then cp -f /etc/resolv.conf /etc/ppp/resolv.conf.orig fi # crear nuevo /etc/resolv.conf con datos del proveedor echo domain $PROVDOMAIN > /etc/resolv.conf echo nameserver $NAMESRV1 >> /etc/resolv.conf # quitar línea siguiente si solo disponemos de un servidor de nombres echo nameserver $NAMESRV2 >> /etc/resolv.conf # intenta ejecutar pppd if ! pppd $DEVICE $SPEED connect "chat -v -f $CONNSCRIPT"; then echo "Error al ejecutar pppd..." # restaurar /etc/resolv.conf original cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf # aborta el script exit 1 fi # proporcionar datos acerca del progreso de la conexión. Este comando se # ejecuta en segundo plano y deberá finalizar más tarde, así que nos # guardaremos el PID del mismo tail -1 -f $MONFILES & tailpid=$! # arranca un temporizador de timeout, un proceso en segundo plano también sleep 90 & toutpid=$! !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO # espera el establecimiento del enlace while ! ifconfig | egrep 'ppp[0-9]' - > /dev/null 2>&1; do # portarse bien con el sistema sleep 1 # comprueba si expiró timeout if ! ps | egrep "$toutpid.+sleep" > /dev/null 2>&1; then echo "Tiempo maximo agotado..." # matar el proceso tail kill $tailpid > /dev/null 2>&1 # matar pppd si está activo, utilizo /bin/kill porque permite especificar # procesos por nombre, el kill incorporado en el shell no puede hacerlo /bin/kill pppd > /dev/null 2>&1 # restaurar /etc/resolv.conf original cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf # aborta el script exit 1 fi # comprueba si pppd murió if ! ps | egrep -w 'pppd' | egrep -v 'egrep' > /dev/null 2>&1; then echo "pppd ha finalizado anormalmente..." # mata proceso tail kill $tailpid > /dev/null 2>&1 # mata temporizador timeout kill $toutpid > /dev/null 2>&1 # restaura /etc/resolv.conf original cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf # aborta el script exit 1 fi done # mata proceso tail kill $tailpid > /dev/null 2>&1 # mata temporizador timeout kill $toutpid > /dev/null 2>&1 # ya estamos conectados echo "Conexión realizada..." exit 0 ------------------------- cortar hasta línea precedente --------------------- Recuerde hacer el script ejecutable con chmod 0755 ppplink-up y disfrute de su conexión. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO SCRIPT DE DESCONEXION Ahora crearemos un script para desconectarnos de la red. Llámelo ppplink-down y póngalo en algún directorio que esté en el PATH. ------------------------- cortar desde línea siguiente ---------------------#!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH # nombre de dispositivo para pppd PPPDEV=ppp0 # comprueba si el enlace PPP está activo if [ -r /var/run/$PPPDEV.pid ]; then # si, acabar co él kill `cat /var/run/$PPPDEV.pid` > /dev/null 2>&1 # comprueba si tuvo éxito la operación if [ $? != 0 ]; then # no, eliminar archivo pid huérfano rm -f /var/run/$PPPDEV.pid else # si, espera que el enlace se venga abajo while ifconfig | egrep 'ppp[0-9]' - > /dev/null 2>&1; do sleep 1 done fi echo "Enlace $PPPDEV terminado..." else # decir que no hay enlace PPP activo echo "Enlace $PPPDEV no esta activo..." fi # restaura /etc/resolv.conf original si existe if [ -r /etc/ppp/resolv.conf.orig ]; then cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf rm -f /etc/ppp/resolv.conf.orig fi exit 0 ------------------------- cortar hasta línea precedente --------------------- Haga este script ejecutable con chmod 0755 ppplink-down. Ejecutándolo cuando está activa la conexión PPP forzará la finalización de la misma. También se restauran los archivos modificados por los originales. EJEMPLO PPP CON AUTENTIFICACIÓN !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO PAP es otro método ampliamente utilizado para autentificar a los usuarios cuando establecen enlaces PPP. Consiste en un par de cadenas que serán definidas por su proveedor. Su sistema deberá responder con la segunda cadena (normalmente su password) cuando el otro extremo le envíe la primera cadena (normalmente el identificativo de usuario). Deberá colocar esas cadenas en un archivo llamado pap-secrets en el directorio /etc/ppp. Siguiendo con el ejemplo de identificativo usuario alguien y la password divertido, el archivo sería algo así: # Secretos para autentificar con PAP # cliente servidor secreto direcciones IP alguien * divertido El campo servidor se utiliza para especificar que servidor se asocia a un determinado secreto, poniendo un comodín * aquí se hace coincidir a cualquier servidor. Esto es lo más común con los proveedores de internet, pues es difícil conocer los nombres de sus servidores. Es posible que usted deba utilizar este campo, consulte con su proveedor si no está seguro. El campo de direcciones IP se utiliza para especificar un rango de direcciones IP aceptables para un cliente (nuestro computador), pero es innecesario cuando utilizamos asignación dinámica de IP. El archivo puede contener cadenas de autentificación múltiples, la que se utilizará en un momento dado se especifica con la opción user al invocar el programa pppd. CAMBIOS DE LOS SCRIPT PARA AUTENTIFICACIÓN 'PAP' Los dos script de los ejemplos anteriores pueden utilizarse con las siguientes modificaciones menores. Suponiendo el pap-secrets de ejemplo presentado antes, cambie la llamada a pppd en los guiones de la siguiente forma: *** línea original if ! pppd $DEVICE $SPEED connect "chat -v -f $CONNSCRIPT"; then *** línea modificada if ! pppd $DEVICE $SPEED user alguien connect "chat -v -f $CONNSCRIPT"; then Esto es todo, en el caso de requerir una secuencia de entrada además del PAP, no elimine la misma del archivo chatscript. ACCESO CON SLIP El método SLIP tiene dos variantes, sin compresión de cabeceras (SLIP) y con compresión de cabeceras Van Jacobson (CSLIP). El que deberá utilizar depende de su proveedor. Para conectar en modo SLIP/CSLIP, se requiere un programa llamado dip. Este programa toma un script escrito en un lenguaje especial, lo interpreta y realiza las acciones necesarias para proporcionarle un enlace SLIP/CSLIP. 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% En algunos aspectos es algo más fácil que el PPP, pues solo se requiere afinar el script. El lado oscuro es que tenemos un lenguaje más para aprender. Se proporcionará un script dip genérico, utilizando comentarios en los lugares que requieren ser modificadas con los datos particulares de su conexión. No está incorporada la facilidad de pasar argumentos de línea de comandos a los guiones dip, por lo cual toda la información debe escribirse dentro de los mismos. El lenguaje utilizado por dip permite el uso de variables, pero he encontrado más descriptivo el utilizar valores directos y comentar las líneas apropiadas. Se utiliza aquí la misma técnica de tener un archivo /etc/resolv.conf nulo para cuando no estamos conectados y crear uno nuevo en el momento de la conexión. Los script están diseñados para ser ejecutados bajo el shell bash. EJEMPLO SLIP Este ejemplo asume los siguientes datos imaginarios: Módem en COM3, /dev/ttyS2 bajo Linux. Número de teléfono 5553223, marcado por tonos. Secuencia de entrada estilo UNIX, usuario alguien y password divertido. Dominio del proveedor fakeprov.net. Dos servidores de nombres, con direcciones IP 194.211.47.10 y 194.211.41.11. Asignación dinámica de IP, los valores de las mismas son enviadas por el proveedor después de una secuencia de entrada válida. ? !#"%$'&)(*,+.-&-#/'0123"4-#657$8+*-#9"4- ;8<%=>: KJL)< C -M F M E -M M ! 0 ! M E ON ,! ? 0+@? ?BADCE ------------------------- cortar desde línea siguiente ---------------------main: # poner valores por defecto en estas variables, requerido get $locip 0.0.0.0 get $rmtip 0.0.0.0 # poner en esta línea la cadena que se recibe del módem al conectar chatkey CONNECT 1 # esta cadena será enviada al módem antes de marcar el número de teléfono init AT # especificar aquí los parámetros correctos del módem port cua2 speed 38400 parity N databits 8 stopbits 1 flush send \r\n\r\n sleep 2 *$-F)201G3'&!"4-H-F&-(!!H" C -I : !"#$%& '(*)+, .-/ 01% # envía cadenas de inicialización al módem, estas son las más simples send ATZ\r wait OK 10 if $errlvl != 0 goto init_error send AT&F\r wait OK 10 if $errlvl != 0 goto init_error send ATM1L2\r wait OK 10 if $errlvl != 0 goto init_error # marca el número, preceder el número con P para marcar por pulsos # cualquier error será reportado y el script abortará dial T5553223 60 if $errlvl == 0 goto msg_a if $errlvl == 1 goto login if $errlvl == 2 goto msg_b if $errlvl == 3 goto msg_c if $errlvl == 4 goto msg_d if $errlvl == 5 goto msg_e goto dial_error login: # aquí tenemos la secuencia de entrada, sustituir con la adecuada sleep 1 send \r wait ogin: 20 if $errlvl != 0 goto login_error send alguien\r wait ssword: 20 if $errlvl != 0 goto login_error send divertido\r # después de la secuencia de entrada esperamos recibir un par de cadenas # que contienen la dirección IP local y la remota. Los siguientes comandos # capturan esos valores y los asignan a las variables adecuadas. get $locip remote 20 if $errlvl != 0 goto pass_error get $rmtip remote 20 if $errlvl != 0 goto pass_error logged: # Establecer la unidad de transferencia máxima, 1006 es el máximo permitido # para enlaces SLIP/CSLIP, pero es posible que funcione mejor un valor más # bajo, como 296. Consultar las RFC's 1055 y 1144. Ajustarlo al gusto. get $mtu 1006 # crear un ruta por defecto a través de este interface. default 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO # dar mensaje informativo de que estamos conectados print CONECTADO $locip ---> $rmtip # seleccionar modo SLIP, no hay compresión de encabezados. Si su proveedor # soporta, sería mejor poner modo CSLIP. mode SLIP # final de script, retorna 0 como código de salida. exit # lo que sigue son varios mensajes de error, el script será # abortado y acabará con un código de retorno diferente de 0. init_error: print Error de inicialización de MÒDEM quit dial_error: msg_a: print Error desconocido al marcar quit msg_b: print Error de MÒDEM al marcar quit msg_c: print La linea esta ocupada quit msg_d: print No hay portadora quit msg_e: print No hay tono de marcar quit login_error: print Anfitrion no responde a secuencia de entrada quit pass_error: print Error de password quit ------------------------- cortar hasta línea precedente --------------------- Para asignación de dirección IP estática, sustituya lo siguiente al principio del script dip: !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO get $locip xxx.xxx.xxx.xxx get $rmtip yyy.yyy.yyy.yyy netmask zzz.zzz.zzz.zzz Sustituir xxx.xxx.xxx.xxx con su dirección IP local, yyy.yyy.yyy.yyy con la dirección IP remota y zzz.zzz.zzz.zzz con la máscara de red adecuada (usualmente es 255.255.255.0). Elimine las líneas que obtienen las direcciones IP del anfitrión después de la secuencia de entrada: *** eliminar get $locip remote 20 *** eliminar if $errlvl != 0 goto pass_error *** eliminar get $rmtip remote 20 *** eliminar if $errlvl != 0 goto pass_error Esto es todo para IP estáticas. SCRIPT DE CONEXION Ahora crearemos un shell para automatizar la tarea de conexión. Con su editor favorito, crear el script siguiente. Llámelo sliplink-up y colóquelo en algún directorio que esté en el PATH. ------------------------- cortar desde línea siguiente ---------------------#!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH # datos de configuración, cambiarlos por los de su conexión. DEVICE=/dev/ttyS2 SPEED=38400 PROVDOMAIN='fakeprov.net' NAMESRV1='194.211.47.10' # quitar línea siguiente si solo tenemos un servidor de nombres. NAMESRV2='194.211.41.11' # se supone que el script dip está localizado en "/usr/local/bin". CONNSCRIPT='/usr/local/bin/slipconn.dip' # hacer coipa de seguridad de /etc/resolv.conf, notar que utilizo el mismo # directorio que en los ejemplos PPP, solo para ser consistente. if [ -f /etc/resolv.conf ]; then cp -f /etc/resolv.conf /etc/ppp/resolv.conf.orig fi # crear un nuevo /etc/resolv.conf con datos del proveedor echo domain $PROVDOMAIN > /etc/resolv.conf echo nameserver $NAMESRV1 >> /etc/resolv.conf # quitar línea siguiente si solo tenemos un servidor de nombres. echo nameserver $NAMESRV2 >> /etc/resolv.conf !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO # intenta ejecutar dip. if ! dip -v $CONNSCRIPT; then echo "Error al ejecutar dip..." # restaura /etc/resolv.conf original. cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf # aborta el script. exit 1 fi echo "Enlace slip activado ahora..." exit 0 ------------------------- cortar hasta línea precedente --------------------- Notar que en este caso no es necesario esperar a que el enlace esté activo, dado que dip se ejecuta en primer plano y no retorna hasta que la conexión se ha completado con éxito o se produce un error. Esto último lo determinamos por el código de retorno entregado por dip. Deberá hacer ejecutable el script shell con chmod 0755 sliplink-up. Para ejecutarlo teclee lo siguiente en una línea de mandatos: sliplink-up Deberá ver las líneas del script dip a medida que se ejecutan. El mensaje: CONECTADO 10.1.200.100 ---> 200.157.0.7 Enlace slip activado ahora... Aparecerá si todo ha ido bien. En caso de error no aparecerá el mensaje CONECTADO, en su lugar tendremos un mensaje informativo de la naturaleza del error. Los números IP que se ven son imaginarios, usted obtendrá los reales que le asigne su proveedor. SCRIPT PARA DESCONECTAR Este es un shell para deshacer el enlace SLIP/CSLIP. Llámelo sliplink-down y póngalo en algún directorio que esté en el PATH. Verá que es muy parecido al mostrado en el ejemplo de enlace PPP: ------------------------- cortar desde línea siguiente ---------------------#!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH # nombre de dispositivo SLIP. SLIPDEV=sl0 # nombre de dispositivo del MÒDEM. DEVICE=cua2 # comprobar si hay un enlace SLIP activo. if [ -r /etc/dip.pid ]; then !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO # si, acaba con él. dip -k -l $DEVICE > /dev/null 2>&1 # comprobar si la operación tuvo éxito. if [ $? != 0 ]; then # no, elimina archivo pid huérfano. rm -f /etc/dip.pid else # si, espera que el enlace se venga abajo. while ifconfig | egrep 'sl[0-9]' - > /dev/null 2>& 1; do sleep 1 done fi echo "Enlace $SLIPDEV terminado..." else # decir que no hay enlace SLIP activo. echo "Enlace $SLIPDEV no esta activo..." fi # restaurar /etc/resolv.conf original si existe. if [ -r /etc/ppp/resolv.conf.orig ]; then cp -f /etc/ppp/resolv.conf.orig /etc/resolv.conf rm -f /etc/ppp/resolv.conf.orig fi exit 0 ------------------------- cortar hasta línea precedente --------------------- Como con todos los shell presentados, deberemos hacerlo ejecutable con chmod 0755 sliplink-down. Al ejecutar este script con un enlace SLIP/CSLIP activo, se desconectará y se restaurarán los archivos originales. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO 8. ENLACE SERIAL - requerido En esta sección se detallara como realizar un enlace PPP a través de los puertos de comunicaciones COM de dos equipos con un cable módem NULO, es decir crear una conexión PPP directa por cable serial. Para la explicación de este caso se trabajara con dos equipos con el sistema operativo LINUX RED HAT 6.0. Los Puertos de comunicación serial COM en linux están soportados por los archivos /dev/ttySx, donde la x es 0 para COM1, 1 para COM2 y asi sucesivamente. Antes de comenzar es necesario verificar que los puertos COM estén correctamente configurados, esto se realiza con el comando: setserial -a /dev/ttySx Este comando nos permite configurar los puertos de comunicaciones, en muchos casos, dependiendo de la configuración particular de cada equipo, estos puertos de comunicaciones no son creados cuando el equipo inicia, haciéndose necesario crearlos al momento de utilizarlos. Para realizar se procede de la siguiente forma, asumiremos la conexión a través del COM1: setserial -b /dev/ttyS0 IRQ 4 Este comando posee varios argumentos, pero para el caso práctico trabajaremos con los valores por defecto. Es importante aclarar que cada dispositivo de un equipo posee una IRQ que le permite trabajar correctamente, para el COM1 el IRQ es la 4, no lo cambie a menos que utilice otro puerto COM. Para verificar el correcto funcionamiento puede utilizar el comando minicom en ambos equipos, si el cable esta bueno y los puertos COM han sido configurados correctamente, en la pantalla de un equipo se desplegara lo digitado en el otro. Ahora, debemos ejecutar algún programa que nos de la deseada conexión PPP. En esta sección vamos a hablar del programa pppd. pppd es un programa potente y es el que realmente realiza el trabajo de mover paquetes IP por la línea serie. 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO !"#$%& '(*)+, .-/ 01% Para poder ejecutar este programa deberá haber entrado en el sistema como root, o puede alternativamente hacer pppd suid con chmod (consulte las páginas man pertinentes). No se recomienda la segunda técnica, pues tiene implicaciones de seguridad. El programa pppd requiere ciertos archivos de configuración en el directorio /etc/ppp. El primero es options, que debe estar presente. Puede estar vacío, dado que las opciones pueden pasarse a pppd en la línea de comandos, pero DEBERÁ existir. OPCIONES DEL pppd Introduzca lo siguiente en el archivo /etc/ppp/options: módem lock crtscts defaultroute noipdefault asyncmap a0000 • • • • • La primera línea le dice a pppd que el dispositivo serie utilizado es un módem, así que deberá monitorizar señales importantes (DCD) cuando se comunique con él. La línea 2 dice que el dispositivo deberá ser bloqueado para uso exclusivo de pppd hasta que finalice la conexión. La línea 3 selecciona control de flujo por hardware entre el módem y el ordenador. Esto depende del tipo de módem utilizado, pero la mayoría de ellos la soportarán. La alternativa es especificar -crtscts si su módem no soporta el control de flujo por hardware. La línea 4 hace que la ruta por defecto para paquetes IP sea la conexión que va a establecer pppd, de manera que cualquier comunicación con Internet se realice a través de la misma. La línea 5 dice que nuestra máquina no dispone de una dirección IP válida, así que el otro extremo deberá asignarnos una. Para IP estáticas, omita esta línea y ponga en su lugar: localIP:remoteIP Por ejemplo: 129.37.48.1:173.10.25.6 La parte de IP remota puede omitirse, dado que pppd puede obtenerla si es necesario. Por ejemplo: • 129.37.48.1: La línea 6 establece el conjunto de caracteres de control (ASCII < 32) que deberán ser escapados cuando sean transmitidos por la línea serie. El valor que se utiliza escapa los códigos XON y XOFF, utilizados para el control de flujo por software. Esto no sería necesario si está utilizando control de flujo por hardware, pero sugiero dejarlo así de momento hasta que estemos seguros de que la conexión funciona. Podremos cambiarlo a 0 más tarde para aprovechar al máximo las características del módem. En Linux. Los dispositivos de red se crean de forma dinámica y por tanto no requieren de la presencia de ficheros de dispositivo. En la mayoría de los casos los dispositivos de red son creados automáticamente por el controlador de dispositivos mientras se inicia y localiza el hardware. Por !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO ejemplo, el controlador Ethernet crea interfaces eth[0..n] secuencialmente según va encontrado tarjetas Ethernet. La primera tarjeta que encuentra es eth0, la segunda eth1, etc. Sin embargo, en algunos casos, de los que slip y ppp son ejemplos notables, los dispositivos de red son creados por la acción de algún programa de usuario. Se aplica la misma numeración secuencial de dispositivos, pero no se crean al arrancar. La razón es que al contrario que con los dispositivos Ethernet, el número de dispositivos ppp o slip puede variar durante la actividad de la máquina. Crear un enlace PPP a través de una conexión con un Módem NULO(Directo por Cable), es muy sencillo. Primero asegúrese que los puertos seriales estén correctamente configurados con setserial. Es necesario iniciar el demonio pppd en ambos equipos. Asumiendo que ambas máquinas se comunican con el puerto COM1, ejecutamos en la línea de comando pppd -detach ctrscts lock <Local IP>:<Remote IP> /dev/ttyS0 38400& Para mejor detalles ver figura RED A :---> ppd -detach crtscts lock 192.168.30.2:172.16.30.2 /dev/ttyS0 38400 & RED B :---> ppd -detach crtscts lock 172.16.30.2:192.168.30.2 /dev/ttyS0 38400 & Cada vez que se crea un enlace PPP este es identificado con el dispositivo pppX; donde la X representa un valor numérico que diferencia al enlace PPP de cualquier conexión del mismo tipo. Ejemplo : ppp0, ppp1. Esto establece el enlace pero todavía no permite el enrutamiento. Se puede verificar el enlace haciendo un ping de una máquina a otra. El enrutamiento depende de lo que se este tratando de hacer. Como ejemplo su ponga que busca que una máquina con una tarjeta Ethernet conectada a una red sirva como entrada a la red para otro equipo con un enlace PPP. Para este caso debería ejecutar los siguientes comandos: En el equipo con Ethernet pppd -detach crtscts lock proxyarp <Local IP>:<Remote IP> /dev/ttyS0 38400 & En el otro equipo pppd -detach crtscts lock defaultroute <Local IP>:<Remote IP> /dev/ttyS3 38400 & Para enrutamientos mas complejos puede utilizar los script /etc/ppp/ip-up y /etc/ppp/ip-down En el caso que nos concierne, el de interconectar dos redes, necesitamos realizar otro tipo de configuración para establecer el enrutamiento. los cuales explicamos a continuación. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Le sugerimos que lea el planteamiento del proyecto, en caso que no lo haya leído antes. Como resumen: Poseemos dos Redes independientes ,(RED A, RED B), las cuales necesitamos interconectar de tal manera que los equipos pertenecientes a una red puedan utilizar los servicios de la otra como si pertenecieran a la misma red. Para una mejor explicación analice la siguiente figura. Una vez establecido el enlace PPP debemos adicionar ciertos valores a las tablas de enrutamiento de cada equipo. con el comando route. Este comando nos permite manipular la tabla de enrutamiento, permite adicionar, borrar y modificar los diferentes campos de dicha tabla. Para nuestro caso debemos adicionar una ruta nueva en cada equipo que este en los extremos del enlace. Estos equipos se convertirán en la puerta de entrada de la RED A a la RED B y viceversa. En la Línea de comandos debemos ejecutar las siguientes instrucciones. RED A route add -net 172.16.30.0 netmask 255.255.0.0 gw 172.16.30.2 ppp0 RED B route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.30.2 ppp0 Ahora como paso final. se debe habilitar el enrutamiento. La mayoría de distribuciones modernas incluyen algún programa que le permita configurar la mayoría de interfaces de red. Si tiene una de éstas entonces debería ver si hace lo que usted quiere antes de acudir a la configuración manual. /sbin/netcfg !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO /sbin/netconfig Cualquiera de los anteriores programas puede habilitar el enrutamiento. Esto es todo a partir de este instante los equipos pertenecientes a ambas redes pueden verse mutuamente y compartir recursos como si pertenecieran a la misma red. GLOSARIO TERMINO DEFINICION Cliente Suele ser la parte de un programa que se encuentra en el lado del usuario. Hay ciertas excepciones, por ejemplo, en el sistema de ventanas X11 es el servidor el que está con el usuario, y el cliente puede estar ejecutándose en una máquina remota. El cliente es el programa o terminal de un sistema que está recibiendo el servicio proporcionado por el servidor. En el caso de sistema de igual a igual (peer to peer), como slip o ppp, se dice que el cliente es el extremo que inicia la conexión y el extremo remoto, que ha sido llamado, es el servidor. !"#$%& '(*)+, .-/ 01% 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO Data grama Un data grama es un paquete discreto de datos y cabeceras que contiene direcciones, que es la unidad básica de transmisión a través de una red IP. Puede que lo haya oído llamar «paquete». Dirección hardware Es un número que identifica de forma unívoca una máquina en una red física en la capa de acceso al medio. Algunos ejemplos son las Direcciones Ethernet y las Direcciones AX.25. Dirección IP Es un número que identifica unívocamente una máquina TCP/IP en la red. La dirección es de 4 bytes de longitud y normalmente se la representa en notación decimal puntuada, donde cada byte es representado en decimal con puntos «.» entre ellos. Enrutador Es un dispositivo que redirige los paquetes de una red a otra. LPC (link control Protocolo de control de enlace. protocol). RDSI Es un acrónimo de Red Digital de Servicios Integrados (ISDN en inglés). La RDSI proporciona medios estandarizados por los cuales las compañías de Telecomunicaciones pueden llevar información tanto de voz como de datos según las premisas de los abonados. Técnicamente la RDSI es una red de circuitos de paquetes conmutados. Ruta La ruta es el camino que siguen los data grama a través de la red para alcanzar su destino. La retransmisión de tramas (o Frame Relay) es una tecnología de red idealmente preparada para transportar tráfico que es de naturaleza esporádica o a ráfagas. Los Retransmisión costes de red se reducen ompartiendo varios abonados a la retransmisión de tramas la de tramas misma capacidad de red y dejándoles a ellos el deseo de usar la red en momentos ligeramente diferentes. Servidor Normalmente es la parte del programa o terminal de un sistema remoto con respecto al usuario. El servidor proporciona algún servicio a uno o varios clientes. Los ejemplos de servidores incluyen ftp, Network File System o Domain Name Server. En el caso de sistemas de igual a igual (peer to peer) tales como slip o ppp. Se dice que es el servidor el extremo del enlace que recibe la llamada y el otro extremo es el cliente. Ventana La ventana es la mayor cantidad de datos que el extremo receptor puede aceptar en un momento dado. BIBLIOGRAFIA Stallings. William; Comunicaciones y redes de computadores; 5.ed. PRENTICE HALL, 1997 Tanenbaum. Andrew S; Computer networks; 2.ed.; PRENTICE HALL, 1989 Algunas direcciones de Internet donde se encuentran más ayudas son http://web-redestb.redestb.es/personal/josepfeb/index.htm !"#$%& '(*)+, .-/ 01% http://www.insflug.org http://sunsite.unc.edu/mdw/linux.html http://www.interweft.com.au/other/ppp-howto/ppp-howto.html http://www.debian.org/ ftp://ftp.cdrom.com/pub/linux/sunsite/kernel.org/pub/linux/kernel http://metalab.unc.edu/LDP/mirrors.html. http://metalab.unc.edu/LDP/HOWTO/Serial-HOWTO.html http://www.eskimo.com/~irish ftp://ftp.eskimo.com/u/i/irish 2 0+% 3465+$.70 8.9:;<6/=> <@?ABC 7+ D@EFG-/%<H JI("9&IKF5@ -/FLH3M:N+< >8PO