FUNIX

Mettez un manchot dans votre PC



[ Présentation | Configuration PPP | Configuration PPP avec CHAP (Free)Configuration DNS | Comment ça marche | Utilisateurs PPP  | Estimation du coût des communications | Connaître la vitesse de connexion ]

Dernière modification 15.07.02

Configuration PPP à la main

Configuration Internet


Présentation

Vous avez la possibilité de configurer la connexion au travers d'outils de configuration du style clique-bouton, cependant si vous voulez vous connecter "à la main" ou du moins comprendre le mécanisme de connexion, cette page est fait pour vous. Vous avez d'abord besoin des éléments suivants:

- Le numéro de téléphone de votre fournisseur d'accès
- Votre nom de compte chez votre fournisseur et votre mot de passe
- L'adresse IP du serveur DNS primaire de votre fournisseur (éventuellement)
- L'adresse IP du serveur DNS secondaire de votre fournisseur (éventuellement)

Cette configuration est valable dans le cas où vous avez un provider unique, dans le cas où vous avez plusieurs providers (essais de FAI gratuits), reportez vous à la page configuration PPP avec multi FAI.
Je trouve la configuration de la connexion PPP sur la Mandrake particulièrement confuse, il y a des fichiers sous /usr/bin et une tonne sous /etc/sysconfig/network-scripts, je n'ai jamais vraiment réussi à comprendre le mécanisme d'une connexion PPP. C'est pourquoi j'ai essayé de construire une solution qui se veut la plus portable possible et donc doit marcher sur toutes les distribs de linux. Cette page comprend l'identification CHAP telle que l'utilise Free.

Dans la suite des opérations kervao.fr est le nom du domaine local.

ATTENTION: - Pour info pour des versions de package de ppp inférieures à 2.4.0, on m'a fait remarquer que mes scripts pouvaient ne pas marcher, je vous conseille donc d'upgrader ppp, ce qui a pour effet de résoudre le problème.
                                       - Attention si vous avez une carte réseau, veillez à ce que dans le fichier /etc/sysconfig/network vous n'ayez pas GATEWAYDEV=eth0, voici le contenu du mien:

NETWORKING=yes
FORWARD_IPV4=true
HOSTNAME=asterix.kervao.fr
DOMAINNAME=kervao.fr
GATEWAYDEV=
 

Configuration PPP

Quand on installe le package ppp, celui-ci crée un répertoire /etc/ppp, on y trouve les fichiers suivants:

-rw-------    1 root     daemon         78 jui 19  2001 chap-secrets
-rwxr-xr-x    1 root     root          513 sep 17  2001 ip-down*
-rwxr-xr-x    1 root     root         2839 jui 24  2001 ip-down.ipv6to4*
-rwxr-xr-x    1 root     root          956 sep 17  2001 ip-up*
-rwxr-xr-x    1 root     root         4845 jui 24  2001 ip-up.ipv6to4*
-rw-r--r--    1 root     daemon         36 jui 19  2001 options
-rw-------    1 root     daemon        102 jun 13 18:43 pap-secrets
drwxr-xr-x    2 root     daemon       1024 jui 19  2001 peers/

On va créer des scripts personnalisés de connexion, le premier est ppp-on, cet exécutable permet de lancer une connexion, voici son contenu:

#!/bin/bash

# définition du nom du fichier contenant les paramètres de connexion
 DIALER_SCRIPT=/etc/ppp/ppp-on-dialer

#définition du port sur lequel est branché le modem
MODEM=/dev/ttyS0

#définition de la vitesse max du modem (on peut mettre 115200 même si le modem plafonne à 56400)
SPEED=115200

#options diverses PPP, pour plus d'info "man pppd"
PPPOPTIONS="lock noauth modem crtscts asyncmap 00000000 defaultroute debug"

exec /usr/sbin/pppd -detach $PPPOPTIONS $MODEM $SPEED \
        remotename $DEVICE ipparam $DEVICE \
        connect "/usr/sbin/chat -v -f $DIALER_SCRIPT"

Les options que je passe à pppd sont celles qui sont définies par défaut sur une distrib Mandrake, je n'ai pas cherché à les comprendre et encore moins à les modifier, retenez quand même que debug sert à avoir plus d'informations et que sans defaultroute le routage ne marchera pas.
Donnez les droits d'éxécution à ce script

chmod 755 /etc/ppp/ppp-on

Le script exécutable ppp-off va permettre de stopper la connexion:

#!/bin/bash
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi

