Al comprar un modem, es muy común recibir diskettes o un CD con software para echar a andar el modem en nuestro PC. Este software de conexión o comunicaciones suele venir únicamente en versión Windows, tal vez incluso para MSDOS, pero prácticamente nunca en versión Linux. El porqué es muy sencillo: Linux incluye dentro del propio Sistema Operativo todo el software para realizar conexiones modem a modem, para acceso a Internet, envío y recepción de faxes, etc., todo ello proveniente desde la comunidad GNU, integrado en Linux.
Este software incluido con Linux suele ser de escaso tamaño y alta funcionalidad, con lo que nos evitamos (por ejemplo) 5 ó 6 MB de espacio en disco ocupados únicamente para realizar las conexiones a Internet a través de Infovia (véase software de conexión a Infovia de Telefónica para Windows95).
Precisamente debido a la sencillez y potencia de estos pequeños programas de Linux, al no estar dotandos de interfaces gráficos, se ha extendido el tópico de que "Linux es difícil" y "configurar Internet es casi imposible". En este texto vamos a demostrar que esto no es así, presentando al lector todos los elementos de Linux relacionados con las comunicaciones para facilitar después el día a día en este maravilloso Sistema Operativo.
Cabe decir que cualquier PC suele disponer de 2 puertos serie (normalmente de 9 y 25 pines respectivamente, localizables en la parte trasera del ordenador), conocidos (desde el MSDOS) como COM1 (donde suele conectarse el ratón) y COM2 (muy utilizado para conectar modems externos o cables serie). Además,es posible colocar un modem interno en otros 2 puertos serie, llamados en MSDOS COM3 y COM4. Bajo Linux estos puertos serie (a los que se conectan dispositivos como modems, cables null-modem o impresoras serie), se encuentran en los siguientes ficheros:
Device Equiv MSDOS Puerto IRQ -------------------------------------------------- /dev/ttyS0 COM1 0x3f8 4 /dev/ttyS1 COM2 0x2f8 3 /dev/ttyS2 COM3 0x3e8 4 /dev/ttyS3 COM4 0x2e8 3Cada puerto serie está conectado al microprocesador por un puerto de Entrada/Salida (puerto E/S), mediante el cual se comunica con la CPU, y por una IRQ (Interrupt ReQuest), que es una línea capaz de interrumpir al microprocesador para que atienda a dicho puerto serie. Los puertos se numeran normalmente con en notación hexadecimal (por ejemplo: 2e8h), mientras que las IRQs están limitadas a un número del 0 al 15, ya que el PC sólo dispone de 15 líneas de interrupción. Algunas de estas líneas ya están ocupadas por otros dispositivos, como suele ser el caso de tener la tarjeta de red en la IRQ 11, la tarjeta de sonido en la 5, etc. Como puede verse en la tabla anterior, algunos puertos serie comparten línea de IRQ (debido al reducido número de las mismas), lo que indica que no pueden usarse ambos dispositivos simultánemente (por ejemplo, en principio no puede usarse un modem en COM4 al mismo tiempo que una impresora serie en COM2).
Los modems suelen llevar jumpers (una pequeñas patillas metálicas que mediante un capuchón nos permiten especificar parámetros del modem) para permitir al usuario seleccionar el puerto serie y la IRQ a usar, así como otro jumper para activar o desactivar el modo de funcionamiento PnP (autoconfiguración de puerto e IRQ al primero que encuentre libre). Para que el modem funcione correctamente en cualquier Sistema Operativo simplemente hemos de cerciorarnos de que el modem no use ninguna IRQ ya utilizada para que no entre en conflicto con otros dispositivos (para ello, pueden consultarse los archivos /proc/ioports y /proc/interrupts mediante el comando cat <nombre_de_archivo>).
Tras conectar nuestro modem a la placa madre o al puerto serie externo debemos decirle al Sistema Operativo dónde debe buscar dicho modem, y qué puerto E/S e IRQ está usando. Para ello disponemos del programa setserial (para más información, teclear "man setserial"), que nos permitirá especificarle a Linux los parámetros relacionados con un determinado puerto. A título de ejemplo, supongamos que conectamos un modem interno en el COM4. Si el modem no es PlugNPlay y mediante los jumpers seleccionamos los valores que utiliza la configuración del puerto por defecto (irq 3), nuestro modem estará situado en /dev/ttyS3 (COM4), utilizando el puerto 2e8h y la IRQ 3. Como esta es la configuración por defecto de /dev/ttyS3, nuestro modem ya estará perfectamente configurado. Para averiguar la configuración actual de cualquier puerto, puede utilizarse la opción -a de setserial:
[root@compiler esp1]# setserial -a /dev/ttyS3 /dev/ttyS3, Line 3, UART: 16550A, Port: 0x02e8, IRQ: 3 Baud_base: 115200, close_delay: 50, divisor: 0 closing_wait: 3000, closing_wait2: infinte Flags: spd_vhi skip_test auto_irqLa mayoría de las veces basta con pinchar o conectar el modem para tenerlo correctamente configurado, sobre todo debido a la facilidad de instalación mediante los programas de configuración de las diferentes distribuciones.
setserial -b /dev/ttyS3 irq <nº_de_irq> port <nº_de_puerto> skip_test autoconfigPara configurar nuestro modem del ejemplo anterior en la IRQ 5 podríamos usar la siguiente línea:
[root@compiler esp1] setserial -b /dev/ttyS3 irq 5Otra posibilidad es dejar que Linux realice la configuración automática del dispositivo, mediante el siguiente comando:
[root@compiler esp1] setserial /dev/ttyS3 auto_irq skip_test autoconfigAsí pues, para configurar nuestro modem basta con elegir el puerto e IRQ correctos en el propio modem, o si éste no permite la selección vía jumpers, mirar los valores de estos en la BIOS o el Device Manager de Windows para posteriormente configurarlos en Linux mediante setserial.
Para no hacer esto manualmente cada vez que arranquemos Linux, es posible incluir la llamada a setserial en el archivo /etc/rc.d/rc.local (aunque este archivo cambia según distribuciones, suele estar localizado en /etc/rc.local o /etc/rc.d/rc.local, o incluso /etc/rc.d/rc.serial), que es algo así como el autoexec.bat de Linux.
Si finalmente no conseguimos configurar el modem PnP mediante setserial, disponemos de las utilidades isapnptools para configuración de dispositivos PlugNPlay, aunque normalmente no se suele llegar a este punto. Si es necesario usarlas, mediante el programa pnpdump volcaremos a fichero (pnpdump >/etc/isapnp.conf) los datos de todos los dispositivos PnP de nuestro sistema, editaremos dicho fichero, descomentaremos los datos referentes a nuestro modem, y se los comunicaremos a Linux mediante el programa pnpconf.
[root@compiler esp1]:/# ln -s /dev/ttySx /dev/modemUna vez realizado esto debemos tratar de obtener la máxima velocidad de comunicación con nuestro modem, con lo que editaremos el fichero /etc/rc.d/rc.local (según nuestra distribución) e incluiremos la línea:
/bin/setserial /dev/modem spd_vhiLa misma operación puede hacerse manualmente en la línea de comandos (cada vez que se quiera activar el flag spd_vhi) ejecutando la orden:
[root@compiler esp1]:/# setserial /dev/modem spd_vhi
Antes de utilizar estos programas habremos de configurarlos. La configuración de minicom se realiza mediante el menú que se despliega al pulsar ALT+Z, mientras que Seyon, al ser un programa de X Window, lleva integradas las diferentes ventanas de configuración a partir del menú principal. Si conoce alguna BBS de su localidad, pruebe el modem realizando una llamada a la misma tras seleccionar el protocolo ANSI-BBS. Si no conoce el número de teléfono de ninguna BBS, pruebe con alguna BBS famosa como Europa III BBS, en Valencia (teléfono 96-346.01.09), donde descubrirá la calidad de un servicio (el de BBS) anterior a la ahora abrumadora popularidad de Internet.
La conexión entre nuestro ordenador e Internet se realiza por medio de lo que se llama un ISP (Internet Service Provider, o Proveedor de Servicios de Internet) , tales como Ciberia, RedesTB, CTV, arrakis, etc. Nuestro objetivo es realizar un conexión Point-to-Point Protocol (PPP, protocolo punto a punto) entre nuestro ordenador y nuestro ISP, utilizando la línea telefónica para el intercambio de datos entre ambas máquinas (aunque PPP en general puede ser utilizado en comunicaciones vía serie entre distintas máquinas). Este ISP es el que hace de nexo entre nosotros y la Red, y el que nos sirve el correo, las news y los ficheros.
La configuración del acceso a Internet se reduce a la creación de algunos ficheros de configuración donde indicarle a pppd (el programa que realizará la conexión) las opciones que deseamos utilizar para la conexión. Todo este proceso de configuración deberá hacerse como root, ya que es el único que tiene acceso a los ficheros de configuración de la máquina. Una vez realizada la configuración no será necesario volver a modificar estos ficheros, excepto para algún cambio de proveedor o de hardware de comunicaciones.
Muchos núcleos Linux ya vienen compilados con soporte para realizar conexiones ppp (suele estar incluido por defecto) y con el paquete pppd (que carga el módulo ppp automáticamente ante cada llamada), que necesitaremos tener instalado. Para saber si tenemos instalado dicho paquete, y su versión, ejecutamos el comando < rpm -q ppp>.
Suponiendo que tenemos el programa pppd instalado, para realizar una conexión bastaría con ejecutar dicho programa con los parámetros adecuados (para ver estos parámetros, ejecute man pppd):
[root@compiler esp1]:/ # pppd /dev/modem 115200 passive modem [etc.]La verdad es que la gran cantidad de opciones de pppd hace que resulte más cómodo y sencillo incluirlas en ficheros de opciones, llamando a pppd mediante uno de estos ficheros:
[root@compiler esp1]:/ # pppd -file fichero_de_opcionesEste fichero de opciones no es más que un fichero de texto con los parámetros que deseamos pasarle a pppd (de igual manera que si lo hiciéramos desde la línea de comandos), normalmente situado en el directorio /etc/ppp. Si ejecutamos pppd sin ningún otro parámetro (sin el parámetro file) el programa buscará las opciones en el fichero /etc/ppp/options (ideal si sólo disponemos de un proveedor), aunque se puede incluir las opciones de cada proveedor que tengamos en un fichero diferente, cosa que nos permitiría posteriormente conectar mediante uno u otro cambiando la llamada al daemon pppd mediante el fichero deseado.
A continuación se incluye un ejemplo de fichero de parámetros para pppd, donde cada opción está separada por un avance de línea (aunque podría usarse el carácter de espacio) y donde cualquier línea precedida por el caracter '#' es un comentario. Este fichero ha de crearse con cualquier editor de textos, como por ej. el editor JOE (o emacs) mediante la orden "joe /etc/ppp/options-arrakis":
# # Ejemplo de fichero de conexión /etc/ppp/options-arrakis # connect "/usr/sbin/chat -v -f /etc/ppp/chat-infovia" ipcp-accept-remote :192.168.13.200 crtscts modem passive name sromero@arrakis noipdefault debug defaultroute asyncmap a0000 /dev/modem 115200Algunas cosas a hacer notar sobre esta configuración son:
Las opciones ipcp-accept-remote y :192.168.13.200 aseguran que se realizará la conexión informando al pppd que si infovia no le facilita la dirección IP de nuestro proveedor, debe aceptar la dirección fictica que le estamos indicando, consiguiendo que se realice la conexión (solución de muchos fallos de conexión).
La opción passive le indica que si no se recibe respuesta al iniciar una conexión, debe esperar pasivamente a recibir datos válidos, y mediante el parámetro modem le indicamos a pppd que debe usar la línea telefónica. Por otra parte, el valor 115.200 es la velocidad de nuestro puerto (no del modem) en bps. Respecto a la velocidad real de conexión, Linux la negocia automáticamente tratando de obtener la más alta posible, de modo que no debe especificarse aquí la velocidad de nuestro modem sino la máxima soportada por la UART.
El parámetro name pecifica la cuenta de nuestro usuario para la autentificación de la indentidad. No especifica el nombre de nuestra dirección email, sino la cuenta con la que realizamos la conexión. El password se introduce en un fichero aparte (autentificación PAP), como veremos a continuación.
Finalmente, la línea /dev/modem le indica a pppd el dispositivo a usar. Es posible usar tambien cualquier dispositivo /dev/ttySx, pero aquí aprovechamos que /dev/modem es un enlace a nuestro dispositivo serie y hacemos más genérico el script, ya que podría ser usado en otro ordenador sin modificar esta línea, siempre que éste tenga realizado dicho enlace a su propio puerto serie.
TIMEOUT 5 "" ATZ OK ATDT055 ABORT "NO CARRIER" ABORT BUSY ABORT "NO DIALTONE" ABORT WAITING TIMEOUT 70 CONNECT ""El objetivo de este fichero es que por ejemplo, en el caso de recibir un BUSY (línea telefónica comunicando) por parte del modem, se debe abortar (ABORT) la conexión, definiendo de esta manera la respuesta ante una línea comunicando. A este fichero hay que darle permisos de ejecución, de manera que (siempre como root) ejecutamos la orden:
[root@compiler esp1]:/ # chmod 770 /etc/ppp/chat-infovia
# # fichero de configuración /etc/resolv.conf # Incluir dominio y DNS primaria (y secundaria si la hay). # domain arrakis.es nameserver 195.5.64.2 nameserver 195.5.64.6Tras el parámetro domain se especifica el dominio de nuestro ISP, y tras nameserver se escriben las DNS del mismo, proporcionadas por el proveedor (muchos proveedores tienen una DNS primaria y otra secundaria, y en Linux pueden incluirse tantos nameserver como DNSs tenga nuestro ISP). Si no sabemos (o no recordamos) la DNS de nuestro ISP, podemos llamar a nuestro proveedor para que nos informe de las mismas, o mirarlo en la configuración TPC/IP del Acceso a Redes de Windows.
"cuenta1"<TABULADOR>*<TABULADOR>"password1" "cuenta2"<TABULADOR>*<TABULADOR>"password2" (etc.)A título de ejemplo, mi fichero pap-secrets:
# Secrets for authentication using PAP # client server secret IP addresses "sromero@arrakis" * "mipassword"El fichero chap-secrets ha de ser rellenado con el mismo formato que pap-secrets, y tras esto ya tenemos configurada totalmente la conexión a Internet (si tenemos un password numerico podemos probar tanto con las comillas como sin ellas en ambas cadenas).
[root@compiler esp1]:/ # pppd file /etc/ppp/mi_proveedorNada más ejecutar dicho comando deberá oirse el marcado del modem. En ese momento, para averiguar posibles errores y saber qué hace el modem en todo momento, podemos utilizar el comando tail para ver los mensajes del sistema que van siendo añadidos por pppd en /var/log/messages (se sale del comando tail con CTRL+C, ver figura 3).
[root@compiler esp1]:/ # tail -f /var/log/messagesAhora observamos los mensajes obtenidos desde pppd para cada una de las partes de la conexión (marcado, conexión, autentificación, negociaciación de velocidades y direcciones IP, etc.). Tras esto, y si no obtenemos ningun mensaje de modem hangup (el modem ha colgado), observaremos en pantalla 2 direcciones IP (local y remota), y habremos efectuado la conexión. Si la conexión ha sido fallida debemos intentarlo un par de veces más pues es probable que haya fallado la autentificación, que no haya respondido el servidor, o incluso que tengamos un fallo en nuestros scripts de conexión, que deberemos corregir (aparte de los habituales fallos de conexión de Infovía a determinadas horas). Por otra parte si disponemos de un modem Plug&Play y no ha sido configurado con setserial, deberemos hacerlo correctamente.
Una vez realizada la conexión podemos utilizar cualquier programa de los que vienen con Linux (Netscape, Lynx, correo electrónico, etc.) para acceder a los recursos de Internet, como puede verse en la figura 1, navegando con Netscape Navigator y en el IRC con cIRCus, o recogiendo el correo con Netscape Communicator.
[root@compiler esp1]:/ # killall pppdTambién es posible listar los procesos que se están ejecutando actualmente mediante el comando ps, y matar mediante la orden kill el número del proceso de pppd (kill nº_proceso). El cierre de la conexión puede verificarse en /var/log/messages:
> Compiler pppd[171]: Hangup. > Compiler pppd[171]: Connection terminated. > Compiler pppd[171]: Exit.
Para evitar este tipo de cosas es posible utilizar asistentes de conexión como Kppp (del escritorio KDE), o XInfovía (programado por un español y disponible en Internet), que permiten a un usuario no root realizar la conexión y desconexión. No obstante, estos programas no son necesarios pues el método explicado en el presente texto es el más rápido y sencillo cuando somos al mismo tiempo los usuarios y administradores de la máquina.
Figura 1: "Netscape Communicator para Linux."
Figura 2: "Aspecto del programa minicom."
Figura 3: "Salida de tail -f /var/log/messages"
Santiago Romero