  Linux Dial-On-Demand mini-HOWTO
  Rodney van den Oever, Rodney.van.den.Oever@tip.nl
  Version 1.0, 28 Juillet 1996 mise a jour le 29 fevrier 1997

  (Adaptation  francaise par Olivier Fourmaux, Olivier.Fourmaux@lip6.fr,
  28 Novembre 1997). Mini-HOWTO decrivant comment utiliser  une  machine
  de  son reseau local comme routeur PPP avec connexion a la demande. Le
  ddiiaall--oonn--ddeemmaanndd 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 ccoonn--
  nneexxiioonn aa llaa ddeemmaannddee.

  11..  PPrreeaammbbuullee

  11..11..  BBllaabbllaa lleeggaall

  (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.

  11..22..  BBllaabbllaa ddee ll''aauutteeuurr ((_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.

  11..33..  BBllaabbllaa dduu ttrraadduucctteeuurr

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

  22..  IInnttrroodduuccttiioonn

  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

  33..  CCoonnffiigguurraattiioonn dduu NNooyyaauu

  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.
  44..  IInnssttaallllaattiioonn ddeess MMoodduulleess

  Les programmes suivants sont necessaires :

     //ssbbiinn//iinnssmmooddee
        Charge les modules necessaires.

     //ssbbiinn//rrmmmmoodd
        Supprime les modules inutiles.

     //ssbbiinn//ddeeppmmoodd
        Cree les dependances.

     //ssbbiinn//kkeerrnneelldd
        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.

  55..  IInnssttaallllaattiioonn ddee PPPPPP

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

     //uussrr//ssbbiinn//ppppppdd
        Daemon PPP.

     //uussrr//ssbbiinn//ppppppssttaattss
        Statistiques PPP.

     //uussrr//ssbbiinn//cchhaatt
        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

  66..  CCoonnffiigguurraattiioonn dduu PPoorrtt SSeerriiee eett dduu MMooddeemm

  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.

  77..  CCoonnffiigguurraattiioonn ddee PPPPPP

  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 :

     //ddeevv//mmooddeemm
        Dans ma configuration, un lien vers /dev/cua1.

     3388440000
        A    remplacer    par    115200    (parametre    spd_vhi    dans
        /etc/rc.d/rc.serial)

     ccrrttssccttss
        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_!

     mmooddeemm
        Utilisation avec un modem.

     nnooiippddeeffaauulltt
        L'adresse IP est attribuee automatiquement.

     ddeeffaauullttrroouuttee
        Affecte la route par defaut a l'interface PPP.

     iiddllee--ddiissccoonnnneecctt
        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 :

     aattss1111==5555
        Racourcit la duree des tonalites pour accelerer la connexion.

     XXXXXXXXXXXXXXXX
        Correspond au numero de telephone du fournisseur de service.

     CCOONNNNEECCTT
        chat attend que le modem renvoi CONNECT.

     rrnnaammee::
        chat attend rname, et entre UUUUU.

     sswwoorrdd::
        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
  ______________________________________________________________________

  88..  IInnssttaallllaattiioonn ddee llaa CCoonnnneexxiioonn aa llaa DDeemmaannddee

  Le daemon kerneld peut etre utilise pour  charger  a  la  demande  des
  modules  tels que PPP. Une autre possibilite signalee dans le kkeerrnneelldd--
  HHOOWWTTOO 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 sseennddmmaaiill :

  ______________________________________________________________________
  #!/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
  ______________________________________________________________________

  99..  CCoonnffiigguurraattiioonn dduu RReesseeaauu

  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.

  1100..  CCoonnffiigguurraattiioonn ddee ll''IIPP--MMaassqquueerraaddee

  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 1100..00..00..00  avec  le  masque  de  sous
  reseau 225555..00..00..00, ou en notation CIDR : //88.

  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.

  1111..  CCoonnffiigguurraattiioonn ddeess SSttaattiioonnss

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

