Linux 2.4 Advanced Routing HOWTO
Netherlabs BV (bert hubert <
[email protected]>)
Gregory Maxwell <
[email protected]>
Remco van Mook <
[email protected]>
Martijn van Oosterhout <
[email protected]>
Paul B Schroeder <
[email protected]>
[email protected]
Traduction de Laurent Foucher <
[email protected]>,
Philippe Latu <
[email protected]> et Guillaume
All�gre <
[email protected]>
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 mati�res
1. D�dicace
2. Introduction
2.1 Conditions de distribution et Mise en garde
2.2 Connaissances pr�alables
2.3 Ce que Linux peut faire pour vous
2.4 Notes diverses
2.5 Acc�s, 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 Pr�requis
3.4 Explorer votre configuration courante
3.4.1 (TT
3.4.2 (TT
3.4.3 (TT
3.5 ARP
4. R�gles - bases de donn�es des politiques de routage
4.1 Routage simple par l'adresse source
5. GRE et autres tunnels
5.1 Quelques remarques g�n�rales � 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 s�curis� � travers l'Internet
7. Routage multi-diffusion (multicast)
8. Utilisation de la mise en file d'attente bas�e 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 Premi�re tentative de partage de bande passante
8.3 Que faire de la bande passante en exc�s ?
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 s�lecteur U32
11.2.2 S�lecteurs g�n�raux
11.2.3 Les s�lecteurs sp�cifiques
11.3 Le classificateur "route"
11.4 Le classificateur "rsvp"
11.5 Le classificateur "tcindex"
12. Param�tres r�seau du noyau
12.1 Filtrage du Chemin Inverse (Reverse Path Filtering)
12.2 Configurations obscures
12.2.1 ipv4 g�n�rique
12.2.2 Configuration p�riph�rique par p�riph�rique
12.2.3 Politique de voisinage
12.2.4 Configuration du routage
13. Application du contr�le 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 diff�rentes SLA (autorisations)
14.2 Prot�ger votre machine des inondations SYN floods
14.3 Limiter le d�bit ICMP pour emp�cher les d�nis 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 avanc�e du syst�me de mise en file d'attente des paquets
15.3 D'autres syst�mes de mise en forme des paquets
16. Routage Dynamique - OSPF et BGP
17. Lectures suppl�mentaires
18. Remerciements
______________________________________________________________________
11.. DD��ddiiccaaccee
Ce document est d�di� � 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
22.. IInnttrroodduuccttiioonn
Bienvenue, cher lecteur.
Ce document a pour but de vous �clairer sur la mani�re de faire du
routage avanc� avec Linux 2.2/2.4. M�connus 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'esp�re que cet HOWTO deviendra aussi lisible que le tr�s r�put�
Netfilter, de Rusty Russel.
Vous pouvez nous contacter en nous �crivant � �quipe HOWTO
<mailto:
[email protected]>.
22..11.. CCoonnddiittiioonnss ddee ddiissttrriibbuuttiioonn eett MMiissee eenn ggaarrddee
Ce document est distribu� avec l'espoir qu'il sera utile et utilis�.
Sauf mention contraire, les documents Linux HOWTO sont la propri�t� de
leurs auteurs respectifs. Les documents Linux HOWTO peuvent �tre
reproduits et distribu�s en totalit� ou en partie, sur tout support
physique ou �lectronique, tant que cette notice de droit d'auteur est
pr�sente sur chaque copie. La redistribution commerciale est autoris�e
et encourag�e ; n�ammoins, l'auteur souhaite �tre inform� de toute
distribution de ce genre. Toute traduction, travail d�riv�, ou
agr�gat incorporant tout ou partie d'un ou plusieurs documents Linux
HOWTO doit �tre couvert par ce m�me droit d'auteur. Ce qui veut dire
que vous ne pouvez produire un travail d�riv� d'un HOWTO et imposer
des restrictions suppl�mentaires concernant sa distribution.
En un mot, si votre dorsale STM-64 est tomb�e ou distribue de la
pornographie � vos estim�s clients, cela n'est pas de notre faute.
D�sol�.
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 cr�er un travail d�riv� et le distribuer � condition :
1. d'envoyer votre travail d�riv� (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 d�riv� soit la m�me, ou utilisez la
GPL. Incluez une notification du copyright et, au moins, un
pointeur vers la licence utilis�e ;
3. de cr�diter pour leur travail les auteurs pr�c�dents et les
principaux contributeurs.
Si vous envisagez un travail d�riv� 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" :-)
22..22.. CCoonnnnaaiissssaanncceess pprr��aallaabblleess
Comme le titre l'implique, ceci est un HOWTO "avanc�". Bien qu'il ne
soit pas besoin d'�tre un expert r�seau, certains pr�requis sont
n�cessaires. Ce document se veut la suite du Linux 2.4 Networking
HOWTO <
http://www.ds9a.nl/2.4Networking/> par les m�me auteurs. Vous
devriez probablement le lire en premier.
Voici d'autres r�f�rences qui pourront vous aider � en apprendre
plus :
RRuussttyy RRuusssseellss nneettwwoorrkkiinngg--ccoonncceeppttss--HHOOWWTTOO <<
http://netfilter.kernel�
notes.org/unreliable-guides/networking-concepts-HOWTO.html>
Tr�s bonne introduction, expliquant ce qu'est un r�seau, et
comment on le connecte � d'autres r�seaux.
LLiinnuuxx NNeettwwoorrkkiinngg--HHOOWWTTOO ((eexx NNeett--33 HHOOWWTTOO))
Excellent document, bien que tr�s bavard. Il vous apprendra
beaucoup de choses qui sont d�j� configur�es 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>
22..33.. CCee qquuee LLiinnuuxx ppeeuutt ffaaiirree ppoouurr vvoouuss
Une petite liste des choses qui sont possibles :
� Ma�triser la bande passante pour certains ordinateurs
� Ma�triser la bande passante vers certains ordinateurs
� Vous aider � partager �quitablement votre bande passante
� Prot�ger votre r�seau des attaques de type D�ni de Service
� Prot�ger le r�seau local des acc�s de vos clients
� Multiplexer plusieurs serveurs en un seul, pour l'�quilibrage de
charge, ou une disponibilit� am�lior�e
� Restreindre l'acc�s � vos ordinateurs
� Limiter l'acc�s de vos utilisateurs vers d'autres h�tes
� 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 fonctionnalit�s avanc�es. Il
y a plusieurs raisons � cela. Bien que la documentation soit fournie,
la prise en main est difficile. Les commandes de contr�le du trafic
ne sont pratiquement pas document�es.
22..44.. NNootteess ddiivveerrsseess
Il y a plusieurs choses qui doivent �tre not�es 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'h�sitez pas � m'avertir des coquilles ou
d'erreurs pures et simples. Si mon anglais vous para�t parfois peu
naturel, ayez en t�te, s'il vous pla�t, que l'anglais n'est pas ma
langue natale. N'h�sitez 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 tr�s attention. Si vous avez valid� quelque chose,
faites-le nous savoir, ce qui nous permettra de retirer la mention
FIXME.
Je prendrai quelques libert�s tout au long de cet HOWTO. Par exemple,
je pars de l'hypoth�se d'une connexion Internet � 10 Mbits, bien que
je sache tr�s bien que cela n'est pas vraiment courant.
22..55.. AAcccc��ss,, CCVVSS eett pprrooppoossiittiioonnss ddee mmiisseess �� jjoouurr
L'adresse canonique de cet HOWTO est Ici
<
http://www.ds9a.nl/2.4Routing>.
Nous avons maintenant un CVS en acc�s anonyme disponible depuis le
monde entier. Cela est int�ressant pour plusieurs raisons. Vous pouvez
facilement t�l�charger les nouvelles versions de ce HOWTO et soumettre
des patches. En outre, cela permet aux auteurs de travailler sur le
source de facon ind�pendante, ce qui est une bonne chose aussi.
$ export CVSROOT=:pserver:
[email protected]:/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 rep�rez une erreur, ou voulez ajouter quelque chose, faites le
en local, ex�cutez cvs diff -u, et envoyez-nous le r�sultat.
Un fichier Makefile est fourni pour vous aider � cr�er 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.
22..66.. PPllaann dduu ddooccuummeenntt
Nous allons essayer de faire des manipulations int�ressantes d�s le
d�but, ce qui veut dire que tout ne sera pas expliqu� en d�tail tout
de suite. Veuillez passer sur ces d�tails, et accepter de consid�rer
qu'ils deviendront clairs par la suite.
Le routage et le filtrage sont deux choses distinctes. Le filtrage
est tr�s 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.
33.. IInnttrroodduuccttiioonn �� iipprroouuttee22
33..11.. PPoouurrqquuooii iipprroouuttee22 ??
La plupart des distributions Linux et des UNIX utilisent couramment
les v�n�rables commandes "arp", "ifconfig" et "route". Bien que ces
outils fonctionnent, ils montrent quelques comportements inattendus
avec les noyaux Linux des s�ries 2.2 et plus. Par exemple, les
tunnels GRE font partie int�grante du routage de nos jours, mais ils
n�cessitent des outils compl�tement diff�rents.
Avec iproute2, les tunnels font partie int�grante des outils.
Les noyaux Linux des s�ries 2.2 et plus ont un sous-syst�me r�seau
compl�tement r��crit. Ce nouveau codage de la partie r�seau apporte �
Linux des performances et des fonctionnalit�s qui n'ont pratiquement
pas d'�quivalent dans les autres syst�mes d'exploitation. En fait, le
nouveau logiciel de filtrage, routage et de classification poss�de
plus de fonctionnalit�s que les logiciels fournis sur beaucoup de
routeurs d�di�s, de pare-feux et de produits de mise en forme
(shaping) du trafic.
Dans les syst�mes d'exploitation existants, au fur et � mesure que de
nouveaux concepts r�seau apparaissaient, les d�veloppeurs sont
parvenus � les greffer sur les structures existantes. Ce travail
constant d'empilage de couches a conduit � des codes r�seau 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'id�al.
La nouvelle structure d'iproute2 a permis de formuler clairement des
fonctionnalit�s impossibles � implanter dans le sous-syst�me r�seau
pr�c�dent.
33..22.. UUnn ttoouurr dd''hhoorriizzoonn dd''IIpprroouuttee22
Linux poss�de un syst�me sophistiqu� d'allocation de bande passante
appel� Contr�le de trafic (Traffic Control). Ce syst�me supporte
diff�rentes m�thodes pour classer, ranger par ordre de priorit�,
partager et limiter le trafic entrant et sortant.
Nous commencerons par un petit tour d'horizon des possibilit�s
d'iproute2.
33..33.. PPrr��rreeqquuiiss
Vous devez �tre s�r 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 �l�ments
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 derni�re version.
33..44.. EExxpplloorreerr vvoottrree ccoonnffiigguurraattiioonn ccoouurraannttee
Cela peut vous para�tre surprenant, mais iproute2 est d�j� configur� !
Les commandes courantes ifconfig et route utilisent d�j� les appels
syst�me avanc�s d'iproute2, mais essentiellement avec les options par
d�faut (c'est-�-dire ennuyeuses).
L'outil ip est central, et nous allons lui demander de nous montrer
les interfaces.
33..44..11.. iipp nnoouuss mmoonnttrree nnooss lliieennss
[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 premi�re interface que nous voyons est l'interface loopback. Bien
que votre ordinateur puisse fonctionner sans, je vous le d�conseille.
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 pr�sente sur votre ordinateur. Il y a ensuite mes
deux interfaces r�seau, l'une du c�t� de mon modem c�ble, l'autre
servant mon segment ethernet � la maison. De plus, nous voyons une
interface ppp0.
Notons l'absence d'adresses IP. Iproute d�connecte les concepts de
"liens" et "d'adresses IP". Avec l'IP aliasing, le concept de
l'adresse IP canonique est devenu, de toute fa�on, sans signification.
ip nous montre bien, cependant, l'adresse MAC, l'identifiant mat�riel
de nos interfaces ethernet.
33..44..22.. iipp nnoouuss mmoonnttrree nnooss aaddrreesssseess IIPP
[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" d�signe Internet. Il y a
beaucoup d'autres familles d'adresses, mais elles ne nous concernent
pas pour le moment.
Examinons eth0 de plus pr�s. Il est dit qu'il est reli� � l'adresse
internet "10.0.0.1/8". Qu'est-ce que cela signifie ? Le /8 d�signe le
nombre de bits r�serv�s � l'adresse r�seau. Il y a 32 bits, donc il
reste 24 bits pour d�signer une partie de notre r�seau. Les 8
premiers bits de 10.0.0.1 correspondent � 10.0.0.0, notre adresse
r�seau, et notre masque de sous-r�seau est 255.0.0.0.
Les autres bits rep�rent des machines directement connect�es � 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 m�me concept existe, bien que les nombres soient
diff�rents. Son adresse est 212.64.94.251, sans masque de sous-
r�seau. 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 c�t� du lien, il n'y a encore qu'une seule adresse,
212.64.94.1. Le /32 nous pr�cise qu'il n'y a pas de "bits r�seau".
Il est absolument vital que vous compreniez ces concepts. R�f�rez-vous
� la documentation mentionn�e au d�but de cet HOWTO si vous avez des
doutes.
Vous pouvez aussi noter "qdisc", qui d�signe la "Queueing Discipline"
(gestion de la mise en file d'attente). Cela deviendra vital plus
tard.
33..44..33.. iipp nnoouuss mmoonnttrree nnooss rroouutteess
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 pr�t � propager nos paquets � travers le
monde, et � nous renvoyer le r�sultat.
[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-m�me. Les 4 premi�res lignes donnent
explicitement ce qui �tait sous-entendu par ip address show, la
derni�re ligne nous indiquant que le reste du monde peut �tre trouv�
via 212.64.94.1, notre passerelle par d�faut. 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 r�f�rence, 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
33..55.. AARRPP
ARP est le Protocole de R�solution d'Adresse (Address Resolution
Protocol). Il est d�crit dans le RFC 826
<
http://www.faqs.org/rfcs/rfc826.html>. ARP est utilis� par une
machine d'un r�seau local pour retrouver l'adresse mat�rielle (la
localisation) d'une autre machine sur le m�me r�seau. Les machines
sur Internet sont g�n�ralement connues par leur nom auquel correspond
une adresse IP. C'est ainsi qu'une machine sur le r�seau foo.com est
capable de communiquer avec une autre machine qui est sur le r�seau
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 tr�s simple. Supposons que j'aie un r�seau 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 d�cide
d'envoyer un "ping" vers bar, il a besoin d'envoyer une requ�te ARP.
Cette requ�te ARP est une fa�on pour foo de crier sur le r�seau "Bar
(10.0.0.2) ! O� es-tu ?". Par cons�quent, toutes les machines sur le
r�seau entendront foo crier, mais seul bar (10.0.0.2) r�pondra. Bar
enverra une r�ponse ARP directement � foo ; ce qui revient � dire :
"Foo (10.0.0.1) ! je suis ici, � l'adresse 00:60:94:E:08:12". Apr�s
cette simple transaction utilis�e pour localiser son ami sur le
r�seau, 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 cons�quent, lorsque espa041 a essay� de contacter espa043,
l'adresse mat�rielle de espa043 (sa localisation) a alors �t� ajout�e
dans le cache ARP. Donc, tant que la dur�e de vie de l'entr�e
correspondant � espa043 dans le cache ARP n'est pas d�pass�e, espa041
sait localiser espa043 et n'a plus besoin d'envoyer de requ�te ARP.
Maintenant, effa�ons 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 requ�te 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
confirm�e � la premi�re transaction avec cette machine.
44.. RR��gglleess -- bbaasseess ddee ddoonnnn��eess ddeess ppoolliittiiqquueess ddee rroouuttaaggee
Si vous avez un routeur important, il se peut que vous vouliez
satisfaire les besoins de diff�rentes personnes, qui peuvent �tre
trait�es diff�remment. Les bases de donn�es des politiques de routage
vous aident � faire cela, en g�rant 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 d�cision de routage, il recherche
quelle table consulter. Par d�faut, il y a trois tables. L'ancien
outil route modifie les tables "main" (principale) et "local"
(locale), comme le fait l'outil ip (par d�faut).
Les r�gles par d�faut :
[ahu@home ahu]$ ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Cela liste les r�gles, accompagn�es de leurs priorit�s. Nous voyons
que toutes les r�gles sont appliqu�es � tous les paquets ("from all").
Nous avons vu la table "main" pr�c�demment, 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 cr�er des
r�gles qui pointent vers des tables diff�rentes et qui nous permettent
de red�finir les r�gles de routage du syst�me.
Pour savoir exactement ce que fait le noyau en pr�sence d'un
assortiment de r�gles plus complet, r�f�rez-vous � la documentation
ip-cref d'Alexey [NdT : dans le paquet iproute de votre distribution].
44..11.. RRoouuttaaggee ssiimmppllee ppaarr ll''aaddrreessssee ssoouurrccee
Prenons encore une fois un exemple r�el. J'ai 2 modems c�ble,
connect�s � un routeur Linux NAT ("masquerading"). Les personnes
habitant avec moi me paient pour avoir acc�s � 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 c�ble "rapide" est connu sous 212.64.94.251 et est en liaison
PPP avec 212.64.94.1. Le modem c�ble "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 pr�cis�es quelque peu, ce que nous allons faire. La
table de routage par d�faut 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 g�n�rons une nouvelle r�gle que nous appellerons
"John", pour notre hypoth�tique 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 g�n�rer 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.
55.. GGRREE eett aauuttrreess ttuunnnneellss
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).
55..11.. QQuueellqquueess rreemmaarrqquueess gg��nn��rraalleess �� pprrooppooss ddeess ttuunnnneellss ::
Les tunnels peuvent faire des choses tr�s inhabituelles et vraiment
sympa. Ils peuvent aussi absolument tout d�traquer si vous ne les
avez pas configur�s correctement. Ne d�finissez pas votre route par
d�faut sur un tunnel, � moins que vous ne sachiez eexxaacctteemmeenntt ce que
vous faites.
De plus, le passage par un tunnel augmente le poids des en-t�tes
(overhead), puisqu'un en-t�te IP suppl�mentaire est n�cessaire.
Typiquement, ce surco�t est de 20 octets par paquet. Donc, si la
taille maximum de votre paquet sur votre r�seau (MTU) est de 1500
octets, un paquet qui est envoy� � travers un tunnel sera limit� � une
taille de 1480 octets. Cela n'est pas n�cessairement un probl�me,
mais soyez s�r d'avoir bien �tudi� la fragmentation et le r�assemblage
des paquets IP quand vous pr�voyez de relier des r�seaux de grande
taille par des tunnels. Et bien s�r, la mani�re la plus rapide de
creuser un tunnel est de creuser des deux c�t�s.
55..22.. IIPP ddaannss uunn ttuunnnneell IIPP
Ce type de tunnel est disponible dans Linux depuis un long moment. Il
n�cessite deux modules, ipip.o et new_tunnel.o.
Disons que vous avez trois r�seaux : 2 r�seaux internes A et B, et un
r�seau interm�diaire C (ou disons Internet). Les caract�ristiques du
r�seau A sont :
r�seau 10.0.1.0
masque de sous-r�seau 255.255.255.0
routeur 10.0.1.1
Le routeur a l'adresse 172.16.17.18 sur le r�seau C.
et le r�seau B :
r�seau 10.0.2.0
masque de sous-r�seau 255.255.255.0
routeur 10.0.2.1
Le routeur a l'adresse 172.19.20.21 sur le r�seau C.
En ce qui concerne le r�seau 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 :
Premi�rement, assurez-vous que les modules sont install�s :
insmod ipip.o
insmod new_tunnel.o
Ensuite, sur le routeur du r�seau 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 r�seau 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 r�seaux IPv4 qui, normalement, ne
seraient pas capables de se "parler", c'est tout. Dans la mesure o�
la compatibilit� a �t� conserv�e, 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 syst�mes d'exploitation ou
routeurs, pour autant que je sache. C'est simple, �a marche. Utilisez-
le si vous le pouvez, autrement utilisez GRE.
55..33.. LLee ttuunnnneell GGRREE
GRE est un protocole de tunnel qui a �t� � l'origine d�velopp� par
Cisco, et qui peut r�aliser 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.
55..33..11.. LLee ttuunnnneell IIPPvv44
Dans un premier temps, int�ressons-nous au tunnel IPv4 :
Disons que vous avez trois r�seaux : 2 r�seaux internes A et B, et un
r�seau interm�diaire C (ou disons Internet).
Les caract�ristiques du r�seau A sont :
r�seau 10.0.1.0
masque de sous-r�seau 255.255.255.0
routeur 10.0.1.1
Le routeur a l'adresse 172.16.17.18 sur le r�seau C. Appelons ce
r�seau neta.
Et pour le r�seau B :
r�seau 10.0.2.0
masque de sous-r�seau 255.255.255.0
routeur 10.0.2.1
Le routeur a l'adresse 172.19.20.21 sur le r�seau C. Appelons ce
r�seau netb.
En ce qui concerne le r�seau 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 r�seau 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
p�riph�rique 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 "tunnel�s" devront �tre g�n�r�s � partir de 172.16.17.18 (ce
qui autorise votre serveur � avoir plusieurs adresses IP sur le r�seau
C et ainsi vous permet de choisir laquelle sera utilis�e pour votre
tunnel) et que le champ TTL de vos paquets sera fix� � 255 (ttl 255).
Sur la deuxi�me ligne, nous avons donn� � cette nouvelle interface
l'adresse 10.0.1.1. C'est bon pour de petits r�seaux, mais quand vous
commencez une exploitation mini�re (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 troisi�me ligne, nous positionnons une route pour le r�seau B.
Notez la notation diff�rente pour le masque de sous-r�seau. Si vous
n'�tes pas familiaris� avec cette notation, voici comment �a marche :
vous �crivez le masque de sous-r�seau 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 int�resserait.
Mais arr�tons ici, et continuons avec le routeur du r�seau 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 s�r, vous pouvez remplacer netb par neta pour le routeur B.
55..33..22.. LLee ttuunnnneell IIPPvv66
BON GROS AVERTISSEMENT !
Ce qui suit n'est pas test�. Vous op�rez � vos risques et p�rils. Ne
dites pas que je ne vous avais pas pr�venu.
FIXME: v�rifier 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 r�gles :
� Ne pas utiliser les z�ros de t�te, comme dans IPv4 ;
� Utiliser des double-points de s�paration tous les 16 bits (2
octets) ;
� Quand vous avez beaucoup de z�ros cons�cutifs, 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 r�gles, 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 r�seau IPv6 suivant, et que vous vouliez le
connecter � une dorsale IPv6 (6bone), ou � un ami.
R�seau 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 pr�s. Sur la premi�re ligne, nous avons cr�� un
p�riph�rique 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 p�riph�rique actif (up). Puis, nous
avons ajout� notre propre adresse r�seau et configur� une route pour
3ffe::/15 � travers le tunnel.
Les tunnels GRE constituent actuellement le type pr�f�r� de tunnel.
C'est un standard qui est largement adopt�, m�me � l'ext�rieur de la
communaut� Linux, ce qui constitue une bonne raison de l'utiliser.
55..44.. TTuunnnneellss ddaannss ll''eessppaaccee uuttiilliissaatteeuurr
Il y a des dizaines d'impl�mentations de tunnels � l'ext�rieur du
noyau. Les plus connus sont bien s�r PPP et PPTP, mais il y en a bien
plus (certains propri�taires, certains s�curis�s, d'autres qui
n'utilisent pas IP), qui d�passent le cadre de cet HOWTO.
66.. IIPPsseecc :: IIPP ss��ccuurriiss�� �� ttrraavveerrss ll''IInntteerrnneett
FIXME: Attendre notre r�dacteur vedette Stefan pour finir cette
partie.
77.. RRoouuttaaggee mmuullttii--ddiiffffuussiioonn ((mmuullttiiccaasstt))
FIXME: Pas de r�dacteur !
88.. UUttiilliissaattiioonn ddee llaa mmiissee eenn ffiillee dd''aatttteennttee bbaass��ee ssuurr ddeess ccllaasssseess
((""CCllaassss BBaasseedd QQuueeuueeiinngg"")) ppoouurr llaa ggeessttiioonn ddee llaa bbaannddee ppaassssaannttee
Quand je l'ai d�couvert, cela m'a vraiment "souffl�". Linux 2.2
contient toutes les fonctionnalit�s pour la gestion de la bande
passante, de mani�re comparable � un syst�me d�di� de haut niveau.
Linux d�passe m�me ce que l'ATM et le Frame peuvent fournir.
Les deux unit�s de base du Contr�le 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 d�cident 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 s�lectionner le
trafic, et le second vous permet de s�lectionner ce trafic � partir de
N'IMPORTE QUEL en-t�te. La file d'attente la plus connue est la Class
Based Queue (File d'attente bas�e sur des classes). CBQ est une super-
file d'attente, qui peut contenir d'autres files d'attente (m�me
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 r�f�rence de cette section, j'ai pris l'exemple d'un
fournisseur d'acc�s chez qui j'ai appris les ficelles du m�tier, pour
ne pas le citer : Casema Internet en Hollande. Casema, qui est
actuellement un c�ble-op�rateur, a des besoins internet pour ses
clients et pour son propre compte. La plupart des ordinateurs de la
soci�t� ont un acc�s Internet. En r�alit�, ils ont beaucoup d'argent �
d�penser et n'utilisent pas Linux pour la gestion de la bande
passante.
Nous �tudierons comment notre fournisseur d'acc�s aurait pu utiliser
Linux pour g�rer sa bande passante.
88..11.. QQuu''eesstt--ccee qquuee llaa mmiissee eenn ffiillee dd''aatttteennttee ??
Avec la mise en file d'attente, nous d�terminons l'ordre dans lequel
les donn�es sont envoy�es. Il est important de le comprendre, nous ne
pouvons que mettre en forme les donn�es que nous transmettons. Comment
ce changement de priorir� d�termine-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'ins�rer 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 mani�re dont Internet travaille, nous n'avons pas de contr�le
direct de ce que les personnes nous envoient. C'est un peu comme votre
bo�te aux lettres (physique !) chez vous. Il n'y a pas de fa�on
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 poss�de
quelques fonctionnalit�s qui vont pouvoir nous aider. TCP/IP n'a pas
d'aptitude � conna�tre les performances d'un r�seau entre deux h�tes.
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
esp�rant que vos correspondants arr�teront de vous en envoyer. � la
diff�rence du courrier, �a marche sur l'Internet :-)
FIXME: expliquer comment, normalement, les acquittements (ACKs) sont
utilis�s pour d�terminer 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-r�seau qui contient � la fois le pare-feu
de la soci�t� et notre �quipement de t�te, � 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 r�gles s�par�s, mais tr�s
similaires. En modifiant la mise en file d'attente sur eth0, nous
d�terminons � quelle vitesse les donn�es re�ues sont envoy�es � nos
clients. On d�termine ainsi la bande passante descendante disponible
vers eux, en r�sum�, leur "vitesse de t�l�chargement".
Sur eth1, nous d�terminons � quelle vitesse nous envoyons les donn�es
sur Internet, � quelle vitesse nos utilisateurs, � la fois ceux de la
soci�t� et les clients, peuvent �mettre les donn�es.
88..22.. PPrreemmii��rree tteennttaattiivvee ddee ppaarrttaaggee ddee bbaannddee ppaassssaannttee
CBQ nous permet de cr�er plusieurs classes, et m�me des classes
incluses dans d'autres classes. Les divisions les plus larges peuvent
�tre appel�es 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 partag�e par nos clients et les besoins de la soci�t�.
Nous ne devons pas permettre � quelques personnes de la soci�t� de
monopoliser un gros volume de bande passante, qui devrait �tre vendue
� nos clients.
D'un autre c�t�, nos clients ne doivent pas pouvoir grignoter le
trafic r�serv� � nos bureaux.
Avant, une mani�re de r�soudre cela �tait d'utiliser le Frame
relay/ATM et de cr�er des circuits virtuels. Cela fonctionne, mais les
r�seaux Frame Relay ne sont pas suffisament maill�s et ATM est
terriblement inefficace dans le transport du trafic IP. Ni l'un ni
l'autre ne poss�de de moyens standardis�s pour distribuer le trafic
sur diff�rents circuits virtuels (VC).
Cependant, si vous utilisez ATM, Linux peut habilement r�aliser des
t�ches de classification de trafic pour vous. Une autre mani�re de
proc�der consiste � commander plusieurs connexions s�par�es mais ce
n'est ni pratique ni �l�gant et �a ne r�soudra pas tous vos probl�mes.
CBQ � la rescousse !
Clairement, nous avons ici deux classes principales, "ISP" et
"Office". Au d�part, on ne se pr�occupe pas vraiment de ce que les
divisions font de leur bande passante, et donc, nous ne subdiviserons
pas plus loin leurs classes.
Nous d�cidons que les clients devront toujours avoir 8 Mbits de trafic
descendant garanti, et nos bureaux 2 Mbits.
La configuration du contr�le 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 r�f�rence (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-v�rifier avec Alexey que le calcul de la cellule int�gr�e
est suffisant.
FIXME: Avec un MTU de 1500, la cellule par d�faut est calcul�e de la
m�me fa�on que dans l'ancien exemple.
FIXME: J'ai v�rifi� les sources (espaces utilisateur et noyau), on
doit pouvoir l'omettre sans probl�me.
Maintenant, nous devons g�n�rer 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 � g�rer - l'impl�mentation CBQ dans Linux est tr�s
g�n�rique. Avec "parent 10:0", nous indiquons que cette classe descend
de la file d'attente racine g�n�r�e plus t�t, et r�f�renc�e par "10:".
Avec "classid 10:1", nous baptisons cette nouvelle classe.
Nous ne disons vraiment rien de plus au noyau. Nous g�n�rons
simplement une classe qui englobe toute la bande passante disponible
sur l'interface. Nous avons aussi sp�cifi� que le MTU (plus l'en-
t�te) est de 1514 octets. Nous appliquons une pond�ration � cette
classe avec un param�tre de r�glage de 1 Mbit.
Maintenant, nous cr�ons 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
d�passer cette limite par l'ajout du param�tre "bounded". Autrement,
elle aurait commenc� � emprunter de la bande passante aux autres
classes. De plus, cette classe pourra pr�ter sa bande passante �
d'autres classes. Nous en discuterons plus tard.
Pour finir, nous g�n�rons 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 g�rer les files d'attente. Nous le faisons �
pr�sent, 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 n�cessitent 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
int�ressantes 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 soci�t� (classe Office) est cach�e derri�re
un pare-feu avec l'adresse IP 150.151.23.24 et que toutes nos autres
adresses IP devront �tre consid�r�es comme faisant partie de la classe
ISP.
La classificateur u32 est un mod�le tr�s simple ; des r�gles de
classification plus sophistiqu�es 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 m�me chose avec le flux
montant. Pour abr�ger, 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
88..33.. QQuuee ffaaiirree ddee llaa bbaannddee ppaassssaannttee eenn eexxcc��ss ??
Dans notre exemple, il se trouve que m�me si les clients du
fournisseur d'acc�s ne sont pas en majorit� connect�s (disons 8 heures
du matin), nos bureaux n'ont toujours que 2 Mbits, ce qui est un peu
du gaspillage.
En enlevant le param�tre "bounded", les classes pourront se pr�ter de
la bande passante les unes aux autres.
Il se peut que des classes ne souhaitent pas pr�ter leur bande
passante � d'autres. Deux fournisseurs d'acc�s rivaux sur un m�me 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".
88..44.. SSuubbddiivviissiioonnss ddee ccllaasssseess
FIXME: suppositions qui n'ont pas du tout �t� test�es ! Les essayer
!
Nous pouvons aller plus loin. Supposons que tous les employ�s d�cident
de lancer leur client "napster", il est toujours possible que notre
base de donn�es de routage d�passe la capacit� de bande passante. Pour
ce cas de figure, nous cr�ons deux sous-classes, "Human" et
"Database".
Notre base de donn�es a toujours besoin de 500 Kbits, il nous reste
donc 1,5 Mbits pour la consommation de la classe "Human".
Nous devons donc cr�er deux nouvelles classes � l'int�rieur 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!
88..55.. ��qquuiilliibbrraaggee ddee cchhaarrggee ssuurr pplluussiieeuurrss iinntteerrffaacceess
FIXME: document TEQL
99.. DD''aauuttrreess ggeessttiioonnnnaaiirreess ddee mmiissee eenn ffiillee dd''aatttteennttee ((qquueeuueeiinngg ddiissccii��
pplliinneess))
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 d�faut. Cela explique aussi pourquoi ces
fonctionnalit�s avanc�es sont si robustes. Un autre mod�le de file
d'attente ne co�te rien en d�veloppement.
Chacune de ces files d'attente a ses forces et ses faiblesses. Toutes
n'ont peut-�tre pas �t� bien test�es.
99..11.. ppffiiffoo__ffaasstt
Cette file d'attente, comme son nom l'indique (fifo = premier entr�,
premier sorti), signifie qu'il n'y a pas de traitement sp�cial pour
les paquets re�us. En fait, ce n'est pas tout � fait vrai. Cette file
d'attente a trois "bandes". � l'int�rieur de chacune de ces bandes,
la r�gle FIFO est appliqu�e. Cependant, tant qu'il y a un paquet en
attente dans la "bande" 0, la "bande" 1 ne sera pas trait�e. Il en va
de m�me pour la "bande" 1 et la "bande" 2.
99..22.. SSttoocchhaassttiicc FFaaiirrnneessss QQuueeuueeiinngg
SFQ, comme dit pr�c�demment, n'est pas vraiment d�terministe, mais
marche (en moyenne). Ses principaux avantages sont qu'elle a besoin de
peu de CPU et de m�moire. Une v�ritable mise en file d'attente
�quitable n�cessite que le noyau garde une trace de toutes les
sessions courantes.
Stochastic Fairness Queueing (SFQ) est une impl�mentation simple de la
famille des algorithmes de mise en file d'attente �quitable. Cette
impl�mentation est moins pr�cise, mais n�cessite 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
s�quence de paquets de donn�es ayant suffisamment de param�tres
communs pour les distinguer des autres conversations. Les param�tres
utilis�s dans le cas de paquets IP sont les adresses de source et de
destination, ainsi que le num�ro 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 r�put� �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 g�n�ral, 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 donn�es,
transmis en continu, comme un transfert FTP, par opposition � un flux
interactif, comme celui g�n�r� par des requ�tes HTTP].
99..33.. TTookkeenn BBuucckkeett FFiilltteerr
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 fix�es administrativement. Il est possible de placer
en m�moire tampon de courtes rafales de donn�es.
L'impl�mentation TBF consiste en un tampon (seau), constamment rempli
par des morceaux d'informations virtuelles appel�s jetons, avec un
d�bit sp�cifique (d�bit de jeton). Le param�tre 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 donn�es 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 donn�es, nous donne
trois sc�narios possibles :
� Les donn�es arrivent dans TBF avec un d�bit _�_g_a_l au d�bit des
jetons entrants. Dans ce cas, chaque paquet entrant a son jeton
correspodant et passe la file d'attente sans d�lai.
� Les donn�es arrivent dans TBF avec un d�bit _p_l_u_s _p_e_t_i_t que le d�bit
des jetons. Seuls quelques jetons sont supprim�s quand les paquets
de donn�es sortent de la file d'attente. Les jetons s'accumulent
donc jusqu'� atteindre la taille du tampon. Les jetons en r�serve
peuvent �tre utilis�s pour envoyer des donn�es avec un d�bit
sup�rieur au d�bit des jetons, si de courtes rafales de donn�es
arrivent.
� Les donn�es arrivent dans TBF avec un d�bit _p_l_u_s _g_r_a_n_d que le d�bit
des jetons. Dans ce cas, un d�passement de filtre a lieu. Les
donn�es entrantes peuvent �tre envoy�es sans perte jusqu'� ce que
les jetons accumul�s soient utilis�s. Apr�s, les paquets au-dessus
de la limite sont �limin�s.
Le dernier sc�nario est tr�s important, parce qu'il autorise la mise
en forme administrative de la bande passante disponible pour les
donn�es traversant le filtre. L'accumulation de jetons autorise
l'�mission de courtes rafales de donn�es sans perte, mais toute
surcharge restante causera la perte syst�matique des paquets.
Le noyau Linux semble aller au-del� de cette sp�cification, et nous
autorise aussi � limiter la vitesse de la transmission par rafales.
Cependant, Alexey nous avertit :
Noter que le d�bit de pointe de TBF est beaucoup plus coriace : avec
un MTU � 1500, P_crit = 150 Koctets/s. Donc, si vous avez besoin d'un
d�bit 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 fr�quence
99..44.. RRaannddoomm EEaarrllyy DDeetteecctt
RED comporte quelques finesses suppl�mentaires. Quand une session
TCP/IP d�marre, on ne conna�t 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 r�side dans le fait que RED simule la congestion
r�elle, et commence parfois � �liminer des paquets avant que le lien
ne soit compl�tement satur�. Une fois que le lien est compl�tement
satur�, il se comporte comme un contr�leur normal.
Pour plus d'informations sur le sujet, voir le chapitre Dorsale.
99..55.. IInnggrreessss ppoolliicceerr qqddiisscc
Ingress qdisc sert si vous avez besoin de limiter le d�bit d'un h�te
sans l'aide de routeurs ou d'autres machines Linux. Vous pouvez g�rer
la bande passante entrante et jeter des paquets quand cette bande
passante d�passe le d�bit d�sir�. Cela peut, par exemple, pr�server
votre h�te d'une attaque SYN flood. Cela peut aussi servir � ralentir
TCP/IP, qui r�agit � la perte des paquets par la r�duction 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
d�sirable que d'utiliser, par exemple, un filtre token bucket. Pas s�r
cependant, les routeurs Cisco travaillent de cette mani�re, et les
gens semblent en �tre contents.
Voir la r�f�rence ``IOS Committed Access Rate'' � la fin de ce
document.
En r�sum�, vous pouvez utiliser cela pour limiter la vitesse de
t�l�chargement des fichiers et, donc, laisser plus de bande passante
disponible pour les autres.
Voir la section sur la protection de votre h�te des attaques SYN flood
pour un exemple de la mani�re dont cela marche.
1100.. NNeettffiilltteerr eett iipprroouuttee -- mmaarrqquuaaggee ddee ppaaqquueettss
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 d�sosser leurs en-
t�tes. Une de ses fonctionnalit�s particuli�res est de pouvoir
marquer un paquet avec un nombre, gr�ce � l'option --set-mark.
Comme exemple, la commande suivante marque tous les paquets destin�s
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
ch�re, au m�gaoctet) et une qui est plus lente, mais avec un tarif
moins �lev�. Nous souhaiterions que le courrier passe par la route la
moins ch�re.
Nous avons d�j� marqu� le paquet avec un "1" et nous allons maintenant
renseigner la base de donn�es de la politique de routage pour qu'elle
agisse sur ces paquets marqu�s.
# 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 g�n�rer la table mail.out avec une route vers
la ligne lente, mais peu co�teuse.
# /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 h�tes, ou
nous pouvons ins�rer une r�gle avec une priorit� plus faible qui
pointe sur la table principale pour nos h�tes faisant exception.
Nous pouvons aussi utiliser cette fonctionnalit� pour nous conformer
aux bits TOS en marquant les paquets avec diff�rents types de service
et les nombres correspondants. On cr�e ensuite les r�gles qui agissent
sur ces types de service. De cette fa�on, on peut d�dier une ligne
RNIS aux connexions interactives.
Inutile de la dire, cela marche parfaitement sur un h�te 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/?]
1111.. DD''aauuttrreess ccllaassssiiffiiccaatteeuurrss
Les classificateurs sont les moyens par lesquels le noyau d�cide dans
quelle file d'attente un paquet sera plac�. Il y a divers
classificateurs, chacun d'eux pouvant �tre utilis� pour diff�rents
buts.
ffww Base la d�cision sur la fa�on dont la pare-feu a marqu� les
paquets.
uu3322
Base la d�cision sur les champs � l'int�rieur du paquet
(c'est-�-dire l'adresse IP source, etc.)
rroouuttee
Base la d�cision sur la route � emprunter par le paquet.
rrssvvpp,, rrssvvpp66
Base la d�cision sur la cible (destination, protocole) et,
optionnellement, sur la source (je pense).
ttcciinnddeexx
FIXME: Remplissez-moi
Notez qu'il y a g�n�ralement plusieurs mani�res de classifier un
paquet. Cela d�pend du syst�me de classification que vous souhaitez
utiliser.
Les classificateurs acceptent en g�n�ral quelques arguments communs.
Ils sont list�s ici pour des raisons pratiques :
pprroottooccooll
Le protocole que ce classificateur acceptera. G�n�ralement, on
n'acceptera que le trafic IP. Exig�.
ppaarreenntt
La r�f�rence � laquelle ce classificateur est attach�. Cette
r�f�rence doit �tre une classe d�j� existante. Exig�.
pprriioo
La priorit� de ce classificateur. Les plus grand nombres seront
test�s en premier.
hhaannddllee
Cette r�f�rence a plusieurs significations suivant les
diff�rents 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� configur�e sur 1: et que la classe vers laquelle
vous voulez envoyer le trafic s�lectionn� est 1:1.
1111..11.. LLee ccllaassssiiffiiccaatteeuurr ""ffww""
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 balis�s
avec la marque 1. � pr�sent, nous construisons les r�gles de mise en
forme pour mettre en forme les paquets. Nous avons juste besoin
d'indiquer que les paquets balis�s 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-m�me. On attache � la classe 1:0 un
filtre avec la priorit� 1 pour filtrer tous les paquets marqu�s � 1
par le pare-feu vers la classe 1:1. Noter l'utilisation du param�tre
"handle" pour indiquer la marque attendue.
C'est tout ce qu'il y a � faire ! C'est le proc�d� le plus simple (�
mon humble avis). Je pense que les autres proc�d�s sont plus
difficiles � comprendre. Notez que toute la puissance du pare-feu peut
�tre utilis�e avec ce classificateur. Cela inclut l'analyse des
adresses MAC, des identificateurs d'utilisateurs (user ID) et tout ce
que le firewall peut traiter.
1111..22.. LLee ccllaassssiiffiiccaatteeuurr ""uu3322""
Le filtre u32 est le filtre le plus avanc� dans l'impl�mentation
courante. Il est enti�rement bas� sur des tables de hachage, ce qui
le rend robuste quand il y a beaucoup de r�gles de filtrage.
Dans sa forme la plus simple, le filtre u32 est une liste
d'enregistrements, chacun consistant en deux champs : un s�lecteur et
une action. Les s�lecteurs, d�crits ci-dessous, sont compar�s avec le
paquet IP trait� jusqu'� la premi�re correspondance, et l'action
associ�e est accomplie. Le type d'action le plus simple serait de
diriger le paquet vers une classe CBQ d�finie.
La ligne de commande du programme filtre tc, utilis� pour configurer
le filtre, consiste en trois parties : la sp�cification du filtre, un
s�lecteur et une action. La sp�cification du filtre peut �tre d�finie
comme :
tc filter add dev IF [ protocol PROTO ]
[ (preference|priority) PRIO ]
[ parent CBQ ]
Le champ protocol d�crit 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 d�finit. C'est important dans la mesure o�
vous pouvez avoir plusieurs filtres (listes de r�gles) avec des
priorit�s diff�rentes. Chaque liste sera scrut�e dans l'ordre d'ajout
des r�gles. Alors, la liste avec la priorit� la plus faible (celle qui
a le num�ro de pr�f�rence le plus �lev�) sera trait�e. Le champ
parent d�finit le sommet de l'arbre CBQ (par ex. 1:0) auquel le filtre
doit �tre attach�.
Les options d�crites s'appliquent � tous les filtres, pas seulement �
u32.
1111..22..11.. LLee ss��lleecctteeuurr UU3322
Le s�lecteur U32 contient la d�finition d'un mod�le, qui sera compar�
au paquet trait�. Plus pr�cis�ment, il d�finit quels bits doivent
correspondre dans l'en-t�te du paquet, et rien de plus, mais cette
m�thode simple est tr�s puissante. Jetons un oeil sur l'exemple
suivant, directement tir� d'un filtre assez complexe r�ellement
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 c�t� la premi�re ligne - tous ces
param�tres d�crivent les tables de hachage du filtre. Focalisons-nous
sur la ligne de s�lection contenant le mot-cl� match. Ce s�lecteur
fera correspondre les en-t�tes 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 d�marrer au d�calage
sp�cifi� (en octets) - dans notre cas, c'est au d�but du paquet.
Traduisons tout cela en langage humain : le paquet correspondra si son
champ Type de Service (TOS) a le bit "faible d�lai" positionn�.
Analysons une autre r�gle :
# 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 d�signe l'en-t�te suivant encapsul� dans le paquet
IP, c'est � dire celui du protocole de la couche sup�rieure. La
correspondance commencera �galement au d�but du prochain en-t�te.
Elle devrait avoir lieu dans le deuxi�me mot de 32 bits de l'en-t�te.
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 d�cimal, 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 s�lecteur suivant tr�s
facile � lire : match c0a80100/ffffff00 at 16. Ce que nous avons ici,
c'est une correspondance de trois octets au 17�me octet, en comptant �
partir du d�but de l'en-t�te IP. Cela correspond aux paquets qui ont
une adresse de destination quelconque dans le r�seau 192.168.1/24.
Apr�s avoir analys� les exemples, nous pouvons r�sumer ce que nous
avons appris.
1111..22..22.. SS��lleecctteeuurrss gg��nn��rraauuxx
Les s�lecteurs g�n�raux d�finissent le mod�le, le masque et le
d�calage qui seront compar�s au contenu du paquet. En utilisant les
s�lecteurs g�n�raux, vous pouvez rechercher des correspondances sur
n'importe quel bit de l'en-t�te IP (ou des couches sup�rieures). Ils
sont quand m�me plus difficiles � �crire et � lire que les s�lecteurs
sp�cifiques d�crits ci-dessus. La syntaxe g�n�rale des s�lecteurs
est :
match [ u32 | u16 | u8 ] PATTERN MASK [ at OFFSET | nexthdr+OFFSET]
Un des mots-cl�s u32,u16 ou u8 doit sp�cifier la longueur du mod�le en
bits. PATTERN et MASK se rapporteront � la longueur d�finie par ce
mot-cl�. Le param�tre OFFSET est le d�calage, en octets, pour le
d�marrage de la recherche de correspondance. Si le mot-clef nexthdr+
est pr�sent, le d�calage sera relatif � l'en-t�te de la couche r�seau
sup�rieure.
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 r�gle si sa "dur�e de vie" (TTL) est de
64. TTL est le champ d�marrant juste apr�s le 8�me octet de l'en-t�te
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 r�gle correspondra seulement aux paquets TCP avec le bit ACK
positionn�. Ici, nous pouvons voir un exemple d'utilisation de deux
s�lecteurs, le r�sultat final �tant un ET logique de leurs r�sultats.
Si vous jetez un oeil sur un sch�ma de l'en-t�te TCP, vous pouvez voir
que le bit ACK est le second bit (0x10) du 14�me octet de l'en-t�te
TCP (at nexthdr+13). Comme second s�lecteur, si vous voulez vous
compliquer la vie, vous pouvez �crire match u8 0x06 0xff at 9 � la
place du s�lecteur sp�cifique protocol tcp, puisque 6 est le num�ro du
protocole TCP, sp�cifi� au 10�me octet de l'en-t�te IP. En revanche,
dans cet exemple, vous ne pourrez pas utiliser de s�lecteur sp�cifique
pour la premi�re correspondance, simplement parce qu'il n'y a pas de
s�lecteur sp�cifique pour d�signer les bits TCP ACK.
1111..22..33.. LLeess ss��lleecctteeuurrss sspp��cciiffiiqquueess
La table suivante contient la liste de tous les s�lecteurs sp�cifiques
que les auteurs de cette section ont trouv�s 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 s�par�
"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 r�gle ci-dessus correspondra � des paquets qui ont le champ TOS
�gal � 0x10. Le champ TOS commence au deuxi�me octet du paquet et
occupe 1 octet, ce qui nous permet d'�crire un s�lecteur g�n�ral
�quivalent : match u8 0x10 0xff at 1. Cela nous donne une indication
sur l'impl�mentation du filtre u32 ; les r�gles sp�cifiques sont
toujours traduites en r�gles g�n�rales, et c'est sous cette forme
qu'elles sont stock�es en m�moire par le noyau. Cela am�ne � une
autre conclusion : les s�lecteurs tcp et udp sont exactement les m�mes
et c'est la raison pour laquelle vous ne pouvez pas utiliser un simple
s�lecteur match tcp dst 53 0xffff pour d�signer un paquet TCP envoy�
sur un port donn� : cela d�signe aussi les paquets UDP envoy�s sur ce
port. Vous devez �galement sp�cifier le protocole avec la r�gle
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
1111..33.. LLee ccllaassssiiffiiccaatteeuurr ""rroouuttee""
Ce classificateur filtre en se basant sur le r�sultat des tables de
routage. Quand un paquet passant � travers les classes en atteint une
qui est marqu�e 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 imm�diatement), il consulte la table de
routage et si une entr�e de la table correspond, il envoie le paquet
vers la classe donn�e et lui donne une priorit� de 100. Ensuite, pour
finalement activer les choses, vous ajoutez l'entr�e de routage
appropri�e.
L'astuce ici est de d�finir "realm" en se basant soit sur la
destination, soit sur la source. Voici la fa�on de faire cela :
# ip route add Host/Network via Gateway dev Device realm RealmNumber
Par exemple, nous pouvons d�finir notre r�seau 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 repr�senter les r�seaux ou les h�tes et sp�cifier 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 r�gle ci-dessus indique que les paquets allant vers le r�seau
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-r�seau 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 sp�cifie que les paquets venant du r�seau 192.168.2.0
(realm 2) correspondront � la classe 1:2.
1111..44.. LLee ccllaassssiiffiiccaatteeuurr ""rrssvvpp""
FIXME: � remplir
1111..55.. LLee ccllaassssiiffiiccaatteeuurr ""ttcciinnddeexx""
FIXME: � remplir
1122.. PPaarraamm��ttrreess rr��sseeaauu dduu nnooyyaauu
Le noyau utilise de nombreux param�tres qui peuvent �tre ajust�s en
diff�rentes circonstances. Bien que, comme d'habitude, les param�tres
par d�faut conviennent � 99% des installations, nous ne pourrions pas
appeler ce document "HOWTO avanc�" sans en dire un mot.
Les �l�ments int�ressants sont dans /proc/sys/net, jetez-y un oeil.
Tout ne sera pas document� ici au d�part, mais nous y travaillons.
1122..11.. FFiillttrraaggee dduu CChheemmiinn IInnvveerrssee ((RReevveerrssee PPaatthh FFiilltteerriinngg))
Par d�faut, les routeurs routent tout, m�me les paquets qui
visiblement n'appartiennent pas � votre r�seau. Un exemple courant est
l'espace des adresses IP priv�es 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 d�sactiver cette fonctionnalit�. Les
d�veloppeurs 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 m�thode est appel�e "Reverse Path Filtering" (Filtrage par
chemin inverse). Pour faire simple, si la r�ponse � 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 d�but, si un paquet arrivant sur le routeur
Linux par eth1 pr�tend venir du r�seau Bureau+FAI, il sera �limin�.
De m�me, si un paquet arrivant du r�seau Bureau pr�tend �tre de
quelque part � l'ext�rieur du pare-feu, il sera �galement �limin�.
Ce qui est pr�sent� ci-dessus est le filtrage de chemin inverse
complet. Le param�trage par d�faut filtre seulement sur les adresses
IP des r�seaux directement connect�s. Ce param�trage par d�faut est
utilis� parce que le filtrage complet �choue dans le cas d'un routage
asym�trique (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 r�seau.
Les donn�es descendent vers la parabole satellite et les r�ponses
repartent par des lignes terrestres normales).
Si cette exception s'applique dans votre cas (vous devriez �tre au
courant), vous pouvez simplement d�sactiver le rp_filter sur
l'interface d'arriv�e des donn�es satellite. Si vous voulez voir si
des paquets sont �limin�s, le fichier log_martians du m�me r�pertoire
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
1122..22.. CCoonnffiigguurraattiioonnss oobbssccuurreess
Bon, il y a beaucoups de param�tres qui peuvent �tre modifi�s. Nous
essayons de tous les lister. Voir aussi une documentation partielle
dans Documentation/ip-sysctl.txt.
Certaines de ces configurations ont des valeurs par d�faut diff�rentes
suivant que vous r�pondez "Yes" ou "No" � la question "Configure as
router and not host" lors de la compilation du noyau.
1122..22..11.. iippvv44 gg��nn��rriiqquuee
En remarque g�n�rale, les fonctionnalit�s de limitation de d�bit ne
fonctionnent pas sur loopback, donc n'essayez pas de les tester
localement.
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__ddeessttuunnrreeaacchh__rraattee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__eecchhoo__iiggnnoorree__aallll
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__eecchhoo__iiggnnoorree__bbrrooaaddccaassttss [[UUsseeffuull]]
Si vous pinguez l'adresse de diffusion d'un r�seau, tous les
h�tes sont cens�s r�pondre. Cela permet de coquettes attaques de
d�ni de service. Mettez cette valeur � 1 pour ignorer ces
messages de diffusion.
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__eecchhoorreeppllyy__rraattee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__iiggnnoorree__bboogguuss__eerrrroorr__rreessppoonnsseess
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__ppaarraammpprroobb__rraattee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iiccmmpp__ttiimmeeeexxcceeeedd__rraattee
Voici la c�l�bre cause des "�toiles Solaris" dans traceroute.
Limite le nombre de messages ICMP Time Exceeded envoy�s. FIXME:
Unit� de ces "rates" ? Soit je suis stupide, soit �a ne
fonctionne pas.
//pprroocc//ssyyss//nneett//iippvv44//iiggmmpp__mmaaxx__mmeemmbbeerrsshhiippss
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__ggcc__mmaaxxttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__ggcc__mmiinnttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__mmaaxxttttll
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__mmiinnttttll
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iinneett__ppeeeerr__tthhrreesshhoolldd
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iipp__aauuttooccoonnffiigg
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iipp__ddeeffaauulltt__ttttll
Dur�e de vie (TTL) des paquets. Fixez-la � la valeur s�re de 64.
Augmentez-la si vous avez un r�seau immense, mais pas "pour
voir" : les boucles sans fin d'un mauvais routage sont plus
dangereuses si le TTL est �lev�. Vous pouvez m�me envisager de
diminuer la valeur dans certaines circonstances.
//pprroocc//ssyyss//nneett//iippvv44//iipp__ddyynnaaddddrr
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 activ�e, tout paquet plac� en
file d'attente sera retrait� pour avoir la bonne adresse. Cela
r�sout le probl�me pos� par une connexion d�fectueuse ayant
configur� une interface, suivie par une deuxi�me tentative
r�ussie (avec une adresse IP diff�rente).
//pprroocc//ssyyss//nneett//iippvv44//iipp__ffoorrwwaarrdd
Le noyau doit-il essayer de transmettre les paquets ? D�sactiv�
par d�faut pour les h�tes, activ� par d�faut quand le noyau est
configur� pour un routeur.
//pprroocc//ssyyss//nneett//iippvv44//iipp__llooccaall__ppoorrtt__rraannggee
Intervalle des ports locaux pour les connections sortantes. En
fait, assez petit par d�faut, 1024 � 4999.
//pprroocc//ssyyss//nneett//iippvv44//iipp__nnoo__ppmmttuu__ddiisscc
Configurez cela si vous voulez d�sactiver la d�couverte du MTU :
une technique pour d�terminer le plus grand MTU possible sur
votre chemin.
//pprroocc//ssyyss//nneett//iippvv44//iippffrraagg__hhiigghh__tthhrreesshh
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iippffrraagg__llooww__tthhrreesshh
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//iippffrraagg__ttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__aabboorrtt__oonn__oovveerrffllooww
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ffiinn__ttiimmeeoouutt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__kkeeeeppaalliivvee__iinnttvvll
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__kkeeeeppaalliivvee__pprroobbeess
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__kkeeeeppaalliivvee__ttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__mmaaxx__oorrpphhaannss
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__mmaaxx__ssyynn__bbaacckklloogg
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__mmaaxx__ttww__bbuucckkeettss
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__oorrpphhaann__rreettrriieess
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__rreettrraannss__ccoollllaappssee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__rreettrriieess11
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__rreettrriieess22
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__rrffcc11333377
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssaacckk
Utilise un ACK s�lectif qui peut �tre utilis� pour signifier
qu'un seul paquet est manquant. Facilite ainsi une r�cup�ration
rapide.
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssttdduurrgg
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssyynn__rreettrriieess
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ssyynnaacckk__rreettrriieess
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ttiimmeessttaammppss
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__ttww__rreeccyyccllee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ttccpp__wwiinnddooww__ssccaalliinngg
TCP/IP autorise normalement des fen�tres jusqu'� une taille de
65535 octets. Pour des r�seaux vraiment rapides, cela peut ne
pas �tre assez. Les options "windows scaling" autorisent des
fen�tres jusqu'au gigaoctet, ce qui est bon pour les produits �
grande bande passante mais fort d�lai.
1122..22..22.. CCoonnffiigguurraattiioonn pp��rriipphh��rriiqquuee ppaarr pp��rriipphh��rriiqquuee
DEV peut d�signer soit une interface r�elle, soit "all", soit
"default". Default change �galement les param�tres des interfaces qui
seront cr��es par la suite.
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//aacccceepptt__rreeddiirreeccttss
Si un routeur d�cide que vous l'utilisez � tort (c'est-�-dire
qu'il a besoin de r�-envoyer votre paquet sur la m�me
interface), il vous enverra un ICMP Redirect. Cela pr�sente
cependant un petit risque pour la s�curit�, et vous pouvez le
d�sactiver, ou utiliser les redirections s�curis�es.
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//aacccceepptt__ssoouurrccee__rroouuttee
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.
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//bboooottpp__rreellaayy
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//ffoorrwwaarrddiinngg
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//lloogg__mmaarrttiiaannss
Voir la section sur le "reverse path filters"
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//mmcc__ffoorrwwaarrddiinngg
Si vous faites de la transmission multidiffusion (multicast) sur
cette interface.
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//pprrooxxyy__aarrpp
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//rrpp__ffiilltteerr
Voir la section sur le "reverse path filters"
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//sseeccuurree__rreeddiirreeccttss
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//sseenndd__rreeddiirreeccttss
Si vous employez les redirections mentionn�es ci-dessus.
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//sshhaarreedd__mmeeddiiaa
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//ccoonnff//DDEEVV//ttaagg
FIXME: � remplir
1122..22..33.. PPoolliittiiqquuee ddee vvooiissiinnaaggee
DEV peut d�signer soit une interface r�elle, soit "all", soit
"default". Default change �galement les param�tres des interfaces qui
seront cr��es par la suite.
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//aannyyccaasstt__ddeellaayy
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//aapppp__ssoolliicciitt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//bbaassee__rreeaacchhaabbllee__ttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//ddeellaayy__ffiirrsstt__pprroobbee__ttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//ggcc__ssttaallee__ttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//lloocckkttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//mmccaasstt__ssoolliicciitt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//pprrooxxyy__ddeellaayy
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//pprrooxxyy__qqlleenn
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//rreettrraannss__ttiimmee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//uuccaasstt__ssoolliicciitt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//nneeiigghh//DDEEVV//uunnrreess__qqlleenn
FIXME: � remplir
1122..22..44.. CCoonnffiigguurraattiioonn dduu rroouuttaaggee
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//eerrrroorr__bbuurrsstt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//eerrrroorr__ccoosstt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//fflluusshh
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__eellaassttiicciittyy
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__iinntteerrvvaall
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__mmiinn__iinntteerrvvaall
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__tthhrreesshh
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//ggcc__ttiimmeeoouutt
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmaaxx__ddeellaayy
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmaaxx__ssiizzee
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmiinn__aaddvv__mmssss
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmiinn__ddeellaayy
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmiinn__ppmmttuu
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//mmttuu__eexxppiirreess
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//rreeddiirreecctt__llooaadd
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//rreeddiirreecctt__nnuummbbeerr
FIXME: � remplir
//pprroocc//ssyyss//nneett//iippvv44//rroouuttee//rreeddiirreecctt__ssiilleennccee
FIXME: � remplir
1133.. AApppplliiccaattiioonn dduu ccoonnttrr��llee ddee ttrraaffiicc aauuxx ddoorrssaalleess
Ce chapitre est con�u comme une introduction au routage de dorsales
(backbones). Ces liaisons impliquent souvent des bandes passantes
sup�rieures � 100 m�gabits/s, ce qui n�cessite une approche diff�rente
de celle de votre modem ADSL � la maison.
1133..11.. FFiilleess dd''aatttteennttee ddee rroouutteeuurrss
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 d�borde. 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 entra�nera une rafale de retransmissions retard�e
qui inondera � nouveau le routeur congestionn�.
Dans le but d'en finir avec les congestions occasionnelles des liens,
les routeurs de dorsales int�grent souvent des files d'attente de
grande taille. Malheureusement, bien que ces files d'attente offrent
un bon d�bit, elles peuvent augmenter sensiblement les temps de
latence et entra�ner un comportement tr�s saccad� des connections TCP
pendant la congestion.
Ces probl�mes avec le "tail-drop" deviennent de plus en plus
pr�occupants avec l'augmentation de l'utilisation d'applications
hostiles au r�seau. Le noyau Linux nous offre la technique RED,
abr�viation de Random Early Detect, ou d�tection pr�coce directe.
RED n'est pas la solution miracle � tous ces probl�mes. Les
applications qui n'int�grent 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 d�g�ts sur le d�bit 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 congestionn�e, cela entra�ne
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 t�t, il conserve une file d'attente plus
courte et des temps de latence mieux contr�l�s. La probabilit� qu'un
paquet soit �limin� d'une connexion particuli�re est proportionnelle �
la bande passante utilis�e par cette connexion plut�t 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 co�t d'une
m�morisation d'�tat par session qui est n�cessaire pour une mise en
file d'attente vraiment �quitable.
Pour utiliser RED, vous devez r�gler trois param�tres : 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 envoy�s "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 d�grader le d�bit et une valeur
Min trop grande va d�grader le temps de latence. Sur une liaison
lente, choisir un coefficient Min petit ne peut pas remplacer une
r�duction du MTU pour am�liorer les temps de r�ponse.
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 contr�le la r�ponse de l'algorithme RED aux rafales. Burst doit
�tre choisi plus grand que min/avpkt (paquet moyen).
Exp�rimentalement, j'ai trouv� que (min+min+max)/(3*avpkt) marche
bien.
De plus, vous devez configurer limit et avpkt. Limit est une valeur de
s�curit� : 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 d�bit 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 d�pend de toi, Greg :-) - ahu
1144.. RReecceetttteess ddee ccuuiissiinnee ppoouurr llaa mmiissee eenn ffoorrmmee dduu ttrraaffiicc
Cette section contient des "recettes de cuisine" qui peuvent vous
aider � r�soudre vos probl�mes. Un livre de cuisine ne remplace
cependant pas une r�elle compr�hension, essayez donc d'assimiler ce
qui suit.
1144..11.. FFaaiirree ttoouurrnneerr pplluussiieeuurrss ssiitteess aavveecc ddiiffff��rreenntteess SSLLAA ((aauuttoorriissaa��
ttiioonnss))
Vous pouvez faire cela de plusieurs mani�res. Apache poss�de 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
pr�sentation de Jamal Hadi, dont la r�f�rence 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
limit�e. Nous le ferons sur le serveur lui-m�me.
Le client A doit disposer d'au moins 2 m�gabits, et le client B a pay�
pour 5 m�gabits. Nous s�parons nos clients en cr�ant 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 diff�rents serveurs � la bonne adresse IP.
Tous les d�mons 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 cr�ons 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
d�faut � pfifo_fast quelque part ?
1144..22.. PPrroott��ggeerr vvoottrree mmaacchhiinnee ddeess iinnoonnddaattiioonnss SSYYNN ffllooooddss
D'apr�s la documentation iproute d'Alexeys, adapt�e � netfilter. Si
vous utilisez ceci, prenez garde d'ajuster les nombres avec des
valeurs raisonnables pour votre syst�me.
Si vous voulez prot�ger tout un r�seau, oubliez ce script, qui est
plus adapt� � un h�te seul.
#! /bin/sh -x
#
# script simple utilisant les capacit�s 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 b�n�ficier de puissantes fonctionnalit�s sur les SYN.
#
# chemins vers les divers utilitaires
# � changer en fonction des v�tres
#
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 associ�e
############################################################
$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
1144..33.. LLiimmiitteerr llee dd��bbiitt IICCMMPP ppoouurr eemmpp��cchheerr lleess dd��nniiss ddee sseerrvviiccee
R�cemment, les attaques distribu�es de d�ni de service sont devenues
une nuisance importante sur Internet. En filtrant proprement et en
limitant le d�bit de votre r�seau, vous pouvez � la fois �viter de
devenir victime ou source de ces attaques.
Vous devriez filtrer vos r�seaux de telle sorte que vous n'autorisiez
pas les paquets avec une adresse IP source non-locale � quitter votre
r�seau. Cela emp�che les utilisateurs d'envoyer de mani�re anonyme des
cochonneries sur Internet.
La limitation de d�bit peut faire encore mieux, comme vu plus haut.
Pour vous rafra�chir la m�moire, revoici notre diagramme ASCII :
[Internet] ---<E3, T3, n'importe quoi>--- [routeur Linux] --- [Bureau+FAI]
eth1 eth0
Nous allons d'abord configurer les parties pr�requises :
# 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 d�terminer combien de trafic ICMP vous voulez
autoriser. Vous pouvez r�aliser des mesures avec tcpdump, en �crivant
les r�sultats dans un fichier pendant un moment, et regarder combien
de paquets ICMP passent par votre r�seau. 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 d�bit � 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
1144..44.. DDoonnnneerr llaa pprriioorriitt�� aauu ttrraaffiicc iinntteerraaccttiiff
Si beaucoup de donn�es arrivent � votre lien ou en partent, et que
vous essayez de faire de la maintenance via telnet ou ssh, cela peut
poser probl�me : 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 pr�c�demment, nous avons besoin de manipuler le trafic dans les
deux sens. Evidemment, cela marche mieux s'il y a des machines Linux
aux deux extr�mit�s du lien, bien que d'autres UNIX soient capables de
faire la m�me chose. Consultez votre gourou local Solaris/BSD pour
cela.
Le gestionnaire standard pfifo_fast a trois "bandes" diff�rentes. Le
trafic de la bande 0 est transmis en premier, le trafic des bandes 1
et 2 �tant trait� apr�s. Il est vital que votre trafic interactif soit
dans la bande 0 ! Ce qui suit est adapt� du (bient�t obsol�te)
Ipchains-HOWTO :
Il y a quatre bits rarement utilis�s dans l'en-t�te IP, appel�s bits
de Type de Service (TOS). Ils affectent la mani�re dont les paquets
sont trait�s. Les quatre bits sont "D�lai Minimum", "D�bit Maximum",
"Fiabilit� Maximum" et "Co�t 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 "D�lai Minimum" est particuli�rement important pour moi. Je le
positionne � 1 pour les paquets interactifs sur mon routeur (Linux)
qui envoie le trafic vers l'ext�rieur. Je suis derri�re un modem �
33,6 Kbps. Linux r�partit les paquets dans trois files d'attente. De
cette mani�re, j'obtiens des performances acceptables pour le trafic
interactif tout en t�l�chargeant en m�me temps.
L'utilisation la plus commune est de configurer les connections telnet
et ftp � "D�lai Minimum" et les donn�es FTP � "D�bit 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 donn�es venant d'un telnet
ext�rieur 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
1155.. RRoouuttaaggee aavvaanncc�� ssuurr LLiinnuuxx
Cette section est destin�e � tous les gens qui voudraient savoir
comment fonctionne le syst�me complet ou qui ont une configuration si
bizarre qu'ils ont besoin d'informations "bas niveau" pour le faire
fonctionner.
Cette section est compl�tement facultative. Il est tout � fait
possible qu'elle soit trop complexe et pas vraiment destin�e aux
utilisateurs normaux. Vous avez �t� averti.
FIXME: D�cider ce qui doit r�ellement �tre ici.
1155..11.. pprraattiiqquuee ?? CCoommmmeenntt llaa mmiissee eenn ffiillee dd''aatttteennttee ddeess ppaaqquueettss ffoonncc��
ttiioonnnnee--tt--eellllee eenn
C'est la base du fonctionnement du syst�me de mise en file d'attente
d'un paquet.
Lister les �tapes que le noyau r�alise pour classifier un paquet, etc.
FIXME: � �crire.
1155..22.. UUttiilliissaattiioonn aavvaanncc��ee dduu ssyysstt��mmee ddee mmiissee eenn ffiillee dd''aatttteennttee ddeess
ppaaqquueettss
Passer par l'exemple extr�mement rus� de Alexeys impliquant les bits
inutilis�s dans le champs TOS.
FIXME: � �crire.
1155..33.. DD''aauuttrreess ssyysstt��mmeess ddee mmiissee eenn ffoorrmmee ddeess ppaaqquueettss
Je voudrais inclure une br�ve description sur les autres syst�mes de
mise en forme des paquets dans d'autres syst�mes d'exploitation et les
comparer � celui de Linux. Puisque Linux est l'un des rares OS qui ont
une pile TCP/IP originale (non d�riv�e de BSD), je pense qu'il serait
int�ressant de savoir comment les autres font cela.
Malheureusement je n'ai aucune exp�rience sur d'autres syst�mes, aussi
je ne peux pas l'�crire.
FIXME: Personne ? - Martijn
1166.. RRoouuttaaggee DDyynnaammiiqquuee -- OOSSPPFF eett BBGGPP
Si votre r�seau commence � devenir vraiment gros, ou si vous commencez
� consid�rer Internet comme votre propre r�seau, vous avez besoin
d'outils qui routent dynamiquement vos donn�es. Les sites sont
souvent reli�s 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 r�f�rence :
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 tr�s 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 sp�cifiques � Cisco, ils sont
remarquablement semblables au langage de configuration de Zebra :-)
1177.. LLeeccttuurreess ssuuppppll��mmeennttaaiirreess
hhttttpp::////ssnnaaffuu..ffrreeeeddoomm..oorrgg//lliinnuuxx22..22//iipprroouuttee--nnootteess..hhttmmll
<<
http://snafu.freedom.org/linux2.2/iproute-notes.html>
Contient beaucoup d'informations techniques, et de commentaires
sur le noyau.
hhttttpp::////wwwwww..ddaavviinn..oottttaawwaa..oonn..ccaa//oollss//
<<
http://www.davin.ottawa.on.ca/ols/>
Transparents de Jamal Hadi, un des auteurs du contr�leur de
trafic de Linux.
hhttttpp::////ddeeffiiaanntt..ccooiinneett..ccoomm//iipprroouuttee22//iipp--ccrreeff// <<
http://defi�
ant.coinet.com/iproute2/ip-cref/>
Version HTML de la documentation LaTeX d'Alexeys ; explique une
partie d'iproute2 en d�tails.
hhttttpp::////wwwwww..aacciirrii..oorrgg//ffllooyydd//ccbbqq..hhttmmll
<<
http://www.aciri.org/floyd/cbq.html>
Sally Floyd a une bonne page sur CBQ, incluant ses publications
originales. Aucune n'est sp�cifique � Linux, mais il y a un
travail de discussion sur la th�orie et l'utilisation de CBQ.
Contenu tr�s technique, mais une bonne lecture pour ceux qui
sont int�ress�s.
hhttttpp::////cceettii..ppll//~~eekkrraavviieettzz//ccbbqq//NNEETT44__ttcc..hhttmmll <<
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
m�me fa�on dans toutes les langues. L'auteur travaille en
collaboration avec nous et sera peut �tre bient�t un auteur de
sections de cet HOWTO.
LLeess sseerrvviicceess ddiiffff��rreennccii��ss ssuurr LLiinnuuxx <<
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 n�anmoins tr�s int�ressant. Nous pourrons inclure
une section sur le sujet, plus tard.
IIOOSS CCoommmmiitttteedd AAcccceessss RRaattee <<
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 diff�rente
mais les concepts sont identiques, sauf qu'on fait mieux, et
sans mat�riel qui co�te autant qu'une voiture :-)
TTCCPP//IIPP IIlllluussttrraatteedd,, vvoolluummee 11,, WW.. RRiicchhaarrdd SStteevveennss,, IISSBBNN
00--220011--6633334466--99
Sa lecture est indispensable si vous voulez r�ellement
comprendre TCP/IP, et de plus elle est divertissante.
1188.. RReemmeerrcciieemmeennttss
Notre but est de faire la liste de tous les personnes qui ont
contribu� � ce HOWTO, ou qui nous ont aid�s � 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 <
[email protected]>
� Jason Lunz <
[email protected]>
� Alexey Mahotkin <
[email protected]>
� Pawel Krawczyk <kravietz%alfa.ceti.pl>
� Wim van der Most
� Glen Turner <glen.turner%aarnet.edu.au>
� Song Wang <
[email protected]>