Configurar PPP
Configurar PPP
Configurar PPP
Usted puede utilizar este documento para crear su conexión PPP sin leer
ninguno de los otros documentos, pero si los lee podrá comprender mejor lo
que sucede en su ordenador. También podrá solucionar los problemas usted
mismo (o al menos podrá hacer preguntas más inteligentes en los foros de
noticias comp.os.linux... o las listas de correo sobre Linux).
Estos documentos (al igual que otros varios, incluyendo las referencias
relevantes) dan una explicación adicional y más detallada a lo que se expone
en este documento HOWTO.
Si conecta una red local a Internet vía PPP, necesitará tener una cantidad
considerable de conocimientos de redes TCP/IP. Además de los documentos
anteriormente mencionados, encontrará de gran ayuda los libros de
O'Reilly "TCP/IP Network Administration" y "Building Internet Firewalls".
Esto no es debido a que los usuarios de alto nivel odien a los nuevos usuarios,
sino a que esas listas están ahí para gestionar temas de un determinado nivel
de dificultad.
Desde aquí se le anima a que se adhiera a las listas que permiten suscripción
pública, pero mantenga sus comentarios de acuerdo con el tema de la lista.
Un buen punto de partida para buscar listas de correo Linux es Linux Mailing
List Directory http://summer.snu.ac.kr/~djshin/linux/mail-
list/index.shtml.
A la hora de escribir estas líneas, esta era la última versión oficial. Sin
embargo, escoja la última versión disponible (ppp-2.3 estaba en fase beta a la
hora de escribir esto, y debería ser lanzado en un breve plazo).
Sin embargo, es probable que desee compilar su propio núcleo sea cual sea su
distribución, para poder así darle a los recursos de su sistema el uso más
eficiente dada su configración particular de hardware. Es valioso recordar que
el núcleo no puede ser guardado en el swap, por lo que mantener el núcleo lo
más pequeño que sea posible tiene sus ventajas en máquinas de memoria
limitada.
Debido a que usted está utilizando Linux, puede tener algunos problemas con
los servicios de ayuda de algunos ISP (y servidores PPP de intranet) que saben
sólo acerca de los clientes de MS Windows.
Sin embargo, un número creciente de ISPs utilizan Linux para dar su servicio
- y Linux también está penetrando en el entorno empresarial, por lo que podría
ser ayudado si tiene problemas.
• /etc/resolv.conf
• /etc/host.conf
Para más detalles acerca de esto, lea la sección Usar PPP y privilegios de root.
Para más detalles acerca de esto, lea Configurando los ficheros de conexión
PPP.
Además de los problemas de conexión e inicio del servicio PPP, puede haber
problemas con los módems y con la propia línea telefónica.
Esta sección NO está orientada para tratar más que lo básico. Al Longyear
mantiene el PUF-PPP que contiene mucha más información acerca de este
tema.
Para instalar y compilar el núcleo Linux, necesita tener abierta una cuenta
como root.
Si usted sólo utiliza PPP la mínima parte del tiempo en el que su máquina
Linux está funcionando, se recomienda compilar el soporte PPP como un
módulo cargable. Utilizando 'kerneld', su núcleo cargará automáticamente
el/los módulo(s) requeridos para proveer soporte PPP cuando arranque su
proceso de conexión PPP. Esto ahorra un valioso espacio en memoria:
ninguna parte del núcleo puede sacarse de la memoria, pero los módulos
cargables se eliminan automáticamente si no se utilizan.
Si está enlazando una red local a Internet (o entrelazando dos redes locales),
debería preocuparse acerca de la seguridad. Añadir el soporte para cortafuegos
IP en el núcleo es, probablemente, una OBLIGACIÓN.
Sin embargo, para que esta máquina pueda ser encontrada por otros
ordenadores en Internet, es necesario que sea referenciada por su dirección IP.
Traducir (resolver) los nombres de una máquina (y dominio) a direcciones IP
utilizadas en Internet es el trabajo de máquinas que ofrecen el servicio de
nombres de dominio (DNS).
Cuando realiza una conexión PPP, necesita decirle a su máquina Linux dónde
puede encontrar la máquina traductora de nombres a direcciones IP
(resolución de direcciones), para que usted pueda utilizar nombres de
máquina pero su ordenador pueda traducirlos a las direcciones IP que
necesita para hacer su trabajo.
Esto le dice al resolvente que utilice la información del fichero host antes de
enviar preguntas de resolución al DNS.
Programas que se ejecutan con 'set uid root' son agujeros de seguridad en
potencia, por lo que debe ser extremadamente cuidadoso a la hora de hacer
programas 'suid root'. Un número contado de programas (incluyendo pppd)
han sido escritos cuidadosamente para minimizar el peligro de ejecutarse con
suid root, por lo que debe sentirse seguro con éste (pero sin garantías).
Sin embargo, si NO desea que cualquiera pueda arrancar una conexión PPP
(por ejemplo, sus hijos tienen cuentas en su PC Linux y no desea que se
conecten a Internet sin su supervisión), necesitará establecer un grupo PPP
(como root, edite /etc/group) y :-
• Haga pppd suid root, con dueño root y grupo PPP, con los permisos
para "otros" vacíos. Debería ser como
• -rwsr-x--- 1 root PPP 95225 Jul 11 00:27
/usr/sbin/pppd
• Haga que los scripts ppp-on/off de dueño root y grupo PPP
• De al grupo PPP permiso de lectura y ejecución de los scripts ppp-
on/off
• -rwxr-x--- 1 root PPP 587 Mar 14 1995
/usr/sbin/ppp-on
• -rwxr-x--- 1 root PPP 631 Mar 14 1995
/usr/sbin/ppp-off
• Anule los derechos de acceso de los demás a ppp-on/off.
• añada los usuarios que podrán usar PPP al grupo PPP en /etc/group
Los usuarios de Red Hat Linux deberían fijarse en que los lugares en que Red
Hat 5.X pone estos scripts es en el subdirectorio /scripts del directorio de
documentación del paquete ppp (para la versión 2.2.0f de este paquete
es /usr/doc/ppp-2.2.0f-2/scripts).
Imprimalo ya que contiene una explicación de casi todas las opciones PPP
(son útiles leerlas junto con las páginas de manual pppd). Aunque usted pueda
utilizar este fichero como base para su fichero/etc/ppp/options, es
probablemente mejor crear su propio fichero de opciones que no contenga
ningún comentario de la plantilla. Será mucho más corto y más fácil de
leer/mantener.
Sin embargo, para una única conexión PPP, puede usar sin problemas el
fichero /etc/ppp/options. De manera alternativa puede poner todas las
opciones como argumentos de la propia orden pppd.
# Usar las líneas de control del módem. En Ultrix, esta opción implica
# control de flujo por hardware, al igual que la opción crtscts. (Esta
# opción no está implementada por completo.)
#modem
# Ajustar el valor de MRU (Unidad de recepción máxima) a <n> para la
# negociación. pppd pedirá a la pareja que no envíe paquetes de más
de <n>
# bytes. El valor mínimo de MRU es 128. El valor por defecto es 1500.
Un
# valor recomendado para enlaces lentos es 296 (40 bytes para cabecera
# TCP/IP + 256 bytes de datos).
#mru 542
# Con esta opción, pppd no transmitirá paquetes LCP para iniciar una
# conexión hasta que un paquete LCP válido sea recibido de la pareja
(como
# la opción "passive" con antiguas versiones de pppd).
#silent
Debería darse cuenta de que los scripts de conexión presentados aquí también
utilizan algunas opciones de línea de órdenes para hacer las cosas algo más
sencillas de cambiar.
# /etc/ppp/options (NO PAP/CHAP)
#
# Evitar que pppd trabaje en segundo plano
-detach
#
# utilizar las líneas de control del módem
modem
# utilizar bloqueos de tipo uucp para asegurar acceso exclusivo a los
# dispositivos serie
lock
# usar control de flujo hardware
crtscts
# crear un camino por defecto para esta conexión en la table de
# encaminamiento
defaultroute
# NO establecer ninguna secuencia de control en forma de cadena de
escape
asyncmap 0
# transmitir paquetes de 552 bytes de tamaño máximo
mtu 552
# recibir paquetes de 552 bytes de tamaño máximo
mru 552
#
#-------FIN DE EJEMPLO /etc/ppp/options (no PAP/CHAP)
Para hacer que utilice MS CHAP, necesitará recompilar pppd para dar soporte
a esto. Por favor, lea las instrucciones en el fichero README.MSCHAP80
del código fuente para más instrucciones acerca de cómo compilar y utilizar
esta variación.
Debe darse cuenta de que de momento este código sólo da soporte a clientes
PPP Linux que se conecten a un servidor MS Windows NT. NO permite que
un servidor PPP Linux utilice autentificación MSCHAP80 con sus clientes.
Deben pertenecer al usuario root, grupo root y tener permisos de fichero 740
por seguridad.
Lo primero de lo que debe darse cuenta acerca de PAP y CHAP es que están
diseñados para autentificar sistemas informáticos y no usuarios.
Bien. Una vez que su ordenador ha realizado una conexión PPP con el
servidor, CUALQUIER usuario de su sistema puede utilizar esa conexión -
no sólo usted. Esto es lo que le permite configurar un enlace de red de área
extensa (WAN) que interconecte dos redes locales utilizando PPP.
Esto se realiza utilizando la opción name user name de pppd. Por lo que si va a
utilizar como nombre de usuario el que su ISP le ha proporcionado, añada la
línea
name su_usuario nombre_en_el_ISP
a su fichero /etc/ppp/options.
También es valioso recordar que muchos ISP funcionan con bancos múltiples
de módems conectados a servidores distintos - cada uno con un nombre
diferente, pero ACCEDIDOS desde un número de teléfono único. Puede ser a
veces bastante difícil en algunas circunstancias saber en ese momento cuál es
el nombre del ordenador remoto, ya que depende de a que servidor de
terminales esté usted conectado.
13.3 El fichero de secretos PAP
El fichero /etc/ppp/pap-secrets tiene este aspecto
# Secretos para autentificación utilizando PAP
# cliente servidor secreto
direcciones_IP_locales_aceptables
Esto hace que para el nombre de máquina local pedro (el cual hemos hecho
que pppd use incluso aunque no sea nuestro nombre de máquina local) y
para CUALQUIER servidor, se utilice la contraseña (secreto) picapiedra.
Fíjese en que se necesita especificar una dirección local IP, a menos que sea
necesario FORZAR una dirección IP local y estática. Incluso aunque intente
hacer esto, no es probable que funcione en la mayoría de servidores PPP (por
razones de seguridad) que no permiten que el sistema remoto establezca la
dirección IP que desea tener.
y para pablo
# Secretos para autentificación mediante CHAP
# cliente servidor secreto direcciones_IP_locales_aceptables
pablo pedro picapiedra
pedro pablo marmol
Como puede selecionar el fichero de opciones ppp a usar con pppd utilizando
la opción file fichero, puede establecer un script para conectarse a cada uno
de sus servidores PPP, escogiendo el fichero de opciones correcto a utilizar, y
una vez allí seleccionando la opción remotename adecuada.
Para hacer esto, su software de comunicaciones debe ser capaz de salir sin
reiniciar el módem. Minicom puede hacer esto - ALT Q (o en versiones más
antiguas CTRL A Q).
También debería poder ver un camino a la máquina remota (y más allá). Para
hacer esto, teclee la orden
route -n
Aquí hay algo de bastante importancia: dése cuenta de que hay DOS entradas
apuntando a su interfaz ppp.
Esta lista podría durar indefinidamente. Para pararla utilice CTRL C, en ese
momento recibirá algo más de información :-
--- 10.144.153.51 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 170.7/219.2/328.3 ms
Ahora intentemos hacer un ping a un sitio por nombre (que no sea el propio
nombre del servidor, pero que sea de una máquina que usted SEPA esté
encendida y funcionando). Por ejemplo
ping sunsite.unc.edu
En ese momento habrá una pausa mientras Linux obtiene del servidor de
nombres que usted especificó en /etc/resolv.conf la dirección IP
correspondiente al nombre de la máquina a la que ha hecho un ping. No se
preocupe por la espera (verá que las luces del módem parpadean). En breve
plazo recibirá una respuesta como
PING sunsite.unc.edu (152.2.254.81): 56 data bytes
64 bytes from 152.2.254.81: icmp_seq=0 ttl=254 time=190.1 ms
64 bytes from 152.2.254.81: icmp_seq=1 ttl=254 time=180.6 ms
64 bytes from 152.2.254.81: icmp_seq=2 ttl=254 time=169.8 ms
64 bytes from 152.2.254.81: icmp_seq=3 ttl=254 time=170.6 ms
64 bytes from 152.2.254.81: icmp_seq=4 ttl=254 time=170.6 ms
Puede que también necesite eliminar el fichero de bloqueo creado por pppd
rm -f /var/lock/LCK..ttySx
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.
##############################################################
########
#
# 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
El script ppp-on
Cada una de las líneas como TELEPHONE= 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.
El script ppp-on-dialer
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.
Sin embargo, es muy util mirarlo en detalle para que entendamos qué es lo
que (se supone que) hace.
Si vamos a enviar algo SIN recibir nada antes, debemos usar una cadena
esperada vacía (indicada por "") 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.
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.
TIMEOUT 3
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.
ABORT '\nBUSY\r'
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.
Es una buena idea permitir aquí una recuperación de errores, por lo que en mi
caso utilizo
hartr--hartr ppp
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).
Una vez que usted sabe que todo funciona adecuadamente, usted puede
eliminar esta opción.
Si ha llamado a su fichero de opciones ppp de alguna manera distinta
a /etc/ppp/options o /etc/ppp/options.ttySx, especifique el nombre de
fichero a pppd con la opción file.
exec /usr/sbin/pppd debug file options.miservidor /dev/ttyS0 38400 \
Podrá ver algo como esto (siempre y cuando haya especificado -v a chat y -d a
pppd)....esto son el script chat y las respuestas que son enviadas al registro del
sistema seguida de la información de inicialización de pppd :-
Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER)
Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY)
Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M)
Oct 21 16:09:59 hwin chat[19868]: expect (OK)
Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M
Oct 21 16:10:00 hwin chat[19868]: OK -- got it
Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M)
Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT)
Oct 21 16:10:00 hwin chat[19868]: ^M
Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M
Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it
Oct 21 16:10:22 hwin chat[19868]: send (^M)
Oct 21 16:10:22 hwin chat[19868]: expect (ogin:)
Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it
Oct 21 16:10:23 hwin chat[19868]: send (hartr^M)
Oct 21 16:10:23 hwin chat[19868]: expect (ssword:)
Oct 21 16:10:23 hwin chat[19868]: hartr^M
Oct 21 16:10:23 hwin chat[19868]: Password: -- got it
Oct 21 16:10:23 hwin chat[19868]: send (??????^M)
Oct 21 16:10:23 hwin chat[19868]: expect (hartr)
Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it
Oct 21 16:10:24 hwin chat[19868]: send (ppp^M)
Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0
Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0
Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1
Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1.
Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1
Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1.
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU
Oct 21 16:10:27 hwin pppd[19873]: (1500)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP
Oct 21 16:10:27 hwin pppd[19873]: (0)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER
Oct 21 16:10:27 hwin pppd[19873]: (a098b898)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK.
Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1.
Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1.
Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1.
Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id
1
Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1.
Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR
Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE
Oct 21 16:10:27 hwin pppd[19873]: (45)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK
Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1.
Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1.
Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id
1
Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255.
Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR
Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51)
Oct 21 16:10:31 hwin pppd[19873]: (ACK)
Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE
Oct 21 16:10:31 hwin pppd[19873]: (45)
Oct 21 16:10:31 hwin pppd[19873]: (ACK)
Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK
Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id
255.
Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1.
Oct 21 16:10:31 hwin pppd[19873]: ipcp: up
Oct 21 16:10:31 hwin pppd[19873]: local IP address 10.144.153.104
Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51