Artículo 1a: CONEXION A INTERNET DESDE LINUX

Autor: (c) Santiago Romero
Revista: Solo Linux (Prensa Técnica) nº 1, Marzo-1999


Linux es un Sistema Operativo orientado a redes y como tal su comportamiento en Internet es excelente. Configurar la conexión es un proceso sencillo pero usualmente desconocido para aquellos que se adentran por primera vez en GNU/Linux, de modo que hoy se comentará la manera de configurar el modem y el acceso a Internet desde nuestro Sistema Operativo favorito.

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.

Netscape


EL DISPOSITIVO DEL MODEM

En contra de lo que sucede en MSDOS o Windows, bajo Linux todos los dispositivos hardware se tratan como simples ficheros, localizables en el directorio /dev (dev de devices, dispositivos). Esto quiere decir que si se abre el fichero /dev/cdrom, la lectura de este fichero en un programa (o la escritura), se traduce en la correspondiente operación en dicho dispositivo. Aunque esto parezca complicado, en realidad hace todo mucho más fácil, puesto que de esa manera sabemos que todos los dispositivos hardware de nuestro ordenador están accesibles como ficheros en el directorio /dev. Los puertos series, a los que se conectan los modems, no son una excepción, y también estan disponibles en dicho directorio.

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    3

Cada 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_irq

La 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.


USAR IRQS O PUERTOS NO ESTANDAR

Si por el contrario hemos decidido (o está así por defecto en nuestro modem) conectar el modem a /dev/ttyS3 pero utilizar la IRQ 5 (por ejemplo), habremos de configurar /dev/ttyS3 para que utilice la IRQ 5 y no la 3, que es la que lleva por defecto. Para ello se utiliza el programa setserial con los siguientes parámetros:


 setserial -b  /dev/ttyS3  irq <nº_de_irq>   port <nº_de_puerto>   skip_test   autoconfig

Para 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 5

Otra 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  autoconfig

Así 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.


MODEMS PLUGNPLAY

El problema de los modems PnP es que al ser conectado, el mismo modem busca automáticamente una IRQ libre donde instalarse, de modo que es posible que si tenemos éste en el COM4, por ejemplo, nuestro modem no use la IRQ 3 (la estándar de este puerto), problema fácilmente solucionable mediante setserial, tal y como se ha comentado en la anterior sección. La solución pasa sencillamente por especificarle a Linux la IRQ que debe usar para /dev/ttyS3, es decir, informar a Linux que con /dev/ttyS3 debe usar la IRQ 5. Esta modificación puede hacerse, como se ha comentado anteriormente, bien en la línea de comandos o bien en el archivo rc.local.

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.


FINALIZANDO LA CONFIGURACION DEL MODEM

En Linux, en el directorio /dev también se suele disponer del fichero /dev/modem, que no es más que un enlace al puerto serie de nuestro modem, para trabajar con el modem de una manera más genérica. Si no disponemos del mismo, éste debe ser creado como un enlace al puerto (usando ln) en el que esté situado nuestro modem (/dev/ttySx, siendo x un número del 0 al 3 según las equivalencias de la tabla 1):


 [root@compiler esp1]:/# ln -s /dev/ttySx /dev/modem

Una 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_vhi

La 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


TESTEANDO EL MODEM

Para testear el correcto funcionamiento de nuestro modem es posible utilizar el programa de terminal MINICOM, que puede ejecutarse para conectarse a otro modem o a cualquier BBS (Bulletin Board Service). Para ello simplemente hay que entrar en el programa minicom (figura 2)), y ya sea mediante el uso del menú (ALT+Z) o mediante comandos AT del modem (ATZ=reset del modem, ATDT<número> = llamar a <número>), es posible llamar a otro equipo o a cualquier BBS del mundo. El programa Seyon es similar a minicom pero para el entorno de ventanas X Window.

Programa minicom

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.


PPP Y EL ACCESO A INTERNET

Para realizar la conexión a Internet utilizaremos las sencillas y versátiles herramientas de conexión PPP de Linux (como pppd), que posteriormente nos permitirá automatizar tareas y acceder desde consola y X Window a cualquier recurso 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_opciones

Este 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
115200

Algunas 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.


CONNECT Y CHAT

La opción connect introduce un nuevo programa: chat, que realiza una pequeña conversación entre el modem y pppd, indicándole cómo se debe de actuar ante determinadas respuestas del modem. Para ello habremos de crear un fichero /etc/ppp/chat-infovia, similar al que sigue (creado mediante joe /etc/ppp/chat-infovia):

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 RESOLV.CONF

Una vez creados los ficheros de texto /etc/ppp/options-arrakis y /etc/ppp/chat-infovia, debemos editar /etc/resolv.conf y añadir allí la DNS de nuestro proveedor y su dominio. El DNS de un servidor es un servicio que a partir de una dirección de Internet en formato nombre (ej: www.arrakis.es), es capaz de devolver la dirección IP correspondiente a dicho nombre (que es lo único que reconoce Internet). De esta manera el DNS actúa como traductor para las direcciones que usamos los usuarios. Para configurar esto, véase el siguiente ejemplo de /etc/resolv.conf:

#
# 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.6

Tras 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.


AUTENTIFICACION: FICHERO CHAP-SECRETS Y PAP-SECRETS

Tras crear los dos ficheros anteriores y modificar resolv.conf sólo falta incluir nuestra cuenta y password en el fichero /etc/ppp/pap-secrets, una pequeña base de datos de cuentas de proveedores de Internet y de passwords de las mismas, con el siguiente formato:

"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).


PROCESO DE CONEXION

Una vez creados los scripts para pppd, para conectar a Internet entramos como root y ejecutamos pppd junto con el fichero de opciones de nuestro proveedor:


 [root@compiler esp1]:/ # pppd file /etc/ppp/mi_proveedor

Nada 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).

Salida de tail -f /var/log/messages


 [root@compiler esp1]:/ # tail -f /var/log/messages 

Ahora 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.


DESCONEXION DE INTERNET

Para realizar la desconexión de Internet (incluido el cuelgue del teléfono), basta con ejecutar el siguiente comando (siempre como root):


 [root@compiler esp1]:/ # killall pppd

Tambié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.


ACCESO COMO ROOT

Una de las cosas que suele preguntar la gente nueva en Linux, frente al miedo a que le hackeen el ordenador (por ejemplo, de que alguien desde el exterior consiga su clave de root y pueda acceder a su sistema mediante telnet), es si debe navegar por Internet como root. Mi respuesta es siempre la misma: en general no pasa nada, pero no es aconsejable. Resulta muy sencillo entrar como root en una consola virtual, conectar a Internet mediante pppd, cambiar a otra consola virtual (ALT+F2), hacer login como otro usuario normal, y con este acceder a los diferentes recursos de Internet. A la hora de realizar la desconexión, se puede volver a la primera consola virtual (la de root, con ALT+F1), ejecutar el killall pppd, y volver como usuario normal al trabajo que estuvieramos realizando.

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.


EN RESUMEN

En el presente artículo hemos aprendido a configurar los diferentes puertos series de Linux, a utilizar el modem para llamadas a otros equipos o BBSs (mediante minicom o seyon), así como a realizar conexiones a Internet a través de Infovia gracias al software incluido en el propio Sistema Operativo Linux, rey de redes.


Figura 1: "Netscape Communicator para Linux."
Figura 2: "Aspecto del programa minicom."
Figura 3: "Salida de tail -f /var/log/messages"
Santiago Romero


Volver a la tabla de contenidos.