CONEXIÓN Y CONFIGURACIÓN DE INTERNET DESDE LINUX

Artículo 1: PPP - LA CONEXIÓN A INTERNET

Autor: (c) Santiago Romero
Revista: NetOnline (Prensa Técnica) nº 12, Agosto-1998


El avance de Linux en su uso como sistema monousuario (para uso personal en sistemas no conectados a redes) ha despertado el interés de utilizar este S.O. (rey de redes), y su amplia colección de herramientas, para el acceso a Internet. En esta serie de artículos se aprenderá a configurar el acceso a Internet mediante el Sistema Operativo Linux.

A lo largo de los diferentes capítulos de este curso se tratará de enseñar a configurar y mantener los programas que dan acceso a los diferentes servicios del mundo Internet bajo Linux, comentando el proceso de configuración de una manera sencilla que permita a cualquier usuario (con conocimientos mínimos de GNU/Linux) configurarse la conexión a Internet por Infovia, el correo electrónico y el acceso a páginas Web, el IRC, etc., todo esto desde un sistema operativo tan potente y estable como es Linux.


CONFIGURACIÓN DE LA CONEXIÓN A INTERNET

Para realizar la conexión a internet podrían usarse asistentes especifícos existentes en algunos escritorios o aplicaciones, como es el caso de kppp del escritorio KDE. En nuestro caso se ha optado por no utilizar este tipo de asistentes pues no todos los sistemas disponen de ellos. En lugar de esto se aprovecharán los pequeños elementos incluidos en Linux en todas las distribuciones (como pppd), que nos permitirán realizar nuestras tareas de una forma más estándar y rápida. Recordemos que la filosofía de Linux es que mediante la combinación de pequeñas herramientas pueden obtenerse grandes soluciones.


CONFIGURACION DE LOS PUERTOS DEL MODEM

El dispositivo del modem es normalmente detectado e incluida su inicialización durante el arranque por la mayoría de los programas de instalación de las diferentes distribuciones. Nuestro modem usará una determinada IRQ y estará conectado a uno de los 4 puertos COM que suelen estar presentes en el PC. Si es un modem interno suele localizarse en el COM4 (ó COM3), mientras que los externos suelen estar conectados en el COM2, aunque todo esto es variable vía jumpers o conectores.

En Linux, en el directorio /dev pueden encontrarse todos los devices (dispositivos) conectados a nuestro PC, entre ellos los diferentes puertos COM, bajo los nombres /dev/ttyS0 a /dev/ttyS3 (COM1 a COM4), que son los ficheros especiales mediante los cuales se accede a dichos puertos. También se suele disponer de /dev/modem, que no es más que un enlace al puerto COM 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):


 Gandalf:/# ln -s /dev/ttySx /dev/modem


 TABLA 1:
   
   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

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 (o en /etc/rc.serial, /sbin/init.d/serial o /etc/rc.d/rc.local según distribuciones) e incluiremos la línea:


 /bin/setserial /dev/modem spd_vhi 

Normalmente el modem suele estar configurado de esta manera desde la instalación de Linux, pero nunca está de más cerciorarse de esto. 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:


 Gandalf:/# setserial /dev/modem  spd_vhi
 
A continuación testeamos el puerto serie mediante setserial:


 Gandalf:/# setserial /dev/modem -a 
 ttyS3, Line 1, UART: 16550A, Port: 0x02e8, IRQ: 3 
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000, closing_wait2: infinite
        Flags: spd_vhi skip_test 

Para comprobar si nuestro modem funciona correctamente puede utilizarse el programa minicom (para conectarse a una BBSs, por ej.), que una vez configurado nos permitirá realizar llamadas en modo terminal mediante comandos AT (o mediante el menu que incluye) y testear el funcionamiento del modem. Una vez comprobado el correcto funcionamiento puede procederse a la configuración de pppd, el daemon que gestiona las conexiones PPP.


PPP Y EL ACCESO A INTERNET

