8.10. Configuraciones avanzadas de PPP

Mientras que configurar PPP para conectar a una red como internet es la más comun de sus aplicaciones, hay algunos de vosotros que teneis requerimientos más avanzados. En esta seccion hablaremos sobre algunas de las configuraciones mas avanzadas que son posibles con PPP bajo Linux.

8.10.1. Servidor PPP

Hacer funcionar el pppd como servidor es solo cuestión de configurar un dispositivo terminal serie para que invoque al pppd con las opciones apropiadas cuando una llamada entrante es recivida. Una manera de hacer esto es crear una cuenta especial, digamos ppp, y asociarle un script o programa como shell de entrada que llame al pppd con esas opciones. De forma alternativa, si quiere soportar autentificacion PAP o CHAP, puede usar el programa mgetty para soportar su modem y explotar su caracteristica de “/AutoPPP/”.

Para configurar un servidor usando el método de login, añada una línea similar a la siguiente a su fichero /etc/passwd: [1]
    ppp:x:500:200:Public PPP Account:/tmp:/etc/ppp/ppplogin
Si su sistema soporta Shadow passwords, tambien necesita añadir una entrada al fichero /etc/shadow:
    ppp:!:10913:0:99999:7:::

Por supuesto, el UID y GID que utilice dependen de que usuario desea que sea dueño de la conexión, y de como lo haya creado. Además tiene que establecer la contraseña para la cuenta mencionada usando la orden passwd.

El script ppplogin podria tener este aspecto:
    #!/bin/sh
    # ppplogin - script to fire up pppd on login
    mesg n
    stty -echo
    exec pppd -detach silent modem crtscts

El comando mesg deshabilita la opción de que otros usuarios puedan escribir a la terminal (tty) usada utilizando, por ejemplo, el comando write. El comando stty desactiva el eco de caracteres. Esto es necesario, pues de otra forma todo lo que el otro ordenador envíe le será devuelto a modo de eco. La opción del pppd más importante de las incluidas en el script es –detach, porque evita que el pppd se separe de la terminal controlada. Si no especificásemos esta opción, se iría a segundo plano, haciendo que el script del shell terminase. Esto provocaría que la línea serie colgase y se perdiera la conexión. La opción silent hace que el pppd espere hasta recibir un paquete del sistema llamante antes de comenzar a enviar. Esto evita la aparición de timeouts al transmitir cuando el sistema que nos llama es lento en lanzar su cliente PPP. La opción modem hace al pppd vigilar la línea DTR para ver si el otro sistema ha colgado. Siempre deberia activar esta opcion cuando use pppd con un modem. La opción crtscts activa el control de flujo por hardware.

Además de estas opciones, se puede forzar alguna clase de autentificación, por ejemplo especificando auth en la línea de comando del pppd, o en el fichero de opciones globales. La página del manual también habla sobre opciones más especificas para activar o desactivar los protocolos de autentificación individuales.

Si desea usar mgetty, todo lo que tiene que hacer es configurar mgetty para que soporte el dispositivo serie al que su modem esta conectado (vea Sección 4.6.1” para más detalles), configurar pppd bien para autentificación PAP o CHAP con las opciones apropiadas en sus ficheros de options, y finalemente, añadir una sección similar a la siguiente a su fichero /etc/mgetty/login.config:
    # Configura mgetty para automaticamente detectar llamandas entrantes e invocar
    # al demonio pppd para que se haga cargo de la conexión.
    #
    /AutoPPP/ -     ppp   /usr/sbin/pppd auth -chap +pap login

El primer campo es una parte especial mágica usada para detectar que la llamada entrante es una de tipo PPP. No debe cambiar el aspecto de esta cadena; es sensitivo a minusculas y mayusculas. La tercera columna en el nombre de usuario que aparece en en el listado de who cuando alquien a entrado en el sistema. El resto de la línea es el comando a invocar. En nuestro ejemplo, nos hemos asegurado de que la autentificación por PAP es requerida, desavilitado la CHAP, y especificado que el fichero del sistema passwd debe ser usado para autentificar usuarios. Esto es probablemente parecido a lo que usted querra. Recuerde, puede especificar las opciones en el fichero options o en la linea de comandos si lo prefiere.

Esto es una pequeña lista de comprobación de los pasos que debe realizar y la secuencia que debe seguir para tener funcionando en su máquina un servidor PPP. Asegurese de que cada paso funciona correctamente antes de pasar al siguiente:

  1. Configure el modem para que funcione en modo de auto-respuesta. En los modems compatibles Hayes, esto se realiza mediante el comando ATS0=3. Si va a utilizar el demonio mgetty, esto no sera necesario.

  2. Configure el dispositivo serie con un comando de tipo getty par que responda a las llamadas entrantes. Una variante comunmente usada de getty es mgetty.

  3. Considere la autentificación. ¿Como se autentificaran con usted los clientes, usando PAP, CHAP, o el login del sistema?

  4. Configure el pppd como servidor tal como se descrive en esta sección.

  5. Considere el encaminamiento. ¿Necesitará proveer de una ruta de red a los clientes? El encaminamineto puede realizarse usando el script ip-up.

8.10.2. Llamada en demanda

