
                        Linux Dial-On-Demand mini-HOWTO

Rodney van den Oever, Rodney.van.den.Oever@tip.nl

   Version 1.0, 28 Juillet 1996 mise  jour le 29 fvrier 1997
     _________________________________________________________________

   _(Adaptation franaise par Olivier Fourmaux, Olivier.Fourmaux@lip6.fr,
   28 Novembre 1997). Mini-HOWTO dcrivant comment utiliser une machine
   de son rseau local comme routeur PPP avec connexion  la demande. Le
   dial-on-demand correspond  l'utilisation au besoin du modem, soit
   littralement : composition  la demande que nous traduisons en
   connexion  la demande._
     _________________________________________________________________

1. Prambule

1.1 Blabla lgal

   (C)opyright 1997 Olivier Fourmaux pour la version franaise. Toute
   ressemblance avec les docs Linux de mon co-burote et nanmoins ami
   Christophe Deleuze, traducteur forcen depuis sa tendre enfance,
   serait purement fortuite.

1.2 Blabla de l'auteur (_Disclaimer_)

   Ce document dcrit une configuration qui fonctionne pour moi, utilisez
   la  vos propres risques. S'il manque quoi que ce soit d'important ou
   si quelque chose est compltement faux, s'il vous plait, communiquez
   le moi !

   Une chose que l'on peut rajouter, c'est la manire de configurer un
   serveur de noms local.

1.3 Blabla du traducteur

   Les commentaires sur la traduction sont  envoyer  Olivier Fourmaux,
   Olivier.Fourmaux@lip6.fr. De mme si vous trouvez des erreurs de fond,
   demandez moi d'abord, j'ai peut-tre traduit un peu vite :)

2. Introduction

   Ce document dcrit comment grer une connexion _dial-on-demand_ et
   comment utiliser un hte Linux connect  un rseau local en tant que
   _routeur PPP_ grant la connexion  la demande.

   Le _kerneld-mini-HOWTO_ dcrit dj comment kerneld (daemon du noyaux
   linux) excute le script request-route pour l'ajout dynamique de
   route. Pour plus d'information, le _kerneld-mini-HOWTO_ existe en
   francais. Ici nous ne dcrivons qu'une configuration dtaill adapte
    l'ajout de route avec une connexion modem.

   Si vous utilisez un petit rseau local chez vous, la connexion  la
   demande fournit une solution intressante de gestion transparente d'un
   accs Internet pour plusieurs machines.

 ______________________________
 __|__                  ___|___            Liens PPP vers le
|     |  rseau local  |       |   ______ fournisseur d'accs
| PC  |  192.168.1.0   |Routeur|--| modem|------------------>
|     |                | Linux |  |______|      x.x.x.x
|_____|                |_______|            (adresse IP
                         named                  dynamique)
                         pppd

   Cette configuration ncessite :
     * Noyau 2.0.0 ou plus rcent
     * ppp-2.2.0f.tar.gz ou plus rcent
     * modules-2.0.0.tar.gz ou plus rcent
     * ipfwadm-2.3.tar.gz (http://www.xos.nl/linux/ipfwadm)

   Les tapes suivantes sont  raliser :
    1. Configuration du noyau
    2. Installation des modules
    3. Installation de PPP
    4. Configuration du port srie et du modem
    5. Configuration de PPP
    6. Installation de la connexion  la demande
    7. Configuration du rseau
    8. Configuration de l' IP-Masquerade
    9. Configuration des stations

3. Configuration du Noyau

   Avant tout, il faut compiler un noyau avec _kerneld_, _PPP_ et
   _IP-masquerade_. Ci-dessous sont indiques les options ncessaires pour
   cette configuration (en Majuscule), les autres options rseau telles
   que _firewall logging_ ou _transparent proxying_ peuvent tre choisies
   mais ne sont pas obligatoires.

cd /usr/src/linux
make config

   ou

make menuconfig
     _________________________________________________________________

*
* Code maturity level options
*
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [Y/
n/?]
*
* Loadable module support
*
Enable loadable module support (CONFIG_MODULES) [Y/n/?]
Set version information on all symbols for modules (CONFIG_MODVERSIONS) [N/y/?]
Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]
*
Networking support (CONFIG_NET) [Y/n/?]
*
* Networking options
*
Network firewalls (CONFIG_FIREWALL) [Y/n/?]
TCP/IP networking (CONFIG_INET) [Y/n/?]
IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [Y/n/?]
IP: firewalling (CONFIG_IP_FIREWALL) [Y/n/?]
IP: masquerading (EXPERIMENTAL) (CONFIG_IP_MASQUERADE) [Y/n/?]
*
* Protocol-specific masquerading support will be built as modules.
*
IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG) [Y/n/?]
IP: optimize as router not host (CONFIG_IP_ROUTER) [Y/n/?]
*
* Network device support
*
Network device support (CONFIG_NETDEVICES) [Y/n/?]
*
PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?]
*
* CCP compressors for PPP are only built as modules.
*
Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]
NE2000/NE1000 support (CONFIG_NE2000) [Y/m/n/?]
     _________________________________________________________________

   Cette dernire option dpend bien sur de la carte rseau utilise.

   Compilez le noyau avec :

