Aunque usted pueda seguir conectándose a mano tal y como se mostró antes, es mucho mejor configurar algunos scripts que permitan hacer esto automáticamente.
Un conjunto de scripts automatiza la conexión y el arranque de PPP de manera que todo lo que tenga que hacer (como root o como miembro del grupo PPP) es ejecutar una única orden que inicie su conexión.
15.1 Scripts de conexión para autentificación tipo Nombre de usuario/Contraseña
Si su ISP no necesita el uso de PAP/CHAP, estos son los scripts para usted.
Si el paquete ppp está instalado correctamente, debería tener dos ficheros de ejemplo. Para PPP 2.1.2 están situados en /usr/sbin y para PPP 2.2 están en /etc/ppp/scripts. En Red Hat Linux se encuentran en el subdirectorio /scripts del directorio de documentación del paquete ppp (/usr/doc/ppp-x.x.x/) Se denominan
en PPP-2.1.2
ppp-on
ppp-off
en PPP-2.2 o superiores
ppp-off
ppp-on
ppp-on-dialer
Ahora, si utiliza PPP 2.1.2, le recomiendo que borre los ficheros de ejemplo. Hay grandes problemas potenciales con ellos - (y no me diga que funcionan bien). Yo los usé durante años (incluso los recomendaba en las primeras versiones de este documento COMO).
Para el beneficio de los usuarios PPP 2.1.2, aquí dejo disponibles versiones de plantilla MEJORES, tomadas de la distribución PPP 2.2. Le sugiero que los copie y utilice estos scripts en lugar de los antiguos scripts de PPP-2.1.2.
15.2 El script ppp-on
Este es el primero de un PAR de scripts que inicializan la conexión.
#!/bin/sh
#
# El script para iniciar la conexión PPP. Esta es la primera parte del
# par de scripts. No es un par de scripts seguro ya que los códigos son
# visibles con la orden 'ps'. Sin embargo, es simple.
#
# Estos son los parámetros. Modifíquelos según lo necesite.
TELEPHONE=555-1212 # El número de teléfono para la conexión
ACCOUNT=george # La cuenta de acceso para la conexión
PASSWORD=gracie # La clave para esta cuenta de acceso
LOCAL_IP=0.0.0.0 # Dirección IP local, si se conoce. Dinámica = 0.0.0.0
REMOTE_IP=0.0.0.0 # Dirección IP remota, si desea. Usualmente = 0.0.0.0
NETMASK=255.255.255.0 # La máscara de red si es necesaria
#
# Exportar las necesarias para que esten disponibles por 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# Esta es la parte del script que marca el teléfono y se conecta. Por favor,
# utilice el nombre de fichero absoluto ya que la variable $PATH no se usa
# la opción de conexión. (Hacer esto con una cuenta de root sería un agujero
# de seguridad).
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Iniciar la conexión
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
$LOCAL_IP:$REMOTE_IP \
connect $DIALER_SCRIPT
Este es el código del script ppp-on-dialer:-
#!/bin/sh
#
# Esta es la segunda parte del script ppp-on. Realiza el protocolo de
# conexión para la conexión deseada
#
/usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD
Para PPP-2.2, el script ppp-off tiene este aspecto:-
#!/bin/sh
##############################################################
########
#
# Determina el dispositivo a finalizar
#
if [ "$1" = ]; then
DEVICE=ppp0
else
DEVICE=$1
fi
#
# Si el fichero pid de ppp0 está presente cuando el programa se ejecuta,
# pararlo.
if [ -r /var/run/$DEVICE.pid ]; then
kill -INT `cat /var/run/$DEVICE.pid`
#
# Si la detención no funcionó entonces no había ningún proceso ejecutándose
# con ese pid. Puede también significar que el fichero de bloqueo
# permanecerá. Puede desear eliminar el fichero de bloqueo al mismo tiempo.
if [ ! "$?" = "0" ]; then
rm -f /var/run/$DEVICE.pid
echo "ERROR: Eliminado fichero de bloqueo huérfano"
exit 1
fi
#
# Exito. Hagamos que pppd quite sus cosas de enmedio.
echo "Enlace PPP a $DEVICE finalizado."
exit 0
fi
#
# El proceso ppp no está ejecutándose para ppp0
echo "ERROR: El enlace PPP no está activo para $DEVICE"
exit 1
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<H2><FONT size=2>15.3 Editar los scripts de inicio PPP suministrados</FONT><FONT size=2> </FONT></H2>
<P><FONT size=2>Ya que los nuevos scripts vienen en dos partes, los editaremos por turnos. </FONT>
<P><FONT size=2></FONT>
<H3><FONT size=2>El script ppp-on</FONT></H3>
<P><FONT size=2>Necesitará editar el script para que refleje SU nombre de usuario en su ISP, SU contraseña en su ISP y el número de teléfono de su ISP. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Cada una de las líneas como <CODE>TELEPHONE=</CODE> realmente establecen variables que contienen la información a la derecha de '=' (excluyendo los comentarios, por supuesto). Edite cada uno de esos ficheros para que sea correcto para su ISP y conexión. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Así mismo, como usted configura la dirección IP (si necesita hacerlo) en el fichero <CODE>/etc/ppp/options</CODE>, BORRE la línea que dice </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>$LOCAL_IP:$REMOTE_IP \
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2>También, asegúrese de que la variable DIALER_SCRIPT apunta a la ruta y nombre completos del script de marcado que realmente va a utilizar. Por tanto, si ha movido o renombrado este script, asegúrese de que edita esta línea correctamente en el script <CODE>ppp-on</CODE>. </FONT>
<P><FONT size=2></FONT>
<H3><FONT size=2>El script ppp-on-dialer</FONT></H3>
<P><FONT size=2>Este es el segundo de los scripts que arranca la conexión ppp </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Nota: un script chat suele escribirse en una sola línea. Las barras inversas se emplean para permitir continuaciones a lo largo de varias líneas física (para permitir legibilidad humana) y no forman parte del script mismo. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Sin embargo, es muy util mirarlo en detalle para que entendamos qué es lo que (se supone que) hace. </FONT>
<P><FONT size=2></FONT>
<H2><FONT size=2>15.4 Qué quiere decir un script Chat...</FONT><FONT size=2> </FONT></H2>
<P><FONT size=2>Un script chat es una secuencia de parejas <CODE>"</CODE>cadena esperada <CODE>"</CODE> <CODE>"</CODE>cadena enviada<CODE>"</CODE>. En particular, fíjese que <B>SIEMPRE</B> esperamos <B>algo</B> antes de enviar nada. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Si vamos a enviar algo <B>SIN</B> recibir nada antes, debemos usar una cadena esperada vacía (indicada por <CODE>"</CODE><CODE>"</CODE>) y de manera similar al esperar algo sin enviar nada. También, si una cadena está formada por varias palabras (como NO CARRIER), debe entrecomillar la cadena para que sea vista como una sola por chat. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>La línea de chat en nuestra plantilla es:- </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>exec /usr/sbin/chat -v
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Al llamar a chat, la opción -v hace que chat copie toda su I/O al registro del sistema (normalmente /var/log/messages). Una vez que sabe que el script chat funciona bien, edite esa línea para quitar la -v y ahorrar información innecesaria de su syslog. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>TIMEOUT 3
</FONT></PRE><FONT size=2>
<HR>
Esto ajusta el retardo para la recepción de entradas esperadas a tres segundos. Puede necesitar incrementar esta a 5 o 10 segundos si utiliza un módem realmente lento. </FONT>
<P></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>ABORT '\nBUSY\r'
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Si se recibe la cadena BUSY, abortar la operación. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>ABORT '\nNO ANSWER\r'
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Si se recibe la cadena NO ANSWER, abortar la operación. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>ABORT '\nRINGING\r\n\r\nRINGING\r'
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Si se recibe la cadena (repetida) RINGING, abortar la operación. Eso es porque alguien esta llamando a su teléfono. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>" \rAT
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>No esperar nada del módem y enviar la cadena AT. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>OK-+++\c-OK ATH0
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Esto es algo más complicado ya que utiliza alguna de las capacidades de recogida de errores de chat. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Lo que quiere decir es... Esperar OK. Si no se recibe (porque el módem no está en modo de órdenes) entonces enviar +++ (la cadena que hace que un módem compatible con el estándar Hayes pase a modo de órdenes) y esperar un OK. Entonces enviar ATH0 (el módem descuelga). Esto permite a su script tomar la situación si su modem estaba atascado en línea. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>TIMEOUT 30
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Ajustar el retardo a 30 segundos para el resto del script. Si experimenta problemas con el script chat que aborta debido a finalizaciones del tiempo de espera, incremente esto a 45 segundos o más. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>OK ATDT$TELEPHONE
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2>Esperar OK (la respuesta del módem al comando ATH0) y marcar el número de teléfono al que deseamos llamar. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>CONNECT
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>Esperar CONNECT (que es lo que nuestro módem envía cuando el módem remoto contesta) y no enviar nada como respuesta. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>ogin:--ogin: $ACCOUNT
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P><FONT size=2>De nuevo, tenemos una tecnología de recuperación de errores. Esperamos el la petición de entrada al sistema (...ogin:) pero si no recibimos esto debido a la finalización del tiempo de espera, enviar un retorno de carro y entonces buscar de nuevo la petición de entrada al sistema. Cuando se ésta se reciba, enviar el nombre de usuario (guardado en la variable $ACCOUNT). </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>assword: $PASSWORD
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2>Esperar la petición de contraseña y enviar nuestra contraseña (otra vez, guardada en una variable). </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Este script chat tiene una capacidad razonable de recuperación de errores. Chat tiene muchas más características que las aquí demostradas. Para más información consulte la página de manual de chat (<CODE>man 8 chat</CODE>). </FONT>
<P><FONT size=2></FONT>
<H3><FONT size=2>Arrancando PPP en el lado del servidor</FONT></H3>
<P><FONT size=2>Aunque el script ppp-on-dialer es adecuado para los servidores que arrancan automáticamente pppd una vez que usted ha entrado en el sistema, algunos servidores requieren que usted arranque explícitamente PPP. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Si necesita ejecutar una orden para arrancar PPP en el servidor, TAMBIEN necesita editar el script ppp-on-dialer. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Al FINAL del script (después de la línea de contraseña) añada un par adicional <B>esperado enviado</B> - este debería ser como su línea de órdenes (cuidado con los caracteres que tienen un significado especial en el shell Bourne - como el $ y [ o ] (los corchetes). </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Una vez que chat haya encontrado la línea de órdenes de su shell, deberá ejecutar la orden que arranque ppp en el servidor PPP de su ISP. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>En mi caso, mi servidor PPP utiliza la línea de órdenes estándar de Bash para Linux </FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>[hartr@kepler hartr]$
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2>y requiere que teclee </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>ppp
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2>para arrancar PPP en el servidor. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Es una buena idea permitir aquí una recuperación de errores, por lo que en mi caso utilizo </FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2> hartr--hartr ppp
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2>Esto es, si no recibo la línea de órdenes en el tiempo del retardo, envío un retorno de carro y busco de nuevo la línea de órdenes. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Una vez que se recibe la línea de órdenes, envío la cadena <CODE>ppp</CODE>. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Nota: no olvide añadir una \ al final de la línea anterior para que chat todavía piense que el script chat está en una sola línea. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Desafortunadamente, algunos servidores producen un juego muy variable de líneas de órdenes. Puede que necesite conectar muchas veces utilizando minicom para comprender qué sucede y escoger las cadenas "esperadas" estables. </FONT>
<P><FONT size=2></FONT>
<H2><FONT size=2>15.5 Un script chat para conexiones autentificadas por PAP/CHAP</FONT><FONT size=2> </FONT></H2>
<P><FONT size=2>Si su ISP utiliza PAP/CHAP, su script chat es mucho más simple. Todo lo que el script chat debe hacer es marcar el teléfono, esperar la conexión y dejar que pppd maneje la entrada en el sistema. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>#!/bin/sh
#
# Esta es la segunda parte del script ppp-on. Realiza el protocolo de
# conexión para la conexión deseada.
#
exec /usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
\rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT \
</FONT></PRE><FONT size=2>
<HR>
</FONT>
<P>
<P><FONT size=2></FONT>
<P><FONT size=2></FONT>
<H2><FONT size=2>15.6 Las opciones de pppd <CODE>debug</CODE> y <CODE>file fichero_opciones</CODE></FONT><FONT size=2> </FONT></H2>
<P><FONT size=2>Como ya hemos visto, puede conectar la información de registro de depuración si arranca pppd con la opción -d. La opción "debug" es equivalente a esta. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Ya que estamos estableciendo una nueva conexión con un nuevo script, deje la opción de depuración por ahora. (Atención: si tiene poco espacio en el disco duro, registrar los intercambios de pppd puede hacer ampliar su fichero de registro de sistema y meterle en problemas - pero para hacerlo debe fallar su conexión y seguir intentándolo durante bastantes minutos). </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Una vez que usted sabe que todo funciona adecuadamente, usted puede eliminar esta opción. </FONT>
<P><FONT size=2></FONT>
<P><FONT size=2>Si ha llamado a su fichero de opciones ppp de alguna manera distinta a <CODE>/etc/ppp/options</CODE> o <CODE>/etc/ppp/options.ttySx</CODE>, especifique el nombre de fichero a pppd con la opción <CODE>file</CODE>. </FONT>
<P><FONT size=2></FONT></P><FONT size=2>
<HR>
</FONT><PRE><FONT size=2>exec /usr/sbin/pppd debug file options.miservidor /dev/ttyS0 38400 \
</FONT></PRE>""