¿Por qué los modems están normalmente asociados a puertos serie? Lo impone el hecho que cuando uno usa un modem, la línea telefónica a la que está conectado sólo tiene un cable por el que enviar la información. Para transmitir simultáneamente los 8 bits de los que consta un byte, que es la unidad de información usual en los ordenadores, harían falta 8 cables (8 líneas telefonicas). Una solución alternativa es enviar los 8 bits sucesivamente uno detrás del otro a intervalos de tiempo regulares. Precisamente esto es lo que hace un puerto serie.
El corazón del puerto serie es un chip del ordenador llamado UART (Receptor-Transmisor Asíncrono Universal) el cual se encarga de todo el trabajo, tanto para recibir datos como para enviarlos. Así, la potencia de dicha UART y lo bien configurada que esté influirán en la calidad de la comunicación.
El flujo de bits generado por la UART/puerto serie no puede introducirse directamente en la línea telefónica al no estar preparada para ello. La solución es utilizar un aparato intermedio que tome los bits que llegan del puerto serie y emita un tono u otro por la línea telefónica según le llegue un bit 0 o un 1. Esto es lo que se conoce como "modular una señal". Al otro lado del hilo telefónico otro aparato similar interpretaría estos tonos y generaría unos o ceros en función del tono recibido. Éste sería el paso opuesto, "demodular la señal". Como normalmente se deseará enviar y recibir, el aparato intermedio deberá realizar ambas funciones: MOdular y DEModular (MO-DEM). Así funcionaban los modems antiguos. Los modernos se basan en los mismos principios aunque son infinitamente más versátiles y potentes.
Los modems modernos realizan la modulación y demodulación utilizando chips especiales llamados DSP (Procesadores Digitales de Señales en castellano). Son como microprocesadores, pero muy rápidos y optimizados para tratamiento de señales. Los modems modernos también incorporan sistemas de compresión de datos que aceleran las transferencias, sistemas de corrección de errores, cambios automáticos de velocidad de transferencia si la calidad de la señal mejora o empeora, etc...
Existen dos clases de modems: Los internos y los externos. Los externos van conectados a un puerto serie del ordenador por lo que simplemente se limitan a las funciones descritas de modulación-demodulación, compresión, correción, etc. Los modems internos "de verdad", al no ir conectados a un puerto serie incorporan una UART como las de dichos puertos serie, de forma que a ojos del ordenador se trata de un puerto serie más.
Son modems internos "capados". Los fabricantes les quitan chips para que sean más baratos. Por ejemplo, algunos no tienen UART, a otros les quitan los protocolos de compresión, etc. Para que tengan las mismas funciones que los modems "de verdad", las funciones correspondientes a los chips retirados las tienen que realizar drivers del sistema operativo, o sea el microprocesador del ordenador.
Los fabricantes de los distintos modems sólo ofrecen drivers para Windows y no dan especificaciones de como se programan, y así desarrollar versiones para Linux. Por tanto estos modems no funcionan en Linux.
Sobre los modems PCI, no tengo noticias de que ninguno sea un modem "de verdad". Es probable que en el futuro aparezcan pues el hecho de ser PCI no es ningún impedimento para ello.
La primera pregunta sería: ¿ Debo configurar mis puertos serie ?
En general, sólo deberás configurar los puertos serie en estos casos:
Un puerto serie (más exactamente, la UART del puerto serie) usa un rango de direcciones de entrada-salida y una solicitud de interrupción para comunicarse con el sistema operativo. Para el correcto funcionamiento del ordenador y del sistema operativo, ningún otro dispositivo del ordenador puede usar alguno de esos valores. Nuestro objetivo será conseguir esto, y en segundo lugar, hacer que el sistema operativo atienda a ese rango de entrada-salida y esa interrupción para comunicarse con el modem.
Tradicionalmente la elección del rango de entrada-salida y la interrupción se realizaba a través de una serie de microinterruptores manuales situados en el modem. Conocida la posición de estos interruptores, se configuraba el sistema operativo para que usara esos valores. Hoy en día casi la totalidad de los modems internos son Plug'n'Play, lo cual significa que el sistema operativo puede, por software, decirle a la tarjeta qué valores debe usar.
Configuración de modems Plug'n'Play en Linux
Si tienes un modem Plug'n'Play, lo primero que habrá que hacer es decirle que rango de entrada-salida y que interrupción debe usar. Lo más cómodo en este caso es usar los mismos valores que Windows 95. Para ello arranca Windows 95, y haz Inicio->Configuración->Panel de control. Una vez en el Panel de control, elige el icono 'Sistema' y dentro de él, el 'Administrador de dispositivos'. Dentro del apartado 'Puertos COM y LPT' elige el correspondiente al puerto COM donde tienes el modem. Busca en 'Recursos' el rango de entrada-salida y la interrupción que use y apúntalos.
Con esos valores en la mano, puedes configurar tu modem Plug'n'Play en Linux.
Eso se hace con el programa 'isapnp'. Entra en Linux y busca si tienes
un archivo llamado /etc/isapnp.conf
. Si no lo tienes haz lo siguiente:
pnpdump > /etc/isapnp.confEsto generará el esqueleto de un archivo de configuración para 'isapnp'. Este programa generará un listado con todas las posibles posibilidades de configuración que permiten tus dispositivos Plug'n'Play, pero todas deshabilitadas con un '#' al principio de cada línea. Los dispositivos aparecen por secciones por lo que es fácil encontrar los correspondientes a tu modem.
Así tu misión se reducirá a encontrar en la sección correspondiente a tu modem
del archivo /etc/isapnp.conf
, dos líneas así:
# (IO 0 (BASE 0x0NNN)) # (INT 0 (IRQ MM (MODE +E)))donde NNN sea el rango de entrada-salida que use el modem en Windows y MM la interrupción. Las líneas no tienen por qué ser consecutivas ni ir en ningún orden especial. Cuando las encuentres, quítales el '#' inicial. Luego, al final de la sección del modem encontrarás una línea parecida a esta:
# (ACT Y)De la misma forma, le quitas el '#' inicial. Ya está. Listo para enviar dichos valores al modem. Esto lo hace la orden
isapnp /etc/isapnp.conf
y deberá aparecer en los scripts de arranque de Linux para enviar los
valores cada vez que enciendas el ordenador. Las distribuciones más
recientes (Red-Hat 5.0 y posteriores, Debian 2.0 y posteriores) ya incluyen
dicha invocación por lo que no necesitarás tocar los scripts de arranque.
En caso de tener una distribución antigua, será necesario añadir dicha
orden. Un buen sitio para incluirla sería el script rc.local
, que suele
estar situado en uno de los subdirectorios de /etc
.
De todas formas será necesario ejecutar isapnp /etc/isapnp.conf
si queremos
activar los cambios en este momento y nos queremos ahorrar el rearrancar la
máquina.
Ahora hay que decirle al sistema operativo que debe usar esos valores para comunicarse con el modem. En el caso de los modems Plug'n'Play lo que viene a continuación es imprescindible.
Configuración de los puertos serie a ojos del sistema operativo
Lo primero que hay que saber es que Linux no llama a los puertos serie de la misma forma que el DOS o Windows. Así existe la siguiente correspondencia:
DOS-Windows Linux ----------- ---------- COM1 /dev/ttyS0 COM2 /dev/ttyS1 COM3 /dev/ttyS2 COM4 /dev/ttyS3Ojo a las mayúsculas y las minúsculas del nombre de Linux. Son importantes.
Para leer la configuración y configurar los puertos serie se usa
la orden 'setserial'. Para leer la configuración, hay que ejecutar
setserial
con el puerto serie que deseamos ver como único parámetro.
Por ejemplo:
setserial /dev/ttyS1nos muestra la configuración de COM2 y se obtendrá algo como esto:
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ 3o sea, el puerto serie (
/dev/ttyS1
), el tipo de chip UART que lleva (16550A),
el puerto base de entrada-salida (2f8) y la solicitud de interrupción (3).
Nótese que estos son los valores que el sistema operativo CREE que debe
utilizar para comunicarse con el modem/puerto serie. Es posible que ahora no
coincidan con los reales, incluso que ni siquiera detecte la UART, lo cual no
es raro en caso de modems Plug'n'Play.
Si no coinciden, asignaremos los valores adecuados. Por fortuna, por lo general no será necesario indicar la dirección base de entrada-salida. Salvo casos muy, muy excepcionales COM1 usa la dirección base 3f8, COM2 la 2f8, COM3 la 3e8 y COM4 la 2e8, y eso setserial lo sabe. Así, al indicar el puerto serie, setserial implícitamente sabe cual es la dirección base. En cambio, en caso de tener un puerto COM5 o superior sí será necesario indicar la dirección base.
Así para COM1-COM4 sólo indicaremos la interrupción. Por ejemplo, supongamos que tenemos un modem en COM3 que usa la interrupcion 5. La orden a introducir sería.
setserial /dev/ttyS2 irq 5 autoconfigY si quisiéramos indicar también la dirección base de entrada-salida (por tener el modem en COM5, por ejemplo) se haría así.
setserial /dev/ttyS4 port 0x2e8 irq 10 autoconfiglo cual hace que el sistema operativo use un rango de direcciones desde la 2e8, y la interrupción 10. Nótese que el '0x' antes de la dirección base es importante.
Por último sólo queda ver que los cambios han surtido efecto. Para ello bastará usar de nuevo setserial de la primera forma que se indicó.
Por desgracia esta configuración durará hasta que apaguemos el ordenador.
Por tanto será necesario incluir la línea o líneas de configuración
setserial /dev/ttyS2 irq 5...
en uno de los scripts de arranque de
Linux para que los puertos se configuren cada vez que se inicie el sistema
operativo. Un buen candidato es rc.local
, que estará en uno de los
subdirectorios de /etc
. En caso de ser necesario incluir en rc.local
tanto
el isapnp /etc/isapnp.conf
para configurar un modem Plug'n'Play, y el
setserial...
de los puertos serie, deberá colocarse el isapnp...
en
primer lugar.
También habrá que usar setserial
de la misma forma si el ordenador tuviera
más de dos puertos serie, (contando los que traen los modems internos en caso
de disponer de alguno). El motivo es que por alguna extraña razón de diseño del
PC, COM1 y COM3 por defecto comparten la misma interrupción, y a pesar de que
esa configuración no es deseable, Linux por defecto busca COM3 en la misma
interrupción que COM1, por lo que habría que cambiar la de COM3. Lo mismo
ocurre con COM2 y COM4 por lo que habría que cambiar COM4. Si no se hiciera
esto, podrían ocurrir cosas muy raras, como ratones y modems que dejan de
funcionar, modems que funcionan "a pedales" (cuando se mueve el ratón), etc...
Una vez activados los cambios con el comando isapnp para los modems Plug'n'Play y el/los comando(s) setserial necesarios para configurar el/los puerto(s) serie, o se ha reiniciado el ordenador con los scripts de arranque modificados para que ejecuten dichas órdenes (es más seguro hacer lo primero), se puede probar si todo va bien. La forma más sencilla es usar un programa de comunicaciones y enviarle comandos al modem para ver si responde.
Así un programa adecuado sería minicom
que es un terminal de comunicaciones
tipo Telix. No es complicado de configurar. Pulsando Ctrl+a
y luego z sale
un menú. Una de las opciones 'cOnfigure minicom' dará paso a otro menú donde
la opción "Serial port setup" nos permitirá elegir el puerto serie, la
velocidad con la que nos comunicaremos con él (no la velocidad del modem) y
otras opciones más. Lo normal es usar 115200 o 57600 para la velocidad, 8N1,
"Hardware Flow Control: Yes" y "Software Flow control: No". Una vez
configurado y sin ningún menú sobre la pantalla escribes 'AT' (Las dos
en mayúsculas o las dos en minúsculas) y pulsas ENTER. Si el modem responde
al instante 'OK' o con un número cero, indicaría que el modem funciona y
que responde bien. Para completar la faena puedes probar a conectarte a una
BBS o a tu nodo de infovia plus (los nodos de infovia plus permiten una
conexión tipo terminal, aunque no sé que se puede hacer con ella) y así
probar que todo va bien.
Si el modem tarda en responder al 'AT', o no responde, algo ha fallado en la configuración del modem o del puerto serie y habría que revisar lo hecho.
Un comentario sobre el 'AT'. Cuando se escriben estas dos letras pueden ocurrir varias cosas.
ENTER
el modem responda con OK. Para
solucionar esto deberías activar el eco local del terminal con Ctrl+a e
o escribir a ciegas "ATE1" y pulsar ENTER
.Ctrl+a e
o escribe "ATE0" aunque te salga duplicado.
Cuando pulses ENTER tras el ATE0 ya funcionará bien.
¿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 crstcts asyncmap a0000 mru 576 /dev/ttySx 115200 --------------------------------------------------------------------Comentarios:
/dev/ttySx
, la 'x' indica el puerto serie: /dev/ttyS0 = COM1,
/dev/ttyS1 = COM2
, etc...
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 "ATDTnumero_de_telefono" TIMEOUT 100 CONNECT ---------------------------------------------------------------Comentarios:
/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:
/etc/ppp/options
.
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-secretsEsto 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:
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.yyyLo 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.
Después de haber utilizado diversos sistemas para conectar con Internet a través de InfovíaPlus mediante módem y haber constatado en el grupo de noticias es.comp.os.linux la gran cantidad de veces que se pregunta acerca de cómo conectarse mediante kppp, hemos pensado que este breve resumen sobre como establecer la conexión usando el kppp podría ser interesante para algunos que se inician en linux y disfrutan del entorno grafico KDE. Las notas que escribo a continuación se refieren a la versión KDE 1.0 (las diferencias con respecto al KDE 1.1 son mínimas)y por lo tanto voy a partir de la base de que el usuario de linux ha instalado ya el KDE y le funciona sin problemas de ningún tipo.
Guía paso a paso de conexión a internet a través de InfovíaPlus con kppp.
Antes de comenzar
El módem debe estar correctamente instalado y su funcionamiento verificado (usando por ejemplo el programa minicom). El dispositivo asociado al módem dependerá del puerto serie al que está conectado. Si está conectado al "COM2" (en jerga DOS) el dispositivo será /dev/ttyS1
, y podemos hacer un enlace simbólico a /dev/modem
:
ln -s /dev/ttyS1 /dev/modemAdemás debemos saber su velocidad máxima. Si el módem es de más de 28,8Kbps podemos tomar 115200.
Otros datos fundamentales son los que tienen que ver con nuestro proveedor de internet:
Comenzamos
Invoquemos kppp mediante acción sobre el correspondiente icono del menú del KDE o escribiendo en un terminal
[user@localhost]# kpppPara que programa funcione para un usuario normal el propietario y el grupo deben ser root y el ejecutable debe tener el bit SETUID activado, para poder abrir el dispositivo del módem. Si no es así se pone uno superusuario
[user@localhost]# su root (... da la password... y entonces hacemos) [user@localhost]# chown root.root kppp [user@localhost]# chmod +s kppp [user@localhost]# exit (...para volver a usuario normal...)Si todo ha ido bien aparecerá la ventana del kppp y con el ratón accionaremos la tecla
setupEntonces se abrirá la ventana kppp configuration con varias pestañas indicando secciones: Accounts; Device; Modem; PPP y About. Comenzaremos por la primera sección
Accionamos la tecla new y aparece una nueva ventana llamada new account con otra serie de subsecciones: desde Dial hasta Accounting.
Subseccion DIAL
Esta sección contiene el Dial Setup que debemos rellenar:
Connection name: Ponemos el nombre que queramos dar a la conexión; por ejemplo INFOPLUS
Phone number: 954547000
Authentication: La autenticación puede realizarse de cuatro modos; script-based, PAP, terminal-based o CHAT; debemos elegir la opción PAP
Store password: Si no quieres tener que teclear la password cada vez que te conectes deja activada esta opción
Execute program upon connect: Debe tener su casillero vacío. No escribas nada.
Execute program upon disconnect: Debe tener su casillero vacío. No escribas nada.
Edit pppd arguments: Una vez activada la opción los argumentos se introducen escribiéndolos en el casillero "arguments" y pulsando la tecla "add". Deben estar los siguientes:
detach defaultroute asyncmap a0000 noipdefault ipcp-accept-local ipcp-accept-remotecuando hayamos terminado, pulsamos "close" y pasamos a las subsecciones siguientes
NOTA: Estos argumentos los tenía así establecidos para cuando conectaba con Infovía. Al pasar a InfovíaPlus, alguno puede quedar superfluo, pero ¡funciona!, así que no quité ninguno.
Subseccion IP
Contiene el IP setup. La única opción que debe estar activada es Dynamic IP address
Subseccion DNS
Aquí tenemos el menú del DNS Server:
Domain name: proveedor.es
DNS IP address: La(s) introducimos en este casillero: 194.150.24.25 y pulsando la tecla "add" la(s) pasamos al DNS address list. Al menos debe haber una.
Disable existing DNS servers during connection: Esta opción debe estar activada
Subseccion GATEWAY
Contiene el Gateway setup las opciones que deben activarse son:
Default Gateway
Assign the default route to this gateway
Subseccion LOGIN SCRIPT
¡Principiantes Ni tocarlo! El edit script deberá estar vacío, con el primer casillero de opciones presentando la opción "EXPECT".
Subseccion ACCOUNTING
La opción Enable accounting debe estar activada. Selecciona entonces con la opción "Selected" : Spain y dentro de ella, Telefónica Local y deja la opción "Volume accounting: No accounting" desactivada.
Entonces, una vez que hemos rellenado todas las subsecciones de la sección ACCOUNTS, accionamos el botón OK de la ventana "new account" y volvemos a la de kppp configuration. Hay que rellenar el resto de las secciones.
Aquí está el menú Serial device:
Modem device: pon el dispositivo correspondiente, p.ej. /dev/ttyS1 (para modem en puerto serie com2)
Flow control: CRTSCTS (hardware flow control)
Line termination: La que corresponda. Generalmente es CR/LF
Connection speed: La que corresponda, p.ej. 115200
Modem lock file: /var/lock/LCK..modem
Este fichero debe estar por defecto. No lo cambies si no sabes lo que haces, pues algunos programas como mgetty dependen de la existencia de tal fichero y kppp no funcionará.
Busy wait: 0 seconds
Modem Asserts CD line: opción desactivada
Modem commands: Deja los valores por defecto y no cambies nada
Query modem: Pulsando este botón kppp insta al módem a que se identifique. Sirve para probar el módem.
Terminal: También sirve para comprobar si el módem negocia bien el protocolo de conexión. De todos modos no te detengas en esto si no sabes lo que haces y sigue adelante.
Presenta el ppp setup:
pppd timeout: 60 seconds
Dock into the panel on connect: opción desactivada
Automatic redial on disconnect: opción generalmente desactivada
Show clock on caption: opción activada
Disconnect on X-server shutdown: opción activada
Quit on disconnect: opción desactivada
Minimize window on connect: opción activada
La sección ABOUT evidentemente es para mirar solamente. Por último accionamos el botón OK de la ventana kppp configuration. Con ello volvemos a la inicial de kppp. Activamos "Show log window". En el casillero "Connect to" deberá aparecer el nombre de nuestra conexión (en el ejemplo INFOPLUS). El login ID será en nuestro ejemplo user@proveedor. Escribimos la password en su casillero: ****** y por último pulsamos "connect"
Si todo va bien, aparecerán dos ventanas: una con el marco superior indicando "Connecting to: INFOPLUS" que mostrará Dialing 954547000 y otra mayor, a la derecha de la primera indicando en su marco superior "Login Script Debug Window" y presentando una serie de acciones:
ATZ OK ATD954547000 (Mientras está "Expecting Connect")cuando se ha establecido la conexión, aparece en esa misma pantalla
CONNECT 115200e indicará en su marco inferior "running pppd" mientras la otra ventana indica "Logging on the network". Cuando la ventana mayor presente en su marco inferior "Done"; la otra más pequeña, que en su marco superior exhibirá el nombre de la conexión (INFOPLUS), se minimizará y ya estamos conectados.
Si restauramos la ventana de conexión INFOPLUS en un momento dado nos mostrará la siguiente información:
Connected at 115200 Time connected .... Session bill...PTAS Total bill ....PTASy dos teclas "Details" (para ver los detalles de la conexión con nuestro proveedor) y "Disconnect" evidentemente para desconectarnos. Si la pulsamos, aparecerá de nuevo la ventana kppp y entonces, para salir, presionaremos la tecla "quit".
Preguntas habituales
Estos mensajes pueden aparecer alguna que otra vez, aisladamente. Si siempre se producen, entonces hay un problema. Hemos de comprobar que:
- pppd es realmente un binario y no un script
- pppd tiene el bit setuid activado
- el fichero /etc/pppd/options
existe pero está VACÍO
- que no has usado la opción "lock" como argumento del pppd en la configuración del kppp
- no uses el enlace simbólico /dev/modem
; en su lugar usa el dispositivo real que corresponda, p.ej., /dev/ttyS1
- asegúrate que tienes los permisos necesarios
en caso de seguir igual, invoca:
[user@localhost]# tail /var/log/messagespara considerar las causas de posibles fallos. Es muy conveniente leer el dossier sobre kppp que aparece pulsando la tecla help de la ventana de kppp.
Esto significa que kppp no tiene permisos para abrir el dispositivo modem o que se ha seleccionado un dispositivo incorrecto en el cuadro del modem. Comprueba que el dispositivo sea correcto y luego dale el bit setuid a kppp.
O bien le das a kppp el bit setuid o das acceso al fichero /var/lock a los usuarios normales
- ¿Has jugado con la configuración de CR/LF?
- El modem quizá necesita más tiempo para inicializarse. Ve al cuadro "Modem commands" y aumenta el "Init Delay Time".
Puede ser que esté activada la opción "Auto configure hostname" y el servidor X tiene problemas para conectar con tu nuevo servidor. Si no hay más remedio que usar dicha opción, tendrás que proporcionar los permisos adecuados tecleando xhost + antes de realizar la conexión. Pero ¡MUCHO CUIDADO! porque cualquier otra persona tendrá acceso a tu servidor de X.
Intenta hacer un ping al número IP de otro servidor. Si funciona entonces hay que comprobar si le diste al kppp al menos una dirección DNS o si en el fichero /etc/host.conf
hay una línea indicando algo parecido a order hosts, bind
. (Debe haberla para que se consulte al servidor de nombres cuando se busca una dirección)
La negociación se puede distinguir por ser la fase en la que suenan
los modems. Si cuelga bruscamente puede ser debido a un TIMEOUT demasiado
corto en el script de marcado. Se puede subir a TIMEOUT 100 o a TIMEOUT 150.
En caso de seguir colgando, se puede intentar añadir S7=100
o S7=150
entre
el AT
y el DTnumero_de_telefono
en el script de marcado.
Depende de lo que quieras. Si simplemente quieres bajar el volumen del
modem, basta añadir L1 o L0 a la cadena de inicializacion del modem.
Un posible sitio para colocarlo seria entre el "AT" y el
DTnumero_de_telefono
en el script de marcado.
Si lo que quieres es que no suene para nada (por ejemplo, si quieres automatizar la conexión para que se realice de madrugada) deberás añadir M0 a la cadena de inicialización del modem. Puedes colocarla en el mismo sitio que se indicó para L1 o L0.
Lo primero que hay que tener en cuenta es que no hay conexión hasta
que no aparece por /var/log/messages
lo de Local IP Address xxx.xxx.xxx.xxx
y Remote IP Address yyy.yyy.yyy.yyy
(o el bloque ppp0
al escribir ifconfig
.
Esto viene al caso de que a veces la autentificación inicial falla, por ejemplo
porque haya caído el proveedor o esté saturado. En esos casos Infovia Plus no
corta la conexión y puede parecer que el modem está conectado a internet cuando
en realidad ni siquiera ha llegado a contactar con el proveedor. En ese caso
habría que revisar las claves de acceso que se hubiesen introducido en
pap-secrets
o chap-secrets
o intentarlo más tarde.
En caso de aparecer Local IP Address...
y Remote IP Address...
en
/var/log/messages
, pero no conseguir conectar a ningún sitio habría que
revisar en primer lugar /etc/resolv.conf
y ver si las direcciones allí
introducidas son correctas. Una forma de averiguar si es culpa de los DNS
es probar a conectar usando una dirección numérica. Por ejemplo se puede
probar con la dirección 130.206.1.2 que corresponde a www.rediris.es . Si
conecta, es un problema en /etc/resolv.conf
(o del DNS de tu proveedor).
Si se descarta el DNS, comprueba que tienes la opción defaultroute
en /etc/ppp/options
. En caso afirmativo, comprueba /var/log/messages
y mira si aparece algún mensaje tipo ppp not replacing existing default route to ...
. Este último caso es típico si se tiene alguna tarjeta de red
y has definido alguna dirección de gateway. Lo normal es eliminar dicho
gateway. Averigua como introduciste el gateway y elimínalo. Una forma
de eliminarlo sería por ejemplo con linuxconf, que viene con Red-Hat.
Es un mensaje que aparece en /var/log/messages
típico de Infovia Plus
y debido a un protocolo de red llamado IPX. No debe suponer ningún problema
para la conexión, pero si resultara molesto se podría añadir la opción
noipx a /etc/ppp/options
.
Asegúrate de que tienes (si usas pppd) la opcion modem en /etc/ppp/options
.
En caso de que la tuvieras, comprueba que has puesto una cadena de inicialización al modem en el script de marcado (por ejemplo at& f, atz...).
En caso de que así siguiese sin colgar, tendrás que echar mano del manual del modem y buscar el comando "que haga que el modem cuelgue (o se resetee) cuando cambie la línea DTR". Normalmente es & Dx donde 'x' es un numero (que es lo que deberás buscar en el manual del modem, si prefieres prueba-y-error 'x' normalmente estará entre 0 y 4). Luego deberás editar el script de marcado del modem y colocar dicho "& Dx" entre el "AT" y el "DTnumero_de_telefono". Al usar el caracter '&', no olvides poner todo el conjunto (desde el AT hasta el final del número de teléfono) entre comillas dobles (p.e.: "AT& D3DT055").
Esto puede deberse a muchas causas:
Deberás verificar la configuración del modem y del puerto serie. Sigue la descripción que se da en la sección correspondiente de la FAQ.
Comprueba que la velocidad que has puesto en /etc/ppp/options
NO es
la velocidad del modem (nada de 28800, 33600 o lo que sea, no es eso lo que
debes poner ahí). Pon 115200 o 57600, preferiblemente la primera. Si tienes
una UART 16450 u 8250 pon 38400 y asegúrate de NO poner el flag 'spd_hi' o
'spd_vhi' con setserial (si has seguido las instrucciones de la FAQ desde
el principio no hace falta que compruebes esto). El tipo de UART que tienes
lo podrás ver haciendo setserial /dev/ttySx
donde 'x' es 0 para COM1,
1 para COM2, etc...
Si sigue lento o conectando mal, asegúrate de poner una cadena de
inicialización al modem ("at& f", "atz") y que la opción crtscts aparece
en /etc/ppp/options
. En caso de continuar los problemas deberás echar
mano del manual del modem y buscar las opciones que "activen el control de
flujo RTS/CTS". Suelen ser de la familia de las que empiezan por '&'. En
algunos modems es una sola orden (por ejemplo "& K3") y en otros hay que
activar el RTS y el CTS separadamente. Colocar el o los comandos entre el "AT"
y el "DTnumero_de_telefono". Si usas el caracter '&', asegúrate de poner todo
el conjunto (desde el AT hasta el final del número de teléfono) entre comillas
dobles (p.e. "AT& K3DT055").
Una posible forma sería eliminar de /etc/ppp/options
la opción
name mi_login@mi_proveedor. De esta forma, si hemos puesto en pap-secrets
o chap-secrets
, el login y el password de todos nuestros proveedores,
bastaría con escribir pppd name login@proveedor
para elegir a cual
nos queremos conectar.
Esto funciona si todos los proveedores comparten el mismo número de
teléfono (por ejemplo, si todos están en infovía plus). En caso de
tener diferentes números de teléfono, habría que eliminar en
connect "/usr/sbin/chat -v -f /etc/ppp/marcado"
de /etc/ppp/options
,
crearse un fichero de marcado particular para cada proveedor y crearse
un fichero para cada proveedor en /etc/ppp
con las dos opciones personalizadas
que le correspondan. O sea:
/etc/ppp/nombre_del_proveedor: ------------------------------------------------------------ connect "/usr/sbin/chat -v -f /etc/ppp/marcado_proveedor" name login@proveedor ------------------------------------------------------------Y ejecutar pppd así:
/usr/sbin/pppd file /etc/ppp/nombre_del_proveedorLas DNS de todos los proveedores se podrían poner en
/etc/resolv.conf
,
añadiendo nuevas líneas "nameserver xxx.xxx.xxx.xxx". Es conveniente
ordenar los nameservers poniendo primero todos los DNS primarios de todos
los proveedores y después los DNS secundarios. También conviene poner en
primer lugar los correspondientes a los proveedores más usados.
Hay dos formas de hacerlo. La forma "buena", sería usando el programa sudo
el cual permite ejecutar como usuario algunos programas que sólo podrían
funcionar como root. Esto supondría que cada vez que uno quisiera conectarse
a internet debería introducir un password, lo cual es útil en caso de que
otros tuvieran acceso a nuestro ordenador. Para lo configuración de sudo
consultar man sudo
.
La forma "mala", y digo mala porque es más insegura en caso de que otros tengan acceso a nuestra máquina, consistiría en poner pppd "suid root" lo cual posibilita que un usuario normal tuviera acceso al programa de una forma similar que root.
Para esto último, habría que empezar por localizar pppd
. Suele estar en el
directorio /usr/sbin
. Luego haría falta echar un vistazo para ver que permisos
tiene. Esto se hace con la orden ls -l pppd
y debe arrojar algo parecido
a esto.
-rws--x--x 1 root ppp 70336 May 18 1996 pppdLo que se persigue es que la tercera letra sea una 's', como en el ejemplo. Si el programa no está "suid root", la tercera letra será una 'x'. Entonces en este caso habría que hacer
chmod 4711 pppd
para conseguirlo.
Los scripts de /etc/ppp
necesitarían tambien acceso libre para los usuarios
así que habría que hacer chmod 755 /etc/ppp
y chmod a+r /etc/ppp/*
. El
efecto secundario que esto tiene es que cualquier usuario del sistema puede
leer las claves de acceso a nuestro proveedor de internet. Existe la
posibilidad de limitar la conexión a internet (y a los scripts de conexión
y claves de acceso), leer la seccion
¿Cómo se cambian los permisos de ficheros y directorios?
NOTA: Aún así, es posible que no seamos capaces de conectar con internet
como usuario normal. Una posible causa de fallo sería intentar conectar
a internet escribiendo pppd
en vez de /usr/sbin/pppd
. Para root funciona
la primera, pero para el resto de usuarios no. El motivo es que el PATH
(el conjunto de directorios en los que Linux busca un ejecutable) es
diferente para root que para los usuarios normales. Los usuarios normales
no tienen /usr/sbin
dentro del PATH así que deberán hacer /usr/sbin/pppd
para conectarse a internet o hacer un enlace simbólico a /usr/sbin/pppd
desde otro directorio que sí esté en el PATH de usuario (como por ejemplo
/usr/bin
), o hacernos un script (pequeño programa) que se limite a ejecutar
/usr/sbin/pppd
. Para el enlace simbólico bastaría hacer:
ln -s /usr/sbin/pppd /usr/bin/pppd