make zlilo
make modules
make modules_install

   Si vous n'utilisez pas LILO, copiez
   /usr/src/linux/arch/i386/boot/zImage  la bonne place pour
   l'initialisation. Les modules sont installs dans /lib/modules/x.x.x,
   avec x.x.x correspondant  la version du noyau utilis.

4. Installation des Modules

   Les programmes suivants sont ncessaires :

   _/sbin/insmode_
          Charge les modules ncessaires.

   _/sbin/rmmod_
          Supprime les modules inutiles.

   _/sbin/depmod_
          Cre les dpendances.

   _/sbin/kerneld_
          Extension de Kerneld pour charger les modules automatiquement.

   Si vous ne les avez pas encore, installez les avec :

cd /usr/src
tar zxf modules-2.0.0.tar.gz
make install

   Pour charger _Kerneld_ au dmarrage, vous devez diter /etc/rc.d/rc.S
   ou crer un script rc.modules qui est appel par rc.S. Ajoutez ou
   modifiez les lignes suivantes :
     _________________________________________________________________

/etc/rc.d/rc.modules:

if [ ! -f /lib/modules/`uname -r`/modules.dep ] ; then
        echo "Updating module dependencies for Linux `uname -r`:"
        /sbin/depmod -a
fi

[ -x /sbin/kerneld ] && /sbin/kerneld
     _________________________________________________________________

   La premire partie vrifie les dpendances des modules et les cre si
   elles n'existent pas encore.

5. Installation de PPP

   Les programmes suivants sont ncessaires pour l'installation d'un lien
   PPP :

   _/usr/sbin/pppd_
          Daemon PPP.

   _/usr/sbin/pppstats_
          Statistiques PPP.

   _/usr/sbin/chat_
          Excution de scripts.

   A installer avec :

cd /usr/src
tar zxf ppp-2.2.0f.tar.gz
cd ppp-2.2.0f
./configure
make kernel

   Les noyaux rcents incluent le code de PPP, make kernel ne remplacera
   donc rien du tout. Vrifier les fichiers README et Makefile pour le
   support du kit _Shadow_. Excutez alors :

make
make install

6. Configuration du Port Srie et du Modem

   Cette configuration ncessite un modem. La configuration du port serie
   est ralise dans le fichier rc.serial :
     _________________________________________________________________

/etc/rc.d/rc.serial:

${SETSERIAL} /dev/cua0 uart 16450 port 0x3F8 irq 4
${SETSERIAL} /dev/cua1 uart 16550A port 0x2F8 irq 3 spd_vhi
     _________________________________________________________________

   Dans cette configuration, COM1 (cua0) est utilis par la souris et
   COM2 (cua1) par un modem interne  28,8 kb/s. Le paramtre spd_vhi
   remplace la valeur 38400 bps par 115200 bps dans la table des
   vitesses, de mme spd_hi est utilis pour la valeur 57600 bps.

   Il faut utiliser spd_vhi pour un modem a 28,8 kb/s et spd_hi pour un 
   14,4 kb/s. Mais on peut dmarrer par prudence avec la valeur 38400
   bps.

   Vrifiez votre configuration modem  l'aide d'un programme de type
   mulation de terminal, tel que _minicom_. Le modem doit afficher
   (_echo_) les caractres frapps. Utilisez Ctrl-A P pour changer les
   paramtres de communication. Vrifiez si cela fonctionne encore 
   57600 ou 115200 b/s. Tapez ATZ, le modem devrait rpondre OK. Utilisez
   Ctrl-A X pour quitter minicom.

   Minicom peut aussi tre utilis pour se connecter  son fournisseur de
   services manuellement. Notez pralablement ce que vous devez taper
   pour initier la connexion et quelles sont les rponses du serveur
   distant. Si votre fournisseur de services n'utilise pas PAP ou CHAP
   (protocoles d'change de mots de passe), il faudra probablement entrer
   un nom d'utilisateur et un mot de passe, et peut tre aussi une
   commande pour initialiser la liaison en mode PPP.

7. Configuration de PPP

   Le daemon pppd recherche dans le repertoire /etc/ppp les scripts et le
   fichier options :
     _________________________________________________________________

/etc/ppp/options:

/dev/modem 38400 crtscts modem noipdefault defaultroute idle-disconnect
120
     _________________________________________________________________

   Ce qui signifie :

   _/dev/modem_
          Dans ma configuration, un lien vers /dev/cua1.

   _38400_
          A remplacer par 115200 (paramtre spd_vhi dans
          /etc/rc.d/rc.serial)

   _crtscts_
          Contrle de flux matriel, RTS/CTS, _ne pas utiliser le
          controle de flux Xon-Xoff!_

   _modem_
          Utilisation avec un modem.

   _noipdefault_
          L'adresse IP est attribue automatiquement.

   _defaultroute_
          Affecte la route par dfaut  l'interface PPP.

   _idle-disconnect_
          Avec PPP-2.2.0f dconnecte automatiquement un lien inutilis
          apres 120 secondes.

   Nous crons maintenant un script, nomm defaut, pour la connexion vers
   notre fournisseur de service habituel. Pour d'autres connexions, crer
   d'autres scripts vers ces autres sites et les nommer avec leur adresse
   IP distante, par exemple.
     _________________________________________________________________

/etc/ppp/defaut:

"" ats11=55dtXXXXXXXX CONNECT "" rname: UUUUU sword: PPPPP > ppp
     _________________________________________________________________

   Ce qui signifie :

   _ats11=55_
          Racourcit la dure des tonalits pour acclrer la connexion.

   _XXXXXXXX_
          Correspond au numro de tlphone du fournisseur de service.

   _CONNECT_
          chat attend que le modem renvoi CONNECT.

   _rname:_
          chat attend rname, et entre UUUUU.

   _sword:_
          chat attend sword, et entre PPPPP.

   Remplacez UUUUU et PPPPP par votre nom d'utilisateur et votre mot de
   passe. Utilisez rname et sword ( la place de username et password)
   car quelquefois les premires lettres sautent ou sont soit en
   majuscules soit en minuscules. Certains fournisseurs de services
   demandent l'entre du mot ppp aprs le nom d'utilisateur et le mot de
   passe, d'o l'attente de l'invite du routeur (>).

   Si vous avez des erreurs du type serial line looped back ou serial
   line not 8-bit clean, la liaison n'est pas encore sous PPP.

   La commande de lancement est assez longue pour mriter un petit script
   :
     _________________________________________________________________

/etc/ppp/ppp:

#!/bin/sh
/usr/sbin/pppd connect '/usr/sbin/chat -v -f /etc/ppp/default'
     _________________________________________________________________

   Vous devriez tre capable de vous connecter  votre fournisseur de
   service. Vous pouvez rajouter le paramtre debug au fichier
   /etc/ppp/options et augmenter le _loglevel_ de syslogd pour voir ce
   qui ce passe :
     _________________________________________________________________

/etc/syslog.conf:

*.debug                                 /var/log/messages
     _________________________________________________________________

   Si vous ditez syslog.conf, soyez sr d'indiquer au daemon syslogd le
   changement. Suivant la localisation de son fichier PID, fates :

kill -1 `cat /var/run/syslog.pid`

   ou

kill -1 `cat /etc/syslog.pid`

   Aprs que la connexion soit tablie, vrifiez avec ifconfig
   l'existence de l'interface ppp0. Vrifiez la route par dfaut avec
   netstat -r, elle devrait indiquer le fournisseur de service. Essayer
   aussi de _pinguer_ (ping) un serveur distant, tel que le serveur de
   noms du fourniseur de service. Si a marche, vous pouvez ajouter ce
   serveur de noms dans le fichier /etc/resolv.conf :
     _________________________________________________________________

/etc/resolv.conf:

search your.isp.domain
nameserver x.x.x.x
     _________________________________________________________________

8. Installation de la Connexion  la Demande

   Le daemon kerneld peut tre utilis pour charger  la demande des
   modules tels que PPP. Une autre possibilit signale dans le
   _kerneld-HOWTO_ est le lancement d'un script si une route est absente.
   Kerneld surveille le fichier /sbin/request-route. Le script qui suit
   est la copie de celui fourni dans modules-2.0.0.tar.gz :
     _________________________________________________________________

/sbin/request-route:

#!/bin/sh
LOCK=/var/run/request-route.pid
export PATH=/usr/sbin:$PATH     # for ppp-2.2*
#
# Ce script sera appele par kerneld avec la route demandee $1
#
chatfile=/etc/ppp/$1
#
# Si aucun script chat utilise une valeur par defaut (lien symbolique
# vers le script prefere) :
#
[ ! -f $chatfile ] && chatfile=/etc/ppp/default
#
# Vrifie si le programme tourne toujours :
#
if [ ! -f $LOCK ] ; then
        pppd connect "chat -f $chatfile" &
        #
        # Temporisation supprimee par ip-up, a regler. Verifier les
        # delais de kerneld aussi.
        #
        sleep 60 &
        sleepid=$!
        echo $sleepid > $LOCK
        wait $sleepid
        rm -f $LOCK
        exit 0
fi
exit 1
     _________________________________________________________________

   Kerneld excute ce script en utilisant la route absente comme argument
   :

/sbin/request-route x.x.x.x

   Le script utilise un fichier verrou pour eviter plusieurs
   request-route simultans.

   Au dbut, j'utilisais un script qui tait dclench par une requte au
   serveur de noms, mais depuis je prfre fonctionner avec un serveur de
   noms local, le resultat sera dans la mmoire cache et un second accs
   ne dclenchera pas la connexion. C'est la raison pour laquelle j'ai
   chang le script pour utiliser un script chat si aucun n'existe.

   Cela permet aussi de crer de multiples scripts chat pour les
   diffrentes liaisons et d'utiliser un script chat par dfaut pour se
   connecter  son fournisseur de service.

   Aprs que la liaison ait t initie, le daemon pppd excute le script
   /ppp/ip-up qui retire le fichier verrou. Ajoutez les commandes que
   vous voulez excuter  chaque fois que la liaison est initie, par
   exemple surveiller la queue de _sendmail_ :
     _________________________________________________________________

#!/bin/ash
LOCK=/var/run/request-route.pid
[ -f $LOCK ] && kill `cat $LOCK`
#
# Execute ces commandes apres la connexion (exemple) :
#
/usr/sbin/sendmail -q
     _________________________________________________________________

   L'option idle-disconnect dconnecte automatiquement une liaison
   inutilise. Pour se dconnecter immdiatement, utilisez ppp-off :
     _________________________________________________________________

/usr/sbin/ppp-off:.

#!/bin/sh
LOCK=/var/run/request-route.pid
DEVICE=ppp0

rm -f $LOCK
#
# Si le fichier ppp0.pid est present alors le  programme tourne. Stoppez
# le.
#
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# Si ca marche, verifier que le fichier pid est retire.
#
        if [ ! "$?" = "0" ]; then
                echo "removing stale $DEVICE pid file."
                rm -f /var/run/$DEVICE.pid
                exit 1
        fi
#
# Reussite. Terminer avec le bon statut.
#
        echo "$DEVICE link terminated"
        exit 0
fi
#
# La liaison n'est pas active
#
echo "$DEVICE link is not active"

exit 1
     _________________________________________________________________

9. Configuration du Rseau

   Si votre machine Linux a une autre interface rseau, tel qu'une carte
   ethernet ou si vous utilisez PLIP pour vous connecter vers un autre
   hte, vous pouvez configurer la machine multi-interface comme un
   routeur. C'est ainsi que j'ai configur mon rseau. J'entre toujours
   toutes mes adresses IP dans /etc/hosts pour n'avoir qu'un fichier 
   modifier.
     _________________________________________________________________

/etc/hosts:

127.0.0.1       localhost
10.0.0.1        your.domain.com host
10.0.0.2        some.other.machine
     _________________________________________________________________
     _________________________________________________________________

/etc/networks:

loopback        127.0.0.0
localnet        10.0.0.0
     _________________________________________________________________
     _________________________________________________________________

/etc/rc.d/inet1:

# Loopback interface:
ifconfig lo localhost
route add -net loopback

# Local interface:
ifconfig eth0 host
route add -net localnet eth0
     _________________________________________________________________

   La dernire ligne ajoute une route au rseau local. Nous n'avons pas
   besoin d'entrer la passerelle par dfaut ici, puisque nous n'en avons
   pas, tant que la liaison PPP n'existe pas.

10. Configuration de l'IP-Masquerade

   Si vous devez connecter diffrentes machines, mais possdez seulement
   une adresse IP, vous pouvez utiliser les fonctionnalits
   d'IP-masquerade de Linux. Cela vous permet de configurer des adresses
   IP interne  un rseau qui seront converties en l'adresse IP assigne
    l'intreface PPP.

   Vous pouvez utiliser librement les adresses de rseau suivantes :

Class A: 10.0.0.0
Class B: 172.16.0.0 - 172.31.0.0
Class C: 192.168.0.0 - 192.168.254.0

   (NdT : _ utiliser sans angoisse, adresses non routes dans
   l'Internet_)

   Ajouter ensuite les lignes suivantes  /etc/rc.d/rc.inet1 :
     _________________________________________________________________

/etc/rc.d/rc.inet1:

FW=/sbin/ipfwadm

${FW} -F -f

${FW} -F -a m -P tcp -S localnet/8 -D default/0
${FW} -F -a m -P udp -S localnet/8 -D default/0

# Masquerading timeout-values (tcp tcpfin udp), defaults:
${FW} -M -s 3600 0 0

# Load module for special protocols:
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
     _________________________________________________________________

   Les deux lignes d'IP-masquerade vont adapter les trafics UDP et TCP 
   l'adresse IP utilise par la passerelle par dfaut (l'interface PPP).
   Les autres protocoles ne fonctionneront pas  partir des autres htes.
   Par exemple ping qui utilise le protocole ICMP, ne fonctionnera que du
   routeur. Ici on utilise le rseau _10.0.0.0_ avec le masque de sous
   rseau _255.0.0.0_, ou en notation CIDR : _/8_.

   Les lignes suivantes vitent la fin prmature des connexions FTP, en
   augmentant la valeur des temporisation TCP (timeout).

   Les modules sont ncessaires seulement si vous dsirez utiliser ces
   protocoles  travers un pare-feu (firewall). C'est  dire, si vous
   voulez utiliser un FTP normal  travers un pare-feu, vous devez
   charger le module ip_masq_ftp.

11. Configuration des Stations

   Configurez vos autres machines (stations) pour votre rseau local,
   puis pour utiliser la machine Linux (routeur) comme passerelle par
   defaut.