if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`

        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "Argh erreur en détruisant le fichier pid"
                exit 1
        fi

        echo "Liaison PPP $DEVICE terminé"
        exit 0
fi

echo "Erreur  liaison PPP non active sur $DEVICE"
exit 1

Donnez les droits d'éxécution à ce script

chmod 755 /etc/ppp/ppp-off

Le fichier ppp-on-dialer contient les paramètres de connexion

'ABORT' 'BUSY'
'ABORT' 'ERROR'
'ABORT' 'NO CARRIER'
'ABORT' 'NO DIALTONE'
'ABORT' 'Invalid Login'
'ABORT' 'Login incorrect'
'' 'ATZ'
'OK' 'ATDT0491294697'
'CONNECT' ''
'ogin:' 'le-login-chez-le-fai'
'ord:' 'le-mot-de-passe'
'TIMEOUT' '5'
'~--' ''

Vous remplacez évidemment le numéro de téléphone, le login et le mot de passe par les votres. Donnez des droits de lecture uniquement à root.

chmod 600 /etc/ppp/ppp-on-dialer

Dans le fichier ip-up vous pouvez mettre ce que voulez comme par exemple l'envoi du courrier en attente de même que la réception

#!/bin/bash
/usr/sbin/sendmail -q -v
/usr/bin/fetchmail

ATTENTION: - mettre le chemin complet des commandes
                                - c'est avec les droits root que vous allez lancer le script ip-up, par conséquent veiller à ce que root ait un .fetchmailrc pour relever le mail de tous vos utilisateurs.

De même dans le fichier ip-down, vous mettrez les commandes que vous souhaitez lancer à l'arrêt d'une connexion.

Configuration PPP avec CHAP (Free)

La configuration est identique à celle décrite plus haut, les fichiers diffèrent un peu à commencer par ppp-on:

#!/bin/bash

# définition du nom du fichier contenant les paramètres de connexion
 DIALER_SCRIPT=/etc/ppp/ppp-on-dialer

#définition du port sur lequel est branché le modem
MODEM=/dev/ttyS0

#définition de la vitesse max du modem (on peut mettre 115200 même si le modem plafonne à 56400)
SPEED=115200

#options diverses PPP, pour plus d'info "man pppd"
PPPOPTIONS=" noauth defaultroute modem debug ipcp-accept-remote ipcp-accept-local idle 180"

exec /usr/sbin/pppd $MODEM $SPEED $PPPOPTIONS  \
        connect "/usr/sbin/chat -v -f $DIALER_SCRIPT" \
        remotename proxad user login-chez-free

Le fichier /etc/ppp/ppp-on-dialer est plus court:

'ABORT' 'BUSY'
'ABORT' 'ERROR'
'ABORT' 'NO CARRIER'
'ABORT' 'NO DIALTONE'
'' 'ATZ'
'OK' 'ATDT0491294697'
'CONNECT' ''

Un fichier fait son apparition /etc/ppp/chap-secrets, il contient

login-chez-free   *       mot-de-passe-chez-free

Ce fichier doit avoir les droits 600 pour des raisons évidentes de sécurité.

Configuration des serveurs DNS

Vous éditez le fichier /etc/resolv.conf et vous indiquez le nom du serveur primaire et secondaire après le mot clé nameserver:

search kervao.fr
nameserver 194.149.160.9
nameserver 194.149.160.1

A noter qu'il n'est absolument pas nécessaire de spécifier le même nom de domaine que celui de votre provider, vous pouvez garder votre nom farfelu.

En cas d'attribution automatique des serveurs de noms, le fichier /etc/resolv.conf sera automatiquement modifié en conséquence sur une Mandrake par un jeu de fichiers qui m'échappe. Si c'est votre cas, pas de problème, sinon voilà un petit script qui permettra de renseigner automatiquement le fichier /etc/resolv.conf il suffit de le rajouter au début de /etc/ppp/ip-up

rm -f /etc/resolv.conf
echo "search kervao.fr" > /etc/resolv.conf
# en cas de serveur DNS local, décommentez la ligne suivante
# echo "nameserver 127.0.0.1"
rm -f /etc/resolv.conf
echo "nameserver " $DNS1 >> /etc/resolv.conf
echo "nameserver " $DNS2 >> /etc/resolv.conf

Par ailleurs vous devez rajouter l'option usepeerdns à pppd dans le fichier ppp-on comme ceci

PPPOPTIONS="usepeerdns noauth defaultroute modem debug ipcp-accept-remote ipcp-accept-local idle 180"

Pour info c'est pppd qui passe les adresses IP à ip-up à travers les variables DNS1 et DNS2 grâce à l'option usepeerdns (man pppd pour plus de détails).

Comment ça marche

Pour lancer la connexion, il suffit de taper ppp-on (en tâche de fond pour pouvoir voir les commentaires) et ppp-off pour arrêter. Voici le genre de commentaires que vous pouvez voir:

[root@tavel /]# ./ppp-on
Serial connection established.
using channel 3
Using interface ppp0
Connect: ppp0 <--> /dev/ttyS0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x81624e37> <pcomp> <accomp>]
rcvd [LCP ConfNak id=0x1 <asyncmap 0xffffffff>]
sent [LCP ConfReq id=0x2 <magic 0x81624e37> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x2 <magic 0x81624e37> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x2 <mru 1500> <asyncmap 0xffffffff> <magic 0xc2d873ec> <pcomp> <accomp> <mrru 1500> <endpoint [null]>]
sent [LCP ConfRej id=0x2 <mrru 1500>]
rcvd [LCP ConfReq id=0x3 <mru 1500> <asyncmap 0xffffffff> <magic 0xc2d873ec> <pcomp> <accomp>]
sent [LCP ConfAck id=0x3 <mru 1500> <asyncmap 0xffffffff> <magic 0xc2d873ec> <pcomp> <accomp>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [IPCP ConfReq id=0x4 <compress VJ 0f 01> <addr 202.3.224.35>]
sent [IPCP ConfAck id=0x4 <compress VJ 0f 01> <addr 202.3.224.35>]
rcvd [IPCP ConfNak id=0x1 <addr 202.3.231.33> <ms-dns1 202.3.225.10> <ms-dns3 202.3.225.20>]
sent [IPCP ConfReq id=0x2 <addr 202.3.231.33> <compress VJ 0f 01> <ms-dns1 202.3.225.10> <ms-dns3 202.3.225.20>]
rcvd [LCP ProtRej id=0x5 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
rcvd [IPCP ConfAck id=0x2 <addr 202.3.231.33> <compress VJ 0f 01> <ms-dns1 202.3.225.10> <ms-dns3 202.3.225.20>]
local  IP address 202.3.231.33
remote IP address 202.3.224.35
primary   DNS address 202.3.225.10
secondary DNS address 202.3.225.20
Script /etc/ppp/ip-up started (pid 2438)
Script /etc/ppp/ip-up finished (pid 2438), status = 0x0

Pour avoir un max d'info, avant de lancer ppp-on, ouvrer un shell en tant que root et taper tail -f /var/log/messages, vous devriez y voir ça:

Jul  9 08:28:19 asterix pppd[2377]: pppd 2.4.1 started by root, uid 0
Jul  9 08:28:20 asterix chat[2391]: report (CONNECT)
Jul  9 08:28:20 asterix chat[2391]: abort on (BUSY)
Jul  9 08:28:20 asterix chat[2391]: abort on (ERROR)
Jul  9 08:28:20 asterix chat[2391]: abort on (NO CARRIER)
Jul  9 08:28:20 asterix chat[2391]: abort on (NO DIALTONE)
Jul  9 08:28:20 asterix chat[2391]: abort on (Invalid Login)
Jul  9 08:28:20 asterix chat[2391]: abort on (Login incorrect)
Jul  9 08:28:20 asterix chat[2391]: send (ATZ^M)
Jul  9 08:28:20 asterix chat[2391]: expect (OK)
Jul  9 08:28:21 asterix chat[2391]: ATZ^M^M
Jul  9 08:28:21 asterix chat[2391]: OK
Jul  9 08:28:21 asterix chat[2391]:  -- got it
Jul  9 08:28:21 asterix chat[2391]: send (ATDT3640^M)
Jul  9 08:28:21 asterix chat[2391]: expect (CONNECT)
Jul  9 08:28:21 asterix chat[2391]: ^M
Jul  9 08:28:40 asterix chat[2391]: ATDT3640^M^M
Jul  9 08:28:40 asterix chat[2391]: CONNECT
Jul  9 08:28:40 asterix chat[2391]:  -- got it
Jul  9 08:28:40 asterix chat[2391]: send (^M)
Jul  9 08:28:40 asterix chat[2391]: expect (ogin:)
Jul  9 08:28:40 asterix chat[2391]:  36000/ARQ/V90/LAPM/V42BIS^M
Jul  9 08:28:42 asterix chat[2391]: ^M
Jul  9 08:28:42 asterix chat[2391]: Welcome to 3Com Total Control HiPer ARC (TM)^M
Jul  9 08:28:42 asterix chat[2391]: Networks That Go The Distance (TM)^M
Jul  9 08:28:42 asterix chat[2391]: ^M
Jul  9 08:28:42 asterix chat[2391]: login:
Jul  9 08:28:42 asterix chat[2391]:  -- got it
Jul  9 08:28:42 asterix chat[2391]: send (login-fai^M)
Jul  9 08:28:42 asterix chat[2391]: expect (ord:)
Jul  9 08:28:42 asterix chat[2391]:  login-fai^M
Jul  9 08:28:42 asterix chat[2391]: Password:
Jul  9 08:28:42 asterix chat[2391]:  -- got it
Jul  9 08:28:42 asterix chat[2391]: send (mot-de-passe^M)
Jul  9 08:28:42 asterix chat[2391]: timeout set to 5 seconds
Jul  9 08:28:42 asterix chat[2391]: expect (~)
Jul  9 08:28:42 asterix chat[2391]:  ^M
Jul  9 08:28:42 asterix chat[2391]: ~
Jul  9 08:28:42 asterix chat[2391]:  -- got it
Jul  9 08:28:42 asterix chat[2391]: send (^M)
Jul  9 08:28:43 asterix pppd[2377]: Serial connection established.
Jul  9 08:28:43 asterix pppd[2377]: Using interface ppp0
Jul  9 08:28:43 asterix pppd[2377]: Connect: ppp0 <--> /dev/ttyS0
Jul  9 08:28:46 asterix pppd[2377]: local  IP address 202.3.231.33
Jul  9 08:28:46 asterix pppd[2377]: remote IP address 202.3.224.35
Jul  9 08:28:46 asterix pppd[2377]: primary   DNS address 202.3.225.10
Jul  9 08:28:46 asterix pppd[2377]: secondary DNS address 202.3.225.20

Cette sortie est un peu différente dans le cas d'une connexion avec identification CHAP (Free).
A noter que le mot de passe de connexion PPP ainsi que le login apparaît en clair dans le fichiet de log.

Utilisateurs PPP

Maintenant il faut faire en sorte que la connexion puisse être lancée par d'autres utilisateurs ne jouissant pas forcément de droits super utilisateur. Pour cela on va se servir de sudo, voici le fichier de configuration de sudo /etc/sudoers:

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification
Cmnd_Alias    PPPON=/etc/ppp/ppp-on
Cmnd_Alias    PPPOFF=/etc/ppp/ppp-off

# User privilege specification
root    ALL=(ALL) ALL

olivier ALL=NOPASSWD:PPPON,NOPASSWD:PPPOFF
veronique ALL=NOPASSWD:PPPON,NOPASSWD:PPPOFF

Mes deux utilisateurs olivier et veronique ont le droit d'utiliser les commandes ppp-on et ppp-off et donc de déclencher et d'arrêter une connexion PPP. Pour déclencher une connexion, il suffira donc de taper:

sudo /etc/ppp/ppp-on

Et pour l'arrêter:

sudo /etc/ppp/ppp-off

NOTE: Pour simplifier rajouter dans le .bashrc de vos utilisateurs habilités sudo
alias connecte='sudo /etc/ppp/ppp-on'
alias deconnecte='sudo /etc/ppp/ppp-off'
Pour prendre en compte les modifs
source ~/.bashrc
Il suffit alors de taper dans un shell
connecte
ou
deconnecte

Estimation du coût des communications

Reporter vous au chapitre correspondant dans la page connexion PPP avec plusieurs fai.
 

Connaître la vitesse de connexion

Vous devez modifier légèrement le fichier ppp-on-dialer la première ligne du fichier doit être :

'REPORT' 'CONNECT'

Maintenant au niveau de la commande chat du fichier ppp-on, on va rajouter au lieu de :

"/usr/sbin/chat -v -f $DIALER_SCRIPT"

Ceci

"/usr/sbin/chat -v -f $DIALER_SCRIPT -r /tmp/report-file"

Maintenant lors d'une connexion, l'inscription suivante va s'inscrire dans le fichier /tmp/report-file:

Opening "/tmp/report-file"...
chat:  Jul 09 08:28:40 CONNECT 36000/ARQ/V90/LAPM/V42BIS
Closing "/tmp/report-file".
 

Ce fichier n'est pas écrasé mais incrémenté à chaque connexion. Il vous suffit à chaque début de connexion de jeter un coup d'oeil dedans pour voir à quelle vitesse vous êtes connecté.
 
 

 [Retour page d'accueil FUNIX]