Linux Dial-On-Demand mini-HOWTO
 Rodney van den Oever, [email protected]
 Version 1.0, 28 Juillet 1996 mise a jour le 29 fevrier 1997

 (Adaptation  francaise par Olivier Fourmaux, [email protected],
 28 Novembre 1997). Mini-HOWTO decrivant comment utiliser  une  machine
 de  son reseau local comme routeur PPP avec connexion a la demande. Le
 ddiiaall--oonn--ddeemmaanndd correspond a l'utilisation au  besoin  du  modem,  soit
 litteralement  :  _c_o_m_p_o_s_i_t_i_o_n _a _l_a _d_e_m_a_n_d_e que nous traduisons en ccoonn--
 nneexxiioonn aa llaa ddeemmaannddee.

 11..  PPrreeaammbbuullee

 11..11..  BBllaabbllaa lleeggaall

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

 11..22..  BBllaabbllaa ddee ll''aauutteeuurr ((_D_i_s_c_l_a_i_m_e_r))

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

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

 11..33..  BBllaabbllaa dduu ttrraadduucctteeuurr

 Les  commentaires sur la traduction sont a envoyer a Olivier Fourmaux,
 [email protected]. De meme si vous trouvez des erreurs de fond,
 demandez moi d'abord, j'ai peut-etre traduit un peu vite :)

 22..  IInnttrroodduuccttiioonn

 Ce  document  decrit  comment  gerer  une  connexion _d_i_a_l_-_o_n_-_d_e_m_a_n_d et
 comment utiliser un hote Linux connecte a un reseau local en tant  que
 _r_o_u_t_e_u_r _P_P_P gerant la connexion a la demande.

 Le  _k_e_r_n_e_l_d_-_m_i_n_i_-_H_O_W_T_O  decrit  deja comment kerneld (daemon du noyaux
 linux) execute le  script  request-route  pour  l'ajout  dynamique  de
 route.  Pour  plus  d'information,  le  _k_e_r_n_e_l_d_-_m_i_n_i_-_H_O_W_T_O  existe  en
 francais. Ici nous ne decrivons qu'une configuration detaille  adaptee
 a l'ajout de route avec une connexion modem.

 Si  vous  utilisez  un petit reseau local chez vous, la connexion a la
 demande fournit une solution interessante de gestion transparente d'un
 acces Internet pour plusieurs machines.

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

 Cette configuration necessite :

 +o  Noyau 2.0.0 ou plus recent

 +o  ppp-2.2.0f.tar.gz ou plus recent

 +o  modules-2.0.0.tar.gz ou plus recent

 +o  ipfwadm-2.3.tar.gz (http://www.xos.nl/linux/ipfwadm)

 Les etapes suivantes sont a realiser :

 1. Configuration du noyau

 2. Installation des modules

 3. Installation de PPP

 4. Configuration du port serie et du modem

 5. Configuration de PPP

 6. Installation de la connexion a la demande

 7. Configuration du reseau

 8. Configuration de l' IP-Masquerade

 9. Configuration des stations

 33..  CCoonnffiigguurraattiioonn dduu NNooyyaauu

 Avant  tout,  il  faut  compiler  un  noyau  avec  _k_e_r_n_e_l_d, _P_P_P et _I_P_-
 _m_a_s_q_u_e_r_a_d_e. Ci-dessous sont indiquees  les  options  necessaires  pour
 cette  configuration  (en Majuscule), les autres options reseau telles
 que _f_i_r_e_w_a_l_l _l_o_g_g_i_n_g ou _t_r_a_n_s_p_a_r_e_n_t  _p_r_o_x_y_i_n_g  peuvent  etre  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 derniere option depend bien sur de la carte reseau utilisee.

 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   a   la   bonne    place    pour
 l'initialisation.  Les modules sont installes dans /lib/modules/x.x.x,
 avec x.x.x correspondant a la version du noyau utilise.
 44..  IInnssttaallllaattiioonn ddeess MMoodduulleess

 Les programmes suivants sont necessaires :

    //ssbbiinn//iinnssmmooddee
       Charge les modules necessaires.

    //ssbbiinn//rrmmmmoodd
       Supprime les modules inutiles.

    //ssbbiinn//ddeeppmmoodd
       Cree les dependances.

    //ssbbiinn//kkeerrnneelldd
       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 _K_e_r_n_e_l_d au demarrage, vous devez editer /etc/rc.d/rc.S ou
 creer  un  script  rc.modules  qui  est  appele  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 premiere partie verifie les dependances des modules et les cree  si
 elles n'existent pas encore.

 55..  IInnssttaallllaattiioonn ddee PPPPPP

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

    //uussrr//ssbbiinn//ppppppdd
       Daemon PPP.

    //uussrr//ssbbiinn//ppppppssttaattss
       Statistiques PPP.

    //uussrr//ssbbiinn//cchhaatt
       Execution de scripts.

 A installer avec :

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

 Les noyaux recents incluent le code de PPP, make kernel ne  remplacera
 donc  rien  du  tout. Verifier les fichiers README et Makefile pour le
 support du kit _S_h_a_d_o_w.  Executez alors :

      make
      make install

 66..  CCoonnffiigguurraattiioonn dduu PPoorrtt SSeerriiee eett dduu MMooddeemm

 Cette configuration necessite un modem. La configuration du port serie
 est realisee 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 utilise par la souris et
 COM2 (cua1) par un modem interne a 28,8  kb/s.  Le  parametre  spd_vhi
 remplace  la  valeur  38400  bps  par  115200  bps  dans  la table des
 vitesses, de meme spd_hi est utilise pour la valeur 57600 bps.

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

 Verifiez votre configuration modem a l'aide  d'un  programme  de  type
 emulation  de terminal, tel que _m_i_n_i_c_o_m. Le modem doit afficher (_e_c_h_o)
 les caracteres frappes. Utilisez Ctrl-A P pour changer les  parametres
 de communication. Verifiez si cela fonctionne encore a 57600 ou 115200
 b/s. Tapez ATZ, le modem devrait repondre OK.  Utilisez Ctrl-A X  pour
 quitter minicom.

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

 77..  CCoonnffiigguurraattiioonn ddee PPPPPP

 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 :

    //ddeevv//mmooddeemm
       Dans ma configuration, un lien vers /dev/cua1.

    3388440000
       A    remplacer    par    115200    (parametre    spd_vhi    dans
       /etc/rc.d/rc.serial)

    ccrrttssccttss
       Controle  de flux materiel, RTS/CTS, _n_e _p_a_s _u_t_i_l_i_s_e_r _l_e _c_o_n_t_r_o_l_e
       _d_e _f_l_u_x _X_o_n_-_X_o_f_f_!

    mmooddeemm
       Utilisation avec un modem.

    nnooiippddeeffaauulltt
       L'adresse IP est attribuee automatiquement.

    ddeeffaauullttrroouuttee
       Affecte la route par defaut a l'interface PPP.

    iiddllee--ddiissccoonnnneecctt
       Avec PPP-2.2.0f deconnecte  automatiquement  un  lien  inutilise
       apres 120 secondes.

 Nous creons maintenant un script, nomme defaut, pour la connexion vers
 notre fournisseur de service habituel. Pour d'autres connexions, creer
 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 :

    aattss1111==5555
       Racourcit la duree des tonalites pour accelerer la connexion.

    XXXXXXXXXXXXXXXX
       Correspond au numero de telephone du fournisseur de service.

    CCOONNNNEECCTT
       chat attend que le modem renvoi CONNECT.

    rrnnaammee::
       chat attend rname, et entre UUUUU.

    sswwoorrdd::
       chat attend sword, et entre PPPPP.

 Remplacez UUUUU et PPPPP par votre nom d'utilisateur et votre  mot  de
 passe.  Utilisez  rname  et sword (a la place de username et password)
 car  quelquefois  les  premieres  lettres  sautent  ou  sont  soit  en
 majuscules  soit  en  minuscules.  Certains  fournisseurs  de services
 demandent l'entree du mot ppp apres le nom d'utilisateur et le mot  de
 passe, d'ou 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 meriter un petit script
 :

 ______________________________________________________________________
 /etc/ppp/ppp:

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

 Vous  devriez  etre  capable  de vous connecter a votre fournisseur de
 service.  Vous  pouvez  rajouter  le  parametre   debug   au   fichier
 /etc/ppp/options  et augmenter le _l_o_g_l_e_v_e_l de syslogd pour voir ce qui
 ce passe :

 ______________________________________________________________________
 /etc/syslog.conf:

 *.debug                                 /var/log/messages
 ______________________________________________________________________

 Si vous editez syslog.conf, soyez sur d'indiquer au daemon syslogd  le
 changement. Suivant la localisation de son fichier PID, faites :

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

 ou

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

 Apres   que   la   connexion  soit  etablie,  verifiez  avec  ifconfig
 l'existence de l'interface ppp0. Verifiez la  route  par  defaut  avec
 netstat  -r, elle devrait indiquer le fournisseur de service.  Essayer
 aussi de _p_i_n_g_u_e_r (ping) un serveur distant, tel que le serveur de noms
 du fourniseur de service. Si ca 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
 ______________________________________________________________________

 88..  IInnssttaallllaattiioonn ddee llaa CCoonnnneexxiioonn aa llaa DDeemmaannddee

 Le daemon kerneld peut etre utilise pour  charger  a  la  demande  des
 modules  tels que PPP. Une autre possibilite signalee dans le kkeerrnneelldd--
 HHOOWWTTOO 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
 #
 # Verifie 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 execute 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 simultanes.

 Au debut, j'utilisais un script qui etait declenche par une requete au
 serveur de noms, mais depuis je prefere fonctionner avec un serveur de
 noms local, le resultat sera dans la memoire cache et un second  acces
 ne  declenchera  pas  la connexion. C'est la raison pour laquelle j'ai
 change le script pour utiliser un script chat si aucun n'existe.

 Cela permet  aussi  de  creer  de  multiples  scripts  chat  pour  les
 differentes  liaisons  et d'utiliser un script chat par defaut pour se
 connecter a son fournisseur de service.

 Apres que la liaison ait ete initiee, le daemon pppd execute le script
 /ppp/ip-up  qui  retire  le  fichier verrou. Ajoutez les commandes que
 vous voulez executer a chaque fois que la  liaison  est  initiee,  par
 exemple surveiller la queue de sseennddmmaaiill :

 ______________________________________________________________________
 #!/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   deconnecte  automatiquement  une  liaison
 inutilisee. Pour se deconnecter immediatement, 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
 ______________________________________________________________________

 99..  CCoonnffiigguurraattiioonn dduu RReesseeaauu

 Si votre machine Linux a une autre interface reseau, tel qu'une  carte
 ethernet  ou  si  vous utilisez PLIP pour vous connecter vers un autre
 hote, vous pouvez  configurer  la  machine  multi-interface  comme  un
 routeur.  C'est  ainsi que j'ai configure mon reseau. J'entre toujours
 toutes mes adresses IP dans /etc/hosts pour n'avoir  qu'un  fichier  a
 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  derniere  ligne ajoute une route au reseau local. Nous n'avons pas
 besoin d'entrer la passerelle par defaut ici, puisque nous n'en  avons
 pas, tant que la liaison PPP n'existe pas.

 1100..  CCoonnffiigguurraattiioonn ddee ll''IIPP--MMaassqquueerraaddee

 Si  vous devez connecter differentes machines, mais possedez seulement
 une  adresse  IP,  vous  pouvez  utiliser  les  fonctionnalites  d'IP-
 masquerade  de  Linux.  Cela vous permet de configurer des adresses IP
 interne a un reseau qui seront converties en l'adresse IP  assignee  a
 l'intreface PPP.

 Vous pouvez utiliser librement les adresses de reseau 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 : _a _u_t_i_l_i_s_e_r _s_a_n_s _a_n_g_o_i_s_s_e_, _a_d_r_e_s_s_e_s _n_o_n _r_o_u_t_e_e_s _d_a_n_s _l_'_I_n_t_e_r_n_e_t)

 Ajouter ensuite les lignes suivantes a /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  a
 l'adresse  IP utilisee par la passerelle par defaut (l'interface PPP).
 Les autres protocoles ne fonctionneront pas a partir des autres hotes.
 Par exemple ping qui utilise le protocole ICMP, ne fonctionnera que du
 routeur. Ici on utilise le reseau 1100..00..00..00  avec  le  masque  de  sous
 reseau 225555..00..00..00, ou en notation CIDR : //88.

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

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

 1111..  CCoonnffiigguurraattiioonn ddeess SSttaattiioonnss

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