  Linux 2.4 Advanced Routing HOWTO
  Netherlabs BV (bert hubert <bert.hubert@netherlabs.nl>)
  Gregory Maxwell <greg@linuxpower.cx>
  Remco van Mook <remco@virtu.nl>
  Martijn van Oosterhout <kleptog@cupid.suninternet.com>
  Paul B Schroeder  <paulsch@us.ibm.com>
  howto@ds9a.nl
  Traduction de Laurent Foucher <foucher@gch.iut-tlse3.fr>,
  Philippe Latu <philippe.latu@linux-france.org> et Guillaume
  Allgre <Guillaume.Allegre@imag.fr>
  v0.1.0 $Date: 01/07/2000 12:20:21 $

  Une approche pratique d'iproute2, de la mise en forme du trafic et un
  peu de netfilter.
  ______________________________________________________________________

  Table des matires

















































  1. Ddicace

  2. Introduction

     2.1 Conditions de distribution et Mise en garde
     2.2 Connaissances pralables
     2.3 Ce que Linux peut faire pour vous
     2.4 Notes diverses
     2.5 Accs, CVS et propositions de mises  jour
     2.6 Plan du document

  3. Introduction  iproute2

     3.1 Pourquoi iproute2 ?
     3.2 Un tour d'horizon d'Iproute2
     3.3 Prrequis
     3.4 Explorer votre configuration courante
        3.4.1 (TT
        3.4.2 (TT
        3.4.3 (TT
     3.5 ARP

  4. Rgles - bases de donnes des politiques de routage

     4.1 Routage simple par l'adresse source

  5. GRE et autres tunnels

     5.1 Quelques remarques gnrales  propos des tunnels :
     5.2 IP dans un tunnel IP
     5.3 Le tunnel GRE
        5.3.1 Le tunnel IPv4
        5.3.2 Le tunnel IPv6
     5.4 Tunnels dans l'espace utilisateur

  6. IPsec : IP scuris  travers l'Internet

  7. Routage multi-diffusion (multicast)

  8. Utilisation de la mise en file d'attente base sur des classes ("Class Based Queueing") pour la gestion de la bande passante

     8.1 Qu'est-ce que la mise en file d'attente ?
     8.2 Premire tentative de partage de bande passante
     8.3 Que faire de la bande passante en excs ?
     8.4 Subdivisions de classes
     8.5 quilibrage de charge sur plusieurs interfaces

  9. D'autres gestionnaires de mise en file d'attente (queueing disciplines)

     9.1 pfifo_fast
     9.2 Stochastic Fairness Queueing
     9.3 Token Bucket Filter
     9.4 Random Early Detect
     9.5 Ingress policer qdisc

  10. Netfilter et iproute - marquage de paquets

  11. D'autres classificateurs

     11.1 Le classificateur "fw"
     11.2 Le classificateur "u32"
        11.2.1 Le slecteur U32
        11.2.2 Slecteurs gnraux
        11.2.3 Les slecteurs spcifiques
     11.3 Le classificateur "route"
     11.4 Le classificateur "rsvp"
     11.5 Le classificateur "tcindex"

  12. Paramtres rseau du noyau

     12.1 Filtrage du Chemin Inverse (Reverse Path Filtering)
     12.2 Configurations obscures
        12.2.1 ipv4 gnrique
        12.2.2 Configuration priphrique par priphrique
        12.2.3 Politique de voisinage
        12.2.4 Configuration du routage

  13. Application du contrle de trafic aux dorsales

     13.1 Files d'attente de routeurs

  14. Recettes de cuisine pour la mise en forme du trafic

     14.1 Faire tourner plusieurs sites avec diffrentes SLA (autorisations)
     14.2 Protger votre machine des inondations SYN floods
     14.3 Limiter le dbit ICMP pour empcher les dnis de service
     14.4 Donner la priorit au trafic interactif

  15. Routage avanc sur Linux

     15.1 Comment la mise en file d'attente des paquets fonctionne-t-elle en pratique ?
     15.2 Utilisation avance du systme de mise en file d'attente des paquets
     15.3 D'autres systmes de mise en forme des paquets

  16. Routage Dynamique - OSPF et BGP

  17. Lectures supplmentaires

  18. Remerciements



  ______________________________________________________________________

  11..  DDddiiccaaccee


  Ce document est ddi  beaucoup de gens ; dans ma tentative de tous
  me les rappeler, je peux en citer quelques-uns :



    Rusty Russel

    Alexey N. Kuznetsov

    La fine quipe de Google

    L'quipe de Casema Internet



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

  Bienvenue, cher lecteur.

  Ce document a pour but de vous clairer sur la manire de faire du
  routage avanc avec Linux 2.2/2.4. Mconnus par les utilisateurs, les
  outils standard de ces noyaux permettent de faire des choses
  spectaculaires.  Les commandes comme "route" et "ifconfig" sont des
  interfaces vraiment pauvres par rapport  la grande puissance
  potentielle d'iproute2.
  J'espre que cet HOWTO deviendra aussi lisible que le trs rput
  Netfilter, de Rusty Russel.

  Vous pouvez nous contacter en nous crivant  quipe HOWTO
  <mailto:HOWTO@ds9a.nl>.


  22..11..  CCoonnddiittiioonnss ddee ddiissttrriibbuuttiioonn eett MMiissee eenn ggaarrddee

  Ce document est distribu avec l'espoir qu'il sera utile et utilis.
  Sauf mention contraire, les documents Linux HOWTO sont la proprit de
  leurs auteurs respectifs. Les documents Linux HOWTO peuvent tre
  reproduits et distribus en totalit ou en partie, sur tout support
  physique ou lectronique, tant que cette notice de droit d'auteur est
  prsente sur chaque copie. La redistribution commerciale est autorise
  et encourage ; nammoins, l'auteur souhaite tre inform de toute
  distribution de ce genre.  Toute traduction, travail driv, ou
  agrgat incorporant tout ou partie d'un ou plusieurs documents Linux
  HOWTO doit tre couvert par ce mme droit d'auteur. Ce qui veut dire
  que vous ne pouvez produire un travail driv d'un HOWTO et imposer
  des restrictions supplmentaires concernant sa distribution.

  En un mot, si votre dorsale STM-64 est tombe ou distribue de la
  pornographie  vos estims clients, cela n'est pas de notre faute.
  Dsol.

  Copyright (c) 2000 par Bert Hubert, Gregory Maxwell et Martijn van
  Oosterhout

  Copiez et distribuez (vendez ou donnez) librement ce document, dans
  n'importe quel format. Les demandes de corrections et/ou de
  commentaires sont  adresser  la personne qui maintient ce document.
  Vous pouvez crer un travail driv et le distribuer  condition :


  1. d'envoyer votre travail driv (dans le format le plus appropri,
     tel que sgml) au LDP (Linux Documentation Project), ou autre, pour
     une diffusion sur Internet.  Si ce n'est pas au LDP, faites savoir
     au LDP o il est disponible ;

  2. que la licence de votre travail driv soit la mme, ou utilisez la
     GPL.  Incluez une notification du copyright et, au moins, un
     pointeur vers la licence utilise ;

  3. de crditer pour leur travail les auteurs prcdents et les
     principaux contributeurs.

     Si vous envisagez un travail driv autre qu'une traduction, vous
     tes invit  discuter de vos projets avec le mainteneur actuel.

  Il est aussi demand que, si vous publiez cet HOWTO sur un support
  papier, vous en envoyiez des exemplaires aux auteurs pour une
  "relecture critique" :-)



  22..22..  CCoonnnnaaiissssaanncceess pprraallaabblleess

  Comme le titre l'implique, ceci est un HOWTO "avanc". Bien qu'il ne
  soit pas besoin d'tre un expert rseau, certains prrequis sont
  ncessaires.  Ce document se veut la suite du Linux 2.4 Networking
  HOWTO <http://www.ds9a.nl/2.4Networking/> par les mme auteurs. Vous
  devriez probablement le lire en premier.

  Voici d'autres rfrences qui pourront vous aider  en apprendre
  plus :
     RRuussttyy RRuusssseellss nneettwwoorrkkiinngg--ccoonncceeppttss--HHOOWWTTOO <<http://netfilter.kernel
        notes.org/unreliable-guides/networking-concepts-HOWTO.html>
        Trs bonne introduction, expliquant ce qu'est un rseau, et
        comment on le connecte  d'autres rseaux.


     LLiinnuuxx NNeettwwoorrkkiinngg--HHOOWWTTOO ((eexx NNeett--33 HHOOWWTTOO))
        Excellent document, bien que trs bavard. Il vous apprendra
        beaucoup de choses qui sont dj configures si vous tes
        capable de vous connecter  Internet.  Probablement 
        /usr/doc/HOWTO/NET-HOWTO.txt mais peut aussi tre trouv en
        ligne <http://www.linuxports.com/howto/networking>


  22..33..  CCee qquuee LLiinnuuxx ppeeuutt ffaaiirree ppoouurr vvoouuss

  Une petite liste des choses qui sont possibles :


    Matriser la bande passante pour certains ordinateurs

    Matriser la bande passante vers certains ordinateurs

    Vous aider  partager quitablement votre bande passante

    Protger votre rseau des attaques de type Dni de Service

    Protger le rseau local des accs de vos clients

    Multiplexer plusieurs serveurs en un seul, pour l'quilibrage de
     charge, ou une disponibilit amliore

    Restreindre l'accs  vos ordinateurs

    Limiter l'accs de vos utilisateurs vers d'autres htes

    Faire du routage bas sur l'ID utilisateur (eh oui !), l'adresse
     MAC, l'adresse IP source, le port, le type de service, l'heure, ou
     le contenu.

  Peu de personnes utilisent couramment ces fonctionnalits avances. Il
  y a plusieurs raisons  cela. Bien que la documentation soit fournie,
  la prise en main est difficile.  Les commandes de contrle du trafic
  ne sont pratiquement pas documentes.


  22..44..  NNootteess ddiivveerrsseess

  Il y a plusieurs choses qui doivent tre notes au sujet de ce
  document.  Bien que  j'en aie crit la majeure partie, je ne veux
  vraiment pas qu'il reste tel quel. Je crois beaucoup  l'Open Source,
  je vous encourage donc  envoyer des remarques, des mises  jour, des
  corrections, etc.  N'hsitez pas  m'avertir des coquilles ou
  d'erreurs pures et simples.  Si mon anglais vous parat parfois peu
  naturel, ayez en tte, s'il vous plat, que l'anglais n'est pas ma
  langue natale.  N'hsitez pas  m'envoyer vos suggestions [NdT : en
  anglais !]

  Si vous pensez que vous tes plus qualifi que moi pour maintenir une
  section, ou si vous pensez que vous pouvez crire et maintenir de
  nouvelles sections, vous tes le bienvenu.  Le source SGML de cette
  documentation est disponible via CVS, ce qui permet  plus de
  personnes de travailler dessus.

  Pour vous aider, vous trouverez beaucoup de mentions FIXME (NdT : "
  corriger"). Les corrections sont toujours les bienvenues.  Si vous
  trouvez une mention FIXME, vous saurez que vous tes en territoire
  inconnu. Cela ne veut pas dire qu'il n'y a pas d'erreurs ailleurs,
  faites donc trs attention.  Si vous avez valid quelque chose,
  faites-le nous savoir, ce qui nous permettra de retirer la mention
  FIXME.

  Je prendrai quelques liberts tout au long de cet HOWTO. Par exemple,
  je pars de l'hypothse d'une connexion Internet  10 Mbits, bien que
  je sache trs bien que cela n'est pas vraiment courant.


  22..55..  AAccccss,, CCVVSS eett pprrooppoossiittiioonnss ddee mmiisseess  jjoouurr

  L'adresse canonique de cet HOWTO est Ici
  <http://www.ds9a.nl/2.4Routing>.

  Nous avons maintenant un CVS en accs anonyme disponible depuis le
  monde entier. Cela est intressant pour plusieurs raisons. Vous pouvez
  facilement tlcharger les nouvelles versions de ce HOWTO et soumettre
  des patches.  En outre, cela permet aux auteurs de travailler sur le
  source de facon indpendante, ce qui est une bonne chose aussi.



       $ export CVSROOT=:pserver:anon@outpost.ds9a.nl:/var/cvsroot
       $ cvs login
       CVS password: [enter 'cvs' (without 's)]
       $ cvs co 2.4routing
       cvs server: Updating 2.4routing
       U 2.4routing/2.4routing.sgml




  Si vous reprez une erreur, ou voulez ajouter quelque chose, faites le
  en local, excutez  cvs diff -u, et envoyez-nous le rsultat.

  Un fichier Makefile est fourni pour vous aider  crer des fichiers
  PostScript, dvi, pdf, html et texte.  Vous pouvez avoir  installer
  les sgml-tools, ghostscript et tetex pour obtenir tous les formats de
  sortie.


  22..66..  PPllaann dduu ddooccuummeenntt

  Nous allons essayer de faire des manipulations intressantes ds le
  dbut, ce qui veut dire que tout ne sera pas expliqu en dtail tout
  de suite.  Veuillez passer sur ces dtails, et accepter de considrer
  qu'ils deviendront clairs par la suite.

  Le routage et le filtrage sont deux choses distinctes.  Le filtrage
  est trs bien document dans le HOWTO de Rusty, disponible ici :


    Rusty's Remarkably Unreliable Guides
     <http://netfilter.kernelnotes.org/unreliable-guides/>

  Nous nous focaliserons principalement sur ce qu'il est possible de
  faire en combinant netfilter et iproute2.


  33..  IInnttrroodduuccttiioonn  iipprroouuttee22




  33..11..  PPoouurrqquuooii iipprroouuttee22 ??

  La plupart des distributions Linux et des UNIX utilisent couramment
  les vnrables commandes "arp", "ifconfig" et "route". Bien que ces
  outils fonctionnent, ils montrent quelques comportements inattendus
  avec les noyaux Linux des sries 2.2 et plus.  Par exemple, les
  tunnels GRE font partie intgrante du routage de nos jours, mais ils
  ncessitent des outils compltement diffrents.

  Avec iproute2, les tunnels font partie intgrante des outils.

  Les noyaux Linux des sries 2.2 et plus ont un sous-systme rseau
  compltement rcrit. Ce nouveau codage de la partie rseau apporte 
  Linux des performances et des fonctionnalits qui n'ont pratiquement
  pas d'quivalent dans les autres systmes d'exploitation.  En fait, le
  nouveau logiciel de filtrage, routage et de classification possde
  plus de fonctionnalits que les logiciels fournis sur beaucoup de
  routeurs ddis, de pare-feux et de produits de mise en forme
  (shaping) du trafic.

  Dans les systmes d'exploitation existants, au fur et  mesure que de
  nouveaux concepts rseau apparaissaient, les dveloppeurs sont
  parvenus  les greffer sur les structures existantes.  Ce travail
  constant d'empilage de couches a conduit  des codes rseau aux
  comportements tranges, un peu comme les langues humaines.  Dans le
  pass, Linux mulait le mode de fonctionnement de SunOS, ce qui
  n'tait pas l'idal.

  La nouvelle structure d'iproute2 a permis de formuler clairement des
  fonctionnalits impossibles  implanter dans le sous-systme rseau
  prcdent.


  33..22..  UUnn ttoouurr dd''hhoorriizzoonn dd''IIpprroouuttee22

  Linux possde un systme sophistiqu d'allocation de bande passante
  appel Contrle de trafic (Traffic Control).  Ce systme supporte
  diffrentes mthodes pour classer, ranger par ordre de priorit,
  partager et limiter le trafic entrant et sortant.

  Nous commencerons par un petit tour d'horizon des possibilits
  d'iproute2.


  33..33..  PPrrrreeqquuiiss

  Vous devez tre sr que vous avez install les outils utilisateur
  (NdT : userland tools, par opposition  la partie "noyau" d'iproute2).
  Le paquet concern s'appelle "iproute" sur RedHat et Debian.
  Autrement, il peut tre trouv  ftp://ftp.inr.ac.ru/ip-
  routing/iproute2-2.2.4-now-ss??????.tar.gz.  Certains lments
  d'iproute vous imposent l'activation de certaines options du noyau.

  FIXME: Nous devrions mentionner iproute2-current.tar.gz
  <ftp://ftp.inr.ac.ru/ip-routing/iproute2-current.tar.gz> qui est
  toujours la dernire version.


  33..44..  EExxpplloorreerr vvoottrree ccoonnffiigguurraattiioonn ccoouurraannttee

  Cela peut vous paratre surprenant, mais iproute2 est dj configur !
  Les commandes courantes ifconfig et route utilisent dj les appels
  systme avancs d'iproute2, mais essentiellement avec les options par
  dfaut (c'est--dire ennuyeuses).


  L'outil ip est central, et nous allons lui demander de nous montrer
  les interfaces.


  33..44..11..  iipp  nnoouuss mmoonnttrree nnooss lliieennss



       [ahu@home ahu]$ ip link list
       1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue
           link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
       2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop
           link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
       3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100
           link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff
       4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
           link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff
       3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10
           link/ppp




  La sortie peut varier, mais voici ce qui est affich pour mon routeur
  NAT (NdT : translation d'adresse) chez moi. J'expliquerai seulement
  une partie de la sortie, dans la mesure o tout n'est pas directement
  pertinent.

  La premire interface que nous voyons est l'interface loopback. Bien
  que votre ordinateur puisse fonctionner sans, je vous le dconseille.
  La taille de MTU (unit maximum de transmission) est de 3924 octets,
  et loopback n'est pas suppos tre mis en file d'attente, ce qui prend
  tout son sens dans la mesure o cette interface est le fruit de
  l'imagination de votre noyau.

  Je vais passer sur l'interface dummy pour l'instant, et il se peut
  qu'elle ne soit pas prsente sur votre ordinateur. Il y a ensuite mes
  deux interfaces rseau, l'une du ct de mon modem cble, l'autre
  servant mon segment ethernet  la maison. De plus, nous voyons une
  interface ppp0.

  Notons l'absence d'adresses IP. Iproute dconnecte les concepts de
  "liens" et "d'adresses IP". Avec l'IP aliasing, le concept de
  l'adresse IP canonique est devenu, de toute faon, sans signification.

  ip nous montre bien, cependant, l'adresse MAC, l'identifiant matriel
  de nos interfaces ethernet.


  33..44..22..  iipp  nnoouuss mmoonnttrree nnooss aaddrreesssseess IIPP
















  [ahu@home ahu]$ ip address show
  1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
  2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop
      link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
  3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100
      link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff
      inet 10.0.0.1/8 brd 10.255.255.255 scope global eth0
  4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
      link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff
  3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10
      link/ppp
      inet 212.64.94.251 peer 212.64.94.1/32 scope global ppp0




  Cela contient plus d'informations : ip montre toutes nos adresses, et
   quelles cartes elles appartiennent. "inet" dsigne Internet. Il y a
  beaucoup d'autres familles d'adresses, mais elles ne nous concernent
  pas pour le moment.

  Examinons eth0 de plus prs. Il est dit qu'il est reli  l'adresse
  internet "10.0.0.1/8". Qu'est-ce que cela signifie ? Le /8 dsigne le
  nombre de bits rservs  l'adresse rseau. Il y a 32 bits, donc il
  reste 24 bits pour dsigner une partie de notre rseau.  Les 8
  premiers bits de 10.0.0.1 correspondent  10.0.0.0, notre adresse
  rseau, et notre masque de sous-rseau est 255.0.0.0.

  Les autres bits reprent des machines directement connectes  cette
  interface, donc 10.250.3.13 est directement disponible sur eth0, comme
  l'est 10.0.0.1 dans notre exemple.

  Avec ppp0, le mme concept existe, bien que les nombres soient
  diffrents.  Son adresse est 212.64.94.251, sans masque de sous-
  rseau. Cela signifie que vous avez une liaison point  point et que
  toutes les adresses,  l'exception de 212.64.94.251, sont distantes.
  Il y a cependant plus d'informations. En effet, on nous dit que de
  l'autre ct du lien, il n'y a encore qu'une seule adresse,
  212.64.94.1. Le /32 nous prcise qu'il n'y a pas de "bits rseau".

  Il est absolument vital que vous compreniez ces concepts. Rfrez-vous
   la documentation mentionne au dbut de cet HOWTO si vous avez des
  doutes.

  Vous pouvez aussi noter "qdisc", qui dsigne la "Queueing Discipline"
  (gestion de la mise en file d'attente). Cela deviendra vital plus
  tard.


  33..44..33..  iipp  nnoouuss mmoonnttrree nnooss rroouutteess

  Nous savons maintenant comment trouver les adresses 10.x.y.z, et nous
  sommes capables d'atteindre 212.64.94.1. Cela n'est cependant pas
  suffisant, et nous avons besoin d'instructions pour atteindre le
  monde. L'Internet est disponible via notre connexion ppp, et il se
  trouve que 212.64.94.1 est prt  propager nos paquets  travers le
  monde, et  nous renvoyer le rsultat.







  [ahu@home ahu]$ ip route show
  212.64.94.1 dev ppp0  proto kernel  scope link  src 212.64.94.251
  10.0.0.0/8 dev eth0  proto kernel  scope link  src 10.0.0.1
  127.0.0.0/8 dev lo  scope link
  default via 212.64.94.1 dev ppp0




  Cela se comprend de soi-mme. Les 4 premires lignes donnent
  explicitement ce qui tait sous-entendu par ip address show, la
  dernire ligne nous indiquant que le reste du monde peut tre trouv
  via 212.64.94.1, notre passerelle par dfaut. Nous pouvous voir que
  c'est une passerelle  cause du mot "via", qui nous indique que nous
  avons besoin d'envoyer les paquets vers 212.64.94.1, et que c'est elle
  qui se chargera de tout.

  En rfrence, voici ce que l'ancien utilitaire "route" nous propose :


       [ahu@home ahu]$ route -n
       Kernel IP routing table
       Destination     Gateway         Genmask         Flags Metric Ref    Use
       Iface
       212.64.94.1     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
       10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
       127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
       0.0.0.0         212.64.94.1     0.0.0.0         UG    0      0        0 ppp0





  33..55..  AARRPP

  ARP est le Protocole de Rsolution d'Adresse (Address Resolution
  Protocol).  Il est dcrit dans le RFC 826
  <http://www.faqs.org/rfcs/rfc826.html>.  ARP est utilis par une
  machine d'un rseau local pour retrouver l'adresse matrielle (la
  localisation) d'une autre machine sur le mme rseau.  Les machines
  sur Internet sont gnralement connues par leur nom auquel correspond
  une adresse IP. C'est ainsi qu'une machine sur le rseau foo.com est
  capable de communiquer avec une autre machine qui est sur le rseau
  bar.net.  Une adresse IP, cependant, ne peut pas vous indiquer la
  localisation physique de la machine. C'est ici que le protocole ARP
  entre en jeu.

  Prenons un exemple trs simple. Supposons que j'aie un rseau compos
  de plusieurs machines, dont la machine "foo" d'adresse IP 10.0.0.1 et
  la machine "bar" qui a l'adresse IP 10.0.0.2.  Maintenant, foo veut
  envoyer un "ping" vers bar pour voir s'il est actif, mais foo n'a
  aucune indication sur la localisation de bar. Donc, si foo dcide
  d'envoyer un "ping" vers bar, il a besoin d'envoyer une requte ARP.
  Cette requte ARP est une faon pour foo de crier sur le rseau "Bar
  (10.0.0.2) ! O es-tu ?". Par consquent, toutes les machines sur le
  rseau entendront foo crier, mais seul bar (10.0.0.2) rpondra. Bar
  enverra une rponse ARP directement  foo ; ce qui revient  dire :
  "Foo (10.0.0.1) ! je suis ici,  l'adresse 00:60:94:E:08:12".  Aprs
  cette simple transaction utilise pour localiser son ami sur le
  rseau, foo est capable de communiquer avec bar jusqu' ce qu'il (le
  cache ARP de foo) oublie o bar est situ.

  Maintenant, voyons comment cela fonctionne. Vous pouvez consulter
  votre cache (table) arp (neighbor) comme ceci :


       [root@espa041 /home/src/iputils]# ip neigh show
       9.3.76.42 dev eth0 lladdr 00:60:08:3f:e9:f9 nud reachable
       9.3.76.1 dev eth0 lladdr 00:06:29:21:73:c8 nud reachable




  Comme vous pouvez le voir, ma machine espa041 (9.3.76.41) sait o
  trouver espa042 (9.3.76.42) et espagate (9.3.76.1).  Maintenant,
  ajoutons une autre machine dans le cache arp.



       [root@espa041 /home/paulsch/.gnome-desktop]# ping -c 1 espa043
       PING espa043.austin.ibm.com (9.3.76.43) from 9.3.76.41 : 56(84) bytes of data.
       64 bytes from 9.3.76.43: icmp_seq=0 ttl=255 time=0.9 ms

       --- espa043.austin.ibm.com ping statistics ---
       1 packets transmitted, 1 packets received, 0% packet loss
       round-trip min/avg/max = 0.9/0.9/0.9 ms

       [root@espa041 /home/src/iputils]# ip neigh show
       9.3.76.43 dev eth0 lladdr 00:06:29:21:80:20 nud reachable
       9.3.76.42 dev eth0 lladdr 00:60:08:3f:e9:f9 nud reachable
       9.3.76.1 dev eth0 lladdr 00:06:29:21:73:c8 nud reachable




  Par consquent, lorsque espa041 a essay de contacter espa043,
  l'adresse matrielle de espa043 (sa localisation) a alors t ajoute
  dans le cache ARP. Donc, tant que la dure de vie de l'entre
  correspondant  espa043 dans le cache ARP n'est pas dpasse, espa041
  sait localiser espa043 et n'a plus besoin d'envoyer de requte ARP.

  Maintenant, effaons espa043 de notre cache ARP.



       [root@espa041 /home/src/iputils]# ip neigh delete 9.3.76.43 dev eth0
       [root@espa041 /home/src/iputils]# ip neigh show
       9.3.76.43 dev eth0  nud failed
       9.3.76.42 dev eth0 lladdr 00:60:08:3f:e9:f9 nud reachable
       9.3.76.1 dev eth0 lladdr 00:06:29:21:73:c8 nud stale




  Maintenant, espa041 a  nouveau oubli la localisation d'espa043 et
  aura besoin d'envoyer une autre requte ARP la prochaine fois qu'il
  voudra communiquer avec lui. Vous pouvez aussi voir ci-dessus que
  l'tat d'espagate (9.3.76.1) est pass en "stale". Cela signifie que
  la localisation connue est encore valide, mais qu'elle devra tre
  confirme  la premire transaction avec cette machine.


  44..  RRgglleess -- bbaasseess ddee ddoonnnneess ddeess ppoolliittiiqquueess ddee rroouuttaaggee

  Si vous avez un routeur important, il se peut que vous vouliez
  satisfaire les besoins de diffrentes personnes, qui peuvent tre
  traites diffremment. Les bases de donnes des politiques de routage
  vous aident  faire cela, en grant plusieurs ensembles de tables de
  routage.  Si vous voulez utiliser cette fonctionnalit, assurez vous
  que le noyau est compil avec l'option "IP: policy routing".


  Quand le noyau doit prendre une dcision de routage, il recherche
  quelle table consulter. Par dfaut, il y a trois tables.  L'ancien
  outil route modifie les tables "main" (principale) et "local"
  (locale), comme le fait l'outil ip (par dfaut).

  Les rgles par dfaut :


       [ahu@home ahu]$ ip rule list
       0:      from all lookup local
       32766:  from all lookup main
       32767:  from all lookup default




  Cela liste les rgles, accompagnes de leurs priorits.  Nous voyons
  que toutes les rgles sont appliques  tous les paquets ("from all").
  Nous avons vu la table "main" prcdemment, sa sortie s'effectuant
  avec ip route ls, mais les tables "local" et "default" sont nouvelles.

  Si nous voulons faire des choses fantaisistes, nous pouvons crer des
  rgles qui pointent vers des tables diffrentes et qui nous permettent
  de redfinir les rgles de routage du systme.

  Pour savoir exactement ce que fait le noyau en prsence d'un
  assortiment de rgles plus complet, rfrez-vous  la documentation
  ip-cref d'Alexey [NdT : dans le paquet iproute de votre distribution].



  44..11..  RRoouuttaaggee ssiimmppllee ppaarr ll''aaddrreessssee ssoouurrccee

  Prenons encore une fois un exemple rel. J'ai 2 modems cble,
  connects  un routeur Linux NAT ("masquerading"). Les personnes
  habitant avec moi me paient pour avoir accs  Internet. Supposons
  qu'un de mes co-locataires visite seulement hotmail et veuille payer
  moins. C'est d'accord pour moi, mais il utilisera le modem le plus
  lent.

  Le modem cble "rapide" est connu sous 212.64.94.251 et est en liaison
  PPP avec 212.64.94.1. Le modem cble "lent" est connu sous diverses
  adresses ip, 212.64.78.148 dans notre exemple avec un lien vers
  195.96.98.253.

  La table locale :


       [ahu@home ahu]$ ip route list table local
       broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
       local 10.0.0.1 dev eth0  proto kernel  scope host  src 10.0.0.1
       broadcast 10.0.0.0 dev eth0  proto kernel  scope link  src 10.0.0.1
       local 212.64.94.251 dev ppp0  proto kernel  scope host  src 212.64.94.251
       broadcast 10.255.255.255 dev eth0  proto kernel  scope link  src 10.0.0.1
       broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
       local 212.64.78.148 dev ppp2  proto kernel  scope host  src 212.64.78.148
       local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
       local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1




  Il y a beaucoup de choses videntes, mais aussi des choses qui ont
  besoin d'tre prcises quelque peu, ce que nous allons faire.  La
  table de routage par dfaut est vide.

  Regardons la table principale ("main") :


       [ahu@home ahu]$ ip route list table main
       195.96.98.253 dev ppp2  proto kernel  scope link  src 212.64.78.148
       212.64.94.1 dev ppp0  proto kernel  scope link  src 212.64.94.251
       10.0.0.0/8 dev eth0  proto kernel  scope link  src 10.0.0.1
       127.0.0.0/8 dev lo  scope link
       default via 212.64.94.1 dev ppp0




  Maintenant, nous gnrons une nouvelle rgle que nous appellerons
  "John", pour notre hypothtique co-locataire. Bien que nous puissions
  travailler avec des nombres IP purs, il est plus facile d'ajouter
  notre table dans le fichier /etc/iproute2/rt_tables.



       # echo 200 John >> /etc/iproute2/rt_tables
       # ip rule add from 10.0.0.10 table John
       # ip rule ls
       0:      from all lookup local
       32765:  from 10.0.0.10 lookup John
       32766:  from all lookup main
       32767:  from all lookup default




  Maintenant, tout ce qu'il reste  faire est de gnrer la table
  "John", et de vider le cache des routes :


       # ip route add default via 195.96.98.253 dev ppp2 table John
       # ip route flush cache




  Et voil qui est fait. Il ne reste plus, comme exercice laiss au
  lecteur, qu' implanter cela dans ip-up.


  55..  GGRREE eett aauuttrreess ttuunnnneellss

  Il y a trois sortes de tunnels sous Linux : l'IP dans un tunnel IP, le
  tunnel GRE et les tunnels qui existent en dehors du noyau (comme, par
  exemple, PPTP).


  55..11..  QQuueellqquueess rreemmaarrqquueess ggnnrraalleess  pprrooppooss ddeess ttuunnnneellss ::

  Les tunnels peuvent faire des choses trs inhabituelles et vraiment
  sympa.  Ils peuvent aussi absolument tout dtraquer si vous ne les
  avez pas configurs correctement. Ne dfinissez pas votre route par
  dfaut sur un tunnel,  moins que vous ne sachiez eexxaacctteemmeenntt ce que
  vous faites.

  De plus, le passage par un tunnel augmente le poids des en-ttes
  (overhead), puisqu'un en-tte IP supplmentaire est ncessaire.
  Typiquement, ce surcot est de 20 octets par paquet.  Donc, si la
  taille maximum de votre paquet sur votre rseau (MTU) est de 1500
  octets, un paquet qui est envoy  travers un tunnel sera limit  une
  taille de 1480 octets.  Cela n'est pas ncessairement un problme,
  mais soyez sr d'avoir bien tudi la fragmentation et le rassemblage
  des paquets IP quand vous prvoyez de relier des rseaux de grande
  taille par des tunnels.  Et bien sr, la manire la plus rapide de
  creuser un tunnel est de creuser des deux cts.



  55..22..  IIPP ddaannss uunn ttuunnnneell IIPP

  Ce type de tunnel est disponible dans Linux depuis un long moment. Il
  ncessite deux modules, ipip.o et new_tunnel.o.

  Disons que vous avez trois rseaux : 2 rseaux internes A et B, et un
  rseau intermdiaire C (ou disons Internet).  Les caractristiques du
  rseau A sont :



       rseau 10.0.1.0
       masque de sous-rseau 255.255.255.0
       routeur  10.0.1.1




  Le routeur a l'adresse 172.16.17.18 sur le rseau C.

  et le rseau  B :


       rseau 10.0.2.0
       masque de sous-rseau 255.255.255.0
       routeur  10.0.2.1




  Le routeur a l'adresse 172.19.20.21 sur le rseau C.

  En ce qui concerne le rseau C, nous supposerons qu'il transmettra
  n'importe quel paquet de A vers B et vice-versa.  Il est galement
  possible d'utiliser l'Internet pour cela.

  Voici ce qu'il faut faire :

  Premirement, assurez-vous que les modules sont installs :


       insmod ipip.o
       insmod new_tunnel.o




  Ensuite, sur le routeur du rseau A, faites la chose suivante :


       ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21
       route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0




  et sur le routeur du rseau B :


  ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18
  route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0




  Et quand vous aurez termin avec votre tunnel :


       ifconfig tunl0 down




  Vite fait, bien fait. Vous ne pouvez pas transmettre les paquets de
  diffusion (broadcast), ni le trafic IPv6  travers un tunnel IP-IP.
  Vous ne pouvez connecter que deux rseaux IPv4 qui, normalement, ne
  seraient pas capables de se "parler", c'est tout.  Dans la mesure o
  la compatibilit a t conserve, ce code tourne depuis un bon moment,
  et il reste compatible depuis les noyaux 1.3.  Le tunnel Linux IP dans
  IP ne fonctionne pas avec d'autres systmes d'exploitation ou
  routeurs, pour autant que je sache. C'est simple, a marche. Utilisez-
  le si vous le pouvez, autrement utilisez GRE.


  55..33..  LLee ttuunnnneell GGRREE

  GRE est un protocole de tunnel qui a t  l'origine dvelopp par
  Cisco, et qui peut raliser plus de choses que le tunnel IP dans IP.
  Par exemple, vous pouvez aussi transporter du trafic multi-diffusion
  (multicast) et de l'IPv6  travers un tunnel GRE.

  Dans Linux, vous aurez besoin du module ip_gre.


  55..33..11..  LLee ttuunnnneell IIPPvv44

  Dans un premier temps, intressons-nous au tunnel IPv4 :

  Disons que vous avez trois rseaux : 2 rseaux internes A et B, et un
  rseau intermdiaire C (ou disons Internet).

  Les caractristiques du rseau A sont :


       rseau 10.0.1.0
       masque de sous-rseau 255.255.255.0
       routeur  10.0.1.1




  Le routeur a l'adresse 172.16.17.18 sur le rseau C.  Appelons ce
  rseau neta.

  Et pour le rseau B :


       rseau 10.0.2.0
       masque de sous-rseau 255.255.255.0
       routeur  10.0.2.1




  Le routeur a l'adresse 172.19.20.21 sur le rseau C.  Appelons ce
  rseau netb.

  En ce qui concerne le rseau C, nous supposerons qu'il transmettra
  n'importe quels paquets de A vers B et vice-versa.  Comment et
  pourquoi, on s'en fiche.


  Sur le routeur du rseau A, nous faisons la chose suivante :


       ip tunnel add netb mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255
       ip addr add 10.0.1.1 dev netb
       ip route add 10.0.2.0/24 dev netb




  Discutons un peu de cela. Sur la ligne 1, nous avons ajout un
  priphrique tunnel, que nous avons appel netb (ce qui est vident,
  dans la mesure o c'est l que nous voulons aller). De plus, nous lui
  avons dit d'utiliser le protocole GRE (mode gre), que l'adresse
  distante est 172.19.20.21 (le routeur de l'autre cot), que nos
  paquets "tunnels" devront tre gnrs  partir de 172.16.17.18 (ce
  qui autorise votre serveur  avoir plusieurs adresses IP sur le rseau
  C et ainsi vous permet de choisir laquelle sera utilise pour votre
  tunnel) et que le champ TTL de vos paquets sera fix  255 (ttl 255).

  Sur la deuxime ligne, nous avons donn  cette nouvelle interface
  l'adresse 10.0.1.1. C'est bon pour de petits rseaux, mais quand vous
  commencez une exploitation minire (BEAUCOUP de tunnels !), vous
  pouvez utiliser une autre gamme d'adresses IP pour vos interfaces
  "tunnel" (dans cet exemple, vous pourriez utiliser 10.0.3.0).


  Sur la troisime ligne, nous positionnons une route pour le rseau B.
  Notez la notation diffrente pour le masque de sous-rseau. Si vous
  n'tes pas familiaris avec cette notation, voici comment a marche :
  vous crivez le masque de sous-rseau sous sa forme binaire, et vous
  comptez tous les 1. Si vous ne savez pas comment faire cela, rappelez-
  vous juste que 255.0.0.0 est /8, 255.255.0.0 est /16 et 255.255.255.0
  est /24.  Et 255.255.254.0 est /23, au cas o a vous intresserait.


  Mais arrtons ici, et continuons avec le routeur du rseau B.


       ip tunnel add neta mode gre remote 172.16.17.18 local 172.19.20.21 ttl 255
       ip addr add 10.0.2.1 dev neta
       ip route add 10.0.1.0/24 dev neta




  Et quand vous voudrez retirer le tunnel sur le routeur A :


       ip link set netb down
       ip tunnel del netb




  Bien sr, vous pouvez remplacer netb par neta pour le routeur B.



  55..33..22..  LLee ttuunnnneell IIPPvv66


  BON GROS AVERTISSEMENT !

  Ce qui suit n'est pas test.  Vous oprez  vos risques et prils.  Ne
  dites pas que je ne vous avais pas prvenu.

  FIXME: vrifier et essayer tout ceci.


  De petites choses  propos des adresses IPv6 :

  Les adresses IPv6 sont, en comparaison avec les adresses IPv4,
  monstrueusement grosses. Voici un exemple :

  3ffe:2502:200:40:281:48fe:dcfe:d9bc


  Donc, pour rendre l'criture plus facile, il y a quelques rgles :

    Ne pas utiliser les zros de tte, comme dans IPv4 ;

    Utiliser des double-points de sparation tous les 16 bits (2
     octets) ;

    Quand vous avez beaucoup de zros conscutifs, vous pouvez crire
     ::. Vous ne pouvez faire cela qu'une seule fois par adresse et
     seulement pour une longueur de 16 bits.

     En utilisant ces rgles, l'addresse
     3ffe:0000:0000:0000:0000:0020:34A1:F32C peut tre crite
     3ffe::20:34A1:F32C, ce qui est beaucoup plus court.


   propos des tunnels.

  Supposons que vous ayez le rseau IPv6 suivant, et que vous vouliez le
  connecter  une dorsale IPv6 (6bone), ou  un ami.



       Rseau 3ffe:406:5:1:5:a:2:1/96




  Votre adresse IPv4 est 172.16.17.18, et le routeur 6bone a une adresse
  IPv4 172.22.23.24.



       ip tunnel add sixbone mode sit remote 172.22.23.24 local 172.16.17.18 ttl 255
       ip link set sixbone up
       ip addr add 3ffe:406:5:1:5:a:2:1/96 dev sixbone
       ip route add 3ffe::/15 dev sixbone




  Voyons cela de plus prs. Sur la premire ligne, nous avons cr un
  priphrique tunnel appel sixbone. Nous lui avons affect le mode
  "sit" (qui est le tunnel IPv6 sur IPv4) et lui avons dit o l'on va
  (remote) et d'o l'on vient (local). TTL est configur  son maximum,
  255. Ensuite, nous avons rendu le priphrique actif (up). Puis, nous
  avons ajout notre propre adresse rseau et configur une route pour
  3ffe::/15  travers le tunnel.


  Les tunnels GRE constituent actuellement le type prfr de tunnel.
  C'est un standard qui est largement adopt, mme  l'extrieur de la
  communaut Linux, ce qui constitue une bonne raison de l'utiliser.

  55..44..  TTuunnnneellss ddaannss ll''eessppaaccee uuttiilliissaatteeuurr

  Il y a des dizaines d'implmentations de tunnels  l'extrieur du
  noyau. Les plus connus sont bien sr PPP et PPTP, mais il y en a bien
  plus (certains propritaires, certains scuriss, d'autres qui
  n'utilisent pas IP), qui dpassent le cadre de cet HOWTO.


  66..  IIPPsseecc :: IIPP ssccuurriiss  ttrraavveerrss ll''IInntteerrnneett

  FIXME: Attendre notre rdacteur vedette Stefan pour finir cette
  partie.


  77..  RRoouuttaaggee mmuullttii--ddiiffffuussiioonn ((mmuullttiiccaasstt))

  FIXME: Pas de rdacteur !


  88..  UUttiilliissaattiioonn ddee llaa mmiissee eenn ffiillee dd''aatttteennttee bbaassee ssuurr ddeess ccllaasssseess
  ((""CCllaassss BBaasseedd QQuueeuueeiinngg"")) ppoouurr llaa ggeessttiioonn ddee llaa bbaannddee ppaassssaannttee

  Quand je l'ai dcouvert, cela m'a vraiment "souffl". Linux 2.2
  contient toutes les fonctionnalits pour la gestion de la bande
  passante, de manire comparable  un systme ddi de haut niveau.

  Linux dpasse mme ce que l'ATM et le Frame peuvent fournir.

  Les deux units de base du Contrle de Trafic sont les filtres et les
  files d'attente. Les filtres placent le trafic dans des files
  d'attente, qui recueillent ainsi le trafic et dcident ce qu'il faut
  envoyer en premier, envoyer plus tard, ou liminer. Il existe
  plusieurs variantes de filtres et de files d'attente.

  Les filtres les plus communs sont fwmark et u32. Le premier vous
  permet d'utiliser le code Netfilter de Linux pour slectionner le
  trafic, et le second vous permet de slectionner ce trafic  partir de
  N'IMPORTE QUEL en-tte. La file d'attente la plus connue est la Class
  Based Queue (File d'attente base sur des classes). CBQ est une super-
  file d'attente, qui peut contenir d'autres files d'attente (mme
  d'autres CBQ).

  Il n'est peut-tre pas vident de voir ce que la mise en file
  d'attente peut avoir  faire avec la gestion de bande passante, mais
  a marche vraiment.

  Pour cadre de rfrence de cette section, j'ai pris l'exemple d'un
  fournisseur d'accs chez qui j'ai appris les ficelles du mtier, pour
  ne pas le citer : Casema Internet en Hollande.  Casema, qui est
  actuellement un cble-oprateur, a des besoins internet pour ses
  clients et pour son propre compte. La plupart des ordinateurs de la
  socit ont un accs Internet. En ralit, ils ont beaucoup d'argent 
  dpenser et n'utilisent pas Linux pour la gestion de la bande
  passante.

  Nous tudierons comment notre fournisseur d'accs aurait pu utiliser
  Linux pour grer sa bande passante.


  88..11..  QQuu''eesstt--ccee qquuee llaa mmiissee eenn ffiillee dd''aatttteennttee ??

  Avec la mise en file d'attente, nous dterminons l'ordre dans lequel
  les donnes sont envoyes. Il est important de le comprendre, nous ne
  pouvons que mettre en forme les donnes que nous transmettons. Comment
  ce changement de priorir dtermine-t-il la vitesse de transmission ?

  Imaginez une caisse enregistreuse capable de traiter 3 clients par
  minute.  Les personnes souhaitant payer vont attendre en file indienne
  en bout de queue. C'est une "file d'attente fifo".  (NdT : fifo =
  First In, First Out, premier entr, premier sorti) Supposons
  maintenant que vous laissiez toujours certaines personnes s'insrer au
  milieu de la queue, et non en fin. Ces personnes attendront moins de
  temps et donc pourront faire leurs courses plus rapidement.

  Avec la manire dont Internet travaille, nous n'avons pas de contrle
  direct de ce que les personnes nous envoient. C'est un peu comme votre
  bote aux lettres (physique !) chez vous. Il n'y a pas de faon
  d'influencer le nombre de lettres que vous recevez,  moins de
  contacter tout le monde.

  Cependant, l'Internet est principalement bas sur TCP/IP qui possde
  quelques fonctionnalits qui vont pouvoir nous aider. TCP/IP n'a pas
  d'aptitude  connatre les performances d'un rseau entre deux htes.
  Il commence  envoyer des paquets, de plus en plus rapidement ('slow
  start') et quand des paquets commencent  se perdre, il ralentit.

  C'est comme si vous ne lisiez que la moiti de votre courrier en
  esprant que vos correspondants arrteront de vous en envoyer.  la
  diffrence du courrier, a marche sur l'Internet :-)

  FIXME: expliquer comment, normalement, les acquittements (ACKs) sont
  utiliss pour dterminer la vitesse.



       [L'Internet] ---<E3, T3, peu importe>--- [Routeur Linux] --- [Bureau+FAI]
                                               eth1          eth0




  Maintenant, notre routeur Linux a deux interfaces que je vais appeler
  eth0 et eth1. Eth1 est connect  notre routeur qui transmet les
  paquets venant de ou allant vers notre fibre optique.

  Eth0 est connect  un sous-rseau qui contient  la fois le pare-feu
  de la socit et notre quipement de tte,  travers lequel nos
  clients peuvent se connecter.

  Dans la mesure o nous ne pouvons limiter que ce que nous envoyons,
  nous avons besoin de deux ensembles de rgles spars, mais trs
  similaires.  En modifiant la mise en file d'attente sur eth0, nous
  dterminons  quelle vitesse les donnes reues sont envoyes  nos
  clients.  On dtermine ainsi la bande passante descendante disponible
  vers eux, en rsum, leur "vitesse de tlchargement".

  Sur eth1, nous dterminons  quelle vitesse nous envoyons les donnes
  sur Internet,  quelle vitesse nos utilisateurs,  la fois ceux de la
  socit et les clients, peuvent mettre les donnes.


  88..22..  PPrreemmiirree tteennttaattiivvee ddee ppaarrttaaggee ddee bbaannddee ppaassssaannttee

  CBQ nous permet de crer plusieurs classes, et mme des classes
  incluses dans d'autres classes. Les divisions les plus larges peuvent
  tre appeles des agences. Au sein de ces classes, se trouveraient des
  classes comme "traitement par lot" et "traitement interactif".

  Par exemple, nous pourrions avoir une connexion Internet de 10 Mbits
  devant tre partage par nos clients et les besoins de la socit.
  Nous ne devons pas permettre  quelques personnes de la socit de
  monopoliser un gros volume de bande passante, qui devrait tre vendue
   nos clients.

  D'un autre ct, nos clients ne doivent pas pouvoir grignoter le
  trafic rserv  nos bureaux.

  Avant, une manire de rsoudre cela tait d'utiliser le Frame
  relay/ATM et de crer des circuits virtuels. Cela fonctionne, mais les
  rseaux Frame Relay ne sont pas suffisament maills et ATM est
  terriblement inefficace dans le transport du trafic IP. Ni l'un ni
  l'autre ne possde de moyens standardiss pour distribuer le trafic
  sur diffrents circuits virtuels (VC).

  Cependant, si vous utilisez ATM, Linux peut habilement raliser des
  tches de classification de trafic pour vous.  Une autre manire de
  procder consiste  commander plusieurs connexions spares mais ce
  n'est ni pratique ni lgant et a ne rsoudra pas tous vos problmes.

  CBQ  la rescousse !

  Clairement, nous avons ici deux classes principales, "ISP" et
  "Office".  Au dpart, on ne se proccupe pas vraiment de ce que les
  divisions font de leur bande passante, et donc, nous ne subdiviserons
  pas plus loin leurs classes.

  Nous dcidons que les clients devront toujours avoir 8 Mbits de trafic
  descendant garanti, et nos bureaux 2 Mbits.

  La configuration du contrle de trafic est faite avec l'outil tc, du
  paquet iproute2.



       # tc qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000





  Bon, beaucoup de chiffres ici. Qu'avons-nous fait ?  Nous avons
  configur la gestion de la mise en file d'attente (queuing discipline)
  de eth0. Par "root", nous signifions que cette file d'attente est la
  racine. Nous lui avons donn la rfrence (handle) "10:".  Nous
  voulons faire du "CBQ", nous le mentionnons donc sur la ligne de
  commande. Nous indiquons au noyau qu'il peut allouer 10 Mbits et que
  la taille moyenne d'un paquet est aux alentours de 1000 octets.

  FIXME: Re-vrifier avec Alexey que le calcul de la cellule intgre
  est suffisant.

  FIXME: Avec un MTU de 1500, la cellule par dfaut est calcule de la
  mme faon que dans l'ancien exemple.

  FIXME: J'ai vrifi les sources (espaces utilisateur et noyau), on
  doit pouvoir l'omettre sans problme.

  Maintenant, nous devons gnrer notre classe racine,  partir de
  laquelle toutes les autres descendront :


  # tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 10Mbit rate \
    10Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000




  Encore des nombres  grer - l'implmentation CBQ dans Linux est trs
  gnrique. Avec "parent 10:0", nous indiquons que cette classe descend
  de la file d'attente racine gnre plus tt, et rfrence par "10:".
  Avec "classid 10:1", nous baptisons cette nouvelle classe.

  Nous ne disons vraiment rien de plus au noyau. Nous gnrons
  simplement une classe qui englobe toute la bande passante disponible
  sur l'interface.  Nous avons aussi spcifi que le MTU (plus l'en-
  tte) est de 1514 octets.  Nous appliquons une pondration  cette
  classe avec un paramtre de rglage de 1 Mbit.

  Maintenant, nous crons notre classe ISP :


       # tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 10Mbit rate \
         8Mbit allot 1514 weight 800Kbit prio 5 maxburst 20 avpkt 1000 \
         bounded




  Nous allouons 8 Mbits et nous indiquons que cette classe ne doit pas
  dpasser cette limite par l'ajout du paramtre "bounded".  Autrement,
  elle aurait commenc  emprunter de la bande passante aux autres
  classes.  De plus, cette classe pourra prter sa bande passante 
  d'autres classes.  Nous en discuterons plus tard.

  Pour finir, nous gnrons la classe "Office" (bureau) :


       # tc class add dev eth0 parent 10:1 classid 10:200 cbq bandwidth 10Mbit rate \
         2Mbit allot 1514 weight 200Kbit prio 5 maxburst 20 avpkt 1000 \
         bounded




  Pour rendre les choses un peu plus claires, voici un diagramme qui
  montre nos classes :



       +-------------[10: 10Mbit]----------------------+
       |+-------------[10:1 root 10Mbit]--------------+|
       ||                                             ||
       || +-[10:100 8Mbit]-+ +--[10:200 2Mbit]-----+  ||
       || |                | |                     |  ||
       || | ISP            | |  Office             |  ||
       || |                | |                     |  ||
       || +----------------+ +---------------------+  ||
       ||                                             ||
       |+---------------------------------------------+|
       +-----------------------------------------------+




  Nous avons maintenant indiqu au noyau quelles sont nos classes, mais
  pas encore comment grer les files d'attente.  Nous le faisons 
  prsent, d'un seul coup pour les deux classes.
       # tc qdisc add dev eth0 parent 10:100 sfq quantum 1514b perturb 15
       # tc qdisc add dev eth0 parent 10:200 sfq quantum 1514b perturb 15




  Dans ce cas, nous installons le gestionnaire de mise en file d'attente
  Stochastic Fairness Queueing (approx. "statistiquement quitable") ou
  sfq, qui n'est pas vraiment le plus quitable, mais qui marche bien
  pour les grandes bandes passantes, sans utiliser trop de temps CPU. Il
  existe d'autres gestionnaires de file d'attente qui sont meilleurs,
  mais qui ncessitent plus de temps CPU.  Le gestionnaire de mise en
  file d'attente Token Bucket Filter (filtre  seau de jetons) est
  souvent utilis.

  Maintenant, la seule chose qui reste  faire est de dire au noyau
  quels sont les paquets qui appartiennent  une classe. Nous le ferons
  tout d'abord nativement avec iproute2, mais des applications plus
  intressantes sont possibles en combinaison avec netfilter.



       # tc filter add dev eth0 parent 10:0 protocol ip prio 100 u32 match ip dst \
         150.151.23.24 flowid 10:200

       # tc filter add dev eth0 parent 10:0 protocol ip prio 25 u32 match ip dst \
         150.151.0.0/16 flowid 10:100




  Ici, on suppose que notre socit (classe Office) est cache derrire
  un pare-feu avec l'adresse IP 150.151.23.24 et que toutes nos autres
  adresses IP devront tre considres comme faisant partie de la classe
  ISP.

  La classificateur u32 est un modle trs simple ; des rgles de
  classification plus sophistiques sont possibles lorsque l'on utilise
  netfilter pour marquer nos paquets. On peut ensuite utiliser ce
  marquage avec tc.

  Maintenant, nous avons divis quitablement la bande passante
  descendante, et nous avons besoin de faire la mme chose avec le flux
  montant. Pour abrger, voici toutes les commandes en bloc :






















  # tc qdisc add dev eth1 root handle 20: cbq bandwidth 10Mbit avpkt 1000

  # tc class add dev eth1 parent 20:0 classid 20:1 cbq bandwidth 10Mbit rate \
    10Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000

  # tc class add dev eth1 parent 20:1 classid 20:100 cbq bandwidth 10Mbit rate \
    8Mbit allot 1514 weight 800Kbit prio 5 maxburst 20 avpkt 1000 \
    bounded

  # tc class add dev eth1 parent 20:1 classid 20:200 cbq bandwidth 10Mbit rate \
    2Mbit allot 1514 weight 200Kbit prio 5 maxburst 20 avpkt 1000 \
    bounded

  # tc qdisc add dev eth1 parent 20:100 sfq quantum 1514b perturb 15
  # tc qdisc add dev eth1 parent 20:200 sfq quantum 1514b perturb 15

  # tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip src \
    150.151.23.24 flowid 20:200

  # tc filter add dev eth1 parent 20:0 protocol ip prio 25 u32 match ip src \
    150.151.0.0/16 flowid 20:100





  88..33..  QQuuee ffaaiirree ddee llaa bbaannddee ppaassssaannttee eenn eexxccss ??

  Dans notre exemple, il se trouve que mme si les clients du
  fournisseur d'accs ne sont pas en majorit connects (disons 8 heures
  du matin), nos bureaux n'ont toujours que 2 Mbits, ce qui est un peu
  du gaspillage.

  En enlevant le paramtre "bounded", les classes pourront se prter de
  la bande passante les unes aux autres.

  Il se peut que des classes ne souhaitent pas prter leur bande
  passante  d'autres. Deux fournisseurs d'accs rivaux sur un mme lien
  peuvent ne pas vouloir s'offrir mutuellement de la bande passante pour
  des prunes.  Dans ce cas, vous pouvez ajouter le mot-cl "isolated" 
  la fin de vos lignes "tc class add".


  88..44..  SSuubbddiivviissiioonnss ddee ccllaasssseess

  FIXME: suppositions qui n'ont pas du tout t testes !  Les essayer
   !

  Nous pouvons aller plus loin. Supposons que tous les employs dcident
  de lancer leur client "napster", il est toujours possible que notre
  base de donnes de routage dpasse la capacit de bande passante. Pour
  ce cas de figure, nous crons deux sous-classes, "Human" et
  "Database".

  Notre base de donnes a toujours besoin de 500 Kbits, il nous reste
  donc 1,5 Mbits pour la consommation de la classe "Human".

  Nous devons donc crer deux nouvelles classes  l'intrieur de la
  classe Office :







  # tc class add dev eth0 parent 10:200 classid 10:250 cbq bandwidth 10Mbit rate \
    500Kbit allot 1514 weight 50Kbit prio 5 maxburst 20 avpkt 1000 \
    bounded

  # tc class add dev eth0 parent 10:200 classid 10:251 cbq bandwidth 10Mbit rate \
    1500Kbit allot 1514 weight 150Kbit prio 5 maxburst 20 avpkt 1000 \
    bounded




  FIXME: Finir cet exemple!


  88..55..  qquuiilliibbrraaggee ddee cchhaarrggee ssuurr pplluussiieeuurrss iinntteerrffaacceess

  FIXME: document TEQL


  99..  DD''aauuttrreess ggeessttiioonnnnaaiirreess ddee mmiissee eenn ffiillee dd''aatttteennttee ((qquueeuueeiinngg ddiissccii
  pplliinneess))

  Le noyau Linux nous offre beaucoup de gestionnaires de mises en file
  d'attente.  Le plus largement utilis est de loin la file d'attente
  pfifo_fast, qui est celle par dfaut. Cela explique aussi pourquoi ces
  fonctionnalits avances sont si robustes. Un autre modle de file
  d'attente ne cote rien en dveloppement.

  Chacune de ces files d'attente a ses forces et ses faiblesses. Toutes
  n'ont peut-tre pas t bien testes.


  99..11..  ppffiiffoo__ffaasstt

  Cette file d'attente, comme son nom l'indique (fifo = premier entr,
  premier sorti), signifie qu'il n'y a pas de traitement spcial pour
  les paquets reus.  En fait, ce n'est pas tout  fait vrai. Cette file
  d'attente a trois "bandes".   l'intrieur de chacune de ces bandes,
  la rgle FIFO est applique. Cependant, tant qu'il y a un paquet en
  attente dans la "bande" 0, la "bande" 1 ne sera pas traite. Il en va
  de mme pour la "bande" 1 et la "bande" 2.


  99..22..  SSttoocchhaassttiicc FFaaiirrnneessss QQuueeuueeiinngg

  SFQ, comme dit prcdemment, n'est pas vraiment dterministe, mais
  marche (en moyenne). Ses principaux avantages sont qu'elle a besoin de
  peu de CPU et de mmoire. Une vritable mise en file d'attente
  quitable ncessite que le noyau garde une trace de toutes les
  sessions courantes.

  Stochastic Fairness Queueing (SFQ) est une implmentation simple de la
  famille des algorithmes de mise en file d'attente quitable.  Cette
  implmentation est moins prcise, mais ncessite aussi moins de
  calculs que les autres tout en tant presque parfaitement quitable.

  Le concept cl dans SFQ est la conversation (ou flux), qui est une
  squence de paquets de donnes ayant suffisamment de paramtres
  communs pour les distinguer des autres conversations. Les paramtres
  utiliss dans le cas de paquets IP sont les adresses de source et de
  destination, ainsi que le numro de protocole.

  SFQ consiste en l'allocation dynamique de files d'attente FIFO, une
  par conversation. Le gestionnaire de mise en file d'attente travaille
  en tourniquet (round-robin), envoyant un paquet de chaque FIFO 
  chaque tour.  C'est pour cette raison qu'il est rput quitable.  Le
  principal avantage de SFQ est qu'il autorise le partage quitable du
  lien entre plusieurs applications et vite la monopolisation de la
  bande passante par un client. SFQ ne peut cependant pas distinguer les
  flux interactifs des flux de masse. On a, en gnral, recours  CBQ
  pour effectuer cette distinction, et diriger le flux de masse vers
  SFQ.  [NdT : par flux de masse, il faut entendre gros flot de donnes,
  transmis en continu, comme un transfert FTP, par opposition  un flux
  interactif, comme celui gnr par des requtes HTTP].


  99..33..  TTookkeenn BBuucckkeett FFiilltteerr

  Le Token Bucket Filter (TBF) est une file d'attente simple.  Elle ne
  fait que passer les paquets entrants avec un taux de transfert dont
  les limites sont fixes administrativement. Il est possible de placer
  en mmoire tampon de courtes rafales de donnes.

  L'implmentation TBF consiste en un tampon (seau), constamment rempli
  par des morceaux d'informations virtuelles appels jetons, avec un
  dbit spcifique (dbit de jeton). Le paramtre le plus important du
  tampon est sa taille, qui est le nombre de jetons qu'il peut stocker.

  Chaque jeton arrivant laisse sortir un paquet de donnes entrant de la
  file d'attente. Ce paquet est alors effac du seau. L'association de
  cet algorithme avec les deux flux de jetons et de donnes, nous donne
  trois scnarios possibles :


    Les donnes arrivent dans TBF avec un dbit __g_a_l au dbit des
     jetons entrants. Dans ce cas, chaque paquet entrant a son jeton
     correspodant et passe la file d'attente sans dlai.

    Les donnes arrivent dans TBF avec un dbit _p_l_u_s _p_e_t_i_t que le dbit
     des jetons.  Seuls quelques jetons sont supprims quand les paquets
     de donnes sortent de la file d'attente. Les jetons s'accumulent
     donc jusqu' atteindre la taille du tampon. Les jetons en rserve
     peuvent tre utiliss pour envoyer des donnes avec un dbit
     suprieur au dbit des jetons, si de courtes rafales de donnes
     arrivent.

    Les donnes arrivent dans TBF avec un dbit _p_l_u_s _g_r_a_n_d que le dbit
     des jetons.  Dans ce cas, un dpassement de filtre a lieu. Les
     donnes entrantes peuvent tre envoyes sans perte jusqu' ce que
     les jetons accumuls soient utiliss. Aprs, les paquets au-dessus
     de la limite sont limins.


  Le dernier scnario est trs important, parce qu'il autorise la mise
  en forme administrative de la bande passante disponible pour les
  donnes traversant le filtre. L'accumulation de jetons autorise
  l'mission de courtes rafales de donnes sans perte, mais toute
  surcharge restante causera la perte systmatique des paquets.

  Le noyau Linux semble aller au-del de cette spcification, et nous
  autorise aussi  limiter la vitesse de la transmission par rafales.
  Cependant, Alexey nous avertit :


       Noter que le dbit de pointe de TBF est beaucoup plus coriace : avec
       un MTU  1500, P_crit = 150 Koctets/s.  Donc, si vous avez besoin d'un
       dbit de pointe plus grand, utilisez une alpha avec HZ=1000 :-)


  FIXME: Est-ce encore vrai avec TSC (pentium+) ou quivalent ?


  FIXME: Si ce n'est pas le cas, ajouter une section sur l'augmentation
  de frquence


  99..44..  RRaannddoomm EEaarrllyy DDeetteecctt

  RED comporte quelques finesses supplmentaires.  Quand une session
  TCP/IP dmarre, on ne connat pas la bande passante disponible. TCP/IP
  commence donc  transmettre lentement et va de plus en plus vite, mais
  est limit par le temps de latence au bout duquel les ACKs
  (acquittements) reviennent.

  Une fois qu'un lien est satur, RED commence  liminer des paquets,
  ce qui indique  TCP/IP que le lien est congestionn, et qu'il devrait
  ralentir.  La finesse rside dans le fait que RED simule la congestion
  relle, et commence parfois  liminer des paquets avant que le lien
  ne soit compltement satur. Une fois que le lien est compltement
  satur, il se comporte comme un contrleur normal.

  Pour plus d'informations sur le sujet, voir le chapitre Dorsale.


  99..55..  IInnggrreessss ppoolliicceerr qqddiisscc


  Ingress qdisc sert si vous avez besoin de limiter le dbit d'un hte
  sans l'aide de routeurs ou d'autres machines Linux. Vous pouvez grer
  la bande passante entrante et jeter des paquets quand cette bande
  passante dpasse le dbit dsir. Cela peut, par exemple, prserver
  votre hte d'une attaque SYN flood. Cela peut aussi servir  ralentir
  TCP/IP, qui ragit  la perte des paquets par la rduction de la
  vitesse.

  FIXME: au lieu d'liminer des paquets, pouvons-nous galement les
  envoyer vers une vraie file d'attente ?

  FIXME: la mise en forme en liminant des paquets semble moins
  dsirable que d'utiliser, par exemple, un filtre token bucket. Pas sr
  cependant, les routeurs Cisco travaillent de cette manire, et les
  gens semblent en tre contents.

  Voir la rfrence ``IOS Committed Access Rate''  la fin de ce
  document.



  En rsum, vous pouvez utiliser cela pour limiter la vitesse de
  tlchargement des fichiers et, donc, laisser plus de bande passante
  disponible pour les autres.

  Voir la section sur la protection de votre hte des attaques SYN flood
  pour un exemple de la manire dont cela marche.


  1100..  NNeettffiilltteerr eett iipprroouuttee -- mmaarrqquuaaggee ddee ppaaqquueettss

  Jusqu' maintenant, nous avons vu comment iproute travaille, et
  netfilter a t mentionn plusieurs fois. Vous ne perdrez pas votre
  temps  consulter Rusty's Remarkably Unreliable guides
  <http://netfilter.kernelnotes.org/unreliable-guides/>.

  Netfilter nous permet de filtrer les paquets, ou de dsosser leurs en-
  ttes.  Une de ses fonctionnalits particulires est de pouvoir
  marquer un paquet avec un nombre, grce  l'option --set-mark.


  Comme exemple, la commande suivante marque tous les paquets destins
  au port 25, en l'occurence le courrier sortant.



       # iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 \
        -j MARK --set-mark 1




  Disons que nous avons plusieurs connexions, une qui est rapide (et
  chre, au mgaoctet) et une qui est plus lente, mais avec un tarif
  moins lev. Nous souhaiterions que le courrier passe par la route la
  moins chre.

  Nous avons dj marqu le paquet avec un "1" et nous allons maintenant
  renseigner la base de donnes de la politique de routage pour qu'elle
  agisse sur ces paquets marqus.



       # echo 201 mail.out >> /etc/iproute2/rt_tables
       # ip rule add fwmark 1 table mail.out
       # ip rule ls
       0:      from all lookup local
       32764:  from all fwmark        1 lookup mail.out
       32766:  from all lookup main
       32767:  from all lookup default




  Nous allons maintenant gnrer la table mail.out avec une route vers
  la ligne lente, mais peu coteuse.


       # /sbin/ip route add default via 195.96.98.253 dev ppp0 table mail.out




  Voil qui est fait. Il se peut que nous voulions mettre en place des
  exceptions, et il y a beaucoup de moyens de le faire. Nous pouvons
  modifier la configuration de netfilter pour exclure certains htes, ou
  nous pouvons insrer une rgle avec une priorit plus faible qui
  pointe sur la table principale pour nos htes faisant exception.

  Nous pouvons aussi utiliser cette fonctionnalit pour nous conformer
  aux bits TOS en marquant les paquets avec diffrents types de service
  et les nombres correspondants. On cre ensuite les rgles qui agissent
  sur ces types de service. De cette faon, on peut ddier une ligne
  RNIS aux connexions interactives.

  Inutile de la dire, cela marche parfaitement sur un hte qui fait de
  la translation d'adresse (NAT), autrement dit du "masquerading".

  Note : pour ce faire, vous aurez besoin de valider quelques options du
  noyau :



       IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [Y/n/?]
       IP: policy routing (CONFIG_IP_MULTIPLE_TABLES) [Y/n/?]
       IP: use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Y/n/?]

  1111..  DD''aauuttrreess ccllaassssiiffiiccaatteeuurrss


  Les classificateurs sont les moyens par lesquels le noyau dcide dans
  quelle file d'attente un paquet sera plac. Il y a divers
  classificateurs, chacun d'eux pouvant tre utilis pour diffrents
  buts.


     ffww Base la dcision sur la faon dont la pare-feu a marqu les
        paquets.


     uu3322
        Base la dcision sur les champs  l'intrieur du paquet
        (c'est--dire l'adresse IP source, etc.)


     rroouuttee
        Base la dcision sur la route  emprunter par le paquet.


     rrssvvpp,, rrssvvpp66
        Base la dcision sur la cible (destination, protocole) et,
        optionnellement, sur la source (je pense).


     ttcciinnddeexx
        FIXME: Remplissez-moi

  Notez qu'il y a gnralement plusieurs manires de classifier un
  paquet.  Cela dpend du systme de classification que vous souhaitez
  utiliser.

  Les classificateurs acceptent en gnral quelques arguments communs.
  Ils sont lists ici pour des raisons pratiques :


     pprroottooccooll
        Le protocole que ce classificateur acceptera.  Gnralement, on
        n'acceptera que le trafic IP. Exig.


     ppaarreenntt
        La rfrence  laquelle ce classificateur est attach.  Cette
        rfrence doit tre une classe dj existante. Exig.


     pprriioo
        La priorit de ce classificateur.  Les plus grand nombres seront
        tests en premier.


     hhaannddllee
        Cette rfrence a plusieurs significations suivant les
        diffrents filtres.

        FIXME: En ajouter d'autres

  Toutes les sections suivantes supposeront que vous essayez de mettre
  en forme le trafic allant vers HostA. Ces sections suppposeront que la
  classe racine a t configure sur 1: et que la classe vers laquelle
  vous voulez envoyer le trafic slectionn est 1:1.



  1111..11..  LLee ccllaassssiiffiiccaatteeuurr ""ffww""

  Le classificateur "fw" s'appuie sur le marquage des paquets  mettre
  en forme par le pare-feu.  Donc, nous configurerons d'abord le pare-
  feu pour les marquer :



       # iptables -I PREROUTING -t mangle -p tcp -d HostA \
        -j MARK --set-mark 1




  Maintenant, tous les paquets vers cette machine (HostA) sont baliss
  avec la marque 1.  prsent, nous construisons les rgles de mise en
  forme pour mettre en forme les paquets. Nous avons juste besoin
  d'indiquer que les paquets baliss avec la marque 1 vont vers la
  classe 1:1. C'est fait par la commande suivante :



       # tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 1 fw classid 1:1




  Cela devrait se comprendre de soi-mme. On attache  la classe 1:0 un
  filtre avec la priorit 1 pour filtrer tous les paquets marqus  1
  par le pare-feu vers la classe 1:1.  Noter l'utilisation du paramtre
  "handle" pour indiquer la marque attendue.

  C'est tout ce qu'il y a  faire ! C'est le procd le plus simple (
  mon humble avis). Je pense que les autres procds sont plus
  difficiles  comprendre. Notez que toute la puissance du pare-feu peut
  tre utilise avec ce classificateur.  Cela inclut l'analyse des
  adresses MAC, des identificateurs d'utilisateurs (user ID) et tout ce
  que le firewall peut traiter.


  1111..22..  LLee ccllaassssiiffiiccaatteeuurr ""uu3322""

  Le filtre u32 est le filtre le plus avanc dans l'implmentation
  courante.  Il est entirement bas sur des tables de hachage, ce qui
  le rend robuste quand il y a beaucoup de rgles de filtrage.

  Dans sa forme la plus simple, le filtre u32 est une liste
  d'enregistrements, chacun consistant en deux champs : un slecteur et
  une action. Les slecteurs, dcrits ci-dessous, sont compars avec le
  paquet IP trait jusqu' la premire correspondance, et l'action
  associe est accomplie.  Le type d'action le plus simple serait de
  diriger le paquet vers une classe CBQ dfinie.

  La ligne de commande du programme filtre tc, utilis pour configurer
  le filtre, consiste en trois parties : la spcification du filtre, un
  slecteur et une action.  La spcification du filtre peut tre dfinie
  comme :



       tc filter add dev IF [ protocol PROTO ]
                            [ (preference|priority) PRIO ]
                            [ parent CBQ ]



  Le champ protocol dcrit le protocole sur lequel le filtre sera
  appliqu. Nous ne discuterons que du cas du protocole ip. Le champ
  preference(priority peut tre utilis comme alternative) fixe la
  priorit du filtre que l'on dfinit. C'est important dans la mesure o
  vous pouvez avoir plusieurs filtres (listes de rgles) avec des
  priorits diffrentes.  Chaque liste sera scrute dans l'ordre d'ajout
  des rgles. Alors, la liste avec la priorit la plus faible (celle qui
  a le numro de prfrence le plus lev) sera traite.  Le champ
  parent dfinit le sommet de l'arbre CBQ (par ex. 1:0) auquel le filtre
  doit tre attach.

  Les options dcrites s'appliquent  tous les filtres, pas seulement 
  u32.


  1111..22..11..  LLee sslleecctteeuurr UU3322

  Le slecteur U32 contient la dfinition d'un modle, qui sera compar
  au paquet trait. Plus prcisment, il dfinit quels bits doivent
  correspondre dans l'en-tte du paquet, et rien de plus, mais cette
  mthode simple est trs puissante. Jetons un oeil sur l'exemple
  suivant, directement tir d'un filtre assez complexe rellement
  existant :



       # filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:3 \
         match 00100000/00ff0000 at 0





  Pour l'instant, laissons de ct la premire ligne - tous ces
  paramtres dcrivent les tables de hachage du filtre. Focalisons-nous
  sur la ligne de slection contenant le mot-cl match.  Ce slecteur
  fera correspondre les en-ttes IP dont le second octet sera 0x10
  (0010). Comme nous pouvons le deviner, le nombre 00ff est le masque de
  correspondance, disant au filtre quels bits il doit regarder.  Ici,
  c'est 0xff, donc l'octet correspondra si c'est exactement 0x10.  Le
  mot-cl at signifie que la correspondance doit dmarrer au dcalage
  spcifi (en octets) - dans notre cas, c'est au dbut du paquet.
  Traduisons tout cela en langage humain : le paquet correspondra si son
  champ Type de Service (TOS) a le bit "faible dlai" positionn.
  Analysons une autre rgle :



       # filter parent 1: protocol ip pref 10 u32 fh 800::803 order 2051 key ht 800 bkt 0 flowid 1:3 \
         match 00000016/0000ffff at nexthdr+0





  L'option nexthdr dsigne l'en-tte suivant encapsul dans le paquet
  IP, c'est  dire celui du protocole de la couche suprieure.  La
  correspondance commencera galement au dbut du prochain en-tte.
  Elle devrait avoir lieu dans le deuxime mot de 32 bits de l'en-tte.
  Dans les protocoles TCP et UDP, ce champ contient le port de
  destination du paquet. Le nombre est donn dans le format big-endian,
  c'est--dire les bits les plus significatifs en premier. Il faut donc
  lire 0x0016 comme 22 en dcimal, qui correspond au service SSH dans le
  cas de TCP.  Comme vous le devinez, cette correspondance est ambigu
  sans un contexte, et nous en discuterons plus loin.

  Ayant compris tout cela, nous trouverons le slecteur suivant trs
  facile  lire : match c0a80100/ffffff00 at 16. Ce que nous avons ici,
  c'est une correspondance de trois octets au 17me octet, en comptant 
  partir du dbut de l'en-tte IP. Cela correspond aux paquets qui ont
  une adresse de destination quelconque dans le rseau 192.168.1/24.
  Aprs avoir analys les exemples, nous pouvons rsumer ce que nous
  avons appris.


  1111..22..22..  SSlleecctteeuurrss ggnnrraauuxx

  Les slecteurs gnraux dfinissent le modle, le masque et le
  dcalage qui seront compars au contenu du paquet. En utilisant les
  slecteurs gnraux, vous pouvez rechercher des correspondances sur
  n'importe quel bit de l'en-tte IP (ou des couches suprieures). Ils
  sont quand mme plus difficiles  crire et  lire que les slecteurs
  spcifiques dcrits ci-dessus. La syntaxe gnrale des slecteurs
  est :



       match [ u32 | u16 | u8 ] PATTERN MASK [ at OFFSET | nexthdr+OFFSET]





  Un des mots-cls u32,u16 ou u8 doit spcifier la longueur du modle en
  bits. PATTERN et MASK se rapporteront  la longueur dfinie par ce
  mot-cl. Le paramtre OFFSET est le dcalage, en octets, pour le
  dmarrage de la recherche de correspondance. Si le mot-clef nexthdr+
  est prsent, le dcalage sera relatif  l'en-tte de la couche rseau
  suprieure.


  Quelques exemples :



       # tc filter add dev ppp14 parent 1:0 prio 10 u32 \
            match u8 64 0xff at 8 \
            flowid 1:4





  Un paquet correspondra  cette rgle si sa "dure de vie" (TTL) est de
  64.  TTL est le champ dmarrant juste aprs le 8me octet de l'en-tte
  IP.



       # tc filter add dev ppp14 parent 1:0 prio 10 u32 \
            match u8 0x10 0xff at nexthdr+13 \
            protocol tcp \
            flowid 1:3 \





  Cette rgle correspondra seulement aux paquets TCP avec le bit ACK
  positionn. Ici, nous pouvons voir un exemple d'utilisation de deux
  slecteurs, le rsultat final tant un ET logique de leurs rsultats.
  Si vous jetez un oeil sur un schma de l'en-tte TCP, vous pouvez voir
  que le bit ACK est le second bit (0x10) du 14me octet de l'en-tte
  TCP (at nexthdr+13). Comme second slecteur, si vous voulez vous
  compliquer la vie, vous pouvez crire match u8 0x06 0xff at 9  la
  place du slecteur spcifique protocol tcp, puisque 6 est le numro du
  protocole TCP, spcifi au 10me octet de l'en-tte IP. En revanche,
  dans cet exemple, vous ne pourrez pas utiliser de slecteur spcifique
  pour la premire correspondance, simplement parce qu'il n'y a pas de
  slecteur spcifique pour dsigner les bits TCP ACK.


  1111..22..33..  LLeess sslleecctteeuurrss ssppcciiffiiqquueess

  La table suivante contient la liste de tous les slecteurs spcifiques
  que les auteurs de cette section ont trouvs dans le code source du
  programme tc.  Ils rendent simplement la vie plus facile en
  accroissant la lisibilit de la configuration du filtre.

  FIXME: emplacement de la table - la table est dans un fichier spar
  "selector.html"

  FIXME: C'est encore en Polonais :-( FIXME: doit tre "sgmlis"

  Quelques exemples :



       # tc filter add dev ppp0 parent 1:0 prio 10 u32 \
            match ip tos 0x10 0xff \
            flowid 1:4




  La rgle ci-dessus correspondra  des paquets qui ont le champ TOS
  gal  0x10. Le champ TOS commence au deuxime octet du paquet et
  occupe 1 octet, ce qui nous permet d'crire un slecteur gnral
  quivalent : match u8 0x10 0xff at 1. Cela nous donne une indication
  sur l'implmentation du filtre u32 ; les rgles spcifiques sont
  toujours traduites en rgles gnrales, et c'est sous cette forme
  qu'elles sont stockes en mmoire par le noyau.  Cela amne  une
  autre conclusion : les slecteurs tcp et udp sont exactement les mmes
  et c'est la raison pour laquelle vous ne pouvez pas utiliser un simple
  slecteur match tcp dst 53 0xffff pour dsigner un paquet TCP envoy
  sur un port donn : cela dsigne aussi les paquets UDP envoys sur ce
  port. Vous devez galement spcifier le protocole avec la rgle
  suivante :


       # tc filter add dev ppp0 parent 1:0 prio 10 u32 \
               match tcp dst 53 0xffff \
               match ip protocol 0x6 0xff \
               flowid 1:2






  1111..33..  LLee ccllaassssiiffiiccaatteeuurr ""rroouuttee""


  Ce classificateur filtre en se basant sur le rsultat des tables de
  routage. Quand un paquet passant  travers les classes en atteint une
  qui est marque avec le filtre "route", il divise le paquet en se
  basant sur l'information de la table de routage.

       # tc filter add dev eth1 parent 1:0 protocol ip prio 100 route




  Ici, nous ajoutons un classificateur route sur le noeud parent 1:0
  avec la priorit 100. Quand un paquet atteint ce noeud (ce qui,
  puisqu'il est racine, arrive immdiatement), il consulte la table de
  routage et si une entre de la table correspond, il envoie le paquet
  vers la classe donne et lui donne une priorit de 100. Ensuite, pour
  finalement activer les choses, vous ajoutez l'entre de routage
  approprie.

  L'astuce ici est de dfinir "realm" en se basant soit sur la
  destination, soit sur la source. Voici la faon de faire cela :



       # ip route add Host/Network via Gateway dev Device realm RealmNumber




  Par exemple, nous pouvons dfinir notre rseau de destination
  192.168.10.0 avec le nombre "realm" gal  10 :



       # ip route add 192.168.10.0/24 via 192.168.10.1 dev eth1 realm 10





  Quand on ajoute des filtres "route", on peut utiliser les nombres
  "realm" pour reprsenter les rseaux ou les htes et spcifier quelle
  est la correspondance entre les routes et les filtres.



       # tc filter add dev eth1 parent 1:0 protocol ip prio 100 \
         route to 10 classid 1:10





  La rgle ci-dessus indique que les paquets allant vers le rseau
  192.168.10.0 correspondent  la classe 1:10.

  Le filtre route peut aussi tre utilis avec les routes sources. Par
  exemple, il y a un sous-rseau attach  notre routeur Linux sur eth2.



       # ip route add 192.168.2.0/24 dev eth2 realm 2
       # tc filter add dev eth1 parent 1:0 protocol ip prio 100 \
         route from 2 classid 1:2




  Ici, le filtre spcifie que les paquets venant du rseau 192.168.2.0
  (realm 2) correspondront  la classe 1:2.


  1111..44..  LLee ccllaassssiiffiiccaatteeuurr ""rrssvvpp""

  FIXME:  remplir


  1111..55..  LLee ccllaassssiiffiiccaatteeuurr ""ttcciinnddeexx""

  FIXME:  remplir


  1122..  PPaarraammttrreess rrsseeaauu dduu nnooyyaauu

  Le noyau utilise de nombreux paramtres qui peuvent tre ajusts en
  diffrentes circonstances. Bien que, comme d'habitude, les paramtres
  par dfaut conviennent  99% des installations, nous ne pourrions pas
  appeler ce document "HOWTO avanc" sans en dire un mot.

  Les lments intressants sont dans /proc/sys/net, jetez-y un oeil.
  Tout ne sera pas document ici au dpart, mais nous y travaillons.


  1122..11..  FFiillttrraaggee dduu CChheemmiinn IInnvveerrssee ((RReevveerrssee PPaatthh FFiilltteerriinngg))

  Par dfaut, les routeurs routent tout, mme les paquets qui
  visiblement n'appartiennent pas  votre rseau. Un exemple courant est
  l'espace des adresses IP prives s'chappant sur Internet. Si vous
  avez une interface avec une route pour 195.96.96.0/24 dessus, vous ne
  vous attendrez pas  voir arriver des paquets venant de 212.64.94.1.

  Beaucoup d'utilisateurs veulent dsactiver cette fonctionnalit. Les
  dveloppeurs du noyau ont permis de le faire facilement. Il y a des
  fichiers dans /proc o vous pouvez ordonner au noyau de le faire pour
  vous. La mthode est appele "Reverse Path Filtering" (Filtrage par
  chemin inverse). Pour faire simple, si la rponse  ce paquet ne sort
  pas par l'interface par laquelle il est entr, alors c'est un paquet
  "bogu" et il sera ignor.

  Les instructions suivantes vont activer cela pour toutes les
  interfaces courantes et futures.



       # for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
       >  echo 2 > $i
       > done




  En reprenant l'exemple du dbut, si un paquet arrivant sur le routeur
  Linux par eth1 prtend venir du rseau Bureau+FAI, il sera limin.
  De mme, si un paquet arrivant du rseau Bureau prtend tre de
  quelque part  l'extrieur du pare-feu, il sera galement limin.

  Ce qui est prsent ci-dessus est le filtrage de chemin inverse
  complet.  Le paramtrage par dfaut filtre seulement sur les adresses
  IP des rseaux directement connects. Ce paramtrage par dfaut est
  utilis parce que le filtrage complet choue dans le cas d'un routage
  asymtrique (o il y a des paquets arrivant par un chemin et
  ressortant par un autre, comme dans le cas du trafic satellite, ou si
  vous avez des routes dynamiques (bgp, ospf, rip) dans votre rseau.
  Les donnes descendent vers la parabole satellite et les rponses
  repartent par des lignes terrestres normales).

  Si cette exception s'applique dans votre cas (vous devriez tre au
  courant), vous pouvez simplement dsactiver le rp_filter sur
  l'interface d'arrive des donnes satellite. Si vous voulez voir si
  des paquets sont limins, le fichier log_martians du mme rpertoire
  indiquera au noyau de les enregistrer dans votre syslog.



       # echo 1 >/proc/sys/net/ipv4/conf/<interfacename>/log_martians




  FIXME: Est-ce que la configuration des fichiers dans
  .../conf/{default,all} suffit ? - martijn


  1122..22..  CCoonnffiigguurraattiioonnss oobbssccuurreess

  Bon, il y a beaucoups de paramtres qui peuvent tre modifis.  Nous
  essayons de tous les lister. Voir aussi une documentation partielle
  dans Documentation/ip-sysctl.txt.

  Certaines de ces configurations ont des valeurs par dfaut diffrentes
  suivant que vous rpondez "Yes" ou "No"  la question "Configure as
  router and not host" lors de la compilation du noyau.


  1122..22..11..  iippvv44 ggnnrriiqquuee

  En remarque gnrale, les fonctionnalits de limitation de dbit ne
  fonctionnent pas sur loopback, donc n'essayez pas de les tester
  localement.


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__ddeessttuunnrreeaacchh__rraattee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__eecchhoo__iiggnnoorree__aallll
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__eecchhoo__iiggnnoorree__bbrrooaaddccaassttss [[UUsseeffuull]]
        Si vous pinguez l'adresse de diffusion d'un rseau, tous les
        htes sont censs rpondre. Cela permet de coquettes attaques de
        dni de service.  Mettez cette valeur  1 pour ignorer ces
        messages de diffusion.


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__eecchhoorreeppllyy__rraattee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__iiggnnoorree__bboogguuss__eerrrroorr__rreessppoonnsseess
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__ppaarraammpprroobb__rraattee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__ttiimmeeeexxcceeeedd__rraattee
        Voici la clbre cause des "toiles Solaris" dans traceroute.
        Limite le nombre de messages ICMP Time Exceeded envoys.  FIXME:
        Unit de ces "rates" ? Soit je suis stupide, soit a ne
        fonctionne pas.

     //pprroocc//ssyyss//nneett//iippvv44//iiggmmpp__mmaaxx__mmeemmbbeerrsshhiippss
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__ggcc__mmaaxxttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__ggcc__mmiinnttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__mmaaxxttttll
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__mmiinnttttll
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__tthhrreesshhoolldd
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iipp__aauuttooccoonnffiigg
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iipp__ddeeffaauulltt__ttttll
        Dure de vie (TTL) des paquets. Fixez-la  la valeur sre de 64.
        Augmentez-la si vous avez un rseau immense, mais pas "pour
        voir" : les boucles sans fin d'un mauvais routage sont plus
        dangereuses si le TTL est lev.  Vous pouvez mme envisager de
        diminuer la valeur dans certaines circonstances.


     //pprroocc//ssyyss//nneett//iippvv44//iipp__ddyynnaaddddrr
        Vous aurez besoin de positionner cela si vous utilisez la
        connexion  la demande avec une adresse d'interface dynamique.
        Une fois que votre interface sera active, tout paquet plac en
        file d'attente sera retrait pour avoir la bonne adresse. Cela
        rsout le problme pos par une connexion dfectueuse ayant
        configur une interface, suivie par une deuxime tentative
        russie (avec une adresse IP diffrente).


     //pprroocc//ssyyss//nneett//iippvv44//iipp__ffoorrwwaarrdd
        Le noyau doit-il essayer de transmettre les paquets ?  Dsactiv
        par dfaut pour les htes, activ par dfaut quand le noyau est
        configur pour un routeur.


     //pprroocc//ssyyss//nneett//iippvv44//iipp__llooccaall__ppoorrtt__rraannggee
        Intervalle des ports locaux pour les connections sortantes.  En
        fait, assez petit par dfaut, 1024  4999.


     //pprroocc//ssyyss//nneett//iippvv44//iipp__nnoo__ppmmttuu__ddiisscc
        Configurez cela si vous voulez dsactiver la dcouverte du MTU :
        une technique pour dterminer le plus grand MTU possible sur
        votre chemin.


     //pprroocc//ssyyss//nneett//iippvv44//iippffrraagg__hhiigghh__tthhrreesshh
        FIXME:  remplir

     //pprroocc//ssyyss//nneett//iippvv44//iippffrraagg__llooww__tthhrreesshh
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//iippffrraagg__ttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__aabboorrtt__oonn__oovveerrffllooww
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ffiinn__ttiimmeeoouutt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__kkeeeeppaalliivvee__iinnttvvll
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__kkeeeeppaalliivvee__pprroobbeess
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__kkeeeeppaalliivvee__ttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__mmaaxx__oorrpphhaannss
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__mmaaxx__ssyynn__bbaacckklloogg
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__mmaaxx__ttww__bbuucckkeettss
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__oorrpphhaann__rreettrriieess
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__rreettrraannss__ccoollllaappssee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__rreettrriieess11
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__rreettrriieess22
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__rrffcc11333377
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssaacckk
        Utilise un ACK slectif qui peut tre utilis pour signifier
        qu'un seul paquet est manquant. Facilite ainsi une rcupration
        rapide.


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssttdduurrgg
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssyynn__rreettrriieess
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssyynnaacckk__rreettrriieess
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ttiimmeessttaammppss
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__ttww__rreeccyyccllee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ttccpp__wwiinnddooww__ssccaalliinngg
        TCP/IP autorise normalement des fentres jusqu' une taille de
        65535 octets. Pour des rseaux vraiment rapides, cela peut ne
        pas tre assez. Les options "windows scaling" autorisent des
        fentres jusqu'au gigaoctet, ce qui est bon pour les produits 
        grande bande passante mais fort dlai.



  1122..22..22..  CCoonnffiigguurraattiioonn pprriipphhrriiqquuee ppaarr pprriipphhrriiqquuee

  DEV peut dsigner soit une interface relle, soit "all", soit
  "default".  Default change galement les paramtres des interfaces qui
  seront cres par la suite.


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//aacccceepptt__rreeddiirreeccttss
        Si un routeur dcide que vous l'utilisez  tort (c'est--dire
        qu'il a besoin de r-envoyer votre paquet sur la mme
        interface), il vous enverra un ICMP Redirect. Cela prsente
        cependant un petit risque pour la scurit, et vous pouvez le
        dsactiver, ou utiliser les redirections scurises.


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//aacccceepptt__ssoouurrccee__rroouuttee
        Plus vraiment utilis. On l'utilisait pour tre capable de
        donner  un paquet une liste d'adresses IP  visiter. Linux peut
        tre configur pour satisfaire cette option IP.


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//bboooottpp__rreellaayy
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//ffoorrwwaarrddiinngg
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//lloogg__mmaarrttiiaannss
        Voir la section sur le "reverse path filters"


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//mmcc__ffoorrwwaarrddiinngg
        Si vous faites de la transmission multidiffusion (multicast) sur
        cette interface.

     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//pprrooxxyy__aarrpp
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//rrpp__ffiilltteerr
        Voir la section sur le "reverse path filters"


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//sseeccuurree__rreeddiirreeccttss
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//sseenndd__rreeddiirreeccttss
        Si vous employez les redirections mentionnes ci-dessus.


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//sshhaarreedd__mmeeddiiaa
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//ttaagg
        FIXME:  remplir



  1122..22..33..  PPoolliittiiqquuee ddee vvooiissiinnaaggee

  DEV peut dsigner soit une interface relle, soit "all", soit
  "default".  Default change galement les paramtres des interfaces qui
  seront cres par la suite.


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//aannyyccaasstt__ddeellaayy
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//aapppp__ssoolliicciitt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//bbaassee__rreeaacchhaabbllee__ttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//ddeellaayy__ffiirrsstt__pprroobbee__ttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//ggcc__ssttaallee__ttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//lloocckkttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//mmccaasstt__ssoolliicciitt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//pprrooxxyy__ddeellaayy
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//pprrooxxyy__qqlleenn
        FIXME:  remplir
     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//rreettrraannss__ttiimmee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//uuccaasstt__ssoolliicciitt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//uunnrreess__qqlleenn
        FIXME:  remplir



  1122..22..44..  CCoonnffiigguurraattiioonn dduu rroouuttaaggee


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//eerrrroorr__bbuurrsstt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//eerrrroorr__ccoosstt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//fflluusshh
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__eellaassttiicciittyy
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__iinntteerrvvaall
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__mmiinn__iinntteerrvvaall
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__tthhrreesshh
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__ttiimmeeoouutt
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmaaxx__ddeellaayy
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmaaxx__ssiizzee
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmiinn__aaddvv__mmssss
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmiinn__ddeellaayy
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmiinn__ppmmttuu
        FIXME:  remplir
     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmttuu__eexxppiirreess
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//rreeddiirreecctt__llooaadd
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//rreeddiirreecctt__nnuummbbeerr
        FIXME:  remplir


     //pprroocc//ssyyss//nneett//iippvv44//rroouuttee//rreeddiirreecctt__ssiilleennccee
        FIXME:  remplir



  1133..  AApppplliiccaattiioonn dduu ccoonnttrrllee ddee ttrraaffiicc aauuxx ddoorrssaalleess

  Ce chapitre est conu comme une introduction au routage de dorsales
  (backbones).  Ces liaisons impliquent souvent des bandes passantes
  suprieures  100 mgabits/s, ce qui ncessite une approche diffrente
  de celle de votre modem ADSL  la maison.


  1133..11..  FFiilleess dd''aatttteennttee ddee rroouutteeuurrss

  Le comportement normal des files d'attente de routeurs est appel
  "tail-drop" (NdT : limine le reste). Le "tail-drop" consiste  mettre
  en file d'attente un certain volume de trafic et  liminer tout ce
  qui dborde. Ce n'est pas du tout quitable et cela conduit  des
  retransmissions de synchronisation. Quand une retransmission de
  synchronisation a lieu, la brusque rafale de rejet d'un routeur qui a
  atteint sa limite entranera une rafale de retransmissions retarde
  qui inondera  nouveau le routeur congestionn.

  Dans le but d'en finir avec les congestions occasionnelles des liens,
  les routeurs de dorsales intgrent souvent des files d'attente de
  grande taille. Malheureusement, bien que ces files d'attente offrent
  un bon dbit, elles peuvent augmenter sensiblement les temps de
  latence et entraner un comportement trs saccad des connections TCP
  pendant la congestion.

  Ces problmes avec le "tail-drop" deviennent de plus en plus
  proccupants avec l'augmentation de l'utilisation d'applications
  hostiles au rseau. Le noyau Linux nous offre la technique RED,
  abrviation de Random Early Detect, ou dtection prcoce directe.

  RED n'est pas la solution miracle  tous ces problmes.  Les
  applications qui n'intgrent pas correctement la technique de
  "l'exponential backoff" obtiennent toujours une part trop grande de
  bande passante. Cependant, avec la technique RED elles ne provoquent
  pas trop de dgts sur le dbit et les temps de latence des autres
  connexions.

  RED limine statistiquement des paquets du flux avant qu'il n'atteigne
  sa limite "dure" (hard). Sur une dorsale congestionne, cela entrane
  un ralentissement en douceur de la liaison  et vite les
  retransmissions de synchronisation. La technique RED aide aussi TCP 
  trouver une vitesse "quitable" plus rapidement : en permettant
  d'liminer des paquets plus tt, il conserve une file d'attente plus
  courte et des temps de latence mieux contrls.  La probabilit qu'un
  paquet soit limin d'une connexion particulire est proportionnelle 
  la bande passante utilise par cette connexion plutt qu'au nombre de
  paquets qu'elle envoie.

  La technique RED est une bonne gestion de file d'attente pour les
  dorsales, o vous ne pouvez pas vous permettre le cot d'une
  mmorisation d'tat par session qui est ncessaire pour une mise en
  file d'attente vraiment quitable.

  Pour utiliser RED, vous devez rgler trois paramtres : Min, Max et
  burst. Min est la taille minimum de la file d'attente en octets avant
  que les rejets n'aient lieu, Max est le maximum "doux" (soft) en-
  dessous duquel l'algorithme s'efforcera de rester, et burst est le
  nombre maximum de paquets envoys "en rafale".

  Vous devriez configurer Min en calculant le plus grand temps de
  latence acceptable pour la mise en file d'attente, multipli par votre
  bande passante. Par exemple, sur mon lien ISDN  64 Kbits/s, je
  voudrais avoir un temps de latence de base de mise en file d'attente
  de 200 ms. Je configure donc Min  1600 octets (= 0,2 x 64000 / 8).
  Imposer une valeur Min trop petite va dgrader le dbit et une valeur
  Min trop grande va dgrader le temps de latence.  Sur une liaison
  lente, choisir un coefficient Min petit ne peut pas remplacer une
  rduction du MTU  pour amliorer les temps de rponse.

  Vous devriez configurer Max  au moins deux fois Min pour viter les
  synchronisations. Sur des liens lents avec de petites valeurs de Min,
  il peut tre prudent d'avoir Max quatre fois plus grand que Min ou
  plus.

  Burst contrle la rponse de l'algorithme RED aux rafales. Burst doit
  tre choisi plus grand que min/avpkt (paquet moyen).
  Exprimentalement, j'ai trouv que (min+min+max)/(3*avpkt) marche
  bien.

  De plus, vous devez configurer limit et avpkt. Limit est une valeur de
  scurit : s'il y a plus de Limit octets dans la file, RED reprend la
  technique "tail-drop". Je choisis une valeur typique gale  8 fois
  Max.  Avpkt devrait tre fix  la taille moyenne d'un paquet.  1000
  fonctionne correctement sur des liaisons Internet haut dbit ayant un
  MTU de 1500 octets.

  Lire the paper on RED queueing
  <http://www.aciri.org/floyd/papers/red/red.html> par Sally Floyd et
  Van Jacobson pour les informations techniques.

  FIXME: besoin de plus d'infos. Cela dpend de toi, Greg :-) - ahu


  1144..  RReecceetttteess ddee ccuuiissiinnee ppoouurr llaa mmiissee eenn ffoorrmmee dduu ttrraaffiicc

  Cette section contient des "recettes de cuisine" qui peuvent vous
  aider  rsoudre vos problmes. Un livre de cuisine ne remplace
  cependant pas une relle comprhension, essayez donc d'assimiler ce
  qui suit.


  1144..11..  FFaaiirree ttoouurrnneerr pplluussiieeuurrss ssiitteess aavveecc ddiiffffrreenntteess SSLLAA ((aauuttoorriissaa
  ttiioonnss))

  Vous pouvez faire cela de plusieurs manires. Apache possde un module
  qui permet de le supporter, mais nous montrerons comment Linux peut le
  faire pour d'autres services. Les commandes ont t reprises d'une
  prsentation de Jamal Hadi, dont la rfrence est fournie ci-dessous.

  Disons que nous avons deux clients, avec http, ftp et du streaming
  audio, et que nous voulions leur vendre une largeur de bande passante
  limite.  Nous le ferons sur le serveur lui-mme.


  Le client A doit disposer d'au moins 2 mgabits, et le client B a pay
  pour 5 mgabits. Nous sparons nos clients en crant deux adresses IP
  virtuelles sur notre serveur.



       # ip address add 188.177.166.1 dev eth0
       # ip address add 188.177.166.2 dev eth0




  C'est  vous d'associer les diffrents serveurs  la bonne adresse IP.
  Tous les dmons courants supportent cela.

  Nous pouvons tout d'abord attacher une mise en file d'attente CBQ 
  eth0 :


       # tc qdisc add dev eth0 root handle 1: bandwidth 10Mbit cell 8 avpkt 1000 \
         mpu 64




  Nous crons ensuite les classes pour nos clients :



       # tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate \
         2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21
       # tc class add dev eth0 parent 1:0 classid 1:2 cbq bandwidth 10Mbit rate \
         5Mbit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21




  Nous ajoutons les filtres pour nos deux classes :


       ##FIXME: Pourquoi cette ligne, que fait-elle ? Qu'est-ce qu'un
       diviseur ?
       ##FIXME: Un diviseur est li  une table de hachage et au nombre de
       seaux -ahu
       # tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 1: u32 divisor 1
       # tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.1
         flowid 1:1
       # tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.2
         flowid 1:2




  Et voil qui est fait.

  FIXME: Pourquoi pas un filtre token bucket ?  Y a t-il un retour par
  dfaut  pfifo_fast quelque part ?


  1144..22..  PPrroottggeerr vvoottrree mmaacchhiinnee ddeess iinnoonnddaattiioonnss SSYYNN ffllooooddss

  D'aprs la documentation iproute d'Alexeys, adapte  netfilter.  Si
  vous utilisez ceci, prenez garde d'ajuster les nombres avec des
  valeurs raisonnables pour votre systme.


  Si vous voulez protger tout un rseau, oubliez ce script, qui est
  plus adapt  un hte seul.



       #! /bin/sh -x
       #
       # script simple utilisant les capacits de Ingress
       # Ce script montre comment on peut limiter le flux entrant des SYN.
       # Utile pour la protection des TCP-SYN. Vous pouvez utiliser IPchains
       # pour bnficier de puissantes fonctionnalits sur les SYN.
       #
       # chemins vers les divers utilitaires
       #  changer en fonction des vtres
       #
       TC=/sbin/tc
       IP=/sbin/ip
       IPTABLES=/sbin/iptables
       INDEV=eth2
       #
       # marque tous les paquets SYN entrant  travers $INDEV avec la valeur 1
       ############################################################
       $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn \
         -j MARK --set-mark 1
       ############################################################
       #
       # installe la file d'attente ingress sur l'interface associe
       ############################################################
       $TC qdisc add dev $INDEV handle ffff: ingress
       ############################################################
       #
       # Les paquets SYN ont une taille de 40 octets (320 bits), donc trois SYN
       # ont une taille de 960 bits (approximativement 1Kbit) ; nous limitons donc
       # les SYNs entrants  3 par seconde (pas vraiment utile, mais sert 
       # montrer ce point -JHS
       ############################################################
       $TC filter add dev $INDEV parent ffff: protocol ip prio 50 handle 1 fw \
       police rate 1kbit burst 40 mtu 9k drop flowid :1
       ############################################################


       #
       echo "---- qdisc parameters Ingress  ----------"
       $TC qdisc ls dev $INDEV
       echo "---- Class parameters Ingress  ----------"
       $TC class ls dev $INDEV
       echo "---- filter parameters Ingress ----------"
       $TC filter ls dev $INDEV parent ffff:

       #supprime la file d'attente ingress
       #$TC qdisc del $INDEV ingress





  1144..33..  LLiimmiitteerr llee ddbbiitt IICCMMPP ppoouurr eemmppcchheerr lleess ddnniiss ddee sseerrvviiccee

  Rcemment, les attaques distribues de dni de service sont devenues
  une nuisance importante sur Internet. En filtrant proprement et en
  limitant le dbit de votre rseau, vous pouvez  la fois viter de
  devenir victime ou source de ces attaques.

  Vous devriez filtrer vos rseaux de telle sorte que vous n'autorisiez
  pas les paquets avec une adresse IP source non-locale  quitter votre
  rseau. Cela empche les utilisateurs d'envoyer de manire anonyme des
  cochonneries sur Internet.



  La limitation de dbit peut faire encore mieux, comme vu plus haut.
  Pour vous rafrachir la mmoire, revoici notre diagramme ASCII :



       [Internet] ---<E3, T3, n'importe quoi>--- [routeur Linux] --- [Bureau+FAI]
                                                eth1          eth0




  Nous allons d'abord configurer les parties prrequises :



       # tc qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000
       # tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 10Mbit rate \
         10Mbit allot 1514 prio 5 maxburst 20 avpkt 1000




  Si vous avez des interfaces de 100 Mbits ou plus, ajustez ces nombres.
  Maintenant, vous devez dterminer combien de trafic ICMP vous voulez
  autoriser. Vous pouvez raliser des mesures avec tcpdump, en crivant
  les rsultats dans un fichier pendant un moment, et regarder combien
  de paquets ICMP passent par votre rseau. Ne pas oublier d'augmenter
  la longueur du "snapshot".  Si la mesure n'est pas possible, vous
  pouvez consacrer par exemple 5% de votre bande passante disponible.
  Configurons notre classe :


       # tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 10Mbit rate \
         100Kbit allot 1514 weight 800Kbit prio 5 maxburst 20 avpkt 250 \
         bounded




  Cela limite le dbit  100 Kbits sur la classe. Maintenant, nous avons
  besoin d'un filtre pour assigner le trafic ICMP  cette classe :


       # tc filter add dev eth0 parent 10:0 protocol ip prio 100 u32 match ip
         protocol 1 0xFF flowid 10:100






  1144..44..  DDoonnnneerr llaa pprriioorriitt aauu ttrraaffiicc iinntteerraaccttiiff

  Si beaucoup de donnes arrivent  votre lien ou en partent, et que
  vous essayez de faire de la maintenance via telnet ou ssh, cela peut
  poser problme : d'autres paquets bloquent vos frappes clavier.  Cela
  ne serait-il pas mieux si vos paquets interactifs pouvaient se
  faufiler dans le trafic de masse ? Linux peut faire cela pour vous.

  Comme prcdemment, nous avons besoin de manipuler le trafic dans les
  deux sens. Evidemment, cela marche mieux s'il y a des machines Linux
  aux deux extrmits du lien, bien que d'autres UNIX soient capables de
  faire la mme chose.  Consultez votre gourou local Solaris/BSD pour
  cela.

  Le gestionnaire standard pfifo_fast a trois "bandes" diffrentes. Le
  trafic de la bande 0 est transmis en premier, le trafic des bandes 1
  et 2 tant trait aprs. Il est vital que votre trafic interactif soit
  dans la bande 0 !  Ce qui suit est adapt du (bientt obsolte)
  Ipchains-HOWTO :

  Il y a quatre bits rarement utiliss dans l'en-tte IP, appels bits
  de Type de Service (TOS). Ils affectent la manire dont les paquets
  sont traits. Les quatre bits sont "Dlai Minimum", "Dbit Maximum",
  "Fiabilit Maximum" et "Cot Minimum". Seul un de ces bits peut tre
  positionn. Rob van Nieuwkerk, l'auteur du code TOS-mangling dans
  ipchains, le configure comme suit :


       Le "Dlai Minimum" est particulirement important pour moi. Je le
       positionne  1 pour les paquets interactifs sur mon routeur (Linux)
       qui envoie le trafic vers l'extrieur. Je suis derrire un modem 
       33,6 Kbps. Linux rpartit les paquets dans trois files d'attente. De
       cette manire, j'obtiens des performances acceptables pour le trafic
       interactif tout en tlchargeant en mme temps.


  L'utilisation la plus commune est de configurer les connections telnet
  et ftp  "Dlai Minimum" et les donnes FTP  "Dbit Maximum". Cela
  serait fait comme suit, sur mon routeur :



       # iptables -A PREROUTING -t mangle -p tcp --sport telnet \
         -j TOS --set-tos Minimize-Delay
       # iptables -A PREROUTING -t mangle -p tcp --sport ftp \
         -j TOS --set-tos Minimize-Delay
       # iptables -A PREROUTING -t mangle -p tcp --sport ftp-data \
         -j TOS --set-tos Maximize-Throughput




  En fait, cela ne marche que pour les donnes venant d'un telnet
  extrieur vers votre ordinateur local. Dans l'autre sens, a se fait
  tout seul : telnet, ssh, et consorts configurent le champ TOS
  automatiquement pour les paquets sortants.

  Si vous avez un client incapable de le faire, vous pouvez toujours le
  faire avec netfilter. Sur votre machine locale :



       # iptables -A OUTPUT -t mangle -p tcp --dport telnet \
         -j TOS --set-tos Minimize-Delay
       # iptables -A OUTPUT -t mangle -p tcp --dport ftp \
         -j TOS --set-tos Minimize-Delay
       # iptables -A OUTPUT -t mangle -p tcp --dport ftp-data \
         -j TOS --set-tos Maximize-Throughput









  1155..  RRoouuttaaggee aavvaanncc ssuurr LLiinnuuxx

  Cette section est destine  tous les gens qui voudraient savoir
  comment fonctionne le systme complet ou qui ont une configuration si
  bizarre qu'ils ont besoin d'informations "bas niveau" pour le faire
  fonctionner.

  Cette section est compltement facultative. Il est tout  fait
  possible qu'elle soit trop  complexe et pas vraiment destine aux
  utilisateurs normaux. Vous avez t averti.

  FIXME: Dcider ce qui doit rellement tre ici.


  1155..11..  pprraattiiqquuee ??  CCoommmmeenntt llaa mmiissee eenn ffiillee dd''aatttteennttee ddeess ppaaqquueettss ffoonncc
  ttiioonnnnee--tt--eellllee eenn

  C'est la base du fonctionnement du systme de mise en file d'attente
  d'un paquet.

  Lister les tapes que le noyau ralise pour classifier un paquet, etc.

  FIXME:  crire.


  1155..22..  UUttiilliissaattiioonn aavvaannccee dduu ssyyssttmmee ddee mmiissee eenn ffiillee dd''aatttteennttee ddeess
  ppaaqquueettss

  Passer par l'exemple extrmement rus de Alexeys impliquant les bits
  inutiliss dans le champs TOS.

  FIXME:  crire.


  1155..33..  DD''aauuttrreess ssyyssttmmeess ddee mmiissee eenn ffoorrmmee ddeess ppaaqquueettss

  Je voudrais inclure une brve description sur les autres systmes de
  mise en forme des paquets dans d'autres systmes d'exploitation et les
  comparer  celui de Linux. Puisque Linux est l'un des rares OS qui ont
  une pile TCP/IP originale (non drive de BSD), je pense qu'il serait
  intressant de savoir comment les autres font cela.

  Malheureusement je n'ai aucune exprience sur d'autres systmes, aussi
  je ne peux pas l'crire.

  FIXME: Personne ? - Martijn



  1166..  RRoouuttaaggee DDyynnaammiiqquuee -- OOSSPPFF eett BBGGPP

  Si votre rseau commence  devenir vraiment gros, ou si vous commencez
   considrer Internet comme votre propre rseau, vous avez besoin
  d'outils qui routent dynamiquement vos donnes.  Les sites sont
  souvent relis entre eux par de multiples liens, et de nouveaux liens
  surgissent en permanence.

  L'Internet utilise la plupart du temps les standards OSPF et BGP4
  (rfc1771). Linux supporte les deux, par le biais de gated et zebra.

  Ce sujet est pour le moment hors du propos de ce document, mais
  laissez-nous vous diriger vers des travaux de rfrence :

  Vue d'ensemble :


  Cisco Systems Cisco Systems Designing large-scale IP internetworks
  <http://www.cisco.com/univercd/cc/td/doc/cisintwk/idg4/nd2003.htm>


  Pour OSPF :

  Moy, John T.  "OSPF.  The anatomy of an Internet routing protocol"
  Addison Wesley. Reading, MA. 1998.

  Halabi a aussi crit un trs bon guide sur la conception du routage
  OSPF, mais il semble avoir t effac du site Web de Cisco.


  Pour BGP :

  Halabi, Bassam "Internet routing architectures" Cisco Press (New
  Riders Publishing). Indianapolis, IN. 1997.

  Il existe aussi

  Cisco Systems

  Using the Border Gateway Protocol for Interdomain Routing
  <http://www.cisco.com/univercd/cc/td/doc/cisintwk/ics/icsbgp4.htm>

  Bien que les exemples soient spcifiques  Cisco, ils sont
  remarquablement semblables au langage de configuration de Zebra :-)



  1177..  LLeeccttuurreess ssuuppppllmmeennttaaiirreess



     hhttttpp::////ssnnaaffuu..ffrreeeeddoomm..oorrgg//lliinnuuxx22..22//iipprroouuttee--nnootteess..hhttmmll
        <<http://snafu.freedom.org/linux2.2/iproute-notes.html>
        Contient beaucoup d'informations techniques, et de commentaires
        sur le noyau.


     hhttttpp::////wwwwww..ddaavviinn..oottttaawwaa..oonn..ccaa//oollss//
        <<http://www.davin.ottawa.on.ca/ols/>
        Transparents de Jamal Hadi, un des auteurs du contrleur de
        trafic de Linux.


     hhttttpp::////ddeeffiiaanntt..ccooiinneett..ccoomm//iipprroouuttee22//iipp--ccrreeff// <<http://defi
        ant.coinet.com/iproute2/ip-cref/>
        Version HTML de la documentation LaTeX d'Alexeys ; explique une
        partie d'iproute2 en dtails.


     hhttttpp::////wwwwww..aacciirrii..oorrgg//ffllooyydd//ccbbqq..hhttmmll
        <<http://www.aciri.org/floyd/cbq.html>
        Sally Floyd a une bonne page sur CBQ, incluant ses publications
        originales. Aucune n'est spcifique  Linux, mais il y a un
        travail de discussion sur la thorie et l'utilisation de CBQ.
        Contenu trs technique, mais une bonne lecture pour ceux qui
        sont intresss.


     hhttttpp::////cceettii..ppll//~~eekkrraavviieettzz//ccbbqq//NNEETT44__ttcc..hhttmmll <<http://ceti.pl/~ekravi
        etz/cbq/NET4_tc.html>
        Un autre HOWTO, en polonais ! Vous pouvez cependant
        copier/coller les lignes de commandes, elles fonctionnent de la
        mme faon dans toutes les langues. L'auteur travaille en
        collaboration avec nous et sera peut tre bientt un auteur de
        sections de cet HOWTO.


     LLeess sseerrvviicceess ddiiffffrreenncciiss ssuurr LLiinnuuxx <<http://snafu.free
        dom.org/linux2.2/docs/draft-almesberger-wajhak-diffserv-
        linux-00.txt>
        Discussion sur l'utilisation de Linux dans un environnement
        compatible diffserv. Assez loin des besoins quotidiens de votre
        routeur, mais nanmoins trs intressant. Nous pourrons inclure
        une section sur le sujet, plus tard.


     IIOOSS CCoommmmiitttteedd AAcccceessss RRaattee <<http://www.cisco.com/uni
        vercd/cc/td/doc/product/software/ios111/cc111/car.htm>

        Des gens de Cisco qui ont pris la louable habitude de mettre
        leur documentation en ligne. La syntaxe de Cisco est diffrente
        mais les concepts sont identiques, sauf qu'on fait mieux, et
        sans matriel qui cote autant qu'une voiture :-)


     TTCCPP//IIPP IIlllluussttrraatteedd,, vvoolluummee 11,, WW.. RRiicchhaarrdd SStteevveennss,, IISSBBNN
        00--220011--6633334466--99
        Sa lecture est indispensable si vous voulez rellement
        comprendre TCP/IP, et de plus elle est divertissante.




  1188..  RReemmeerrcciieemmeennttss


  Notre but est de faire la liste de tous les personnes qui ont
  contribu  ce HOWTO, ou qui nous ont aids  expliquer le
  fonctionnement des choses.

  Alors qu'il n'existe pas de liste dans Netfilter, nous souhaitons
  saluer les personnes qui ont apport leur aide.


    Jamal Hadi <hadi%cyberus.ca>

    Nadeem Hasan <nhasan@usa.net>

    Jason Lunz <j@cc.gatech.edu>

    Alexey Mahotkin <alexm@formulabez.ru>

    Pawel Krawczyk <kravietz%alfa.ceti.pl>

    Wim van der Most

    Glen Turner <glen.turner%aarnet.edu.au>

    Song Wang <wsong@ece.uci.edu>