La conexión entre nuestro ordenador e Internet no es real sino que todos los datos pasan por nuestro ISP (Proveedor de Servicios de Internet, tales como RedesTB, CTV, arrakis, etc.), que es el verdadero enlace entre nosotros y la Red. 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).

El trabajo de configuración en sí mismo es bastante sencillo y consistirá simplemente en crear varios ficheros de configuración para el programa pppd, que es quien realiza la conexión tomando los datos necesarios para realizar la misma desde los ficheros de configuración que le indiquemos. Todo el proceso de configuración debe hacerse como root, así como la conexión (en principio y hasta que se comente el uso de sudo o de UserGroups que permitan realizar estas conexiones a los usuarios no super-user).

Muchos 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). Para saber si tenemos instalado dicho paquete, y su versión, ejecutamos:

 
 Gandalf:/# rpm -q ppp
 ppp-2.2.0f-6 

Para realizar una conexión bastaría con ejecutar el programa pppd con los parámetros adecuados:


 Gandalf:/ # pppd  /dev/modem 115200 passive modem [etc.]

En la práctica la gran cantidad de opciones que se utilizan para realizar la conexión hace que resulte más cómodo incluirlas en ficheros de opciones, llamando a pppd mediante uno de estos ficheros:


 Gandalf:/ # 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ésemos 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:


 Gandalf:/ # pppd -file /etc/ppp/proveedor_arrakis 

A continuación puede observarse 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 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 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:

1.- 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).
2.- La opción crtscts activa el control por hardware del flujo de datos (usando RTS/CTS) del puerto serie.
3.- La opción passive le indica que si no se recibe respuesta al iniciar una conexisperar pasivamente a recibir datos válidos.
4.- Mediante modem le indicamos a pppd que debe usar la línea telefónica.
5.- 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áxima posible.
6.- El parámetro name pecifica la cuenta de nuestro usuario para la autentificación de la identidad. No especifica el nombre de nuestra dirección email, sino la cuenta con la que realizamos la conexión (el mismo que por ejemplo se coloca en el asistente de conexiones de Windows). El password se introduce en un fichero aparte (autentificación PAP), como veremos a continuación.


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. Veamos un ejemplo de este tipo de fichero:


TIMEOUT 5
"" ATZ
OK ATDT055
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT WAITING
TIMEOUT 70
CONNECT ""
El significado de este fichero viene a ser 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. Mediante chat controlamos la acción a ejecutar por pppd a distintos posibles estados del modem, como BUSY, NO CARRIER, y CONNECT (para más información, man chat). A este fichero hay que darle permisos de ejecución, de manera que (siempre como root) ejecutamos la orden:


 Gandalf:/ # 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:


#
# 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 la DNS de nuestro ISP, puede mirarse en la conexión que tengamos bajo Windows, entrando en el icono de conexión mediante el botón derecho del ratón y examinando la Configuración de TCP/IP, o llamar a nuestro proveedor para que nos informe de la misma.


FICHERO 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 (recordad la separación por medio de tabuladores y no de espacios simples):

# Secrets for authentication using PAP
# client               server        secret
"sromero@arrakis"       *       "mi_password"
Con esta modificación ya tenemos configurada totalmente la conexión a Internet.


PROCESO DE CONEXIÓN

Una vez vistos todos los ficheros implicados en el funcionamiento de una conexión, el lector puede crear sus propios ficheros de opciones, que en general serán practicamente iguales a los de los ejemplos cambiando las identificaciones (name y PAP-SECRETS) y la DNS y domain por la de nuestro ISP. Dichos ficheros de configuración no será necesario volver a modificarlos, quedando ya configurado el sistema para futuras conexiones. Para realizar nuestra primera conexión puede seguirse el siguiente proceso:

1.- Entramos como root en la primera consola virtual y ejecutamos:

 
 Gandalf:/ # tail -f /var/log/messages 

Mediante este comando obtendremos en pantalla los datos que vayan siendo añadidos por el propio sistema a /var/log/messages, el fichero de mensajes del sistema, con lo que podremos ver las salidas generadas por pppd y por tanto verificar todos los parámetros de la conexión. Esto sólo es necesario realizarlo la primera vez que tratemos de realizar la conexión para ver posibles errores. Tail puede cerrarse con en cualquier momento pulsando CTRL+C.