Cuando hay trafico IP para ser transportado a travez del enlace, la llamada en demanda provoca la llamada de su modem y el establecimiento de una conexión con un host remoto. La llamada en demanda resulta útil cuando no puede dejar su linea telefónica permanentemente conectada a su proveedor de internet. Por ejemplo, puede que tenga que pagar llamadas locales por tiempo de uso, así le resultará más barato tener la la conexión establecida sólo cuando lo necesite y desconectada cuando no está usando Internet.

Las soluciones Linux tradicionales han usado el comando diald, que funcionaba bien pero era algo complicado de configurar. Las versiones 2.3.0 y posteriores del demonio PPP tienen incluido el soporte de llamanda en demanda y una configuración muy sencilla de realizar. Debe usar un kernel actual para poder hacer esto. Cualquiera de los kernels posteriores al 2.0 funcionara bien.

Para configurar pppd para llamada en demanda, todo lo que tiene que hacer es añadir opciones a su fichero de options o a la linea de comandos del pppd. La tabla siguiente resume las opciones relacionadas a la llamada en demanda:

OpciónDescripción
demand

Esta opción especifica que el enlace PPP debe ser establecido en modo de llamada en demanda. El dispositivo de red PPP sera creado, pero el comando connect no será usado hasta que un datagrama sea transmitido por el host local. Esta opción es obligatoria para que funcione la llamada en demanda.

active-filter expression

Esta opción le permite especificar que paquetes de datos van a ser considerados como trafico activo. Cualquier tráfico que cumpla la regla especificada reiniciara el temporizador de la llamada en demanda, asegurando que el pppd espera de nuevo antes de terminar el enlace. La sintaxis del filtro ha sido cogida prestada del comando tcpdump El filtro por defecto especifica todos los datagramas.

holdoff n

Esta opción le permite especificar la cantidad minima de tiempo, en segundos, que esperar antes de reconectar el enlace si termina. Si la conexión falla mientras pppd cree que esta en uso activo, sera reestablecido después de que este temporizador finalice. Este temporizador no se aplica a las reconexiones producidas por la no transmision de paquetes.

idle n

Si esta opción esta configurada, pppd desconectara el enlace cuando este temporizador expire. Los tiempos muertos son especificados en segundos. Cada paquete de datos nuevo activo reseteará el temporizador.

Una configuracion simple de llamada en demanda podria ser algo como esto:
    demand
    holdoff 60
    idle 180
Esta configuración activará la llamada en demanda, esperará 60 segundos antes de reestablecer un conexión fallida, y terminará el enlace si pasan 180 segundos sin ningún dato activo en el enlace.

8.10.3. llamada persistente

La llamada persistente es lo que la gente que tiene conexiones permanentes a una red querra usar. Hay una sutíl diferencia entre llamada en demanda y llamada persistente. Con la llamada persistente, la conexión es automaticamente establecida tan pronto como el demonio PPP es lanzado, y el aspecto de persistencia viene a cuento siempre que la llamada telefónica que soporta el enlace se interrumpa. La llamada persistente asegura que el enlace esta siempre disponible relanzando automaticamete la conexión si esta se interrumpe.

Usted podría ser afortunado de no tener que pagar por sus llamdas telefónicas; quizas sean locales y gratuítas, o quizas su empresa es quien las paga. La opción de llamada persistente es extremadamente útil en esta situación. Si tiene que pagar por sus llamadas telefónicas, entonces tiene que tener un poco de cuidado. Si paga por sus llamadas telefónicas en base al tiempo que la utiliza, la llamada persistente es algo que casi seguro no es lo que quiere, a menos que este seguro de que estara usando la conexion constantemente muy amenudo veinticuatro horas al día. Si paga las llamadas, pero no en base al tiempo, necesitara tener cuidado de protegerse de situaciones que puedan causar que el modem llame de forma interminable. El demonio pppd provee de una opción que puede ayudar a reducir el efecto de este problema.

Para activar la llamada persistente, debe incluir la opción persist en uno de los ficheros de opciones del pppd. Incluir esta opcion es todo lo que necesita para tener al pppd invocando automaticamente el comando especificado en la opción connect para restablecer la conexión cuando el enlace se interrumpe. Si esta preocupado por el remarcado demasiado rápido del modem (en el caso de un fallo del servidor o modem del otro extremo de la conexión) , puede usar la opcion holdoff para establecer el tiempo mínimo que el pppd deberá esperar antes de intentar reconectar. Esta opción no resolvera el problema de un fallo y su consecuente gasto en llamadas de teléfono, pero al menos le servirá para reducir el impacto de uno de ellos.

Una configuracion típica de llamada persistente podria parecerse a esta:
    persist
    holdoff 600
El tiempo de espera es especificado en segundos. En nuestro ejemplo, el pppd espera durante cinco minutos antes de rellamar cuando una llamada ha fallado.

Es posible combinar la llamada persistente con la llamada en demanda, usando idle para interrumpir el enlace si ha estado inactivo por un periodo especificado de tiempo. Dudamos de que sean muchos los usuarios que quieran hacer esto, pero este escenario esta descrito brevemente en la página del manual de pppd, por si tuviera que buscarlo.

Notas

[1]

La utilidades useradd o adduser, si las tiene, simplificaran la tarea.