9.5 ¿Cómo conecto a internet con pppd ?

Imagen de ElSanto

¿Que es pppd? Se trata de la primera posibilidad de conexión a internet que ofrece Linux. Es una conexión a internet que gasta pocos recursos y con posibilidad de hacerla desde la consola, sin necesidad de entrar en modo gráfico. Cualquiera que aspire a obtener al máximo rendimiento de la conexión a internet, por ejemplo automatizando la conexión, automatizando la recogida de correo, noticias, ftp, etc... casi seguro no tendrá más remedio que pasar por aquí.

Como inconvenientes, tiene unos cuantos. El más destacable es la falta total y absoluta de interactividad o de información en pantalla de cómo va la conexión, siendo necesario el uso de otros comandos (como ifconfig) o la observación de archivos históricos (/var/log/messages) para averiguar si la conexión se ha realizado con éxito o ha habido algún error.

La configuración de pppd se basa en la creación de una serie de archivos.

/etc/ppp/options : Configuración de la conexión y del puerto serie
/etc/ppp/marcado : Configuración del modem y marcado del número de teléfono
/etc/ppp/pap-secrets : Claves de acceso para identificación con PAP
/etc/ppp/chap-secrets : Claves de acceso para identificación con CHAP
/etc/resolv.conf : Servidores de nombres (DNS)

Así un posible /etc/ppp/options sería así:

-----------------------------------------------------------------
connect "/usr/sbin/chat -v -f /etc/ppp/marcado"
name mi_login@mi_proveedor
defaultroute
noipdefault
modem
crtscts
asyncmap a0000
mru 576
/dev/ttySx
115200
--------------------------------------------------------------------

Comentarios:

  • En mi_login@mi_proveedor irá el login y el proveedor (el proveedor sin dominio, por ejemplo: fulanito@arrakis)
  • Donde pone /dev/ttySx, la 'x' indica el puerto serie: /dev/ttyS0 = COM1, /dev/ttyS1 = COM2, etc...
  • La velocidad 115200 NO es la velocidad del modem, es la velocidad entre el modem y el puerto serie, que no tiene por qué coincidir con la velocidad en el lado de la línea telefónica. La velocidad del modem (33600, 28800...) NO hay que ponerla en ningun sitio. Algunos modems no soportan esa velocidad entre el modem y el puerto serie y habrá que probar con 57600 o incluso con 38400. Si se tiene una UART 16450 o 8250, utilizar 38400 (usar setserial /dev/ttySx para conocer la UART del modem o del puerto serie, donde 'x' indica el puerto serie de la misma forma que antes). Nótese que el valor óptimo es 115200 y conforme menor sea dicho valor, menos rendimiento le sacaremos al modem.

/etc/ppp/marcado:

--------------------------------------------------------------
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
""
"AT& F" TIMEOUT 5 OK
"ATW1DTnumero_de_telefono" TIMEOUT 100 CONNECT
---------------------------------------------------------------

Comentarios:

  • Los ABORT iniciales sirven para que, si el modem encuentra una situación anómala (no hay tono de llamada, comunicando...) y responde alguno de esos mensajes (BUSY, NO CARRIER...), el pppd pare y no pierda tiempo hasta fallar el TIMEOUT 100 que sería el que acabase la conexión. El problema es que no todos los modems responden de la misma forma (por ejemplo, el mío responde "NO DIAL TONE" en vez de "NO DIALTONE") y la correspondencia debe ser exacta. Por tanto, para una configuración correcta, será necesario consultar en el manual del modem cómo son estos mensajes.
  • El "AT& F" es la cadena de inicialización del modem. La que se indica es de las más estandar. No obstante, en algunos modems puede ser mejor "ATZ" o variantes de "AT& F" (como "AT& F1", "AT& F2"...). Como referencia, se debe usar aquella que configure el modem para usar control de flujo hardware (RTS/CTS). En caso de no acertar en la configuración del modem, es posible que se produzcan algunos efectos indeseables (el modem no cuelga al cortar la comunicación, conexión lenta...). Una posibilidad es "fusilar" la que use windows.
  • Se puede ver dentro del directorio de windows un archivo llamado modemlog.txt o modemdet.txt.
  • El numero_de_telefono es precisamente eso. El número de telefono del nodo de Infovia Plus, el de Iddeo, etc...

/etc/ppp/pap-secrets y /etc/ppp/chap-secrets

Existen dos formas posibles de identificación cuando nos conectamos a un proveedor: PAP y CHAP. PAP es la más sencilla y es la que usaba por ejemplo Infovia. CHAP es muy usada en Infovia Plus.

El formato de ambos archivos es el mismo:

------------------------------------------------------------------------
mi_login@mi_proveedor * password
------------------------------------------------------------------------

Comentarios:

  • mi_login@mi_proveedor debe ser exactamente lo mismo que se puso como parámetro de la opción 'name' en /etc/ppp/options.
  • Los campos Van separador por TABULADORES no por espacios.
  • Si se dispone de más cuentas en otros proveedores, se pueden añadir nuevas líneas con el mismo formato.

¿Cual uso, pap-secrets o chap-secrets? Si sabes que tu proveedor usa PAP, grábalo como pap-secrets. Si usa CHAP, grábalo como chap-secrets. Si no sabes cual usa, puedes hacer prueba-y-error o crearte los dos, o crearte uno sólo y hacer un enlace simbólico de uno al otro. Por ejemplo, si has creado chap-secrets, para hacer un enlace desde pap-secrets se haría:

cd /etc/ppp
ln -s chap-secrets pap-secrets

Esto en teoría haría que pppd y tu proveedor se pusieran de acuerdo para elegir PAP o CHAP según prefieran.

/etc/resolv.conf :

Aquí irían las direcciones de los DNS primario y secundario. El formato es muy sencillo:

-------------------------------------------------------
nameserver DNS_primario
nameserver DNS_secundario
-------------------------------------------------------

Por ejemplo, nameserver 195.5.65.2

Comentarios:

  • En lugar de DNS_primario y DNS_secundario, se pondrán las direcciones numéricas de los DNS primario y secundario respectivamente. Los DNS primarios y secundarios deberás preguntarlos a tu proveedor y deberán dártelos, pues no son secretos.
  • Si no tuvieras DNS_secundario, puedes ahorrarte la segunda línea.

Una vez creados los scripts, la conexión se efectuaría al escribir pppd o /usr/sbin/pppd.

Para comprobar si la conexión tiene éxito, se puede usar el comando /sbin/ifconfig y ver si al cabo de un minuto o dos aparece un bloque nuevo ppp0.

Otra forma es consultando periódicamente el fichero /var/log/messages hasta ver si aparece algo como esto:

Local IP address xxx.xxx.xxx.xxx
Remote IP address yyy.yyy.yyy.yyy

Lo cual indicaría una conexión con éxito. Una forma de hacer esto sería con la orden tail -f /var/log/messages y pulsar Ctrl+C cuando veamos que la conexión ha funcionado o fallado.

La desconexión se realizaría introduciendo la orden killall pppd.

En caso de necesitar ayuda, remitir la duda a es.comp.os.linux.misc o es.comp.os.linux.redes mandando copia de los scripts (ocultando los passwords, claro) y lo que haya salido en /var/log/messages durante la conexión fallida.

NOTA IMPORTANTE: Los ficheros arriba descritos han de crearse desde cero con un editor de Linux. Crearlos con un editor de DOS o de Windows, o con operaciones de cortar-y-pegar en Windows añade un caracter no visible al final de cada línea que Linux confundiría con un caracter normal, inutilizando los scripts.