2.- Entramos a la 2a consola virtual con ALT+F2 y entramos como root. En esta consola ejecutamos pppd para comenzar el marcado:


 Gandalf:/ # pppd file /etc/ppp/mi_proveedor 

3.- Pasamos de nuevo a la primera consola virtual (ALT+F1) y observamos los mensajes obtenidos desde pppd para cada una de las partes de la conexión (marcado, conexión, autentificación, negociació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 PlugNPlay y este no ha sido detectado por Linux habremos de configurarlo manualmente, como se verá en la próxima entrega.

En el cuadro 2 puede observarse la salida típica de una conexión pppd realizada con éxito.


 CUADRO 2:

 Salida del comando tail -f /var/log/messages:

 Gandalf pppd[151]: pppd 2.2.0 started by root, uid 0
 Gandalf chat[154]: send (ATZ^M)
 Gandalf chat[154]: expect (OK)
 Gandalf chat[154]: ATZ^M^M
 Gandalf chat[154]: OK -- got it
 Gandalf chat[154]: send (ATDT055^M)
 Gandalf chat[154]: abort on (NO CARRIER)
 Gandalf chat[154]: [más cadenas de abort on]
 Gandalf chat[154]: expect (CONNECT)
 Gandalf chat[154]: ATDT055^M^M
 Gandalf chat[154]: CONNECT -- got it
 Gandalf chat[154]: send (^M)
 Gandalf pppd[151]: Serial connection established.
 Gandalf pppd[151]: Using interface ppp0
 Gandalf pppd[151]: Connect: ppp0 <--> /dev/modem
 Gandalf pppd[161]: [cadenas de validación e IPCP]
 Gandalf pppd[161]: local  IP address 195.5.78.119
 Gandalf pppd[161]: remote IP address 192.168.13.200

4.- En este momento ya podemos pasar a cualquier consola virtual y entrar como un usuario cualquiera con el fin de utilizar cualquier programa de navegación, IRC, email o de cualquier servicio de Internet, como Netscape, Arena, lectores de correo o news, ftp, o telnet.


DESCONEXIÓN DE INTERNET

Para realizar la desconexión de Internet (incluido el cuelgue del teléfono), bastaría con 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 num_proceso). También puede utilizarse el comando killall pppd para matar todos los PID asociados y, por tanto, la conexión. El cierre de la conexión puede verificarse en /var/log/messages:

 
 Gandalf pppd[161]: Hangup.
 Gandalf pppd[161]: Connection terminated.
 Gandalf pppd[161]: Exit.

Aparte de estos métodos de desconexión, en algunas distribuciones se incluye el script ppp-off.


EN RESUMEN

Aunque pueda parecer un proceso muy complejo, en realidad simplemente mediante la creación de un par de ficheros se configura todo el acceso a Internet. Estos ficheros los podremos dejar ya así y la conexión y desconexión será simplemente una llamada a pppd o a killall pppd, resultando muy sencillo y rápido por parte del usuario. Por otra parte, pronto veremos qué ventajas no da realizar conexiones con Linux gracias a las herramientas que incluye y que comentaremos en próximos números.


EN LA PRÓXIMA ENTREGA

Hemos visto cómo configurar el acceso a nuestro ISP dejándolo organizado para realizar conexiones de una manera sencilla mediante pppd. En el próximo artículo de esta serie se comentará cómo se configura Netscape Communicator para Linux, la configuración de los famosos modems Plug'n'Play, la configuración de recogida y envio automático de correo y news al realizarse el proceso de conexión mediante pppd, el uso de algunos programas de linux como ftp y telnet accediendo por ejemplo a nuestro propio ordenador (localhost). Hasta entonces, el lector puede ir realizando sus propios scripts de conexión a Internet desde el fabuloso Linux.


Santiago Romero


Volver a la tabla de contenidos.