118
HOWTO du routage avancé et du contrôle de trafic sous Linux Bert Hubert Netherlabs BV <[email protected]> Thomas Graf (Auteur d'une section) <tgraf%suug.ch> Gregory Maxwell (Auteur d'une section) Remco van Mook (Auteur d'une section) <[email protected]> Martijn van Oosterhout (Auteur d'une section) <[email protected]> Paul B. Schroeder (Auteur d'une section) <[email protected]> Jasper Spaans (Auteur d'une section) <[email protected]> Pedro Larroy (Auteur d'une section) <piotr%member.fsf.org> Laurent Foucher Traducteur <[email protected]> Philippe Latu Traducteur/Relecteur <[email protected]> HOWTO du routage avancé et du contrôle de trafic sous Linux HOWTO du routage avancé et du contrôle de trafic sous Linux 1

HOWTO du routage avanc© et du contr´le de trafic sous Linux

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HOWTO du routage avanc© et du contr´le de trafic sous Linux

HOWTO du routage avanceacute et du controcircle de traficsous Linux

Bert Hubert

Netherlabs BV

ltberthubertnetherlabsnlgt

Thomas Graf (Auteur dune section)

lttgrafsuugchgt

Gregory Maxwell (Auteur dune section)Remco van Mook (Auteur dune section)

ltremcovirtunlgt

Martijn van Oosterhout (Auteur dune section)

ltkleptogcupidsuninternetcomgt

Paul B Schroeder (Auteur dune section)

ltpaulschusibmcomgt

Jasper Spaans (Auteur dune section)

ltjasperspaansds9anlgt

Pedro Larroy (Auteur dune section)

ltpiotrmemberfsforggt

Laurent Foucher

Traducteur

ltfouchergchiut-tlse3frgt

Philippe Latu

TraducteurRelecteur

ltphilippelatulinux-franceorggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux 1

Guillaume Allegravegre

Relecteur

ltGuillaumeAllegreimagfrgt

Une approche pratique diproute2 de la mise en forme du trafic et un peu de netfilter

Table des matiegraveres1 Deacutedicace2 Introduction

Conditions de distribution et Mise en gardeConnaissances preacutealablesCe que Linux peut faire pour vousNotes diversesAccegraves CVS et propositions de mises agrave jourListe de diffusionPlan du document

3 Introduction agrave iproute2Pourquoi iproute2 Un tour dhorizon diproute2PreacuterequisExplorer votre configuration courante

ip nous montre nos liensip nous montre nos adresses IPip nous montre nos routes

ARP4 Regravegles - bases de donneacutees des politiques de routage

Politique de routage simple par ladresse sourceRoutage avec plusieurs accegraves Internetfournisseurs daccegraves

Accegraves seacutepareacuteBalance de charge

5 GRE et autres tunnelsQuelques remarques geacuteneacuterales agrave propos des tunnels IP dans un tunnel IPLe tunnel GRE

Le tunnel IPv4Le tunnel IPv6

Tunnels dans lespace utilisateur6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone)

Tunnel IPv67 IPSEC IP seacutecuriseacute agrave travers Internet

Introduction sur la gestion manuelle des cleacutesGestion automatique des cleacutes

TheacuteorieExempleGestion automatique des cleacutes en utilisant les certificats X509

tunnels IPSECAutre logiciel IPSEC

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

2 Laurent Foucher

Interopeacuterabiliteacute dIPSEC avec dautres systegravemesWindowsCheck Point VPN-1 NG

8 Routage multidistribution (multicast)9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en file dattenteGestionnaires de mise en file dattente simples sans classes

pfifoamplowbarfastFiltre agrave seau de jetons (Token Bucket Filter)Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

Conseils pour le choix de la file dattenteterminologieGestionnaires de file dattente baseacutes sur les classes

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur des classesLa famille des gestionnaires de mise en file dattente racines descripteurs descendances etparentsLe gestionnaire de mise en file dattente PRIOLe ceacutelegravebre gestionnaire de mise en file dattente CBQSeau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Classifier des paquets avec des filtresQuelques exemples simples de filtrageToutes les commandes de filtres dont vous aurez normalement besoin

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediate queueing device (IMQ))Configuration simple

10 Eacutequilibrage de charge sur plusieurs interfacesAvertissement

11 Netfilter et iproute - marquage de paquets12 Filtres avanceacutes pour la (re-)classification des paquets

Le classificateur u32Le seacutelecteur U32Seacutelecteurs geacuteneacuterauxLes seacutelecteurs speacutecifiques

Le classificateur routeLes filtres de reacuteglementation (Policing filters)

Techniques de reacuteglementationActions de deacutepassement de limite (Overlimit actions)Exemples

Filtres hacheacutes pour un filtrage massif tregraves rapideFiltrer le trafic IPv6

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas Marquer les paquets IPv6 en utilisant ip6tablesUtiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

13 Paramegravetres reacuteseau du noyauFiltrage de Chemin Inverse (Reverse Path Filtering)Configurations obscures

ipv4 geacuteneacuteriqueConfiguration des peacuteripheacuteriquesPolitique de voisinageConfiguration du routage

14 Gestionnaires de mise en file dattente avanceacutes amp moins communsbfifopfifo

Paramegravetres amp usageAlgorithme Clark-Shenker-Zhang (CSZ)DSMARK

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Laurent Foucher 3

IntroductionA quoi DSMARK est-il relieacute Guide des services diffeacuterencieacutesTravailler avec DSMARKComment SCHamplowbarDSMARK travailleLe filtre TCamplowbarINDEX

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)Paramegravetres amp usage

Random Early Detection (RED)Generic Random Early DetectionEmulation VCATMWeighted Round Robin (WRR)

15 Recettes de cuisineFaire tourner plusieurs sites avec diffeacuterentes SLA (autorisations)Proteacuteger votre machine des inondations SYNLimiter le deacutebit ICMP pour empecirccher les deacutenis de serviceDonner la prioriteacute au trafic interactifCache web transparent utilisant netfilter iproute2 ipchains et squid

Scheacutema du trafic apregraves limpleacutementationCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

SolutionCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en imposant le MSS (pour lesutilisateurs de lADSL du cacircble de PPPoE amp PPtP)Le Conditionneur de Trafic Ultime Faible temps de latence Teacuteleacutechargement vers lamont et lavalrapide

Pourquoi cela ne marche t-il pas bien par deacutefaut Le script (CBQ)Le script (HTB)

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseauExemple dune solution de translation dadresse avec de la QoS

Commenccedilons loptimisation de cette rare bande passanteClassification des paquetsAmeacuteliorer notre configurationRendre tout ceci actif au deacutemarrage

16 Construire des ponts et des pseudo ponts avec du Proxy ARPEtat des ponts et iptablesPont et mise en formePseudo-pont avec du Proxy-ARP

ARP amp Proxy-ARPImpleacutementez-le

17 Routage Dynamique - OSPF et BGPConfigurer OSPF avec Zebra

PreacuterequisConfigurer ZebraExeacutecuter Zebra

Configurer BGP4 avec Zebrascheacutema reacuteseau (Exemple)Configuration (Exemple)Veacuterification de la configuration

18 Autres possibiliteacutes19 Lectures suppleacutementaires20 Remerciements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

4 Laurent Foucher

Chapitre 1 DeacutedicaceCe document est deacutedieacute agrave beaucoup de gens dans ma tentative de tous me les rappeler je peux en citerquelques-uns

Rusty Russellbull Alexey N Kuznetsovbull La fine eacutequipe de Googlebull Leacutequipe de Casema Internetbull

Chapitre 2 IntroductionBienvenue cher lecteur

Ce document a pour but de vous eacuteclairer sur la maniegravere de faire du routage avanceacute avec Linux 2224Meacuteconnus par les utilisateurs les outils standard de ces noyaux permettent de faire des choses spectaculairesLes commandes comme route et ifconfig sont des interfaces vraiment pauvres par rapport agrave la grandepuissance potentielle diproute2

Jespegravere que ce HOWTO deviendra aussi lisible que ceux de Rusty Russell tregraves reacuteputeacute (parmi dautres choses)pour son netfilter

Vous pouvez nous contacter en nous eacutecrivant agrave leacutequipe HOWTO Cependant postez sil vous plaicirct vosquestions sur la liste de diffusion (voir la section correspondante) pour celles qui ne sont pas directement lieacuteesagrave ce HOWTO

Avant de vous perdre dans ce HOWTO si la seule chose que vous souhaitez faire est de la simple mise enforme de trafic allez directement au chapitre Autres possibiliteacutesgt et lisez ce qui concerne CBQinit

Conditions de distribution et Mise en garde

Ce document est distribueacute dans lespoir quil sera utile et utiliseacute mais SANS AUCUNE GARANTIE sansmecircme une garantie implicite de qualiteacute leacutegale et marchande ni aptitude agrave un quelconque usage

En un mot si votre dorsale STM-64 est tombeacutee ou distribue de la pornographie agrave vos estimeacutes clients celanest pas de notre faute Deacutesoleacute

Copyright (c) 2001 par Bert Hubert Gregory Maxwell et Martijn van Oosterhout Remco van Mook Paul BSchroeder et autres Ce document ne peut ecirctre distribueacute quen respectant les termes et les conditions exposeacutesdans la Open Publication License v10 ou supeacuterieure (la derniegravere version est actuellement disponible surhttpwwwopencontentorgopenpub)

Copiez et distribuez (vendez ou donnez) librement ce document dans nimporte quel format Les demandes decorrections etou de commentaires sont agrave adresser agrave la personne qui maintient ce document

Il est aussi demandeacute que si vous publiez cet HOWTO sur un support papier vous en envoyiez desexemplaires aux auteurs pour une ltlt relecture critique gtgt -)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 2 Introduction 5

Connaissances preacutealables

Comme le titre limplique ceci est un HOWTO ltlt avanceacute gtgt Bien quil ne soit pas besoin decirctre un expertreacuteseau certains preacute-requis sont neacutecessaires

Voici dautres reacutefeacuterences qui pourront vous aider agrave en apprendre plus

Rusty Russells networking-concepts-HOWTOTregraves bonne introduction expliquant ce quest un reacuteseau et comment on le connecte agrave dautres reacuteseaux

Linux Networking-HOWTO (ex Net-3 HOWTO)Excellent document bien que tregraves bavard Il vous apprendra beaucoup de choses qui sont deacutejagraveconfigureacutees si vous ecirctes capable de vous connecter agrave Internet Il peut eacuteventuellement ecirctre situeacute agraveusrdocHOWTONET-HOWTOtxt mais peut eacutegalement ecirctre trouveacute en ligne

Ce que Linux peut faire pour vous

Une petite liste des choses qui sont possibles

Limiter la bande passante pour certains ordinateursbull Limiter la bande passante VERS certains ordinateursbull Vous aider agrave partager eacutequitablement votre bande passantebull Proteacuteger votre reacuteseau des attaques de type Deacuteni de Servicebull Proteacuteger Internet de vos clientsbull Multiplexer plusieurs serveurs en un seul pour leacutequilibrage de charge ou une disponibiliteacute ameacutelioreacuteebull Restreindre laccegraves agrave vos ordinateursbull Limiter laccegraves de vos utilisateurs vers dautres hocirctesbull Faire du routage baseacute sur lID utilisateur (eh oui ) ladresse MAC ladresse IP source le port le typede service lheure ou le contenu

bull

Peu de personnes utilisent couramment ces fonctionnaliteacutes avanceacutees Il y a plusieurs raisons agrave cela Bien quela documentation soit fournie la prise en main est difficile Les commandes de controcircle du trafic ne sontpratiquement pas documenteacutees

Notes diverses

Il y a plusieurs choses qui doivent ecirctre noteacutees au sujet de ce document Bien que jen ai eacutecrit la majeure partieje ne veux vraiment pas quil reste tel quel Je crois beaucoup agrave lOpen Source je vous encourage donc agraveenvoyer des remarques des mises agrave jour des corrections etc Nheacutesitez pas agrave mavertir des coquilles ouderreurs pures et simples Si mon anglais vous paraicirct parfois peu naturel ayez en tecircte sil vous plaicirct quelanglais nest pas ma langue natale Nheacutesitez pas agrave menvoyer vos suggestions amplsqbNdT en anglais ]

Si vous pensez que vous ecirctes plus qualifieacute que moi pour maintenir une section ou si vous pensez que vouspouvez eacutecrire et maintenir de nouvelles sections vous ecirctes le bienvenu La version SGML de ce HOWTO estdisponible via CVS Jenvisage que dautres personnes puissent travailler dessus

Pour vous aider vous trouverez beaucoup de mentions FIXME (NdT A CORRIGER) Les corrections sonttoujours les bienvenues Si vous trouvez une mention FIXME vous saurez que vous ecirctes en territoire inconnuCela ne veut pas dire quil ny a pas derreurs ailleurs faites donc tregraves attention Si vous avez valideacute quelquechose faites-nous le savoir ce qui nous permettra de retirer la mention FIXME

Je prendrai quelques liberteacutes tout au long de cet HOWTO Par exemple je pars de lhypothegravese duneconnexion Internet agrave 10 Mbits bien que je sache tregraves bien que cela ne soit pas vraiment courant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

6 Connaissances preacutealables

Accegraves CVS et propositions de mises agrave jour

Ladresse canonique de cet HOWTO est Ici

Nous avons maintenant un CVS en accegraves anonyme disponible depuis le monde entier Cela est inteacuteressantpour plusieurs raisons Vous pouvez facilement teacuteleacutecharger les nouvelles versions de ce HOWTO et soumettredes mises agrave jour

En outre cela permet aux auteurs de travailler sur la source de faccedilon indeacutependante ce qui est une bonne choseaussi

$ export CVSROOT=pserveranonoutpostds9anlvarcvsroot$ cvs loginCVS password [enter cvs (sans les caractegraveres )]$ cvs co 24routingcvs server Updating 24routingU 24routinglartcdb

Si vous avez fait des changements et que vous vouliez contribuer au HOWTO exeacutecutez cvs -z3 diff-uBb et envoyez-nous le reacutesultat par courrier eacutelectronique de faccedilon agrave pouvoir facilement inteacutegrer lesmodifications Merci Au fait soyez sucircr que vous avez eacutediteacute le fichier db les autres documents eacutetant geacuteneacutereacutesagrave partir de celui-ci

Un fichier Makefile est fourni pour vous aider agrave creacuteer des fichiers PostScript dvi pdf html et texte Vouspouvez avoir agrave installer les docbook docbook-utils ghostscript et tetex pour obtenir tous les formats de sortie

Faites attention de ne pas eacutediter le fichier 24routingsgml Il contient une ancienne version du HOWTO Lebon fichier est lartcdb

Liste de diffusion

Les auteurs reccediloivent de plus en plus de courriers eacutelectroniques agrave propos de cet HOWTO Vu linteacuterecirct de lacommunauteacute il a eacuteteacute deacutecideacute la mise en place dune liste de diffusion ougrave les personnes pourront discuter duroutage avanceacute et du controcircle de trafic Vous pouvez vous abonner agrave la liste ici

Il devra ecirctre noteacute que les auteurs sont tregraves heacutesitants agrave reacutepondre agrave des questions qui nont pas eacuteteacute poseacutees sur laliste Nous aimerions que la liste devienne une sorte de base de connaissance Si vous avez une questionrecherchez sil vous plaicirct dabord dans larchive et ensuite postez-lagrave dans la liste de diffusion

Plan du document

Nous allons essayer de faire des manipulations inteacuteressantes degraves le deacutebut ce qui veut dire que tout ne sera pasexpliqueacute en deacutetail tout de suite Veuillez passer sur ces deacutetails et accepter de consideacuterer quils deviendrontclairs par la suite

Le routage et le filtrage sont deux choses distinctes Le filtrage est tregraves bien documenteacute dans le HOWTO deRusty disponible ici

Rustys Remarkably Unreliable Guidesbull

Nous nous focaliserons principalement sur ce quil est possible de faire en combinant netfilter et iproute2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Accegraves CVS et propositions de mises agrave jour 7

Chapitre 3 Introduction agrave iproute2

Pourquoi iproute2

La plupart des distributions Linux et des UNIX utilisent couramment les veacuteneacuterables commandes arp ifconfiget route Bien que ces outils fonctionnent ils montrent quelques comportements inattendus avec les noyauxLinux des seacuteries 22 et plus Par exemple les tunnels GRE font partie inteacutegrante du routage de nos jours maisils neacutecessitent des outils complegravetement diffeacuterents

Avec iproute2 les tunnels font partie inteacutegrante des outils

Les noyaux Linux des seacuteries 22 et plus ont un sous-systegraveme reacuteseau complegravetement reacuteeacutecrit Ce nouveau codagede la partie reacuteseau apporte agrave Linux des performances et des fonctionnaliteacutes qui nont pratiquement pasdeacutequivalent parmi les autres systegravemes dexploitation En fait le nouveau logiciel de filtrage routage et declassification possegravede plus de fonctionnaliteacutes que les logiciels fournis sur beaucoup de routeurs deacutedieacutes depare-feu et de produits de mise en forme (shaping) du trafic

Dans les systegravemes dexploitation existants au fur et agrave mesure que de nouveaux concepts reacuteseau apparaissaientles deacuteveloppeurs sont parvenus agrave les greffer sur les structures existantes Ce travail constant dempilage decouches a conduit agrave des codes reacuteseau aux comportements eacutetranges un peu comme les langues humaines Dansle passeacute Linux eacutemulait le mode de fonctionnement de SunOS ce qui neacutetait pas lideacuteal

La nouvelle structure diproute2 a permis de formuler clairement des fonctionnaliteacutes impossibles agraveimpleacutementer dans le sous-systegraveme reacuteseau preacuteceacutedent

Un tour dhorizon diproute2

Linux possegravede un systegraveme sophistiqueacute dallocation de bande passante appeleacute Controcircle de trafic (TrafficControl) Ce systegraveme supporte diffeacuterentes meacutethodes pour classer ranger par ordre de prioriteacute partager etlimiter le trafic entrant et sortant

Nous commencerons par un petit tour dhorizon des possibiliteacutes diproute2

Preacuterequis

Vous devez ecirctre sucircr que vous avez installeacute les outils utilisateur (NdT userland tools par opposition agrave la partieltlt noyau gtgt diproute2) Le paquet concerneacute sappelle iproute sur RedHat et Debian Autrement il peut ecirctretrouveacute agrave ftpftpinracruip-routingiproute2-224-now-sstargz

Vous pouvez aussi essayer iproute2-currenttargz pour la derniegravere version

Certains eacuteleacutements diproute vous imposent lactivation de certaines options du noyau Il devra eacutegalement ecirctrenoteacute que toutes les versions de RedHat jusquagrave la version 62 incluse nont pas les fonctionnaliteacutes du controcirclede trafic activeacutees dans le noyau fourni par deacutefaut

RedHat 72 contient tous les eacuteleacutements par deacutefaut

Soyez eacutegalement sucircr que vous avez le support netlink mecircme si vous devez choisir de compiler votrepropre noyau iproute2 en a besoin

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

8 Chapitre 3 Introduction agrave iproute2

Explorer votre configuration courante

Cela peut vous paraicirctre surprenant mais iproute2 est deacutejagrave configureacute Les commandes courantes ifconfig etroute utilisent deacutejagrave les appels systegraveme avanceacutes diproute2 mais essentiellement avec les options par deacutefaut(cest-agrave-dire ennuyeuses)

Loutil ip est central et nous allons lui demander de nous montrer les interfaces

ip nous montre nos liens

[ahuhome ahu]$ ip link list1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 0000000000002 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff4 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp

La sortie peut varier mais voici ce qui est afficheacute pour mon routeur NAT (NdT translation dadresse) chezmoi Jexpliquerai seulement une partie de la sortie dans la mesure ougrave tout nest pas directement pertinent

La premiegravere interface que nous voyons est linterface loopback Bien que votre ordinateur puissefonctionner sans je vous le deacuteconseille La taille de MTU (uniteacute maximum de transmission) est de 3924octets et loopback nest pas supposeacute ecirctre mis en file dattente ce qui prend tout son sens dans la mesure ougravecette interface est le fruit de limagination de votre noyau

Je vais passer sur linterface dummy pour linstant et il se peut quelle ne soit pas preacutesente sur votre ordinateurIl y a ensuite mes deux interfaces physiques lune du cocircteacute de mon modem cacircble lautre servant mon segmentethernet agrave la maison De plus nous voyons une interface ppp0

Notons labsence dadresses IP Iproute deacuteconnecte les concepts de ltlt liens gtgt et ltlt dadresses IP gtgt AveclIP aliasing le concept de ladresse IP canonique est devenu de toute faccedilon sans signification

ip nous montre bien cependant ladresse MAC lidentifiant mateacuteriel de nos interfaces ethernet

ip nous montre nos adresses IP

[ahuhome ahu]$ ip address show 1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 000000000000 inet 1270018 brd 127255255255 scope host lo2 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff inet 100018 brd 10255255255 scope global eth04 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp inet 2126494251 peer 2126494132 scope global ppp0

Cela contient plus dinformations ip montre toutes nos adresses et agrave quelles cartes elles appartiennent inetsignifie Internet (IPv4) Il y a beaucoup dautres familles dadresses mais elles ne nous concernent pas pour le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explorer votre configuration courante 9

moment

Examinons linterface eth0 de plus pregraves Il est dit quelle est relieacutee agrave ladresse internet 100018Quest-ce que cela signifie Le 8 deacutesigne le nombre de bits reacuteserveacutes agrave ladresse reacuteseau Il y a 32 bits donc ilreste 24 bits pour deacutesigner une partie de notre reacuteseau Les 8 premiers bits de 10001 correspondent agrave10000 notre adresse reacuteseau et notre masque de sous-reacuteseau est 255000

Les autres bits repegraverent des machines directement connecteacutees agrave cette interface Donc 10250313 estdirectement disponible sur eth0 comme lest 10001 dans notre exemple

Avec ppp0 le mecircme concept existe bien que les nombres soient diffeacuterents Son adresse est2126494251 sans masque de sous-reacuteseau Cela signifie que vous avez une liaison point agrave point et quetoutes les adresses agrave lexception de 2126494251 sont distantes Il y a cependant plus dinformationsEn effet on nous dit que de lautre cocircteacute du lien il ny a encore quune seule adresse 21264941 Le 32nous preacutecise quil ny a pas de ltlt bits reacuteseau gtgt

Il est absolument vital que vous compreniez ces concepts Reacutefeacuterez-vous agrave la documentation mentionneacutee audeacutebut de ce HOWTO si vous avez des doutes

Vous pouvez aussi noter qdisc qui deacutesigne la gestion de la mise en file dattente (Queueing Discipline)Cela deviendra vital plus tard

ip nous montre nos routes

Nous savons maintenant comment trouver les adresses 10xyz et nous sommes capables datteindre21264941 Cela nest cependant pas suffisant et nous avons besoin dinstructions pour atteindre lemonde LInternet est disponible via notre connexion PPP et il se trouve que 21264941 est precirct agravepropager nos paquets agrave travers le monde et agrave nous renvoyer le reacutesultat

[ahuhome ahu]$ ip route show21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Cela se comprend de soi-mecircme Les 4 premiegraveres lignes donnent explicitement ce qui eacutetait sous-entendu parip address show la derniegravere ligne nous indiquant que le reste du monde peut ecirctre trouveacute via21264941 notre passerelle par deacutefaut Nous pouvons voir que cest une passerelle agrave cause du motltlt via gtgt qui nous indique que nous avons besoin denvoyer les paquets vers 21264941 et que cestelle qui se chargera de tout

En reacutefeacuterence voici ce que lancien utilitaire route nous propose

[ahuhome ahu]$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref UseIface21264941 0000 255255255255 UH 0 0 0 ppp010000 0000 255000 U 0 0 0 eth0127000 0000 255000 U 0 0 0 lo0000 21264941 0000 UG 0 0 0 ppp0

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

10 ip nous montre nos adresses IP

ARP

ARP est le Protocole de Reacutesolution dAdresse (Address Resolution Protocol) Il est deacutecrit dans le RFC 826ARP est utiliseacute par une machine dun reacuteseau local pour retrouver ladresse mateacuterielle (la localisation) duneautre machine sur le mecircme reacuteseau Les machines sur Internet sont geacuteneacuteralement connues par leur nom auquelcorrespond une adresse IP Cest ainsi quune machine sur le reacuteseau foocom est capable de communiqueravec une autre machine qui est sur le reacuteseau barnet Une adresse IP cependant ne peut pas vous indiquerla localisation physique de la machine Cest ici que le protocole ARP entre en jeu

Prenons un exemple tregraves simple Supposons que jaie un reacuteseau composeacute de plusieurs machines dont lamachine foo dadresse IP 10001 et la machine bar qui a ladresse IP 10002 Maintenant fooveut envoyer un ping vers bar pour voir sil est actif mais foo na aucune indication sur la localisation debar Donc si foo deacutecide denvoyer un ping vers bar il a besoin denvoyer une requecircte ARP Cette requecircteARP est une faccedilon pour foo de crier sur le reacuteseau ltlt Bar (10002) Ougrave es-tu gtgt Par conseacutequent toutesles machines sur le reacuteseau entendront foo crier mais seul bar (10002) reacutepondra Bar enverra unereacuteponse ARP directement agrave foo ce qui revient agrave dire ltlt Foo (10001) je suis ici agrave ladresse006094E0812 gtgt Apregraves cette simple transaction utiliseacutee pour localiser son ami sur le reacuteseau foo estcapable de communiquer avec bar jusquagrave ce quil (le cache ARP de foo) oublie ougrave bar est situeacute(typiquement au bout de 15 minutes sur Unix)

Maintenant voyons comment cela fonctionne Vous pouvez consulter votre cache (table) ARP (neighbor)comme ceci

[rootespa041 homesrciputils] ip neigh show937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Comme vous pouvez le voir ma machine espa041 (937641) sait ougrave trouver espa042 (937642)et espagate (93761) Maintenant ajoutons une autre machine dans le cache ARP

[rootespa041 homepaulschgnome-desktop] ping -c 1 espa043PING espa043austinibmcom (937643) from 937641 56(84) bytes of data64 bytes from 937643 icmp_seq=0 ttl=255 time=09 ms

1 packets transmitted 1 packets received 0 packet lossround-trip minavgmax = 090909 ms

[rootespa041 homesrciputils] ip neigh show937643 dev eth0 lladdr 000629218020 nud reachable937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Par conseacutequent lorsque espa041 a essayeacute de contacter espa043 ladresse mateacuterielle de espa043 (salocalisation) a alors eacuteteacute ajouteacutee dans le cache ARP Donc tant que la dureacutee de vie de lentreacutee correspondant agraveespa043 dans le cache ARP nest pas deacutepasseacutee espa041 sait localiser espa043 et na plus besoindenvoyer de requecircte ARP

Maintenant effaccedilons espa043 de notre cache ARP

[rootespa041 homesrciputils] ip neigh delete 937643 dev eth0[rootespa041 homesrciputils] ip neigh show937643 dev eth0 nud failed937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud stale

Maintenant espa041 a agrave nouveau oublieacute la localisation despa043 et aura besoin denvoyer une autrerequecircte ARP la prochaine fois quil voudra communiquer avec lui Vous pouvez aussi voir ci-dessus que leacutetat

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP 11

despagate (93761) est passeacute en stale Cela signifie que la localisation connue est encore valide maisquelle devra ecirctre confirmeacutee agrave la premiegravere transaction avec cette machine

Chapitre 4 Regravegles - bases de donneacutees des politiquesde routageSi vous avez un routeur important il se peut que vous vouliez satisfaire les besoins de diffeacuterentes personnesqui peuvent ecirctre traiteacutees diffeacuteremment Les bases de donneacutees des politiques de routage vous aident agrave fairecela en geacuterant plusieurs ensembles de tables de routage

Si vous voulez utiliser cette fonctionnaliteacute assurez-vous que le noyau est compileacute avec les options IP Advanced router et IP policy routing

Quand le noyau doit prendre une deacutecision de routage il recherche quelle table consulter Par deacutefaut il y a troistables Lancien outil route modifie les tables principale (main) et locale (local) comme le fait loutil ip (pardeacutefaut)

Les regravegles par deacutefaut

[ahuhome ahu]$ ip rule list0 from all lookup local 32766 from all lookup main 32767 from all lookup default

Ceci liste la prioriteacute de toutes les regravegles Nous voyons que toutes les regravegles sont appliqueacutees agrave tous les paquets(from all) Nous avons vu la table main preacuteceacutedemment sa sortie seffectuant avec ip route ls mais lestables local et default sont nouvelles

Si nous voulons faire des choses fantaisistes nous pouvons creacuteer des regravegles qui pointent vers des tablesdiffeacuterentes et qui nous permettent de redeacutefinir les regravegles de routage du systegraveme

Pour savoir exactement ce que fait le noyau en preacutesence dun assortiment de regravegles plus complet reacutefeacuterez-vousagrave la documentation ip-cref dAlexey amplsqbNdT dans le paquetage iproute2 de votre distribution]

Politique de routage simple par ladresse source

Prenons encore une fois un exemple reacuteel Jai 2 modems cacircble connecteacutes agrave un routeur Linux NAT(masquerading) Les personnes habitant avec moi me paient pour avoir accegraves agrave Internet Supposons quun demes co-locataires consulte seulement hotmail et veuille payer moins Cest daccord pour moi mais il utiliserale modem le plus lent

Le modem cacircble ltlt rapide gtgt est connu sous 2126494251 et est en liaison PPP avec 21264941Le modem cacircble ltlt lent gtgt est connu sous diverses adresses IP 2126478148 dans notre exemple avecun lien vers 1959698253

La table locale

[ahuhome ahu]$ ip route list table localbroadcast 127255255255 dev lo proto kernel scope link src 127001 local 10001 dev eth0 proto kernel scope host src 10001 broadcast 10000 dev eth0 proto kernel scope link src 10001 local 2126494251 dev ppp0 proto kernel scope host src 2126494251 broadcast 10255255255 dev eth0 proto kernel scope link src 10001 broadcast 127000 dev lo proto kernel scope link src 127001

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

12 Chapitre 4 Regravegles - bases de donneacutees des politiques de routage

local 2126478148 dev ppp2 proto kernel scope host src 2126478148 local 127001 dev lo proto kernel scope host src 127001 local 1270008 dev lo proto kernel scope host src 127001

Il y a beaucoup de choses eacutevidentes mais aussi des choses qui ont besoin decirctre preacuteciseacutees quelque peu ce quenous allons faire La table de routage par deacutefaut est vide

Regardons la table principale (main)

[ahuhome ahu]$ ip route list table main 1959698253 dev ppp2 proto kernel scope link src 2126478148 21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Maintenant nous geacuteneacuterons une nouvelle regravegle que nous appellerons John pour notre hypotheacutetiqueco-locataire Bien que nous puissions travailler avec des nombres IP purs il est plus facile dajouter notre tabledans le fichier etciproute2rtamplowbartables

echo 200 John gtgt etciproute2rt_tables ip rule add from 100010 table John ip rule ls0 from all lookup local 32765 from 100010 lookup John32766 from all lookup main 32767 from all lookup default

Maintenant tout ce quil reste agrave faire est de geacuteneacuterer la table John et de vider le cache des routes

ip route add default via 1959698253 dev ppp2 table John ip route flush cache

Et voilagrave qui est fait Il ne reste plus comme exercice laisseacute au lecteur quagrave impleacutementer cela dans ip-up

Routage avec plusieurs accegraves Internetfournisseurs daccegraves

Une configuration classique est la suivante ougrave deux fournisseurs daccegraves permettent la connexion dun reacuteseaulocal (ou mecircme dune simple machine) agrave Internet

________ +--------------+ | | | +-------------+ Fournisseur 1+------- __ | | | ___ _ +------+-------+ +--------------+ | _ __ | if1 | | | || Reacuteseau Local -----+ Routeur Linux| | Internet _ __ | | | __ __ | if2 | ___ +------+-------+ +--------------+ | | | | +-------------+ Fournisseur 2+------- | | | +--------------+ ________

Il y a geacuteneacuteralement deux questions agrave se poser pour cette configuration

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de routage simple par ladresse source 13

Accegraves seacutepareacute

La premiegravere est de savoir comment router les reacuteponses aux paquets entrants par un fournisseur particulierdisons le Fournisseur 1 vers ce mecircme fournisseur

Commenccedilons par deacutefinir quelques symboles $IF1 sera le nom de la premiegravere interface (if1 sur la figureau-dessus) et $IF2 le nom de la deuxiegraveme interface $IP1 sera alors ladresse IP associeacutee agrave $IF1 et $IP2 seraladresse IP associeacutee agrave $IF2 $P1 sera ladresse IP de la passerelle du fournisseur daccegraves 1 et $P2 seraladresse IP de la passerelle du fournisseur daccegraves 2 Enfin $P1_NET sera ladresse reacuteseau agrave linteacuterieur duquelse situe $P1 et $P2_NET sera ladresse reacuteseau agrave linteacuterieur duquel se situe $P2

Deux tables de routage suppleacutementaires sont creacuteeacutees par exemple T1 et T2 Celles-ci sont ajouteacutees dansetciproute2rt_tables La configuration du routage dans ces tables seffectue de la faccedilonsuivante

ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2

Rien de vraiment spectaculaire Une route est simplement positionneacutee vers la passerelle et une route pardeacutefaut via cette passerelle est mise en place comme nous le ferions dans le cas dun seul fournisseur daccegravesIci les routes sont placeacutees dans des tables seacutepareacutees une par fournisseur daccegraves Il est agrave noter que la route versle reacuteseau suffit dans la mesure ougrave elle indique comment trouver nimporte quel hocircte dans ce reacuteseau ce quiinclut la passerelle

La table de routage principale est maintenant configureacutee Cest une bonne ideacutee de router les eacuteleacutements agravedestination dun voisin direct agrave travers linterface connecteacutee agrave ce voisin Notez les arguments src qui assurentque la bonne adresse IP source sera choisie

ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2

Indiquez maintenant votre preacutefeacuterence pour votre route par deacutefaut

ip route add default via $P1

Vous configurez ensuite les regravegles de routage Celles-ci deacutefinissent la table qui sera vraiment choisie pour leroutage Il faut sassurer que le routage seffectue agrave travers une interface donneacutee si vous avez ladresse sourcecorrespondante

ip rule add from $IP1 table T1 ip rule add from $IP2 table T2

Cet ensemble de commandes vous assure que toutes les reacuteponses au trafic entrant sur une interface particuliegravereseront envoyeacutees par cette interface

Avertissement

Notes dun lecteur si $P0_NET est le reacuteseau local et $IF0 est son interface alors les entreacutees suivantes sontdeacutesirables

ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

14 Accegraves seacutepareacute

ip route add 1270008 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 1270008 dev lo table T2

Nous avons maintenant une configuration tregraves basique Elle marchera pour tous les processus exeacutecuteacutes sur lerouteur lui-mecircme ainsi que pour le reacuteseau local si celui-ci est masqueacute Si ce nest pas le cas soit vous avezune plage dadresses IP pour chaque fournisseur daccegraves soit vous masquez vers lun des deux fournisseursdaccegraves Dans les deux cas vous ajouterez des regravegles indiquant en fonction de ladresse IP de la machine dureacuteseau local vers quel fournisseur vous allez router

Balance de charge

La seconde question concerne la balance de charge du trafic sortant vers les deux fournisseurs daccegraves Cecinest pas vraiment tregraves dur si vous avez deacutejagrave configureacute laccegraves seacutepareacute comme deacutecrit ci-dessus

Au lieu de choisir lun des deux fournisseurs daccegraves comme route par deacutefaut celle-ci peut ecirctre une routemulti-chemin Par deacutefaut le noyau reacutepartira les routes vers les deux fournisseurs daccegraves Ceci est reacutealiseacute de lafaccedilon suivante (construit eacutegalement sur lexemple de la section de laccegraves seacutepareacute)

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

Ceci reacutealisera la balance des routes vers les deux fournisseurs Les paramegravetres weight peuvent permettre defavoriser un fournisseur par rapport agrave un autre

Il est agrave noter que la balance de charge ne sera pas parfaite dans la mesure ougrave elle est baseacutee sur les routes et quecelles-ci sont mises dans des caches Ceci signifie que les routes vers les sites les plus souvent utiliseacutespasseront toujours par le mecircme fournisseur daccegraves

De plus si vous voulez vraiment mettre en oeuvre ceci vous devriez eacutegalement aller consulter les mises agrave jourde Julien Anastasov agrave httpwwwssibg~jaroutes Elles rendront le travail plus facile

Chapitre 5 GRE et autres tunnelsIl y a trois sortes de tunnels sous Linux lIP dans un tunnel IP le tunnel GRE et les tunnels qui existent endehors du noyau (comme PPTP par exemple)

Quelques remarques geacuteneacuterales agrave propos des tunnels

Les tunnels peuvent faire des choses tregraves inhabituelles et vraiment sympas Ils peuvent aussi absolument toutdeacutetraquer si vous ne les avez pas configureacutes correctement Ne deacutefinissez pas votre route par deacutefaut sur untunnel agrave moins que vous ne sachiez EXACTEMENT ce que vous faites

De plus le passage par un tunnel augmente le poids des en-tecirctes (overhead) puisquun en-tecircte IPsuppleacutementaire est neacutecessaire Typiquement ce surcoucirct est de 20 octets par paquet Donc si la taillemaximum de votre paquet sur votre reacuteseau (MTU) est de 1500 octets un paquet qui est envoyeacute agrave travers untunnel sera limiteacute agrave une taille de 1480 octets Ce nest pas neacutecessairement un problegraveme mais soyez sucircr davoirbien eacutetudieacute la fragmentation et le reacuteassemblage des paquets IP quand vous preacutevoyez de relier des reacuteseaux degrande taille par des tunnels Et bien sucircr la maniegravere la plus rapide de creuser un tunnel est de creuser des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 5 GRE et autres tunnels 15

cocircteacutes

IP dans un tunnel IP

Ce type de tunnel est disponible dans Linux depuis un long moment Il neacutecessite deux modules ipipo etnewamplowbartunnelo

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsInternet) Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C

et le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quel paquet de A vers B etvice-versa Il est eacutegalement possible dutiliser lInternet pour cela

Voici ce quil faut faire

Premiegraverement assurez-vous que les modules soient installeacutes

insmod ipipoinsmod new_tunnelo

Ensuite sur le routeur du reacuteseau A faites la chose suivante

ifconfig tunl0 10011 pointopoint 172192021route add -net 10020 netmask 2552552550 dev tunl0

et sur le routeur du reacuteseau B

ifconfig tunl0 10021 pointopoint 172161718route add -net 10010 netmask 2552552550 dev tunl0

Et quand vous aurez termineacute avec votre tunnel

ifconfig tunl0 down

Vite fait bien fait Vous ne pouvez pas transmettre les paquets de diffusion (broadcast) ni le trafic IPv6 agravetravers un tunnel IP-IP Vous ne pouvez connecter que deux reacuteseaux IPv4 qui normalement ne seraient pascapables de se ltlt parler gtgt cest tout Dans la mesure ougrave la compatibiliteacute a eacuteteacute conserveacutee ce code tournedepuis un bon moment et il reste compatible depuis les noyaux 13 Le tunnel Linux IP dans IP ne fonctionnepas avec dautres systegravemes dexploitation ou routeurs pour autant que je sache Cest simple ccedila marcheUtilisez-le si vous le pouvez autrement utilisez GRE

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

16 Quelques remarques geacuteneacuterales agrave propos des tunnels

Le tunnel GRE

GRE est un protocole de tunnel qui a eacuteteacute agrave lorigine deacuteveloppeacute par Cisco et qui peut reacutealiser plus de chosesque le tunnel IP dans IP Par exemple vous pouvez aussi transporter du trafic multi-diffusion (multicast) et delIPv6 agrave travers un tunnel GRE

Dans Linux vous aurez besoin du module ipamplowbargreo

Le tunnel IPv4

Dans un premier temps inteacuteressons-nous au tunnel IPv4

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsinternet)

Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C Appelons ce reacuteseau neta

Et pour le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C Appelons ce reacuteseau netb

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quels paquets de A vers B etvice-versa Comment et pourquoi on sen moque

Sur le routeur du reacuteseau A nous faisons la chose suivante

ip tunnel add netb mode gre remote 172192021 local 172161718 ttl 255ip link set netb upip addr add 10011 dev netbip route add 1002024 dev netb

Discutons un peu de cela Sur la ligne 1 nous avons ajouteacute un peacuteripheacuterique tunnel que nous avons appeleacutenetb (ce qui est eacutevident dans la mesure ougrave cest lagrave que nous voulons aller) De plus nous lui avons ditdutiliser le protocole GRE (mode gre) que ladresse distante est 172192021 (le routeur de lautrecocircteacute) que nos paquets ltlt tunneleacutes gtgt devront ecirctre geacuteneacutereacutes agrave partir de 172161718 (ce qui autorise votreserveur agrave avoir plusieurs adresses IP sur le reacuteseau C et ainsi vous permet de choisir laquelle sera utiliseacutee pourvotre tunnel) et que le champ TTL de vos paquets sera fixeacute agrave 255 (ttl 255)

La deuxiegraveme ligne active le peacuteripheacuterique

Sur la troisiegraveme ligne nous avons donneacute agrave cette nouvelle interface ladresse 10011 Cest bon pour depetits reacuteseaux mais quand vous commencez une exploitation miniegravere (BEAUCOUP de tunnels ) vouspouvez utiliser une autre gamme dadresses IP pour vos interfaces ltlt tunnel gtgt (dans cet exemple vouspourriez utiliser 10030)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le tunnel GRE 17

Sur la quatriegraveme ligne nous positionnons une route pour le reacuteseau B Notez la notation diffeacuterente pour lemasque de sous-reacuteseau Si vous necirctes pas familiariseacute avec cette notation voici comment ccedila marche vouseacutecrivez le masque de sous-reacuteseau sous sa forme binaire et vous comptez tous les 1 Si vous ne savez pascomment faire cela rappelez-vous juste que 255000 est 8 25525500 est 16 et2552552550 est 24 Et 2552552540 est 23 au cas ougrave ccedila vous inteacuteresserait

Mais arrecirctons ici et continuons avec le routeur du reacuteseau B

ip tunnel add neta mode gre remote 172161718 local 172192021 ttl 255ip link set neta upip addr add 10021 dev netaip route add 1001024 dev neta

Et quand vous voudrez retirer le tunnel sur le routeur A

ip link set netb downip tunnel del netb

Bien sucircr vous pouvez remplacer netb par neta pour le routeur B

Le tunnel IPv6

Voir la section 6 pour une courte description des adresses IPv6

Agrave propos des tunnels

Supposons que vous ayez le reacuteseau IPv6 suivant et que vous vouliez le connecter agrave une dorsale IPv6 (6bone)ou agrave un ami

Reacuteseau 3ffe406515a2196

Votre adresse IPv4 est 172161718 et le routeur 6bone a une adresse IPv4 172222324

ip tunnel add sixbone mode sit remote 172222324 local 172161718 ttl 255ip link set sixbone upip addr add 3ffe406515a2196 dev sixboneip route add 3ffe15 dev sixbone

Voyons cela de plus pregraves Sur la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique tunnel appeleacute sixboneNous lui avons affecteacute le mode sit (qui est le tunnel IPv6 sur IPv4) et lui avons dit ougrave lon va (remote) etdougrave lon vient (local) TTL est configureacute agrave son maximum 255 Ensuite nous avons rendu le peacuteripheacuteriqueactif (up) Puis nous avons ajouteacute notre propre adresse reacuteseau et configureacute une route pour 3ffe15 agravetravers le tunnel

Les tunnels GRE constituent actuellement le type de tunnel preacutefeacutereacute Cest un standard qui est largementadopteacute mecircme agrave lexteacuterieur de la communauteacute Linux ce qui constitue une bonne raison de lutiliser

Tunnels dans lespace utilisateur

Il y a des dizaines dimpleacutementations de tunnels agrave lexteacuterieur du noyau Les plus connues sont bien sucircr PPP etPPTP mais il y en a bien plus (certaines proprieacutetaires certaines seacutecuriseacutes dautres qui nutilisent pas IP) quideacutepassent le cadre de ce HOWTO

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

18 Le tunnel IPv4

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsaleIPv6 (6bone)Par Marco Davids ltmarcosaranlgt

NOTE au mainteneur

En ce qui me concerne ce tunnel IPv6-IPv4 nest pas par deacutefinition un tunnel GRE Vous pouvez reacutealiser untunnel IPv6 sur IPv4 au moyen des peacuteripheacuteriques tunnels GRE (tunnels GRE NIMPORTE QUOI vers IPv4)mais le peacuteripheacuterique utiliseacute ici (sit) ne permet que des tunnels IPv6 sur IPv4 ce qui est quelque chose dediffeacuterent

Tunnel IPv6

Voici une autre application des possibiliteacutes de tunnels de Linux Celle-ci est populaire parmi les premiersadeptes dIPv6 ou les pionniers si vous preacutefeacuterez Lexemple pratique deacutecrit ci-dessous nest certainement pas laseule maniegravere de reacutealiser un tunnel IPv6 Cependant cest la meacutethode qui est souvent utiliseacutee pour reacutealiser untunnel entre Linux et un routeur Cisco IPv6 et lexpeacuterience ma appris que cest ce type deacutequipement quebeaucoup de personnes ont Dix contre un que ceci sappliquera aussi pour vous -)

De petites choses agrave propos des adresses IPv6

Les adresses IPv6 sont en comparaison avec les adresses IPv4 vraiment grandes 128 bits contre 32 bits Etceci nous fournit la chose dont nous avons besoin beaucoup beaucoup dadresses IP 340282266920938463463374607431768211465 pour ecirctre preacutecis A part ceci IPv6 (ou IPnggeacuteneacuteration suivante (Next Generation)) est supposeacute fournir des tables de routage plus petites sur les routeursdes dorsales Internet une configuration plus simple des eacutequipements une meilleure seacutecuriteacute au niveau IP etun meilleur support pour la Qualiteacute de Service (QoS)

Un exemple 2002836b9820000000000000836b9886

Ecrire les adresses IPv6 peut ecirctre un peu lourd Il existe donc des regravegles qui rendent la vie plus facile

Ne pas utiliser les zeacuteros de tecircte comme dans IPv4 bull Utiliser des double-points de seacuteparation tous les 16 bits ou 2 octets bull Quand vous avez beaucoup de zeacuteros conseacutecutifs vous pouvez eacutecrire Vous ne pouvez cependantfaire cela quune seule fois par adresse et seulement pour une longueur de 16 bits

bull

Ladresse 2002836b9820000000000000836b9886 peut ecirctre eacutecrite2002836b9820836b9886 ce qui est plus amical

Un autre exemple ladresse 3ffe0000000000000000000034A1F32C peut ecirctre eacutecrite3ffe2034A1F32C ce qui est beaucoup plus court

IPv6 a pour but decirctre le successeur de lactuel IPv4 Dans la mesure ougrave cette technologie est relativementreacutecente il ny a pas encore de reacuteseau natif IPv6 agrave leacutechelle mondiale Pour permettre un deacuteveloppement rapidela dorsale IPv6 (6bone) a eacuteteacute introduite

Les reacuteseaux natifs IPv6 sont interconnecteacutes gracircce agrave lencapsulation du protocole IPv6 dans des paquets IPv4qui sont envoyeacutes agrave travers linfrastructure IPv4 existante dun site IPv6 agrave un autre

Cest dans cette situation que lon monte un tunnel

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone) 19

Pour ecirctre capable dutiliser IPv6 vous devrez avoir un noyau qui le supporte Il y a beaucoup de bonsdocuments qui expliquent la maniegravere de reacutealiser cela Mais tout se reacutesume agrave quelques eacutetapes

Reacutecupeacuterer une distribution Linux reacutecente avec une glibc convenablebull Reacutecupeacuterer alors les sources agrave jour du noyaubull

Si tout cela est fait vous pouvez alors poursuivre en compilant un noyau supportant lIPv6

Aller dans usrsrclinux et tapez bull make menuconfigbull Choisir Networking Optionsbull Seacutelectionner The IPv6 protocol IPv6 enable EUI-64 token format IPv6disable provider based addresses

bull

ASTUCE Ne compiler pas ces options en tant que module Ceci ne marchera souvent pas bien

En dautres termes compilez IPv6 directement dans votre noyau Vous pouvez alors sauvegarder votreconfiguration comme dhabitude et entreprendre la compilation de votre noyau

ASTUCE Avant de faire cela modifier votre Makefile comme suit EXTRAVERSION = -x --gt EXTRAVERSION = -x-IPv6

Il y a beaucoup de bonnes documentations sur la compilation et linstallation dun noyau Cependant cedocument ne traite pas de ce sujet Si vous rencontrez des problegravemes agrave ce niveau allez et recherchez dans ladocumentation des renseignements sur la compilation du noyau Linux correspondant agrave vos propresspeacutecifications

Le fichier usrsrclinuxREADME peut constituer un bon deacutepart Apregraves avoir reacutealiseacute tout ceci etredeacutemarreacute avec votre nouveau noyau flambant neuf vous pouvez lancer la commande sbinifconfig -a etnoter un nouveau peacuteripheacuterique sit0 SIT signifie Transition Simple dInternet (Simple Internet Transition)Vous pouvez vous auto complimenter vous avez maintenant franchi une eacutetape importante vers IP laprochaine geacuteneacuteration -)

Passons maintenant agrave leacutetape suivante Vous voulez connecter votre hocircte ou peut-ecirctre mecircme tout votre reacuteseauLAN agrave dautres reacuteseaux IPv6 Cela pourrait ecirctre la dorsale IPv6 ltlt 6bone gtgt qui a eacuteteacute speacutecialement mise enplace dans ce but particulier

Supposons que vous avez le reacuteseau IPv6 suivant 3ffe6046864 et que vous vouliez le connecter agraveune dorsale IPv6 ou agrave un ami Notez sil vous plaicirct que la notation sous-reacuteseau 64 est similaire agrave celle desadresses IPv4

Votre adresse IPv4 est 14510024181 et le routeur 6bone a ladresse IPv4 14510015

ip tunnel add sixbone mode sit remote 14510015 [local 14510024181 ttl 225] ip link set sixbone up ip addr add 3FFE60467296 dev sixbone ip route add 3ffe015 dev sixbone

Discutons de ceci Dans la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique appeleacute sixbone Nous lui avonsdonneacute lattribut sit (mode sit) (qui est le tunnel IPv6 dans IPv4) et nous lui avons dit ougrave aller (remote)et dougrave nous venions (local) TTL est configureacute agrave son maximum 255

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

20 Tunnel IPv6

Ensuite nous avons rendu le peacuteripheacuterique actif (up) Apregraves cela nous avons ajouteacute notre propre adressereacuteseau et configureacute une route pour 3ffe15 (qui est actuellement la totaliteacute du 6bone) agrave travers le tunnelSi la machine sur laquelle vous mettez en place tout ceci est votre passerelle IPv6 ajoutez alors les lignessuivantes

echo 1 gtprocsysnetipv6confallforwarding usrlocalsbinradvd

En derniegravere instruction radvd est un deacutemon dannonce comme zebra qui permet de supporter lesfonctionnaliteacutes dautoconfiguration dIPv6 Recherchez le avec votre moteur de recherche favori Vous pouvezveacuterifier les choses comme ceci

sbinip -f inet6 addr

Si vous arrivez agrave avoir radvd tournant sur votre passerelle IPv6 et que vous deacutemarrez une machine avec IPv6sur votre reacuteseau local vous serez ravi de voir les beacuteneacutefices de lautoconfiguration IPv6

sbinip -f inet6 addr1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue inet6 1128 scope host

3 eth0 ltBROADCASTMULTICASTUPgt mtu 1500 qdisc pfifo_fast qlen 100inet6 3ffe6046850544cfffe01e3d664 scope global dynamicvalid_lft forever preferred_lft 604646sec inet6 fe8050544cfffe01e3d610 scope link

Vous pouvez maintenant configurer votre serveur de noms pour les adresses IPv6 Le type A a un eacutequivalentpour IPv6 AAAA Leacutequivalent de in-addrarpa est ip6int Il y a beaucoup dinformationsdisponibles sur ce sujet

Il y a un nombre croissant dapplications IPv6 disponibles comme le shell seacutecuriseacute telnet inetd le navigateurMozilla le serveur web Apache et beaucoup dautres Mais ceci est en dehors du sujet de ce document deroutage -)

Du cocircteacute Cisco la configuration ressemblera agrave ceci

interface Tunnel1description IPv6 tunnelno ip addressno ip directed-broadcastipv6 address 3FFE60467196tunnel source Serial0tunnel destination 14510024181tunnel mode ipv6ipipv6 route 3FFE6046864 Tunnel1

Si vous navez pas un Cisco agrave votre disposition essayez un des prestataires de tunnel IPv6 disponible surInternet Ils sont precircts agrave configurer leur Cisco avec un tunnel suppleacutementaire pour vous le plus souvent aumoyen dune agreacuteable interface web Cherchez ipv6 tunnel broker avec votre moteur de recherche favori

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers InternetA ce jour deux versions dIPSEC sont disponibles pour Linux FreeSWAN qui fucirct la premiegravereimpleacutementation majeure existe pour les noyaux Linux 22 et 24 Ce projet a un site officiel et eacutegalement unsite non officiel qui est bien maintenu FreeSWAN na jamais eacuteteacute inteacutegreacute dans le noyau pour un certainnombre de raisons Celle qui est la plus souvent mentionneacutee concerne un problegraveme politique avec les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers Internet 21

ameacutericains travaillant sur la cryptographie qui freinent son exportabiliteacute De plus la mise en place deFreeSWAN dans le noyau Linux est deacutelicate ce qui nen fait pas un bon candidat pour une reacuteelle inteacutegration

De plus des personnes se sont inquieacuteteacutees de la qualiteacute du code Pour configurer FreeSWAN de nombreusesdocumentations sont disponibles

Une impleacutementation native dIPSEC est preacutesente dans le noyau agrave partir de la version Linux 2547 Elle a eacuteteacuteeacutecrite par Alexey Kuznetsov et Dave Miller qui se sont inspireacutes des travaux du groupe USAGI IPv6 Aveccette fusion les CryptoAPI de James Morris deviennent eacutegalement une partie du noyau qui fait ainsi vraimentdu cryptage

Ce HOWTO ne documente que la version 25 dIPSEC FreeSWAN est recommandeacute pour linstant pour lesutilisateurs de Linux 24 Faicirctes cependant attention dans la mesure ougrave sa configuration est diffeacuterente delIPSEC natif Il y a maintenant une mise agrave jour qui permet au code FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux

A partir du noyau 2549 IPSEC fonctionne sans lajout de mises agrave jour suppleacutementaires

Note Les outils de lespace utilisateur sont disponibles ici Il y a plusieurs programmesdisponibles celui qui est proposeacute dans le lien est baseacute sur Racoon

Lors de la compilation du noyau soyez sucircr dactiver PF_KEY AH et tous les eacuteleacutements deCryptoAPI

Avertissement

Lauteur de ce chapitre est un complet nigaud en ce qui concerne IPSEC Si vous trouvez les ineacutevitableserreurs envoyez un courrier eacutelectronique agrave Bert Hubert ltahuds9anlgt

Tout dabord nous montrerons comment configurer manuellement une communication seacutecuriseacutee entre deuxhocirctes Une grande partie de ce processus peut ecirctre automatiseacutee mais nous le ferons ici agrave la main afin decomprendre ce qui se passe sous le capot

Passez agrave la section suivante si la seule gestion automatique des cleacutes vous inteacuteresse Soyez cependant conscientque la compreacutehension de la gestion manuelle des cleacutes est utile

Introduction sur la gestion manuelle des cleacutes

IPSEC est un sujet compliqueacute De nombreuses informations sont disponibles en ligne Ce HOWTO seconcentrera sur la mise en place et agrave lexplication des principes de base Tous les exemples sont baseacutes surRacoon dont le lien est donneacute au-dessus

Note Certaines configurations iptables rejettent les paquets IPSEC Pour transmettreIPSEC utilisez iptables -A xxx -p 50 -j ACCEPT et iptables -A xxx -p 51 -j ACCEPT

IPSEC offre une version seacutecuriseacutee de la couche IP (Internet Protocol) La seacutecuriteacute dans ce contexte prend deuxformes lencryptage et lauthentification Une vision naiumlve de la seacutecuriteacute ne propose que le cryptage On peutcependant montrer facilement que cest insuffisant il se peut que vous ayez une communication crypteacutee maisvous navez aucune garantie que lhocircte distant est bien celui auquel vous pensez

IPSEC supporte Encapsulated Security Payload (Encapsulation Seacutecuriseacutee de la Charge utile) (ESP) pour lecryptage et Authentication Header (Entecircte dAuthentification) (AH) pour authentifier le partenaire distantVous pouvez configurer les deux ou deacutecider de ne faire que lun des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

22 Introduction sur la gestion manuelle des cleacutes

ESP et AH sappuient tous les deux sur des Associations de Seacutecuriteacute (Security Associations (SA)) UneAssociation de Seacutecuriteacute (SA) consiste en une source une destination et une instruction Un exemple simpledAssociation de Seacutecuriteacute (SA) pour lauthentification peut ressembler agrave ceci

add 100011 1000216 ah 15700 -A hmac-md5 1234567890123456

Ceci indique que le trafic allant de 100011 vers 1000216 a besoin dun En-tecircte dAuthentification(AH) qui peut ecirctre signeacute en utilisant HMAC-MD et le secret 1234567890123456 Cette instruction estrepeacutereacutee par lidentificateur SPI (Security Parameter Index)15700 dont nous parlerons plus par la suite Lepoint inteacuteressant agrave propos des Associations de Seacutecuriteacute (SA) est quelles sont symeacutetriques Les deux coteacutes dela conversation partagent exactement la mecircme Association de Seacutecuriteacute (SA) qui nest pas recopieacutee sur lhocirctedistant Notez cependant quil ny a pas de regravegles dinversion automatique Cette Association de Seacutecuriteacute(SA) deacutecrit une authentification possible de 100011 vers 1000216 Pour un trafic bidirectionneldeux Associations de Seacutecuriteacute (SA) sont neacutecessaires

Un exemple dAssociation de Seacutecuriteacute (SA) pour le cryptage ESP

add 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012

Ceci signifie que le trafic allant de 100011 vers 1000216 est chiffreacute en utilisant 3des-cbc avec lacleacute 123456789012123456789012 Lidentificateur SPI est 15701

Jusquici nous avons vu que les Associations de Seacutecuriteacute (SA) deacutecrivent les instructions possibles mais pas lapolitique qui indique quand ces SA doivent ecirctre utiliseacutees En fait il pourrait y avoir un nombre arbitraire deSA presques identiques ne se diffeacuterenciant que par les identificateurs SPI Entre parenthegraveses SPI signifieSecurity Parameter Index ou Index du Paramegravetre de Seacutecuriteacute en franccedilais Pour faire vraiment du cryptagenous devons deacutecrire une politique Cette politique peut inclure des choses comme utiliser ipsec sil estdisponible ou rejeter le trafic agrave moins que vous ayez ipsec

Une Politique de Seacutecuriteacute (Security Policy (SP)) typique ressemble agrave ceci

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Si cette configuration est appliqueacutee sur lhocircte 1000216 cela signifie que tout le trafic allant vers100011 doit ecirctre encrypteacute et encapsuleacute dans un en-tecircte dauthentification AH Notez que ceci ne deacutecritpas quelle SA sera utiliseacutee Cette deacutetermination est un exercice laisseacute agrave la charge du noyau

En dautres termes une Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons une Association de Seacutecuriteacutedeacutecrit COMMENT nous le voulons

Les paquets sortants sont eacutetiqueteacutes avec le SPI SA (le comment) que le noyau utilise pour lencryptage etlauthentification et lhocircte distant peut consulter les instructions de veacuterification et de deacutecryptagecorrespondantes

Ce qui suit est une configuration tregraves simple permettant le dialogue de lhocircte 1000216 vers lhocircte100011 en utilisant lencryptage et lauthentification Notez que le trafic de retour de cette premiegravereversion est en clair et que cette configuration ne doit pas ecirctre deacuteployeacutee

Sur lhocircte 1000216

sbinsetkey -f

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Introduction sur la gestion manuelle des cleacutes 23

add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456 add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Sur lhocircte 100011 nous donnons les mecircmes Associations de Seacutecuriteacute (SA) Nous ne donnons pas dePolitique de Seacutecuriteacute

sbinsetkey -fadd 1000216 100011 ah 24500 -A hmac-md5 1234567890123456add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

Avec la mise en place de la configuration ci-dessus (ces fichiers peuvent ecirctre exeacutecuteacutes si setkey est installeacutedans sbin) la commande ping 100011 exeacutecuteacutee sur 1000216 va donner la sortie suivante avec tcpdump

223752 1000216 gt 100011 AH(spi=0x00005fb4seq=0xa) ESP(spi=0x00005fb5seq=0xa) (DF)223752 100011 gt 1000216 icmp echo reply

Notez que le paquet de retour provenant de 100011 est en effet complegravetement visible Le paquet ping eacutemispar 1000216 ne peut eacutevidemment pas ecirctre lu par tcpdump mais celui-ci montre lIndex du Paramegravetre deSeacutecuriteacute (SPI) de lAH ainsi que lESP qui indique agrave 100011 comment veacuterifier lauthenticiteacute de notre paquetet comment le deacutecrypter

Quelques eacuteleacutements doivent ecirctre mentionneacutes La configuration ci-dessus est proposeacutee dans de nombreuxexemples dIPSEC mais elle est tregraves dangereuse Le problegraveme est quelle contient la politique indiquant agrave1000216 comment traiter les paquets allant vers 100011 et comment 100011 doit traiter ces paquetsmais ceci nINDIQUE pas agrave 100011 de rejeter le trafic non authentifieacute et non encrypteacute

Nimporte qui peut maintenant inseacuterer des donneacutees spoofeacutees (NdT usurpeacutees) et entiegraverement non crypteacuteesque 10001 acceptera Pour remeacutedier agrave ceci nous devons avoir sur 100011 une Politique de Seacutecuriteacute pourle trafic entrant

sbinsetkey -f spdadd 1000216 100011 any -P IN ipsec esptransportrequire ahtransportrequire

Ceci indique agrave 100011 que tout le trafic venant de 1000216 neacutecessite davoir un ESP et AH valide

Maintenant pour compleacuteter cette configuration nous devons eacutegalement renvoyer un trafic encrypteacute etauthentifieacute La configuration complegravete sur 1000216 est la suivante

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

24 Introduction sur la gestion manuelle des cleacutes

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire ahtransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 100011 1000216 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire ahtransportrequire

Notez que dans cet exemple nous avons utiliseacute des cleacutes identiques pour les deux directions du trafic Cecinest cependant en aucun cas exigeacute

Pour examiner la configuration que nous venons de creacuteer exeacutecuter setkey -D qui montre les SA ou setkey-DP qui montre les politiques configureacutees

Gestion automatique des cleacutes

Dans la section preacuteceacutedente lencryptage eacutetait configureacute pour utiliser simplement le partage de secrets Endautres termes pour rester seacutecuriseacute nous devons transfeacuterer la configuration de notre encryptage agrave travers untunnel seacutecuriseacute Si nous avons configureacute lhocircte distant par telnet nimporte quel tiers pourrait avoir prisconnaissance de notre secret partageacute et ainsi notre configuration ne serait plus sucircre

De plus puisque le secret est partageacute ce nest pas un secret Lhocircte distant ne peut pas en faire grand chosemais nous devons ecirctre sucircrs dutiliser un secret diffeacuterent pour les communications avec tous nos partenairesCeci neacutecessite un grand nombre de cleacutes Pour 10 partenaires nous devrions avoir au moins 50 secretsdiffeacuterents

En plus du problegraveme des cleacutes symeacutetriques le renouvellement des cleacutes est eacutegalement neacutecessaire Si un tierseacutecoute suffisamment le trafic il peut ecirctre en position de retrouver la cleacute par reacutetro ingeacutenierie On peut senpreacutemunir en modifiant la cleacute de temps en temps mais ce processus a besoin decirctre automatiseacute

Un autre problegraveme est que la gestion manuelle des cleacutes deacutecrite au-dessus impose de deacutefinir preacuteciseacutement lesalgorithmes et les longueurs de cleacutes utiliseacutees ce qui neacutecessite une grande coordination avec lhocircte distant Il

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestion automatique des cleacutes 25

serait preacutefeacuterable davoir la capaciteacute agrave deacutecrire une politique des cleacutes plus large comme par exemple Nouspouvons faire du 3DES et du Blowfish avec les longueurs de cleacutes suivantes

Pour reacutesoudre ces problegravemes IPSEC fournit lEchange de Cleacute sur Internet (Internet Key Echange (IKE))permettant dautomatiser leacutechange de cleacutes geacuteneacutereacutees aleacuteatoirement Ces cleacutes sont transmises en utilisant unetechnologie dencryptage asymeacutetrique neacutegocieacutee

Limpleacutementation IPSEC de Linux 25 fonctionne avec le deacutemon IKE KAME racoon Depuis le 9novembre la version de racoon preacutesente la distribution iptools dAlexey peut ecirctre compileacutee en supprimant aupreacutealable include ltnetroutehgt dans deux fichiers Je fournis une version preacutecompileacutee

Note LEchange de Cleacute sur Internet (IKE) doit avoir accegraves au port UDP 500 Soyez sucircr queiptables ne le bloque pas

Theacuteorie

Comme expliqueacute avant la gestion automatique des cleacutes reacutealise beaucoup dopeacuterations pour nousSpeacutecifiquement il creacutee agrave la voleacutee les Associations de Seacutecuriteacute Il ne configure cependant pas la politique pournous ce qui est le fonctionnement attendu

Donc pour beacuteneacuteficier de IKE configurez une politique mais ne fournissez aucune Association de Seacutecuriteacute Sile noyau deacutecouvre quil y a une politique IPSEC mais pas dAssociation de Seacutecuriteacute il va le notifier au deacutemonIKE qui va chercher agrave en neacutegocier une

De nouveau rappelons que la Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons tandis que lAssociation deSeacutecuriteacute deacutecrit COMMENT nous le voulons Lutilisation de la gestion automatique des cleacutes nous permet dene speacutecifier que ce que nous voulons

Exemple

Kame racoon possegravede un grand nombre doptions dont la plupart des valeurs par deacutefaut sont corrects nousnavons donc pas besoin de les modifier Comme nous lavons dit auparavant lopeacuterateur doit deacutefinir unePolitique de Seacutecuriteacute mais pas dAssociations de Seacutecuriteacute Nous laissons cette neacutegociation au deacutemon IKE

Dans cet exemple 10001 et 1000216 sont encore une fois sur le point deacutetablir des communicationsseacutecuriseacutees mais cette fois avec laide du deacutemon racoon Par soucis de simplification cette configurationutilisera des cleacutes preacute-partageacutees les redouteacutes secrets partageacutes Nous discuterons des certificats X509 dans unesection agrave part Voir la section intituleacutee Gestion automatique des cleacutes en utilisant les certificats X509gt

Nous allons agrave peu pregraves rester fidegravele agrave la configuration par deacutefaut qui est identique sur les deux hocirctes

path pre_shared_key usrlocaletcracoonpsktxt

remote anonymous exchange_mode aggressivemain doi ipsec_doi situation identity_only

my_identifier address

lifetime time 2 min secminhour initial_contact on proposal_check obey obey strict or claim

proposal encryption_algorithm 3des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

26 Theacuteorie

hash_algorithm sha1 authentication_method pre_shared_key dh_group 2

sainfo anonymous pfs_group 1 lifetime time 2 min encryption_algorithm 3des authentication_algorithm hmac_sha1 compression_algorithm deflate

Beaucoup de paramegravetres Je pense que lon peut encore en supprimer pour se rapprocher de la configurationpar deacutefaut Remarquons ici quelques eacuteleacutements notables Nous avons configureacute deux sections anonymous cequi convient pour tous les hocirctes distants Ceci va ainsi faciliter les configurations suppleacutementaires Il nest pasneacutecessaire davoir de sections speacutecifiques agrave une machine particuliegravere agrave moins que vous ne le vouliez vraiment

De plus la configuration preacutecise que nous nous identifions gracircce agrave notre adresse IP (my_identifier address) etque nous pouvons faire du 3des sha1 et que nous utiliserons une cleacute preacute-partageacutee se trouvant dans psktxt

Dans le fichier psktxt nous avons configureacute deux entreacutees qui sont diffeacuterentes suivant les hocirctes Sur100011

1000216 password2

Sur 1000216

100011 password2

Soyez sucircr que ces fichiers sont la proprieacuteteacute de root et quils ont le mode 0600 Dans le cas contraire racoonne pourra faire confiance agrave leur contenu Notez que ces fichiers sont symeacutetriques lun de lautre

Nous sommes maintenant precirct agrave configurer notre politique qui est assez simple Sur lhocircte 1000216

sbinsetkey -fflushspdflush

spdadd 1000216 100011 any -P out ipsec esptransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

spdadd 100011 1000216 any -P out ipsec esptransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire

Noter que ces politiques sont encore une fois symeacutetriques

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exemple 27

Nous sommes maintenant precirct agrave lancer racoon Une fois lanceacute au moment ougrave nous essayons une connexionun telnet depuis 100011 vers 1000216 ou linverse racoon aura deacutemarreacute la neacutegociation

121844 INFO isakmpc1689isakmp_post_acquire() IPsec-SA request for 100011 queued due to no phase1 found121844 INFO isakmpc794isakmp_ph1begin_i() initiate new phase 1 negotiation 1000216[500]lt=gt100011[500]121844 INFO isakmpc799isakmp_ph1begin_i() begin Aggressive mode121844 INFO vendoridc128check_vendorid() received Vendor ID KAMEracoon121844 NOTIFY oakleyc2037oakley_skeyid() couldnt find the proper pskey try to get one by the peers address121844 INFO isakmpc2417log_ph1established() ISAKMP-SA established 1000216[500]-100011[500] spi044d25dede78a4d1ff01e5b4804f0680121845 INFO isakmpc938isakmp_ph2begin_i() initiate new phase 2 negotiation 1000216[0]lt=gt100011[0]121845 INFO pfkeyc1106pk_recvupdate() IPsec-SA established ESPTransport 100011-gt1000216 spi=44556347(0x2a7e03b)121845 INFO pfkeyc1318pk_recvadd() IPsec-SA established ESPTransport 1000216-gt100011 spi=15863890(0xf21052)

Lexeacutecution de la commande setkey -D qui nous montre les Associations de Seacutecuriteacute nous indique quellessont en effet preacutesentes

1000216 100011 esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000) E 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04 A hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99 seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last Nov 11 122912 2002 hard 0(s) soft 0(s) current 304(bytes) hard 0(bytes) soft 0(bytes) allocated 3 hard 0 soft 0 sadb_seq=1 pid=17112 refcnt=0100011 1000216 esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000) E 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a A hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last hard 0(s) soft 0(s) current 231(bytes) hard 0(bytes) soft 0(bytes) allocated 2 hard 0 soft 0 sadb_seq=0 pid=17112 refcnt=0

Nous avons les Politiques de Seacutecuriteacute que nous avons nous-mecircme configureacutees

100011[any] 1000216[any] tcp in ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122912 2002 lifetime0(s) validtime0(s) spid=3616 seq=5 pid=17134 refcnt=31000216[any] 100011[any] tcp out ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122844 2002 lifetime0(s) validtime0(s) spid=3609 seq=4 pid=17134 refcnt=3

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

28 Exemple

Problegravemes et deacutefauts connus

Si cela ne marche pas veacuterifiez que tous les fichiers de configuration sont la proprieacuteteacute de root et quils nepeuvent ecirctre lus que par celui-ci Pour deacutemarrer racoon en avant-plan utilisez -F Pour le forcer agrave lire unfichier de configuration agrave la place de celui preacuteciseacute lors de la compilation utilisez -f Pour obtenir denombreux deacutetails ajouter loption log debug dans le fichier racoonconf

Gestion automatique des cleacutes en utilisant les certificats X509

Comme nous lavons dit avant lutilisation de secrets partageacutes est compliqueacutee car ils ne peuvent pas ecirctrefacilement partageacutes et une fois quils le sont ils ne sont plus secrets Heureusement nous avons latechnologie dencryptage asymmeacutetrique pour nous aider agrave reacutesoudre ce problegraveme

Si chaque participant dune liaison IPSEC creacutee une cleacute publique et priveacutee des communications seacutecuriseacuteespeuvent ecirctre mises en place par les deux parties en publiant leur cleacute publique et en configurant leur politique

Creacuteer une cleacute est relativement facile bien que cela exige un peu de travail Ce qui suit est baseacute sur loutilopenssl

Construire un certificat X509 pour votre hocircte

OpenSSL dispose dune importante infrastructure de gestions des clefs capable de geacuterer des clefs signeacutees ounon par une autoriteacute de certification Pour linstant nous avons besoin de court-circuiter toute cetteinfrastructure et de mettre en place une seacutecuriteacute de charlatan et de travailler sans autoriteacute de certification

Nous allons tout dabord creacuteer une requecircte de certificat (certificate request) pour notre hocircte appeleacute laptop

$ openssl req -new -nodes -newkey rsa1024 -sha1 -keyform PEM -keyout laptopprivate -outform PEM -out requestpem

Des questions nous sont poseacutees

Country Name (2 letter code) [AU]NLState or Province Name (full name) [Some-State]Locality Name (eg city) []DelftOrganization Name (eg company) [Internet Widgits Pty Ltd]Linux AdvancedRouting amp Traffic ControlOrganizational Unit Name (eg section) []laptopCommon Name (eg YOUR name) []bert hubertEmail Address []ahuds9anl

Please enter the following extra attributesto be sent with your certificate requestA challenge password []An optional company name []

Vous avez toute liberteacute quant aux reacuteponses Vous pouvez ou non mettre le nom dhocircte en fonction de vosbesoins de seacutecuriteacute Cest ce que nous avons fait dans cet exemple

Nous allons maintenant auto signer cette requecircte

$ openssl x509 -req -in requestpem -signkey laptopprivate -out laptoppublicSignature oksubject=C=NLL=DelftO=Linux Advanced Routing amp Traffic ControlOU=laptopCN=bert hubertEmail=ahuds9anl

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Problegravemes et deacutefauts connus 29

Getting Private key

Le fichier requestpem peut maintenant ecirctre eacutelimineacute

Reacutepeacutetez cette proceacutedure pour tous les hocirctes qui ont besoin dune cleacute Vous pouvez distribuer le fichier publicen toute impuniteacute mais garder le fichier private priveacute

Configuration et lancement

Une fois que nous avons les cleacutes publiques et priveacutees pour nos hocirctes nous pouvons indiquer agrave racoon de lesutiliser

Reprenons notre configuration preacuteceacutedente et les deux hocirctes 100011 (upstairs) et 1000216 (laptop)

Dans le fichier racoonconf preacutesent sur 100011 nous ajoutons

path certificate usrlocaletcracooncerts

remote 1000216 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

certificate_type x509 upstairspublic upstairsprivate

peers_certfile laptoppublic proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Ceci indique agrave racoon que les certificats se trouvent dans usrlocaletcracooncerts De plusil contient des eacuteleacutements speacutecifiques pour lhocircte distant 1000216

La ligne asn1dn indique agrave racoon que lidentification pour lhocircte local et distant doit ecirctre extraite des cleacutespubliques Ceci correspond agrave la ligne subject=C=NLL=DelftO=Linux Advanced Routing amp TrafficControlOU=laptopCN=bert hubertEmail=ahuds9anl donneacute au-dessus

La ligne certificate_type preacutecise lemplacement des cleacutes publiques et priveacutees locales La deacuteclarationpeers_certfile preacutecise agrave racoon que la cleacute publique de lhocircte distant se trouve dans le fichierlaptoppublic

La section proposal reste inchangeacutee par rapport agrave ce que nous avons vu plus tocirct agrave lexception deauthentification_method qui est maintenant rsasig ce qui indique lutilisation de cleacute RSA publiquepriveacuteepour lauthentification

La configuration ajouteacutee sur 1000216 est presque identique exception faite de lhabituelle symeacutetrie

path certificate usrlocaletcracooncerts

remote 100011 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

30 Construire un certificat X509 pour votre hocircte

certificate_type x509 laptoppublic laptopprivate

peers_certfile upstairspublic

proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Maintenant que nous avons ajouteacute ces eacuteleacutements sur les deux hocirctes la seule chose qui reste agrave faire est de mettreen place les fichiers contenant les cleacutes La machine upstairs doit avoir les fichiers upstairsprivateupstairspublic et laptoppublic placeacutes dans usrlocaletcracooncerts Soyez sucircrque le reacutepertoire est la proprieacuteteacute de root et quil possegravede les droits 0700 Dans le cas contraire racoon pourraitrefuser de lire le contenu de ce reacutepertoire

La machine laptop doit avoir les fichiers upstairsprivate upstairspublic etlaptoppublic placeacutes dans usrlocaletcracooncerts Autrement dit chaque hocircte doitavoir ses propres cleacutes publique et priveacutee et de plus la cleacute publique de lhocircte distant

Veacuterifiez que la Politique de Seacutecuriteacute est en place (exeacutecutez la commande spdadd vue dans la section intituleacuteeExemplegt) Lancez alors racoon et tout devrait fonctionner

Comment configurer des tunnels seacutecuriseacutes

Pour configurer des communications seacutecuriseacutees avec un hocircte distant nous devons eacutechanger des cleacutespubliques Bien quil ne soit pas neacutecessaire que la cleacute publique reste secregravete il est important decirctre sucircr quecette cleacute na pas eacuteteacute modifieacutee En dautres termes vous devez ecirctre certain quil ny a pas de man in the middle[NdT man in the middle est le nom dune attaque qui consiste agrave se placer entre lhocircte eacutemetteur et lhocircte dedestination]

Pour faciliter ceci OpenSSL propose la commande digest

$ openssl dgst upstairspublic MD5(upstairspublic)= 78a3bddafb4d681c1ca8ed4d23da4ff1

La seule chose que nous devons faire est de veacuterifier que notre partenaire distant voit la mecircme empreinte Cecipeut ecirctre effectueacute en se rencontrant physiquement ou par teacuteleacutephone en sassurant que le numeacutero de teacuteleacutephonede lhocircte distant na pas eacuteteacute envoyeacute dans le mecircme courrier eacutelectronique que celui qui contenait la cleacute

Une autre maniegravere de faire ceci est dutiliser un tiers de confiance qui exeacutecute le service dautoriteacute decertification (Certificate Authority) Cette autoriteacute de certification (CA) peut alors signer votre cleacute celle quenous avons nous-mecircme creacuteeacute au-dessus

tunnels IPSEC

Jusquici nous navons seulement consideacutereacute IPSEC dans le mode appeleacute transport ougrave les points terminauxcomprennent directement IPSEC Comme ceci nest pas souvent le cas il peut ecirctre neacutecessaire davoir desrouteurs qui eux seuls comprennent IPSEC et qui reacutealisent le travail pour les hocirctes se trouvant derriegravere euxCeci est appeleacute le mode tunnel

Configurer ceci est tregraves rapide Pour tunneler tout le trafic vers 1301610016 agrave partir de 1000216 via100011 nous eacuteditons ce qui suit sur 1000216

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration et lancement 31

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P out ipsec esptunnel1000216-100011require

Notez que loption -m tunnel est vitale Ceci configure tout dabord une Association de Seacutecuriteacute ESP entreles points terminaux de notre tunnel agrave savoir 1000216 et 100011

Nous allons ensuite reacuteellement configurer le tunnel On doit indiquer au noyau dencrypter tout le trafic de1000024 vers 13016100 De plus ce trafic doit ecirctre envoyeacute vers 100011

100011 a eacutegalement besoin decirctre configureacute

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P in ipsec esptunnel1000216-100011require

Notez que ceci est exactement identique agrave lexception du changement de -P out en -P in Les exemplespreacuteceacutedents nont configureacute le trafic que dans un seul sens Il est laisseacute comme exercice au lecteur le soin decompleacuteter lautre moitieacute du tunnel

Le nom de proxy ESP est eacutegalement donneacute pour cette configuration ce qui est un peu plus clair

Note Le tunnel IPSEC a besoin davoir la transmission IP activeacutee dans le noyau

Autre logiciel IPSEC

Thomas Walpuski preacutecise quil a eacutecrit une mise agrave jour pour que OpenBSD isakpmd puisse fonctionner avecLinux 25 IPSEC De plus la repository principale CVS de isakpmd contient maintenant le code Des notessont disponibles sur cette page

isakpmd est diffeacuterent de racoon mentionneacute au-dessus mais de nombreuses personnes lappreacutecient Il peut ecirctretrouveacute ici Dautres eacuteleacutements de lecture sur le CVS dOpenBSD ici Thomas a eacutegalement creacuteeacute un tarball pourceux qui ne sont pas habitueacutes agrave CVS ou patch

De plus des mises agrave jour sont disponibles pour permettre aux outils FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux 25 Vous pourrez les trouver ici

Interopeacuterabiliteacute dIPSEC avec dautres systegravemes

FIXME Ecrire ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

32 tunnels IPSEC

Windows

Andreas Jellinghaus ltajdungeoninkadegt rapporte win2k cela marche preacute-partage de cleacute et ladresse ippour lauthentification (je ne pense pas que windows supporte fdqn ou userfdqn) Les certificats devraienteacutegalement marcher mais cela na pas eacuteteacute essayeacute

Check Point VPN-1 NG

Peter Bieringer rapporte

Voici des reacutesultats (seul le mode tunnel a eacuteteacute testeacute auth=SHA1) DES ok 3DES ok AES-128 ok AES-192 non supporteacute par CP VPN-1 AES-256 ok CAST non supporteacute par le noyau Linux utiliseacute

Version Testeacutee FP4 aka R54 aka wAI

Plus dinformations ici

Chapitre 8 Routage multidistribution (multicast)FIXME Pas de reacutedacteur

Le Multicast-HOWTO est (relativement) ancien De ce fait il peut ecirctre impreacutecis ou induire en erreur agravecertains endroits

Avant que vous ne puissiez faire du routage multidistribution le noyau Linux a besoin decirctre configureacute poursupporter le type de routage multidistribution que vous voulez faire Ceci agrave son tour exige une deacutecision quantau choix du protocole de routage multidistribution que vous vous preacuteparez agrave utiliser Il y a essentiellementquatre types ltlt communs gtgt de protocoles DVMRP (la version multidistribution du protocole RIP unicast)MOSPF (la mecircme chose mais pour OSPF) PIM-SM (Protocol Independant Multicasting - Sparse Mode) quisuppose que les utilisateurs de nimporte quel groupe de multidistribution sont disperseacutes plutocirct que regroupeacutes)et PIM-DM (le mecircme mais Dense Mode) qui suppose quil y aura un regroupement significatif des utilisateursdun mecircme groupe de multidistribution

On pourra noter que ces options napparaissent pas dans le noyau Linux Ceci sexplique par le fait que leprotocole lui-mecircme est geacutereacute par une application de routage comme Zebra mrouted ou pind Cependant vousdevez avoir une bonne ideacutee de ce que vous allez utiliser de maniegravere agrave seacutelectionner les bonnes options dans lenoyau

Pour tout routage multidistribution vous avez forceacutement besoin de seacutelectionner les options multicastinget multicasting routing Ceci est suffisant pour DVMRP et MOSPF Dans le cas de PIM vous devezeacutegalement valider les options PIMv1 ou PIMv2 suivant que le reacuteseau que vous connectez utilise la version 1ou 2 du protocole PIM

Une fois que tout cela a eacuteteacute reacutealiseacute et que votre nouveau noyau a eacuteteacute compileacute vous verrez au deacutemarrage queIGMP est inclus dans la liste des protocoles IP Celui-ci est un protocole permettant de geacuterer les groupesmultidistribution Au moment de la reacutedaction Linux ne supportait que les versions 1 et 2 de IGMP bien quela version 3 existe et ait eacuteteacute documenteacutee Ceci ne va pas vraiment nous affecter dans la mesure ougrave IGMPv3 estencore trop reacutecent pour que ses fonctionnaliteacutes suppleacutementaires soient largement utiliseacutees Puisque IGMP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 8 Routage multidistribution (multicast) 33

soccupe des groupes seules les fonctionnaliteacutes preacutesentes dans la plus simple version de IGMP geacuterant ungroupe entier seront utiliseacutees IGMPv2 sera utiliseacute dans la plupart des cas bien que IGMPv1 puisse encoreecirctre rencontreacute

Jusque-lagrave cest bon Nous avons activeacute la multidistribution Nous devons dire au noyau de lutiliserconcregravetement Nous allons donc deacutemarrer le routage Ceci signifie que nous ajoutons un reacuteseau virtuel demultidistribution agrave la table du routeur

ip route add 2240004 dev eth0

(En supposant bien sucircr que vous diffusez agrave travers eth0 Remplacez-le par le peacuteripheacuterique de votre choix sineacutecessaire)

Maintenant dire agrave Linux de transmettre les paquets

echo 1 gt procsysnetipv4ipamplowbarforward

Arriveacute ici il se peut que vous vous demandiez si ceci va faire quelque chose Donc pour tester notreconnexion nous pinguons le groupe par deacutefaut 224001 pour voir si des machines sont preacutesentesToutes les machines du reacuteseau local avec la multidistribution activeacutee DEVRAIENT reacutepondre et aucune autreVous remarquerez quaucune des machines qui reacutepondent ne le fait avec ladresse IP 224001 Quellesurprise ) Ceci est une adresse de groupe (une ltlt diffusion gtgt pour les abonneacutes) et tous les membres dugroupe reacutepondront avec leur propre adresse et non celle du groupe

ping -c 2 224001

Maintenant vous ecirctes precirct agrave faire du vrai routage multidistribution Bien en supposant que vous ayez deuxreacuteseaux agrave router lun vers lautre

(A continuer )

Chapitre 9 Gestionnaires de mise en file dattentepour ladministration de la bande passanteQuand je lai deacutecouvert cela ma VRAIMENT souffleacute Linux 22 contient toutes les fonctionnaliteacutes pour lagestion de la bande passante de maniegravere comparable agrave un systegraveme deacutedieacute de haut niveau

Linux deacutepasse mecircme ce que lATM et le Frame peuvent fournir

Afin deacuteviter toute confusion voici les regravegles utiliseacutees par tc pour la speacutecification de la bande passante

mbps = 1024 kbps = 1024 1024 bps =gt bytes (octetss)mbit = 1024 kbit =gt kilo bitsmb = 1024 kb = 1024 1024 b =gt byte (octet)mbit = 1024 kbit =gt kilo bit

En interne les nombres sont stockeacutes en bps (octets) et b (octet)

Mais tc utilise luniteacute suivante lors de laffichage des deacutebits

1Mbit = 1024 Kbit = 1024 1024 bps =gt octetss

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

34 Chapitre 9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en filedattente

Avec la mise en file dattente nous deacuteterminons la maniegravere dont les donneacutees sont ENVOYEES Il est importantde comprendre que nous ne pouvons mettre en forme que les donneacutees que nous transmettons

Avec la maniegravere dont Internet travaille nous navons pas de controcircle direct sur ce que les personnes nousenvoient Cest un peu comme votre boicircte aux lettres (physique ) chez vous Il ny a pas de faccedilon dinfluencerle nombre de lettres que vous recevez agrave moins de contacter tout le monde

Cependant lInternet est principalement baseacute sur TCPIP qui possegravede quelques fonctionnaliteacutes qui vontpouvoir nous aider TCPIP na pas daptitude agrave connaicirctre les performances dun reacuteseau entre deux hocirctes Ilenvoie donc simplement des paquets de plus en plus rapidement (ltlt slow start gtgt) et quand des paquetscommencent agrave se perdre il ralentit car il na plus la possibiliteacute de les envoyer En fait cest un peu plus eacuteleacutegantque cela mais nous en dirons plus par la suite

Cest comme si vous ne lisiez que la moitieacute de votre courrier en espeacuterant que vos correspondants arrecircteront devous en envoyer Agrave la diffeacuterence que ccedila marche sur Internet -)

Si vous avez un routeur et que vous souhaitez eacuteviter que certains hocirctes de votre reacuteseau aient des vitesses deteacuteleacutechargement trop grandes vous aurez besoin de mettre en place de la mise en forme de trafic sur linterfaceINTERNE de votre routeur celle qui envoie les donneacutees vers vos propres ordinateurs

Vous devez eacutegalement ecirctre sucircr que vous controcirclez le goulot deacutetranglement de la liaison Si vous avez unecarte reacuteseau agrave 100Mbit et un routeur avec un lien agrave 256kbit vous devez vous assurer que vous nenvoyez pasplus de donneacutees que ce que le routeur peut manipuler Autrement ce sera le routeur qui controcirclera le lien etqui mettra en forme la bande passante disponible Nous devons pour ainsi dire ltlt ecirctre le proprieacutetaire de la filedattente gtgt et ecirctre le lien le plus lent de la chaicircne Heureusement cest facilement reacutealisable

Gestionnaires de mise en file dattente simples sans classes

Comme nous lavons deacutejagrave dit la gestion de mise en file dattente permet de modifier la faccedilon dont les donneacuteessont envoyeacutees Les gestionnaires de mise en file dattente sans classes sont ceux qui en gros acceptent lesdonneacutees et qui ne font que les reacuteordonner les retarder ou les jeter

Ils peuvent ecirctre utiliseacutes pour mettre en forme le trafic dune interface sans aucune subdivision Il estprimordial que vous compreniez cet aspect de la mise en file dattente avant de continuer sur les gestionnairesde mise en files dattente baseacutes sur des classes contenant dautres gestionnaires de mise en file dattente

Le gestionnaire le plus largement utiliseacute est de loin pfifoamplowbarfast qui est celui par deacutefaut Ceciexplique aussi pourquoi ces fonctionnaliteacutes avanceacutees sont si robustes Elles ne sont rien de plus ltlt quuneautre file dattente gtgt

Chacune de ces files dattente a ses forces et ses faiblesses Toutes nont peut-ecirctre pas eacuteteacute bien testeacutees

pfifoamplowbarfast

Cette file dattente comme son nom lindique premier entreacute premier sorti (First In First Out) signifie queles paquets ne subissent pas de traitements speacuteciaux En fait ce nest pas tout agrave fait vrai Cette file dattente atrois ltlt bandes gtgt A linteacuterieur de chacune de ces bandes des regravegles FIFO sappliquent Cependant tant quily a un paquet en attente dans la bande 0 la bande 1 ne sera pas traiteacutee Il en va de mecircme pour la bande 1 et labande 2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explication sur les files dattente et la gestion de la mise en file dattente 35

Le noyau prend en compte la valeur du champ Type de Service des paquets et prend soin dinseacuterer dans labande 0 les paquets ayant le bit ltlt deacutelai minimum gtgt activeacute

Ne pas confondre ce gestionnaire de mise en file dattente sans classes avec celui baseacute sur des classes PRIO Bien quils aient des comportements similaires pfifoamplowbarfast ne possegravede pas de classes et vous nepourrez pas y ajouter de nouveaux gestionnaires avec la commande tc

Paramegravetres amp usage

Vous ne pouvez pas configurer le gestionnaire pfifoamplowbarfast dans la mesure ougrave cest celui pardeacutefaut Voici sa configuration par deacutefaut

priomapDeacutetermine comment les prioriteacutes des paquets sont relieacutees aux bandes telles que deacutefinies par le noyauLa relation est eacutetablie en se basant sur loctet TOS du paquet qui ressemble agrave ceci

0 1 2 3 4 5 6 7+-----+-----+-----+-----+-----+-----+-----+-----+| | | || PRECEDENCE | TOS | MBZ || | | |+-----+-----+-----+-----+-----+-----+-----+-----+

Les quatre bits TOS (le champ TOS) sont deacutefinis comme suit

Binaire Deacutecimal Signification-----------------------------------------1000 8 Minimise le Deacutelai (Minimize delay) (md)0100 4 Maximalise le Deacutebit (Maximize throughput) (mt)0010 2 Maximalise la Fiabiliteacute (Maximize reliability) (mr)0001 1 Minimalise le Coucirct Moneacutetaire (Minimize monetary cost) (mmc)0000 0 Service Normal

Comme il y a 1 bit sur la droite de ces quatre bits la valeur reacuteelle du champ TOS est le double de lavaleur des bits TOS tcpdump -v -v fournit la valeur de tout le champ TOS et non pas seulementla valeur des quatre bits Cest la valeur que lon peut voir dans la premiegravere colonne du tableausuivant

TOS Bits Signification Prioriteacute Linux Bande------------------------------------------------------------------------0x0 0 Service Normal 0 Best Effort 10x2 1 Minimise le Coucirct Moneacutetaire (mmc) 1 Filler 20x4 2 Maximalise la Fiabiliteacute (mr) 0 Best Effort 10x6 3 mmc+mr 0 Best Effort 10x8 4 Maximalise le Deacutebit (mt) 2 Masse 20xa 5 mmc+mt 2 Masse 20xc 6 mr+mt 2 Masse 20xe 7 mmc+mr+mt 2 Masse 20x10 8 Minimise le Deacutelai (md) 6 Interactive 00x12 9 mmc+md 6 Interactive 00x14 10 mr+md 6 Interactive 00x16 11 mmc+mr+md 6 Interactive 00x18 12 mt+md 4 Int Masse 10x1a 13 mmc+mt+md 4 Int Masse 10x1c 14 mr+mt+md 4 Int Masse 10x1e 15 mmc+mr+mt+md 4 Int Masse 1

amplsqbNdT par flux de masse (bulk flow) il faut entendre ltlt gros flot de donneacutees transmises encontinu gtgt comme un transfert FTP A lopposeacute un flux interactif (interactive flow) correspond agravecelui geacuteneacutereacute par des requecirctes SSH]

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

36 pfifoamplowbarfast

Beaucoup de nombres La seconde colonne contient la valeur correspondante des quatre bits TOSsuivi de leur signification Par exemple 15 repreacutesente un paquet voulant un coucirct moneacutetaire minimalune fiabiliteacute maximum un deacutebit maximum ET un deacutelai minimum Jappellerai ceci un ltlt paquetHollandais gtgt

La quatriegraveme colonne liste la maniegravere dont le noyau Linux interpregravete les bits TOS en indiquant agravequelle prioriteacute ils sont relieacutes

La derniegravere colonne montre la carte des prioriteacutes par deacutefaut Sur la ligne de commande la carte desprioriteacutes ressemble agrave ceci

1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Ceci signifie par exemple que la prioriteacute 4 sera relieacutee agrave la bande numeacutero 1 La carte des prioriteacutesvous permet eacutegalement de lister des prioriteacutes plus grandes (gt 7) qui ne correspondent pas agrave unerelation avec le champ TOS mais qui sont configureacutees par dautres moyens

Le tableau suivant provenant de la RFC 1349 (agrave lire pour plus de deacutetails) indique comment lesapplications devraient configurer leurs bits TOS pour fonctionner correctement

TELNET 1000 (minimise le deacutelai)FTP Controcircle 1000 (minimise le deacutelai) Donneacutees 0100 (maximalise le deacutebit)

TFTP 1000 (minimise le deacutelai)

SMTP phase de commande 1000 (minimise le deacutelai) phase DATA 0100 (maximalise le deacutebit)

Domain Name Service requecircte UDP 1000 (minimise le deacutelai) requecircte TCP 0000 Transfert de Zone 0100 (maximalise le deacutebit)

NNTP 0001 (minimise le coucirct moneacutetaire)

ICMP Erreurs 0000 Requecirctes 0000 (presque) Reacuteponses ltmecircme chose que requecirctegt (presque)

txqueuelenLa longueur de cette file dattente est fournie par la configuration de linterface que vous pouvez voiret configurer avec ifconfig et ip Pour configurer la longueur de la file dattente agrave 10 exeacutecuter ifconfig eth0 txqueuelen 10

Vous ne pouvez pas configurer ce paramegravetre avec tc

Filtre agrave seau de jetons (Token Bucket Filter)

Le Token Bucket Filter (TBF) est un gestionnaire de mise en file dattente simple Il ne fait que laisser passerles paquets entrants avec un deacutebit nexceacutedant pas une limite fixeacutee administrativement Lenvoi de courtesrafales de donneacutees avec un deacutebit deacutepassant cette limite est cependant possible

TBF est tregraves preacutecis et peu gourmand du point de vue reacuteseau et processeur Consideacuterez-le en premier si vousvoulez simplement ralentir une interface

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 37

Limpleacutementation TBF consiste en un tampon (seau) constamment rempli par des eacuteleacutements virtuelsdinformation appeleacutes jetons avec un deacutebit speacutecifique (deacutebit de jeton) Le paramegravetre le plus important dutampon est sa taille qui correspond au nombre de jetons quil peut stocker

Chaque jeton entrant laisse sortir un paquet de donneacutees de la file dattente de donneacutees et ce jeton est alorssupprimeacute du seau Lassociation de cet algorithme avec les deux flux de jetons et de donneacutees nous conduit agravetrois sceacutenarios possibles

Les donneacutees arrivent dans TBF avec un deacutebit EGAL au deacutebit des jetons entrants Dans ce cas chaquepaquet entrant a son jeton correspondant et passe la file dattente sans deacutelai

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS PETIT que le deacutebit des jetons Seule une partiedes jetons est supprimeacutee au moment ougrave les paquets de donneacutees sortent de la file dattente de sorte queles jetons saccumulent jusquagrave atteindre la taille du tampon Les jetons libres peuvent ecirctre utiliseacutespour envoyer des donneacutees avec un deacutebit supeacuterieur au deacutebit des jetons standard si de courtes rafales dedonneacutees arrivent

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS GRAND que le deacutebit des jetons Ceci signifie quele seau sera bientocirct deacutepourvu de jetons ce qui provoque larrecirct de TBF pendant un moment Cecisappelle ltlt une situation de deacutepassement de limite gtgt (overlimit situation) Si les paquets continuentagrave arriver ils commenceront agrave ecirctre eacutelimineacutes

bull

Le dernier sceacutenario est tregraves important car il autorise la mise en forme administrative de la bande passantedisponible pour les donneacutees traversant le filtre

Laccumulation de jetons autorise leacutemission de courtes rafales de donneacutees sans perte en situation dedeacutepassement de limite mais toute surcharge prolongeacutee causera systeacutematiquement le retard des paquets puisleur rejet

Notez que dans limpleacutementation reacuteelle les jetons correspondent agrave des octets et non des paquets

Paramegravetres amp usage

Mecircme si vous naurez probablement pas besoin de les changer TBF a des paramegravetres Dabord ceux toujoursdisponibles sont

limit or latencyLimit est le nombre doctets qui peuvent ecirctre mis en file dattente en attendant la disponibiliteacute dejetons Vous pouvez eacutegalement indiquer ceci dune autre maniegravere en configurant le paramegravetrelatency qui speacutecifie le temps maximal pendant lequel un paquet peut rester dans TBF Ce dernierparamegravetre prend en compte la taille du seau le deacutebit et sil est configureacute le deacutebit de crecircte(peakrate)

burstbuffermaxburstTaille du seau en octets Cest la quantiteacute maximale en octets de jetons dont on disposerasimultaneacutement En geacuteneacuteral plus les deacutebits de mise en forme sont importants plus le tampon doit ecirctregrand Pour 10 Mbits sur plateforme Intel vous avez besoin dun tampon dau moins 10 kilo-octets sivous voulez atteindre la limitation configureacutee

Si votre tampon est trop petit les paquets pourront ecirctre rejeteacutes car il arrive plus de jetons par topdhorloge que ne peut en contenir le tampon

mpuUn paquet de taille nulle nutilise pas une bande passante nulle Pour ethernet la taille minimale dunpaquet est de 64 octets LUniteacute Minimale de Paquet (Minimun Packet Unit) deacutetermine le nombreminimal de jetons agrave utiliser pour un paquet

rateLe paramegravetre de la vitesse Voir les remarques au-dessus agrave propos des limites

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

38 Filtre agrave seau de jetons (Token Bucket Filter)

Si le seau contient des jetons et quil est autoriseacute agrave se vider alors il le fait par deacutefaut avec une vitesse infinieSi ceci vous semble inacceptable utilisez les paramegravetres suivants

peakrateSi des jetons sont disponibles et que des paquets arrivent ils sont immeacutediatement envoyeacutes par deacutefaut et pour ainsi dire agrave ltlt la vitesse de la lumiegravere gtgt Cela peut ne pas vous convenir speacutecialement sivous avez un grand seau

Le deacutebit de crecircte (peak rate) peut ecirctre utiliseacute pour speacutecifier la vitesse agrave laquelle le seau est autoriseacute agravese vider Si tout se passe comme eacutecrit dans les livres ceci est reacutealiseacute en libeacuterant un paquet puis enattendant suffisamment longtemps pour libeacuterer le paquet suivant Le temps dattente est calculeacute demaniegravere agrave obtenir un deacutebit eacutegal au deacutebit de crecircte

Cependant eacutetant donneacute que la reacutesolution du minuteur (timer) dUNIX est de 10 ms et que les paquetsont une taille moyenne de 10 000 bits nous sommes limiteacutes agrave un deacutebit de crecircte de 1mbits

mtuminburstLe deacutebit de crecircte de 1Mbs ne sert pas agrave grand chose si votre deacutebit habituel est supeacuterieur agrave cettevaleur Un deacutebit de crecircte plus eacuteleveacute peut ecirctre atteint en eacutemettant davantage de paquets par top duminuteur ce qui a pour effet de creacuteer un second seau

Ce second bucket ne prend par deacutefaut quun seul paquet et nest donc en aucun cas un seau

Pour calculer le deacutebit de crecircte maximum multipliez le mtu que vous avez configureacute par 100 (ou plusexactement par HZ qui est eacutegal agrave 100 sur Intel et agrave 1024 sur Alpha)

Configuration simple

Voici une configuration simple mais tregraves utile

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Pourquoi est-ce utile Si vous avez un peacuteripheacuterique reacuteseau avec une grande file dattente comme un modemDSL ou un modem cacircble et que le dialogue se fasse agrave travers une interface rapide comme une interfaceethernet vous observerez que teacuteleacutecharger vers lamont (uploading) deacutegrade complegravetement linteractiviteacute

amplsqbNdT uploading deacutesigne une opeacuteration qui consiste agrave transfeacuterer des donneacutees ou des programmesstockeacutes dans un ordinateur local vers un ordinateur distant agrave travers un reacuteseau La traduction officielle pour ceterme est ltlt teacuteleacutechargement vers lamont gtgt On parle alors de voie montante Le downloading deacutesignelopeacuteration inverse (transfert dun hocircte distant vers lordinateur local) et est traduit par ltlt teacuteleacutechargement gtgtou ltlt teacuteleacutechargement vers laval gtgt On parle alors de la voie descendante]

Le teacuteleacutechargement vers lamont va en effet remplir la file dattente du modem Celle-ci est probablementENORME car cela aide vraiment agrave obtenir de bon deacutebit de teacuteleacutechargement vers lamont Cependant ceci nestpas forceacutement ce que voulez Vous ne voulez pas forceacutement avoir une file dattente importante de maniegravere agravegarder linteractiviteacute et pouvoir encore faire des choses pendant que vous envoyez des donneacutees

La ligne de commande au-dessus ralentit lenvoi de donneacutees agrave un deacutebit qui ne conduit pas agrave une mise en filedattente dans le modem La file dattente reacuteside dans le noyau Linux ougrave nous pouvons lui imposer une taillelimite

Modifier la valeur 220kbit avec votre vitesse de lien REELLE moins un petit pourcentage Si vous avez unmodem vraiment rapide augmenter un peu le paramegravetre burst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 39

Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing)

Stochastic Fairness Queueing (SFQ) est une impleacutementation simple de la famille des algorithmes de mise enfile dattente eacutequitable Cette impleacutementation est moins preacutecise que les autres mais elle neacutecessite aussi moinsde calculs tout en eacutetant presque parfaitement eacutequitable

Le mot cleacute dans SFQ est conversation (ou flux) qui correspond principalement agrave une session TCP ou un fluxUDP Le trafic est alors diviseacute en un grand nombre de jolies files dattente FIFO une par conversation Letrafic est alors envoyeacute dans un tourniquet donnant une chance agrave chaque session denvoyer leurs donneacutees touragrave tour

Ceci conduit agrave un comportement tregraves eacutequitable et empecircche quune seule conversation eacutetouffe les autres SFQest appeleacute ltlt Stochastic gtgt car il nalloue pas vraiment une file dattente par session mais a un algorithme quidivise le trafic agrave travers un nombre limiteacute de files dattente en utilisant un algorithme de hachage

A cause de ce hachage plusieurs sessions peuvent finir dans le mecircme seau ce qui peut reacuteduire de moitieacute leschances dune session denvoyer un paquet et donc reacuteduire de moitieacute la vitesse effective disponible Pourempecirccher que cette situation ne devienne importante SFQ change tregraves souvent son algorithme de hachagepour que deux sessions entrantes en collision ne le fassent que pendant un nombre reacuteduit de secondes

Il est important de noter que SFQ nest seulement utile que dans le cas ougrave votre interface de sortie est vraimentsatureacutee Si ce nest pas le cas il ny aura pas de files dattente sur votre machine Linux et donc pas deffetsPlus tard nous deacutecrirons comment combiner SFQ avec dautres gestionnaires de mise en files dattente pourobtenir le meilleur des deux mondes

Configurer speacutecialement SFQ sur linterface ethernet qui est en relation avec votre modem cacircble ou votrerouteur DSL est vain sans dautres mises en forme du trafic

Paramegravetres amp usage

SFQ est presque configureacute de base

perturbReconfigure le hachage une fois toutes les pertub secondes Sil nest pas indiqueacute le hachage se serajamais reconfigureacute Ce nest pas recommandeacute 10 secondes est probablement une bonne valeur

quantumNombre doctets quun flux est autoriseacute agrave retirer de la file dattente avant que la prochaine file dattentene prenne son tour Par deacutefaut eacutegal agrave la taille maximum dun paquet (MTU) Ne le configurez pas endessous du MTU

Configuration simple

Si vous avez un peacuteripheacuterique qui a une vitesse identique agrave celle du lien et un deacutebit reacuteel disponible comme unmodem teacuteleacutephonique cette configuration aidera agrave promouvoir leacutequiteacute

tc qdisc add dev ppp0 root sfq perturb 10 tc -s -d qdisc lsqdisc sfq 800c dev ppp0 quantum 1514b limit 128p flows 1281024 perturb 10sec Sent 4812 bytes 62 pkts (dropped 0 overlimits 0)

Le nombre 800c est un descripteur (handle) automatiquement assigneacute et limit signifie que 128 paquetspeuvent attendre dans la file dattente Il y a 1024 ltlt seaux de hachage gtgt disponibles pour la comptabiliteacute128 pouvant ecirctre actifs agrave la fois (pas plus de paquets ne conviennent dans la file dattente) Le hachage est

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

40 Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

reconfigureacute toutes les 10 secondes

Conseils pour le choix de la file dattente

Pour reacutesumer ces files dattente simples gegraverent le trafic en reacuteordonnant en ralentissant ou en supprimant lespaquets

Les astuces suivantes peuvent vous aider agrave choisir la file dattente agrave utiliser Elles mentionnent certaines filesdattente deacutecrites dans le chapitre Gestionnaires de mise en file dattente avanceacutesgt

Pour simplement ralentir le trafic sortant utilisez le Token Bucket Filter Il convient bien pour leseacutenormes bandes passantes si vous paramegravetrez en conseacutequence le seau

bull

Si votre lien est vraiment satureacute et que vous voulez ecirctre sucircr quaucune session ne va accaparer labande passante vers lexteacuterieur utilisez le Stochastical Fairness Queueing

bull

Si vous avez une grande dorsale et que vous voulez savoir ce que vous faites consideacuterez RandomEarly Drop (voir le chapitre Gestionnaires de mise en file dattente avanceacutesgt)

bull

Pour ltlt mettre en forme gtgt le trafic entrant qui nest pas transmis utilisez la reacuteglementation Ingress(Ingress Policier) La mise en forme du flux entrant est appeleacutee ltlt reacuteglementation gtgt (policing) etnon ltlt mise en forme gtgt (shaping)

bull

Si vous transmettez le trafic utilisez TBF sur linterface vers laquelle vous transmettez les donneacutees Sivous voulez mettre en forme un trafic pouvant sortir par plusieurs interfaces alors le seul facteurcommun est linterface entrante Dans ce cas utilisez la reacuteglementation Ingress

bull

Si vous ne voulez pas mettre en forme le trafic mais que vous vouliez voir si votre interface esttellement chargeacutee quelle a ducirc mettre en file dattente les donneacutees utilisez la file dattente pfifo (paspfifoamplowbarfast) Elle na pas de bandes internes mais assure le comptage de la taille de sonaccumulateur

bull

Finalement vous pouvez aussi faire de la ltlt mise en forme sociale gtgt La technologie nest pastoujours capable de reacutealiser ce que vous voulez Les utilisateurs sont hostiles aux contraintestechniques Un mot aimable peut eacutegalement vous aider agrave avoir votre bande passante correctementdiviseacutee

bull

terminologie

Pour comprendre correctement des configurations plus compliqueacutees il est dabord neacutecessaire dexpliquerquelques concepts A cause de la complexiteacute et de la relative jeunesse du sujet beaucoup de mots diffeacuterentssont utiliseacutes par les personnes mais ils signifient en fait la mecircme chose

Ce qui suit est lacircchement inspireacute du texte draft-ietf-diffserv-model-06txt An InformalManagement Model for Diffserv Routers Il peut ecirctre trouveacute agrave ladressehttpwwwietforginternet-draftsdraft-ietf-diffserv-model-04txt

Lisez-le pour les deacutefinitions strictes des termes utiliseacutes

Gestionnaire de mise en file dattente (qdisc) (Queueing Discipline)Un algorithme qui gegravere la file dattente dun peacuteripheacuterique soit pour les donneacutees entrantes (ingress)soit pour les donneacutees sortantes (egress)

Gestionnaire de mise en file dattente sans classes (Classless qdisc)Un gestionnaire de mise en file dattente qui na pas de subdivisions internes configurables

Gestionnaire de mise en file dattente baseacute sur des classes (Classful qdisc)Un gestionnaire de mise en file dattente baseacute sur des classes contient de multiples classes Certainesde ces classes contiennent un gestionnaire de mise en file dattente suppleacutementaire qui peut encoreecirctre baseacute sur des classes mais ce nest pas obligatoire Si lon sen tient agrave la deacutefinition strictepfifoamplowbarfast EST baseacute sur des classes dans la mesure ougrave il contient trois bandes qui sont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 41

en fait des classes Cependant dun point de vue des perspectives de configuration pour lutilisateur ilest sans classes dans la mesure ougrave ces classes ne peuvent ecirctre modifieacutees avec loutil tc

ClassesUn gestionnaire de mise en file dattente baseacute sur les classes peut avoir beaucoup de classes chacunedelles eacutetant internes au gestionnaire Une classe peut agrave son tour se voir ajouter plusieurs classes Uneclasse peut donc avoir comme parent soit un gestionnaire de mise en file dattente soit une autreclasse Une classe terminale est une classe qui ne possegravede de classes enfants Seul 1 gestionnaire demise en file dattente est attacheacute agrave cette classe Ce gestionnaire est responsable de lenvoi des donneacuteesde cette classe Quand vous creacuteez une classe un gestionnaire de mise en file dattente fifo est creacuteeacuteQuand vous ajoutez une classe enfant ce gestionnaire est supprimeacute Le gestionnaire fifo dune classeterminale peut ecirctre remplaceacute par un autre gestionnaire plus adapteacute Vous pouvez mecircme remplacer cegestionnaire fifo par un gestionnaire de mise en file dattente baseacute sur des classes de sorte que vouspourrez rajouter des classes suppleacutementaires

Classificateur (Classifier)Chaque gestionnaire de mise en file dattente baseacute sur des classes a besoin de deacuteterminer vers quellesclasses il doit envoyer un paquet Ceci est reacutealiseacute en utilisant le classificateur

Filtre (Filter)La classification peut ecirctre reacutealiseacutee en utilisant des filtres Un filtre est composeacute dun certain nombre deconditions qui si elles sont toutes veacuterifieacutees satisfait le filtre

Ordonnancement (Scheduling)Un gestionnaire de mise en file dattente peut avec laide dun classificateur deacutecider que des paquetsdoivent sortir plus tocirct que dautres Ce processus est appeleacute ordonnancement (scheduling) et estreacutealiseacute par exemple par le gestionnaire pfifoamplowbarfast mentionneacute plus tocirctLordonnancement est aussi appeleacute ltlt reclassement gtgt (reordering) ce qui peut precircter agrave confusion

Mise en forme (Shaping)Le processus qui consiste agrave retarder leacutemission des paquets sortants pour avoir un trafic conforme agrave undeacutebit maximum configureacute La mise en forme est reacutealiseacutee sur egress Familiegraverement rejeter despaquets pour ralentir le trafic est eacutegalement souvent appeleacute Mise en forme

Reacuteglementation (Policing)Retarder ou jeter des paquets dans le but davoir un trafic restant en dessous dune bande passanteconfigureacutee Dans Linux la reacuteglementation ne peut que jeter un paquet et non le retarder dans lamesure ougrave il ny a pas de ltlt file dattente dentreacutee gtgt (ingress queue)

Work-ConservingUn gestionnaire de mise en file dattente work-conserving deacutelivre toujours un paquet sil y en a un dedisponible En dautres termes il ne retarde jamais un paquet si ladaptateur reacuteseau est precirct agrave lenvoyer(dans le cas du gestionnaire egress)

non-Work-ConservingQuelques gestionnaire de mise en files dattente comme par exemple le Token Bucket Filter peuventavoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante Cecisignifie quils refusent parfois de libeacuterer un paquet bien quils en aient un de disponible

Maintenant que nous avons deacutefini notre terminologie voyons ougrave tous ces eacuteleacutements sont situeacutes

Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------gt Pile IP | | | | | | | Y | | | Y | | ^ | | | | ----------gt Transmission -gt | | ^ | | | | Y | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

42 terminologie

| ^ Y -qdisc1- | | | Classificateur --qdisc2-- | ---gt-gtGestionnaire de mise de sortie ---qdisc3---- | -gt | en file dattente (Egress) __qdisc4__ | | dentreacutee (Ingress) -qdiscN_ | | | +-----------------------------------------------------------+

Merci agrave Jamal Hadi Salim pour cette repreacutesentation ASCII

Le grand rectangle repreacutesente le noyau La flegraveche la plus agrave gauche repreacutesente le trafic du reacuteseau entrant dansvotre machine Celui-ci alimente alors le gestionnaire de mise en file dattente Ingress qui peut appliquer desfiltres agrave un paquet et deacutecider de le supprimer Ceci est appeleacute ltlt reacuteglementation gtgt (Policing)

Ce processus a lieu tregraves tocirct avant davoir beaucoup parcouru le noyau Cest par conseacutequent un tregraves bonendroit pour rejeter au plus tocirct du trafic sans pour autant consommer beaucoup de ressources CPU

Si le paquet est autoriseacute agrave continuer il peut ecirctre destineacute agrave une application locale et dans ce cas il entre dans lacouche IP pour ecirctre traiteacute et deacutelivreacute agrave un programme utilisateur Le paquet peut eacutegalement ecirctre transmis sansentrer dans une application et dans ce cas ecirctre destineacute agrave egress Les programmes utilisateurs peuventeacutegalement deacutelivrer des donneacutees qui sont alors transmises et examineacutees par le classificateur Egress

Lagrave il est examineacute et mis en file dattente vers un certain nombre de gestionnaire de mise en file dattente Pardeacutefaut il ny a quun seul gestionnaire egress installeacute pfifoamplowbarfast qui reccediloit tous les paquetsCeci correspond agrave ltlt la mise en file dattente gtgt (enqueueing)

Le paquet reacuteside maintenant dans le gestionnaire de mise en file dattente attendant que le noyau le reacuteclamepour le transmettre agrave travers linterface reacuteseau Ceci correspond au ltlt retrait de la file dattente gtgt(dequeueing)

Le scheacutema ne montre que le cas dun seul adaptateur reacuteseau Les flegraveches entrantes et sortantes du noyau nedoivent pas ecirctre trop prises au pied de la lettre Chaque adaptateur reacuteseau a un gestionnaire dentreacutee et desortie

Gestionnaires de file dattente baseacutes sur les classes

Les gestionnaires de mise en file dattente baseacutes sur des classes sont tregraves utiles si vous avez diffeacuterentes sortesde trafic qui doivent ecirctre traiteacutes diffeacuteremment Lun dentre eux est appeleacute CBQ pour Class Based QueueingIl est si souvent mentionneacute que les personnes identifient les gestionnaires de mise en file dattente baseacutes surdes classes uniquement agrave CBQ ce qui nest pas le cas

CBQ est le meacutecanisme le plus ancien ainsi que le plus compliqueacute Il naura pas forceacutement les effets que vousrecherchez Ceci surprendra peut-ecirctre ceux qui sont sous lemprise de ltlt leffet Sendmail gtgt qui nousenseigne quune technologie complexe non documenteacutee est forceacutement meilleure que toute autre

Nous eacutevoquerons bientocirct plus agrave propos CBQ et ses alternatives

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

Quand le trafic entre dans un gestionnaire de mise en file dattente baseacute sur des classes il doit ecirctre envoyeacute verslune de ses classes il doit ecirctre ltlt classifieacute gtgt Pour deacuteterminer que faire dun paquet les eacuteleacutements appeleacutesltlt filtres gtgt sont consulteacutes Il est important de savoir que les filtres sont appeleacutes de linteacuterieur dungestionnaire et pas autrement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestionnaires de file dattente baseacutes sur les classes 43

Les filtres attacheacutes agrave ce gestionnaire renvoient alors une deacutecision que le gestionnaire utilise pour mettre en filedattente le paquet vers lune des classes Chaque sous-classe peut essayer dautres filtres pour voir si denouvelles instructions sappliquent Si ce nest pas le cas la classe met le paquet en file dattente dans legestionnaire de mise en file dattente quelle contient

En plus de contenir dautres gestionnaires la plupart des gestionnaires de mise en file dattente baseacutes sur desclasses reacutealisent eacutegalement de la mise en forme Ceci est utile pour reacutealiser agrave la fois lordonnancement (avecSFQ par exemple) et le controcircle de deacutebit Vous avez besoin de ceci dans les cas ougrave vous avez une interface agravehaut deacutebit (ethernet par exemple) connecteacutee agrave un peacuteripheacuterique plus lent (un modem cacircble)

Si vous nutilisez que SFQ rien ne devait se passer dans la mesure ougrave les paquets entrent et sortent du routeursans deacutelai linterface de sortie est de loin beaucoup plus rapide que la vitesse reacuteelle de votre liaison il ny aalors pas de files dattente agrave reacuteordonnancer

La famille des gestionnaires de mise en file dattente racines descripteursdescendances et parents

Chaque interface agrave ltlt un gestionnaire de mise en file dattente racine gtgt de sortie (egress root qdisc) Pardeacutefaut le gestionnaire de mise en file dattente sans classes mentionneacute plus tocirct pfifoamplowbarfastChaque gestionnaire et classe est repeacutereacute par un descripteur (handle) qui pourra ecirctre utiliseacute par les prochainesdeacuteclarations de configuration pour se reacutefeacuterer agrave ce gestionnaire En plus du gestionnaire de sortie une interfacepeut eacutegalement avoir un gestionnaire dentreacutee (ingress) qui reacuteglemente le trafic entrant

Ces descripteurs sont constitueacutes de deux parties un nombre majeur et un nombre mineur ltmajorgtltminorgtIl est habituel de nommer le gestionnaire racine 1 ce qui est eacutequivalent agrave 10 Le nombre mineur dungestionnaire de mise en file dattente est toujours 0

Les classes doivent avoir le mecircme nombre majeur que leur parent Le nombre majeur doit ecirctre unique agravelinteacuterieur dune configuration egress ou ingress Le nombre mineur doit ecirctre unique agrave linteacuterieur dungestionnaire de mise en file dattente et de ses classes

Comment les filtres sont utiliseacutes pour classifier le trafic

Pour reacutecapituler une hieacuterarchie typique pourrait ressembler agrave ceci

1 Gestionnaire de mise en file dattente racine | 11 classe enfant | | | | 110 111 112 classes enfants | | | | 11 | classe terminale | | 10 12 Gestionnaire de mise en file dattente 101 102 121 122 classes terminales

Mais ne laissez pas cet arbre vous abuser Vous ne devriez pas imaginer le noyau ecirctre au sommet de larbre etle reacuteseau en dessous ce qui nest justement pas le cas Les paquets sont mis et retireacutes de la file dattente agrave laracine du gestionnaire qui est le seul eacuteleacutement avec lequel le noyau dialogue

Un paquet pourrait ecirctre classifieacute agrave travers une chaicircne suivante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

44 Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

1 -gt 11 -gt 12 -gt 122

Le paquet reacuteside maintenant dans la file dattente du gestionnaire attacheacute agrave la classe 122 Dans cet exempleun filtre a eacuteteacute attacheacute agrave chaque noeud de larbre chacun choisissant la prochaine branche agrave prendre Cela estreacutealisable Cependant ceci est eacutegalement possible

1 -gt 122

Dans ce cas un filtre attacheacute agrave la racine a deacutecideacute denvoyer le paquet directement agrave 122

Comment les paquets sont retireacutes de la file dattente et envoyeacutes vers le mateacuteriel

Quand le noyau deacutecide quil doit extraire des paquets pour les envoyer vers linterface le gestionnaire racine1 reccediloit une requecircte dequeue qui est transmise agrave 11 et qui agrave son tour est passeacutee agrave 10 11 et 12chacune interrogeant leurs descendances qui essaient de retirer les paquets de leur file dattente Dans ce casle noyau doit parcourir lensemble de larbre car seul 122 contient un paquet

En reacutesumeacute les classes ltlt emboicircteacutees gtgt parlent uniquement agrave leur gestionnaire de mise en file dattenteparent jamais agrave une interface Seul la file dattente du gestionnaire racine est videacutee par le noyau

Ceci a pour reacutesultat que les classes ne retirent jamais les paquets dune file dattente plus vite que ce que leurparent autorise Et cest exactement ce que nous voulons de cette maniegravere nous pouvons avoir SFQ dans uneclasse interne qui ne fait pas de mise en forme mais seulement de lordonnancement et avoir un gestionnairede mise en file dattente exteacuterieur qui met en forme le trafic

Le gestionnaire de mise en file dattente PRIO

Le gestionnaire de mise en file dattente ne met pas vraiment en forme le trafic il ne fait que le subdiviser ense basant sur la maniegravere dont vous avez configureacute vos filtres Vous pouvez consideacuterer les gestionnaires PRIOcomme une sorte de super pfifoamplowbarfast dopeacute ougrave chaque bande est une classe seacutepareacutee au lieudune simple FIFO

Quand un paquet est mis en file dattente dans le gestionnaire PRIO une classe est choisie en fonction desfiltres que vous avez donneacutes Par deacutefaut trois classes sont creacuteeacutees Ces classes contiennent par deacutefaut de pursgestionnaires de mise en file dattente FIFO sans structure interne mais vous pouvez les remplacer parnimporte quels gestionnaires disponibles

Chaque fois quun paquet doit ecirctre retireacute dune file dattente la classe 1 est dabord testeacutee Les classes pluseacuteleveacutees ne sont utiliseacutees que si aucune des bandes plus faibles na pas fourni de paquets

Cette file dattente est tregraves utile dans le cas ougrave vous voulez donner la prioriteacute agrave certains trafics en utilisant toutela puissance des filtres tc et en ne se limitant pas seulement aux options du champ TOS Vous pouvezeacutegalement ajouter un autre gestionnaire de mise en file dattente aux trois classes preacutedeacutefinies tandis quepfifoamplowbarfast est limiteacute aux simples gestionnaires FIFO

Puisquil ne met pas vraiment en forme on applique le mecircme avertissement que pour SFQ Utilisez PRIOseulement si votre lien physique est vraiment satureacute ou inteacutegrez-le agrave linteacuterieur dun gestionnaire de mise enfile dattente baseacute sur des classes qui reacutealisent la mise en forme Ce dernier cas est valable pour pratiquementtous les modems-cacircbles et les peacuteripheacuteriques DSL

En termes formels le gestionnaire de mise en file dattente PRIO est un ordonnanceur Work-Conserving

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Comment les filtres sont utiliseacutes pour classifier le trafic 45

Paramegravetres PRIO amp usage

Les paramegravetres suivants sont reconnus par tc

bandsNombre de bandes agrave creacuteer Chaque bande est en fait une classe Si vous changez ce nombre vousdevez eacutegalement changer

priomapSi vous ne fournissez pas de filtres tc pour classifier le trafic le gestionnaire PRIO regarde la prioriteacuteTCamplowbarPRIO pour deacutecider comment mettre en file dattente le trafic

Ceci fonctionne comme le gestionnaire de mise en file dattente pfifoamplowbarfast mentionneacuteplus tocirct Voir la section correspondante pour plus de deacutetails

Les bandes sont des classes et sont appeleacutees par deacutefaut majeur1 agrave majeur3 Donc si votre gestionnaire demise en file dattente est appeleacute 12 tc filtre le trafic vers 121 pour lui accorder une plus grande prioriteacute

Par iteacuteration la bande 0 correspond au nombre mineur 1 la bande 1 au nombre mineur 2 etc

Configuration simple

Nous allons creacuteer cet arbre

racine 1 prio 1 Gestionnaire racine | | | 11 12 13 classes | | | 10 20 30 gestionnaire gestionnaire sfq tbf sfqbande 0 1 2

Le trafic de masse ira vers 30 tandis que le trafic interactif ira vers 20 ou 10

Les lignes de commande

tc qdisc add dev eth0 root handle 1 prio Ceci creacutee instantaneacutement les classes 11 12 13

tc qdisc add dev eth0 parent 11 handle 10 sfq tc qdisc add dev eth0 parent 12 handle 20 tbf rate 20kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 13 handle 30 sfq

Regardons maintenant ce que nous avons creacuteeacute

tc -s qdisc ls dev eth0 qdisc sfq 30 quantum 1514b Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 132 bytes 2 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0 overlimits 0)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

46 Paramegravetres PRIO amp usage

Comme vous pouvez le voir la bande 0 a deacutejagrave reccedilu du trafic et un paquet a eacuteteacute envoyeacute pendant lexeacutecution decette commande

Nous allons maintenant geacuteneacuterer du trafic de masse avec un outil qui configure correctement les options TOSet regarder de nouveau

scp tc ahu100011ahu100011s password tc 100 || 353 KB 0000 tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 2230 bytes 31 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0 overlimits 0)

Comme vous pouvez le voir tout le trafic a eacuteteacute envoyeacute comme preacutevu vers le descripteur 30 qui est la bandede plus faible prioriteacute Maintenant pour veacuterifier que le trafic interactif va vers les bandes de plus grandeprioriteacute nous geacuteneacuterons du trafic interactif

tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 14926 bytes 193 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0 overlimits 0)

Ca a marcheacute Tout le trafic suppleacutementaire a eacuteteacute vers 10 qui est notre gestionnaire de plus grande prioriteacuteAucun trafic na eacuteteacute envoyeacute vers les prioriteacutes les plus faibles qui avaient reccedilu au preacutealable tout le trafic venantde notre scp

Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Comme dit avant CBQ est le gestionnaire de mise en file dattente disponible le plus complexe celui qui a eule plus de publiciteacute qui est le moins compris et qui est probablement le plus farceur lors de sa mise au pointCe nest pas parce que les auteurs sont mauvais ou incompeacutetents loin de lagrave mais lalgorithme CBQ nest pasremarquablement preacutecis et il ne correspond pas vraiment agrave la faccedilon dont Linux fonctionne

En plus decirctre baseacute sur des classes CBQ sert eacutegalement agrave la mise en forme de trafic et cest sur cet aspect quilne fonctionne pas tregraves bien Il travaille comme ceci si vous essayez de mettre en forme une connexion de10mbits agrave 1mbitss le lien doit ecirctre inactif 90amppercnt du temps Si ce nest pas le cas nous devons limiter letaux de sorte quil soit inactif 90amppercnt du temps

Ceci est assez dur agrave mesurer et cest pour cette raison que CBQ deacuteduit le temps dinactiviteacute du nombre demicrosecondes qui seacutecoulent entre les requecirctes de la couche mateacuterielle pour avoir plus de donneacutees Cettecombinaison peut ecirctre utiliseacutee pour eacutevaluer si le lien est chargeacute ou non

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 47

Ceci est plutocirct leacuteger et lon arrive pas toujours agrave des reacutesultats convenables Par exemple quen est-il de lavitesse de liaison reacuteelle dune interface qui nest pas capable de transmettre pleinement les donneacutees agrave100mbits peut-ecirctre agrave cause dun mauvais pilote de peacuteripheacuterique Une carte reacuteseau PCMCIA ne pourrajamais atteindre 100mbits agrave cause de la conception du bus De nouveau comment calculons-nous le tempsdinactiviteacute

Cela devient mecircme pire quand on considegravere un peacuteripheacuterique reacuteseau pas-vraiment-reacuteel comme PPP OverEthernet ou PPTP over TCPIP La largeur de bande effective est dans ce cas probablement deacutetermineacutee parlefficaciteacute des tubes vers lespace utilisateur qui est eacutenorme

Les personnes qui ont effectueacute des mesures ont deacutecouvert que CBQ nest pas toujours tregraves exact et parfoismecircme tregraves eacuteloigneacute de la configuration

Cependant il marche bien dans de nombreuses circonstances Avec la documentation fournie ici vous devriezecirctre capable de le configurer pour quil fonctionne bien dans la plupart des cas

Mise en forme CBQ en deacutetail

Comme dit preacuteceacutedemment CBQ fonctionne en sassurant que le lien est inactif juste assez longtemps pourabaisser la bande passante reacuteelle au deacutebit configureacute Pour reacutealiser cela il calcule le temps qui devrait seacutecoulerentre des paquets de taille moyennne

En cours de fonctionnement le temps dinactiviteacute effectif (the effective idletime) est mesureacute en utilisantlalgorithme EWMA (Exponential Weighted Moving Average) qui considegravere que les paquets reacutecents sontexponentiellement plus nombreux que ceux passeacutes La charge moyenne UNIX (UNIX loadaverage) estcalculeacutee de la mecircme maniegravere

Le temps dinactiviteacute calculeacute est soustrait agrave celui mesureacute par EWMA et le nombre reacutesultant est appeleacuteavgidle Un lien parfaitement chargeacute a un avgidle nul un paquet arrive agrave chaque intervalle calculeacute

Une liaison surchargeacutee a un avgidle neacutegatif et sil devient trop neacutegatif CBQ sarrecircte un moment et se placealors en deacutepassement de limite (overlimit)

Inversement un lien inutiliseacute peut accumuler un avgidle eacutenorme qui autoriserait alors des bandespassantes infinies apregraves quelques heures dinactiviteacute Pour eacuteviter cela avgidle est borneacute agrave maxidle

En situation de deacutepassement de limite CBQ peut en theacuteorie bloquer le deacutebit pour une dureacutee eacutequivalente autemps qui doit seacutecouler entre deux paquets moyens puis laisser passer un paquet et bloquer de nouveau ledeacutebit Regardez cependant le paramegravetre minburst ci-dessous

Voici les paramegravetres que vous pouvez speacutecifier pour configurer la mise en forme

avpktTaille moyenne dun paquet mesureacutee en octets Neacutecessaire pour calculer maxidle qui deacuterive demaxburst qui est speacutecifieacute en paquets

bandwidthLa bande passante physique de votre peacuteripheacuterique neacutecessaire pour les calculs du temps de nonutilisation (idle time)

cellLa dureacutee de transmission dun paquet naugmente pas neacutecessairement de maniegravere lineacuteaire en fonctionde sa taille Par exemple un paquet de 800 octets peut ecirctre transmis en exactement autant de tempsquun paquet de 806 octets Ceci deacutetermine la granulariteacute Cette valeur est geacuteneacuteralement positionneacutee agrave8 et doit ecirctre une puissance de deux

maxburst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

48 Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Ce nombre de paquets est utiliseacute pour calculer maxidle de telle sorte que quand avgidle est eacutegalagrave maxidle le nombre de paquets moyens peut ecirctre envoyeacute en rafale avant que avgidle neretombe agrave 0 Augmentez-le pour ecirctre plus toleacuterant vis agrave vis des rafales de donneacutees Vous ne pouvezpas configurer maxidle directement mais seulement via ce paramegravetre

minburstComme nous lavons deacutejagrave indiqueacute CBQ doit bloquer le deacutebit dans le cas dun deacutepassement de limiteLa solution ideacuteale est de le faire pendant exactement le temps dinutilisation calculeacute puis de laisserpasser un paquet Cependant les noyaux UNIX ont geacuteneacuteralement du mal agrave preacutevoir des eacuteveacutenementsplus courts que 10 ms il vaut donc mieux limiter le deacutebit pendant une peacuteriode plus longue puisenvoyer minburst paquets dun seul coup et dormir pendant une dureacutee de minburst

Le temps dattente est appeleacute offtime De plus grandes valeurs de minburst megravenent agrave une mise enforme plus preacutecise dans le long terme mais provoquent de plus grandes rafales de donneacutees pendantdes peacuteriodes de quelques millisecondes

minidleSi avgidle est infeacuterieur agrave 0 nous sommes en deacutepassement de limite et nous devons attendre jusquagravece que avgidle devienne suffisamment important pour envoyer un paquet Pour eacuteviter quunebrusque rafale de donneacutees nempecircche le lien de fonctionner pendant une dureacutee prolongeacutee avgidleest remis agrave minidle sil atteint une valeur trop basse

La valeur minidle est speacutecifieacutee en microsecondes neacutegatives 10 signifie alors que avgidle estborneacute agrave -10micros

mpuTaille minumum dun paquet Neacutecessaire car mecircme un paquet de taille nulle est encapsuleacute par 64octets sur ethernet et il faut donc un certain temps pour le transmettre CBQ doit connaicirctre ceparamegravetre pour calculer preacuteciseacutement le temps dinutilisation

rateDeacutebit du trafic sortant du gestionnaire Ceci est le ltlt paramegravetre de vitesse gtgt

En interne CBQ est finement optimiseacute Par exemple les classes qui sont connues pour ne pas avoir dedonneacutees preacutesentes dans leur file dattente ne sont pas interrogeacutees Les classes en situation de deacutepassement delimite sont peacutenaliseacutees par la diminution de leur prioriteacute effective Tout ceci est tregraves habile et compliqueacute

Le comportement CBQ classful

En plus de la mise en forme en utilisant les approximations idletime mentionneacutees ci-dessus CBQ peuteacutegalement agir comme une file dattente PRIO dans le sens ougrave les classes peuvent avoir diffeacuterentes prioriteacutesLes prioriteacutes de plus faible valeur seront examineacutees avant celles de valeurs plus eacuteleveacutees

Chaque fois quun paquet est demandeacute par la couche mateacuterielle pour ecirctre envoyeacute sur le reacuteseau un processusweighted round robin (WRR) deacutemarre en commenccedilant par les classes de plus faibles numeacuteros

Celles-ci sont regroupeacutees et interrogeacutees si elles ont des donneacutees disponibles Apregraves quune classe ait eacuteteacuteautoriseacutee agrave retirer de la file dattente un nombre doctets la classe de prioriteacute suivante est consulteacutee

Les paramegravetres suivants controcirclent le processus WRR

allotQuand le CBQ racine reccediloit une demande denvoi de paquets sur une interface il va essayer tous lesgestionnaires internes (dans les classes) tour agrave tour suivant lordre du paramegravetre priority Achaque passage une classe ne peut envoyer quune quantiteacute limiteacutee de donneacutees Le paramegravetre allotest luniteacute de base de cette quantiteacute Voir le paramegravetre weight pour plus dinformations

prioCBQ peut eacutegalement agir comme un peacuteripheacuterique PRIO Les classes internes avec les prioriteacutes les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Mise en forme CBQ en deacutetail 49

plus eacuteleveacutees sont consulteacutees en premier et aussi longtemps quelles ont du trafic les autres classes nesont pas examineacutees

weightLe paramegravetre weight assiste le processus Weighted Round Robin Chaque classe a tour agrave tour lapossibiliteacute denvoyer ses donneacutees Si vous avez des classes avec des bandes passantessignificativement plus importantes il est logique de les autoriser agrave envoyer plus de donneacutees agrave chaquetour que les autres

Vous pouvez utiliser des nombres arbitraires dans la mesure ougrave CBQ additionne tous les paramegravetresweight preacutesents sous une classe et les normalise La regravegle empirique qui consiste agrave prendrerate10 semble fonctionner correctement Le paramegravetre weight normaliseacute est multiplieacute par leparamegravetre allot pour deacuteterminer la quantiteacute de donneacutees agrave envoyer agrave chaque tour

Notez sil vous plaicirct que toutes les classes agrave linteacuterieur dune hieacuterarchie CBQ doivent avoir le mecircme nombremajeur

Paramegravetres CBQ qui deacuteterminent le partage amp le precirct du lien

En plus de purement limiter certains trafics il est eacutegalement possible de speacutecifier quelles classes peuventemprunter de la bande passante aux autres classes ou reacuteciproquement precircter sa bande passante

isolated sharingUne classe qui est configureacutee avec isolated ne precirctera pas sa bande passante agrave ses classes enfantsUtilisez ceci si vous avez sur votre lien deux agences concurrentes ou qui ne sappreacutecient pas et qui neveulent pas se precircter gratuitement de la bande passante

Le programme de controcircle tc connait eacutegalement sharing qui agit agrave linverse du paramegravetreisolated

bounded borrowUne classe peut aussi ecirctre borneacutee (bounded) ce qui signifie quelle nessaiera pas demprunter de labande passante agrave ses classes enfants tc connait eacutegalement borrow qui agit agrave linverse de bounded

Une situation typique pourrait ecirctre le cas ougrave vous avez deux agences preacutesentes sur votre lien qui sont agrave la foisisolated et bounded Ceci signifie quelles sont strictement limiteacutees agrave leur deacutebit et quelles ne precircterontpas aux autres leur bande passante

A linteacuterieur de ces classes dagence il pourrait y avoir dautres classes qui sont autoriseacutees agrave eacutechanger leurbande passante

Configuration simple

1 gestionnaire de mise en file dattente racine | 11 classe enfant 13 14 classes terminales | | 30 40 gestionnares de mise en file dattente (sfq) (sfq)

Cette configuration limite le trafic dun serveur web agrave 5 mbit et le trafic SMTP agrave 3 mbit Il est souhaitablequils noccupent pas plus de 6 mbit agrave eux deux Nous avons une carte reacuteseau agrave 100 mbit et les classes peuventsemprunter mutuellement de la bande passante

tc qdisc add dev eth0 root handle 10 cbq bandwidth 100Mbit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

50 Le comportement CBQ classful

avpkt 1000 cell 8 tc class add dev eth0 parent 10 classid 11 cbq bandwidth 100Mbit rate 6Mbit weight 06Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

Cette partie installe la racine et la classe 11 habituelle La classe 11 est borneacutee la bande passante totale nepourra donc pas exceacuteder 6 mbit

Comme dit avant CBQ a besoin de NOMBREUX paramegravetres Tous ces paramegravetres sont cependant expliqueacutesau-dessus La configuration HTB correspondante est beaucoup plus simple

tc class add dev eth0 parent 11 classid 13 cbq bandwidth 100Mbit rate 5Mbit weight 05Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 tc class add dev eth0 parent 11 classid 14 cbq bandwidth 100Mbit rate 3Mbit weight 03Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000

Ce sont nos deux classes Notez comment nous avons configureacute la valeur du paramegravetre weight en fonctiondu paramegravetre rate La bande passante de lensemble des deux classes ne pourra jamais deacutepasser 6 mbit Enfait les identifieurs de classe (classid) doivent avoir le mecircme numeacutero majeur que le gestionnaire de miseen file dattente parent

tc qdisc add dev eth0 parent 13 handle 30 sfq tc qdisc add dev eth0 parent 14 handle 40 sfq

Les deux classes ont par deacutefaut un gestionnaire de mise en file dattente FIFO Nous les remplaccedilons par unefile dattente SFQ de telle sorte que chaque flux de donneacutees soit traiteacute de maniegravere eacutegale

tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 13 tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 14

Ces commandes directement attacheacutees agrave la racine envoient le trafic vers le bon gestionnaire de mise en filedattente

Notez que nous utilisons tc class add pour CREER des classes agrave linteacuterieur dun gestionnaire de mise enfile dattente et que nous utilisons tc qdisc add pour veacuteritablement configurer ces classes

Vous vous demandez peut-ecirctre ce qui arrive au trafic qui nest classifieacute par aucune des deux regravegles Dans cecas les donneacutees seront traiteacutees agrave linteacuterieur de 10 et le deacutebit ne sera pas limiteacute

Si le trafic SMTP+web tente de deacutepasser la limite de 6 mbits la bande passante sera diviseacutee selon leparamegravetre weight donnant 58 du trafic au serveur web et 38 au serveur smtp

Avec cette configuration vous pouvez eacutegalement dire que le trafic du serveur web sera au minimum de 58 6 mbit = 375 mbit

Dautres paramegravetres CBQ split amp defmap

Comme preacuteciseacute avant un gestionnaire de mise en file dattente baseacute sur des classes doit appeler des filtrespour deacuteterminer dans quelle classe un paquet sera mis en file dattente

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 51

En plus dappeler les filtres CBQ offre dautres options defmap amp split Cest plutocirct compliqueacute agravecomprendre et de plus ce nest pas vital Mais eacutetant donneacute que ceci est le seul endroit connu ougrave defmap ampsplit sont correctement expliqueacutes je vais faire de mon mieux

Etant donneacute que nous voulons le plus souvent reacutealiser le filtrage en ne consideacuterant que le champ TOS unesyntaxe speacuteciale est fournie Chaque fois que CBQ doit trouver ougrave le paquet doit ecirctre mis en file dattente ilveacuterifie si le noeud est un noeud daiguillage (split node) Si cest le cas un de ses sous-gestionnaires a indiqueacuteson souhait de recevoir tous les paquets configureacutes avec une certaine prioriteacute Celle ci peut ecirctre deacuteriveacutee duchamp TOS ou des options des sockets positionneacutees par les applications

Les bits de prioriteacutes des paquets subissent un ET logique avec le champ defmap pour voir si unecorrespondance existe En dautres termes cest un moyen pratique de creacuteer un filtre tregraves rapide qui ne seraactif que pour certaines prioriteacutes Un defmap de ff (en hexadeacutecimal) veacuterifiera tout tandis quune valeur de 0ne veacuterifiera rien Une configuration simple aidera peut-ecirctre agrave rendre les choses plus claires

tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 mpu 64

tc class add dev eth1 parent 10 classid 11 cbq bandwidth 10Mbit rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000

Preacuteambule standard de CBQ Je nai jamais pris lhabitude de la quantiteacute de nombres neacutecessaires

Le paramegravetre defmap se reacutefegravere aux bits TCamplowbarPRIO qui sont deacutefinis comme suit

TC_PRIO Num Correspond agrave TOS-------------------------------------------------BESTEFFORT 0 Maximalise la Fiabiliteacute FILLER 1 Minimalise le Coucirct BULK 2 Maximalise le Deacutebit (0x8) INTERACTIVE_BULK 4 INTERACTIVE 6 Minimise le Deacutelai (0x10) CONTROL 7

Les nombres TCamplowbarPRIO correspondent aux bits compteacutes agrave partir de la droite Voir la sectionpfifoamplowbarfast pour plus de deacutetails sur la faccedilon dont les bits TOS sont convertis en prioriteacutes

Maintenant les classes interactive et de masse

tc class add dev eth1 parent 11 classid 12 cbq bandwidth 10Mbit rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 10 defmap c0

tc class add dev eth1 parent 11 classid 13 cbq bandwidth 10Mbit rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 10 defmap 3f

La gestion de mise en file dattente daiguillage (split qdisc) est 10 et cest agrave ce niveau que le choix sera faitC0 correspond au nombre binaire 11000000 et 3F au nombre binaire 00111111 Ces valeurs sont choisiesde telle sorte quagrave elles deux elles veacuterifient tous les bits La premiegravere classe correspond aux bits 6 amp 7 ce quiest eacutequivalent aux trafics ltlt interactif gtgt et de ltlt controcircle gtgt La seconde classe correspond au reste

Le noeud 10 possegravede maintenant la table suivante

prioriteacute envoyer agrave0 131 132 13

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

52 Dautres paramegravetres CBQ split amp defmap

3 134 135 136 127 12

Pour dautres amusements vous pouvez eacutegalement donner un ltlt masque de changement gtgt qui indiqueexactement les prioriteacutes que vous souhaitez changer Nutilisez ceci quavec la commande tc classchange Par exemple pour ajouter le trafic best effort agrave la classe 12 nous devrons exeacutecuter ceci

tc class change dev eth1 classid 12 cbq defmap 0101

La carte des prioriteacutes au niveau de 10 ressemble maintenant agrave ceci

prioriteacute envoyer agrave0 121 132 133 134 135 136 127 12

FIXME tc class change na pas eacuteteacute testeacute mais simplement vu dans les sources

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Martin Devera(ltdevikgt) reacutealisa agrave juste titre que CBQ est complexe et quil ne semble pas optimiseacute pour denombreuses situations classiques Son approche hieacuterarchique est bien adapteacutee dans le cas de configurations ougraveil y a une largeur de bande passante fixeacutee agrave diviser entre diffeacuterents eacuteleacutements Chacun de ces eacuteleacutements aura unebande passante garantie avec la possibiliteacute de speacutecifier la quantiteacute de bande passante qui pourra ecirctreemprunteacutee

HTB travaille juste comme CBQ mais il na pas recourt agrave des calculs de temps dinoccupation pour la mise enforme A la place cest un Token Bucket Filter baseacute sur des classes dougrave son nom Il na que quelquesparamegravetres qui sont bien documenteacutes sur ce site

Au fur et agrave mesure que votre configuration HTB se complexifie votre configuration sadapte bien Avec CBQelle est deacutejagrave complexe mecircme dans les cas simples HTB3 (voir sa page principale pour les deacutetails desversions HTB) fait maintenant parti des sources officielles du noyau (agrave partir des versions 2420-pre1 et2531 et supeacuterieures) Il est encore cependant possible que vous soyez obligeacute de reacutecupeacuterer la version mise agravejour de tc pour HTB3 Les programmes de lespace utilisateur et la partie HTB du noyau doivent avoir lemecircme numeacutero majeur Sans cela tc ne marchera pas avec HTB13

Si vous avez deacutejagrave un noyau reacutecent ou si vous ecirctes sur le point de mettre agrave jour votre noyau consideacuterez HTBcoucircte que coucircte

Configuration simple

Fonctionnellement presque identique agrave la configuration simple CBQ preacutesenteacutee ci-dessus

tc qdisc add dev eth0 root handle 1 htb default 30

tc class add dev eth0 parent 1 classid 11 htb rate 6mbit burst 15k

tc class add dev eth0 parent 11 classid 110 htb rate 5mbit burst 15k tc class add dev eth0 parent 11 classid 120 htb rate 3mbit ceil 6mbit burst 15k

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket) 53

tc class add dev eth0 parent 11 classid 130 htb rate 1kbit ceil 6mbit burst 15k

Lauteur recommande SFQ sous ces classes

tc qdisc add dev eth0 parent 110 handle 10 sfq perturb 10 tc qdisc add dev eth0 parent 120 handle 20 sfq perturb 10 tc qdisc add dev eth0 parent 130 handle 30 sfq perturb 10

Ajouter les filtres qui dirigent le trafic vers les bonnes classes

U32=tc filter add dev eth0 protocol ip parent 10 prio 1 u32 $U32 match ip dport 80 0xffff flowid 110 $U32 match ip sport 25 0xffff flowid 120

Et cest tout Pas de vilains nombres non expliqueacutes pas de paramegravetres non documenteacutes

HTB semble vraiment merveilleux Si 10 et 20 ont atteint tous les deux leur bande passante garantie etquil en reste agrave partager ils lempruntent avec un rapport de 53 comme attendu

Le trafic non classifieacute est achemineacute vers 30 qui a une petite bande passante mais qui peut emprunter tout cequi est laisseacute libre Puisque nous avons choisi SFQ en interne on heacuterite naturellement de leacutequiteacute

Classifier des paquets avec des filtres

Pour deacuteterminer quelle classe traitera un paquet la ltlt chaicircne de classificateurs gtgt est appeleacutee chaque foisquun choix a besoin decirctre fait Cette chaicircne est constitueacutee de tous les filtres attacheacutes aux gestionnaires demise en file dattente baseacutes sur des classes qui doivent prendre une deacutecision

On reprend larbre qui nest pas un arbre

racine 1 | _11_ | | | 10 11 12 101 102 121 122

Quand un paquet est mis en file dattente linstruction approprieacutee de la chaicircne de filtre est consulteacutee agrave chaquebranche Une configuration typique devrait avoir un filtre en 11 qui dirige le paquet vers 12 et un filtre en12 qui lenvoie vers 122

Vous pourriez eacutegalement avoir ce dernier filtre en 11 mais vous pouvez gagner en efficaciteacute en ayant destests plus speacutecifiques plus bas dans la chaicircne

A ce propos vous ne pouvez pas filtrer un paquet ltlt vers le haut gtgt Donc avec HTB vous devrez attachertous les filtres agrave la racine

Encore une fois les paquets ne sont mis en file dattente que vers le bas Quand ils sont retireacutes de la filedattente ils montent de nouveau vers linterface Ils ne tombent PAS vers lextreacutemiteacute de larbre en direction deladaptateur reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

54 Configuration simple

Quelques exemples simples de filtrage

Comme expliqueacute dans le chapitre Filtres avanceacutes pour la classification des paquetsgt vous pouvez vraimentanalyser nimporte quoi en utilisant une syntaxe tregraves compliqueacutee Pour commencer nous allons montrercomment reacutealiser les choses eacutevidentes ce qui heureusement est plutocirct facile

Disons que nous avons un gestionnaire de mise en file dattente PRIO appeleacute 10 qui contient trois classes etque nous voulons assigner agrave la bande de plus haute prioriteacute tout le trafic allant et venant du port 22 Les filtresseraient les suivants

tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip dport 22 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip sport 80 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Quest-ce que cela signifie Cela dit attacher agrave eth0 au noeud 10 un filtre u32 de prioriteacute 1 qui analysele port de destination ip 22 et qui lenvoie vers la bande 101 La mecircme chose est reacutepeacuteteacutee avec le port source80 La derniegravere commande indique que si aucune correspondance nest trouveacutee alors le trafic devra aller versla bande 102 la plus grande prioriteacute suivante

Vous devez ajouter eth0 ou nimporte laquelle de vos interfaces car chaque interface possegravede un espace denommage de ses descripteurs qui lui est propre

Pour seacutelectionner une adresse IP utilisez ceci

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip dst 432132 flowid 101 tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 123432 flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Ceci dirige le trafic allant vers 4321 et venant de 1234 vers la file dattente de plus haute prioriteacutetandis que le reste ira vers la prochaine plus haute prioriteacute

Vous pouvez rassembler ces deux veacuterifications pour reacutecupeacuterer le trafic venant de 1234 avec le portsource 80

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 432132 match ip sport 80 0xffff flowid 101

Toutes les commandes de filtres dont vous aurez normalement besoin

La plupart des commandes preacutesenteacutees ici commencent avec le preacuteambule suivant

tc filter add dev eth0 parent 10 protocol ip prio 1 u32

Ils sont appeleacutes filtres u32 et analysent NIMPORTE QUELLE partie dun paquet

Sur ladresse sourcedestinationMasque pour la source match ip src 123024 et masque pour la destination match ipdst 432024 Pour analyser un hocircte simple employez 32 ou omettez le masque

Sur le port sourcedestination tous les protocoles IPSource match ip sport 80 0xffff et destination match ip dport 0xffff

Sur le protocole ip (tcp udp icmp gre ipsec)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Quelques exemples simples de filtrage 55

Utilisez les nombres deacutefinis dans etcprotocols par exemple 1 pour icmp match ipprotocol 1 0xff

Sur fwmarkVous pouvez marquer les paquets avec ipchains ou iptables et voir cette marque preacuteserveacutee lors duroutage agrave travers les interfaces Ceci est vraiment utile pour mettre uniquement en forme le trafic sureth1 et venant de eth0 par exemple La syntaxe est la suivante

tc filter add dev eth1 protocol ip parent 10 prio 1 handle 6 fw flowid 11

Notez que ce nest pas une correspondance u32

Vous pouvez positionner une marque comme ceci

iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

Le nombre 6 est arbitraire

Si vous ne voulez pas assimiler la syntaxe complegravete de tc filter utilisez juste iptables et apprenezseulement la seacutelection baseacutee sur fwmark

Sur le champ TOSPour seacutelectionner le trafic interactif deacutelai minimum

tc filter add dev ppp0 parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 14

Utilisez 0x08 0xff pour le trafic de masse

Pour plus de commandes de filtrage voir le chapitre Filtres avanceacutes pour la classification des paquetsgt

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediatequeueing device (IMQ))

Le peacuteripheacuterique IMQ nest pas un gestionnaire de mise en file dattente mais son utilisation est fortement lieacutee agraveceux-ci Au coeur de Linux les gestionnaires de mise en file dattente sont attacheacutes aux peacuteripheacuteriques reacuteseauxet tout ce qui est mis en file dattente dans ce peacuteripheacuterique lest dabord dans le gestionnaire Avec ce conceptil existe deux limitations

1 Seule la mise en forme du trafic sortant est possible (un gestionnaire dentreacutee existe mais ses possibiliteacutessont tregraves limiteacutees en comparaison des gestionnaires de mise en file baseacutes sur les classes)

2 Un gestionnaire de mise en file dattente ne voit le trafic que dune interface et des limitations globales nepeuvent pas ecirctre mises en place

IMQ est ici pour aider agrave reacutesoudre ces deux limitations En reacutesumeacute vous pouvez mettre tout ce que vousvoulez dans un gestionnaire de mise en file dattente Les paquets speacutecialement marqueacutes sont intercepteacutes parles points daccroche netfilter NF_IP_PRE_ROUTING et NF_IP_POST_ROUTING et sont transfeacutereacutes vers legestionnaire attacheacute au peacuteripheacuterique imq Une cible iptables est utiliseacutee pour le marquage des paquets

Ceci vous permet de reacutealiser de la mise en forme dentreacutee eacutetant donneacute que vous pouvez marquer les paquetsentrant par un peacuteripheacuterique quelconque etou traiter les interfaces comme des classes pour configurer deslimites globales Vous pouvez eacutegalement reacutealiser de nombreuses autres choses comme simplement mettrevotre trafic http dans un gestionnaire mettre les requecirctes de nouvelles connexions dans un gestionnaire

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

56 Toutes les commandes de filtres dont vous aurez normalement besoin

Configuration simple

La premiegravere chose qui devrait vous venir agrave lesprit est dutiliser la mise en forme du trafic entrant pour vousgarantir une grande passante ) La configuration se fait comme avec nimporte quelle autre interface

tc qdisc add dev imq0 root handle 1 htb default 20

tc class add dev imq0 parent 1 classid 11 htb rate 2mbit burst 15k

tc class add dev imq0 parent 11 classid 110 htb rate 1mbittc class add dev imq0 parent 11 classid 120 htb rate 1mbit

tc qdisc add dev imq0 parent 110 handle 10 pfifotc qdisc add dev imq0 parent 120 handle 20 sfq

tc filter add dev imq0 parent 100 protocol ip prio 1 u32 match ip dst 100023032 flowid 110

Dans cet exemple u32 est utiliseacute pour la classification Les autres classificateurs devraient marcher tout aussibien Le trafic doit ensuite ecirctre seacutelectionneacute et marqueacute pour ecirctre mis en file dattente vers imq0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0

ip link set imq0 up

Les cibles iptables IMQ sont valides dans les chaicircnes PREROUTING et POSTROUTING de la table mangleLa syntaxe est la suivante

IMQ [ --todev n ] n numeacutero du peacuteripheacuterique imq

Il existe aussi une cible ip6tables

Notez que le trafic nest pas mis en file dattente quand la cible est activeacutee mais apregraves La localisation exactede lentreacutee du trafic dans le peacuteripheacuterique imq deacutepend de la direction de ce trafic (entrantsortant) Ces entreacuteessont les points daccroche preacutedeacutefinis de netfilter et utiliseacutes par iptables

enum nf_ip_hook_priorities NF_IP_PRI_FIRST = INT_MIN NF_IP_PRI_CONNTRACK = -200 NF_IP_PRI_MANGLE = -150 NF_IP_PRI_NAT_DST = -100 NF_IP_PRI_FILTER = 0 NF_IP_PRI_NAT_SRC = 100 NF_IP_PRI_LAST = INT_MAX

Pour le trafic entrant imq se deacuteclare avec la prioriteacute NF_IP_PRI_MANGLE + 1 ce qui signifie que lespaquets entrent dans le peacuteripheacuterique imq juste apregraves la chaine PREROUTING de la table mangle

Pour le trafic sortant imq utilise NF_IP_PRI_LAST qui honore le fait que les paquets rejeteacutes par la table filternoccuperont pas de bande passante

Les mises agrave jour et de plus amples informations peuvent ecirctre trouveacutees sur le site imq

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 57

Chapitre 10 Eacutequilibrage de charge sur plusieursinterfacesIl existe plusieurs maniegraveres pour le faire Une des plus faciles et des plus directes est TEQL (True (or Trivial)Link Equalizer Comme la plupart des eacuteleacutements en relation avec la gestion de file dattente leacutequilibrage decharge est bidirectionnel Les deux eacutequipements terminaux du lien ont besoin de participer pour obtenir uneefficaciteacute optimale

Imaginez la situation suivante

+-------+ eth1 +-------+ | |==========| | reacuteseau 1 -----| A | | B |---- reacuteseau 2 | |==========| | +-------+ eth2 +-------+

A et B sont des routeurs dont nous supposerons quils fonctionnent avec Linux pour le moment Si le trafic vadu reacuteseau 1 vers le reacuteseau 2 le routeur A a besoin de distribuer les paquets sur les deux liens allant vers B Lerouteur B a besoin decirctre configureacute pour laccepter On retrouve la mecircme chose dans le sens inverse pour lespaquets allant du reacuteseau 2 vers le reacuteseau 1 Le routeur B a besoin denvoyer les paquets agrave la fois sur eth1 eteth2

La reacutepartition est faite par un peacuteripheacuterique TEQL comme ceci (cela ne pouvait pas ecirctre plus simple)

tc qdisc add dev eth1 root teql0 tc qdisc add dev eth2 root teql0 ip link set dev teql0 up

Noubliez pas la commande ip link set up

Ceci a besoin decirctre fait sur les deux hocirctes Le peacuteripheacuterique teql0 est basiquement un distributeur tourniquetau-dessus de eth1 et eth2 pour lenvoi des paquets Aucune donneacutee narrive jamais agrave travers unpeacuteripheacuterique teql mais les donneacutees apparaissent sur eth1 et eth2

Nous navons pour le moment que les peacuteripheacuteriques et nous avons eacutegalement besoin dun routage correctLune des possibiliteacutes pour reacutealiser cela est dassigner un reacuteseau 31 sur chacun des liens ainsi que sur lepeacuteripheacuterique teql0

FIXME Avons nous besoin de quelque chose comme nobroadcast Un 31 est trop petit pour contenirune adresse reacuteseau et une adresse de diffusion Si cela ne marche pas comme preacutevu essayez un 30 etajustez les adresses IP Vous pouvez mecircme essayer sans attribuer dadresses agrave eth1 et eth2

Sur le routeur A

ip addr add dev eth1 1000031 ip addr add dev eth2 1000231 ip addr add dev teql0 1000431

Sur le routeur B

ip addr add dev eth1 1000131 ip addr add dev eth2 1000331 ip addr add dev teql0 1000531

Le routeur A devrait maintenant ecirctre capable de lancer un ping vers 10001 10003 et 10005 agrave

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

58 Chapitre 10 Eacutequilibrage de charge sur plusieurs interfaces

travers les deux liens physiques et le peacuteripheacuterique ltlt eacutegaliseacute gtgt Le routeur B devrait maintenant ecirctre capablede lancer un ping vers 10000 10002 et 10004 agrave travers les liens

Si cela marche le routeur A peut prendre 10005 comme route vers le reacuteseau 2 et le routeur B10004 comme route vers le reacuteseau 1 Pour le cas particulier ougrave le reacuteseau 1 est votre reacuteseau personnel etougrave le reacuteseau 2 est lInternet le routeur A peut prendre 10005 comme passerelle par deacutefaut

Avertissement

Rien nest aussi simple quil y paraicirct Les interfaces eth1 et eth2 sur les deux routeurs A et B ne doivent pasavoir la fonction de filtrage par chemin inverse activeacutee Dans le cas contraire ils rejetteront les paquetsdestineacutes agrave des adresses autres que les leurs

echo 0 gt procsysnetipv4confeth1rp_filter echo 0 gt procsysnetipv4confeth2rp_filter

Il y a un seacuterieux problegraveme avec le reacuteordonnancement des paquets Supposons que six paquets aient besoindecirctre envoyeacutes de A vers B Par exemple eth1 peut traiter les paquets 1 3 et 5 et eth2 les paquets 2 4 et 6Dans un monde ideacuteal le routeur B devrait recevoir ces paquets dans lordre 1 2 3 4 5 6 Mais il est plusprobable que le noyau les recevra comme ceci 2 1 4 3 6 5 Ce problegraveme va perturber TCPIP Alors quilny a pas de problegravemes pour les liens transportant diffeacuterentes sessions TCPIP vous ne serez pas capable deregrouper plusieurs liens et obtenir par ftp un simple fichier beaucoup plus rapidement agrave moins que lesystegraveme dexploitation envoyant ou recevant ne soit Linux En effet celui-ci nest pas facilement perturbeacute parde simples reacuteordonnancements

Cependant leacutequilibrage de charge est une bonne ideacutee pour de nombreuses applications

Chapitre 11 Netfilter et iproute - marquage depaquetsJusquagrave maintenant nous avons vu comment iproute travaille et netfilter a eacuteteacute mentionneacute plusieurs fois Vousne perdrez pas votre temps agrave consulter Rustys Remarkably Unreliable Guides Le logiciel Netfilter peut ecirctretrouveacute ici

Netfilter nous permet de filtrer les paquets ou de deacutesosser leurs en-tecirctes Une de ses fonctionnaliteacutesparticuliegraveres est de pouvoir marquer un paquet avec un nombre gracircce agrave loption --set-mark

Comme exemple la commande suivante marque tous les paquets destineacutes au port 25 en loccurrence lecourrier 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 chegravere au meacutegaoctet) et une qui est pluslente mais avec un tarif moins eacuteleveacute Nous souhaiterions que le courrier passe par la route la moins chegravere

Nous avons deacutejagrave marqueacute le paquet avec un 1 et nous allons maintenant renseigner la base de donneacutees de lapolitique de routage pour quelle agisse sur ces paquets marqueacutes

echo 201 mailout gtgt etciproute2rt_tables ip rule add fwmark 1 table mailout ip rule ls0 from all lookup local 32764 from all fwmark 1 lookup mailout

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 11 Netfilter et iproute - marquage de paquets 59

32766 from all lookup main 32767 from all lookup default

Nous allons maintenant geacuteneacuterer la table mailout avec une route vers la ligne lente mais peu coucircteuse

sbinip route add default via 1959698253 dev ppp0 table mailout

Voilagrave qui est fait Il se peut que nous voulions mettre en place des exceptions et il existe de nombreuxmoyens pour le faire Nous pouvons modifier la configuration de netfilter pour exclure certains hocirctes ou nouspouvons inseacuterer une regravegle avec une prioriteacute plus faible qui pointe sur la table principale pour nos hocirctes faisantexception

Nous pouvons aussi utiliser cette fonctionnaliteacute pour nous conformer aux bits TOS en marquant les paquetsavec diffeacuterents types de service et les nombres correspondants On creacutee ensuite les regravegles qui agissent sur cestypes de service De cette faccedilon on peut deacutedier une ligne RNIS aux connexions interactives

Inutile de le dire cela marche parfaitement sur un hocircte qui fait de la translation dadresse (NAT) autrementdit du masquerading

IMPORTANT Nous avons reccedilu une information selon laquelle MASQ et SNAT entrent en conflit avec lemarquage de paquets Rusty Russell lexplique dans ce courrier

Deacutesactivez le filtrage de chemin inverse pour que cela fonctionne correctement

Note pour marquer les paquets vous aurez besoin de valider quelques options du noyau

IP advanced router (CONFIG_IP_ADVANCED_ROUTER) [Yn]IP policy routing (CONFIG_IP_MULTIPLE_TABLES) [Yn]IP use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Yn]

Voir aussi la section intituleacutee Cache web transparent utilisant netfilter iproute2 ipchains et squid dansChapitre 15gt dans le chapitre Recettes de cuisinegt

Chapitre 12 Filtres avanceacutes pour la (re-)classificationdes paquetsComme expliqueacute dans la section sur les gestionnaires de mise en file dattente baseacutes sur des classes les filtressont neacutecessaires pour classifier les paquets dans nimporte laquelle des sous-files dattente Ces filtres sontappeleacutes agrave linteacuterieur des gestionnaires de mise en file dattente baseacutes sur des classes

Voici une liste incomplegravete des classificateurs disponibles

fwBase la deacutecision sur la faccedilon dont le pare-feu a marqueacute les paquets Ceci peut ecirctre un passage facile sivous ne voulez pas apprendre la syntaxe tc lieacutee aux filtres Voir le chapitre sur les gestionnaires demise en file dattente pour plus de deacutetails

u32Base la deacutecision sur les champs agrave linteacuterieur du paquet (cest-agrave-dire ladresse IP source etc)

routeBase la deacutecision sur la route que va emprunter le paquet

rsvp rsvp6Route les paquets en se basant sur RSVP Seulement utile sur les reacuteseaux que vous controcirclez Internetne respecte pas RSVP

tcindex

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

60 Chapitre 12 Filtres avanceacutes pour la (re-)classification des paquets

Utiliseacute par le gestionnaire de file dattente DSMARK Voir la section DSMARKgt

Notez quil y a geacuteneacuteralement plusieurs maniegraveres de classifier un paquet Cela deacutepend du systegraveme declassification que vous souhaitez utiliser

Les classificateurs acceptent en geacuteneacuteral quelques arguments communs Ils sont listeacutes ici pour des raisonspratiques

protocolLe protocole que ce classificateur acceptera Geacuteneacuteralement on nacceptera que le trafic IP Exigeacute

parentLe descripteur auquel ce classificateur est attacheacute Ce descripteur doit ecirctre une classe deacutejagrave existanteExigeacute

prioLa prioriteacute de ce classificateur Les plus petits nombres seront testeacutes en premier

handleCette reacutefeacuterence a plusieurs significations suivant les diffeacuterents filtres

Toutes les sections suivantes supposeront que vous essayez de mettre en forme le trafic allant vers HostACes sections supposeront que la classe racine a eacuteteacute configureacutee sur 1 et que la classe vers laquelle vousvoulez envoyer le trafic seacutelectionneacute est 11

Le classificateur u32

Le filtre u32 est le filtre le plus avanceacute dans limpleacutementation courante Il est entiegraverement baseacute sur des tablesde hachage ce qui le rend robuste quand il y a beaucoup de regravegles de filtrage

Dans sa forme la plus simple le filtre u32 est une liste denregistrements chacun consistant en deux champs un seacutelecteur et une action Les seacutelecteurs deacutecrits ci-dessous sont compareacutes avec le paquet IP traiteacute jusquagrave lapremiegravere correspondance et laction associeacutee est reacutealiseacutee Le type daction le plus simple serait de diriger lepaquet vers une classe CBQ deacutefinie

La ligne de commande du programme tc filter utiliseacutee pour configurer le filtre consiste en trois parties laspeacutecification du filtre un seacutelecteur et une action La speacutecification du filtre peut ecirctre deacutefinie comme

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

Le champ protocol deacutecrit le protocole sur lequel le filtre sera appliqueacute Nous ne discuterons que du cas duprotocole ip Le champ preference (priority peut ecirctre utiliseacute comme alternative) fixe la prioriteacute dufiltre que lon deacutefinit Cest important dans la mesure ougrave vous pouvez avoir plusieurs filtres (listes de regravegles)avec des prioriteacutes diffeacuterentes Chaque liste sera scruteacutee dans lordre dajout des regravegles Alors la liste avec laprioriteacute la plus faible (celle qui a le numeacutero de preacutefeacuterence le plus eacuteleveacute) sera traiteacutee Le champ parentdeacutefinit le sommet de larbre CBQ (par ex 10) auquel le filtre doit ecirctre attacheacute

Les options deacutecrites sappliquent agrave tous les filtres pas seulement agrave u32

Le seacutelecteur U32

Le seacutelecteur U32 contient la deacutefinition dun modegravele qui sera compareacute au paquet traiteacute Plus preacuteciseacutement ildeacutefinit quels bits doivent correspondre dans len-tecircte du paquet et rien de plus mais cette meacutethode simple esttregraves puissante Jetons un oeil sur lexemple suivant directement tireacute dun filtre assez complexe reacuteellementexistant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le classificateur u32 61

tc filter parent 1 protocol ip pref 10 u32 fh 800800 order 2048 key ht 800 bkt 0 flowid 13 match 0010000000ff0000 at 0

Pour linstant laissons de cocircteacute la premiegravere ligne tous ces paramegravetres deacutecrivent les tables de hachage du filtreFocalisons-nous sur la ligne de seacutelection contenant le mot-cleacute match Ce seacutelecteur fera correspondre lesen-tecirctes IP dont le second octet sera 0x10 (0010) Comme nous pouvons le deviner le nombre 00ff est lemasque de correspondance disant au filtre quels bits il doit regarder Ici cest 0xff donc loctetcorrespondra si cest exactement 0x10 Le mot-cleacute at signifie que la correspondance doit deacutemarrer audeacutecalage speacutecifieacute (en octets) - dans notre cas cest au deacutebut du paquet Traduisons tout cela en langagehumain le paquet correspondra si son champ Type de Service (TOS) a le bit ltlt faible deacutelai gtgt positionneacuteAnalysons une autre regravegle

tc filter parent 1 protocol ip pref 10 u32 fh 800803 order 2051 key ht 800 bkt 0 flowid 13 match 000000160000ffff at nexthdr+0

Loption nexthdr deacutesigne len-tecircte suivant encapsuleacute dans le paquet IP cest agrave dire celui du protocole de lacouche supeacuterieure La correspondance commencera eacutegalement au deacutebut du prochain en-tecircte Elle devrait avoirlieu dans le deuxiegraveme mot de 32 bits de len-tecircte Dans les protocoles TCP et UDP ce champ contient le portde destination du paquet Le nombre est donneacute dans le format big-endian cest-agrave-dire les bits les plussignificatifs en premier Il faut donc lire 0x0016 comme 22 en deacutecimal qui correspond au service SSH dans lecas de TCP Comme vous le devinez cette correspondance est ambigueuml sans un contexte et nous endiscuterons plus loin

Ayant compris tout cela nous trouverons le seacutelecteur suivant tregraves facile agrave lire matchc0a80100ffffff00 at 16 Ce que nous avons ici cest une correspondance de trois octets au 17egravemeoctet en comptant agrave partir du deacutebut de len-tecircte IP Cela correspond aux paquets qui ont une adresse dedestination quelconque dans le reacuteseau 192168124 Apregraves avoir analyseacute les exemples nous pouvonsreacutesumer ce que nous avons appris

Seacutelecteurs geacuteneacuteraux

Les seacutelecteurs geacuteneacuteraux deacutefinissent le modegravele le masque et le deacutecalage qui seront compareacutes au contenu dupaquet En utilisant les seacutelecteurs geacuteneacuteraux vous pouvez rechercher des correspondances sur nimporte quelbit de len-tecircte IP (ou des couches supeacuterieures) Ils sont quand mecircme plus difficiles agrave eacutecrire et agrave lire que lesseacutelecteurs speacutecifiques deacutecrits ci-dessus La syntaxe geacuteneacuterale des seacutelecteurs est

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

Un des mots-cleacutes u32 u16 ou u8 doit speacutecifier la longueur du modegravele en bits PATTERN et MASK serapporteront agrave la longueur deacutefinie par ce mot-cleacute Le paramegravetre OFFSET est le deacutecalage en octets pour ledeacutemarrage de la recherche de correspondance Si le mot-clef nexthdr+ est preacutesent le deacutecalage sera relatif agravelen-tecircte de la couche reacuteseau supeacuterieure

Quelques exemples

tc filter add dev ppp14 parent 10 prio 10 u32 match u8 64 0xff at 8 flowid 14

Un paquet correspondra agrave cette regravegle si sa ltlt dureacutee de vie gtgt (TTL) est de 64 TTL est le champ deacutemarrantjuste apregraves le 8egraveme octet de len-tecircte IP

Correspond agrave tous les paquets TCP ayant le bit ACK activeacute

tc filter add dev ppp14 parent 10 prio 10 u32 match ip protocol 6 0xff

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

62 Le seacutelecteur U32

match u8 0x10 0xff at nexthdr+13 flowid 13

Utilisez ceci pour deacuteterminer la preacutesence du bit ACK sur les paquets dune longueur infeacuterieure agrave 64 octets

Veacuterifie la preacutesence dun ACK protocol IP 6 longueur de len-tecircte IP 0x5(mots de 32 bits) longueur total IP 0x34 (ACK + 12 octets doptions TCP) TCP ack actif (bit 5 offset 33) tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 13

Seuls les paquets TCP sans charge utile et avec le bit ACK positionneacute veacuterifieront cette regravegle Ici nouspouvons voir un exemple dutilisation de deux seacutelecteurs le reacutesultat final eacutetant un ET logique de leur reacutesultatSi nous jetons un coup doeil sur un scheacutema de len-tecircte TCP nous pouvons voir que le bit ACK est le secondbit (0x10) du 14egraveme octet de len-tecircte TCP (at nexthdr+13) Comme second seacutelecteur si nous voulonsnous compliquer la vie nous pouvons eacutecrire match u8 0x06 0xff at 9 agrave la place du seacutelecteurspeacutecifique protocol tcp puisque 6 est le numeacutero du protocole TCP speacutecifieacute au 10egraveme octet de len-tecircteIP Dun autre cocircteacute dans cet exemple nous ne pourrons pas utiliser de seacutelecteur speacutecifique pour la premiegraverecorrespondance simplement parce quil ny a pas de seacutelecteur speacutecifique pour deacutesigner les bits TCP ACK

Le filtre ci dessous est une version modifieacutee du filtre preacutesenteacute au-dessus La diffeacuterence est quil ne veacuterifie pasla longueur de len-tecircte ip Pourquoi Car le filtre au-dessus ne marche que sur les systegravemes 32 bits

tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 match u16 0x0000 0xffc0 at 2 flowid 13

Les seacutelecteurs speacutecifiques

La table suivante contient la liste de tous les seacutelecteurs speacutecifiques que les auteurs de cette section ont trouveacutesdans le code source du programme tc Ils rendent simplement la vie plus facile en accroissant la lisibiliteacute de laconfiguration du filtre

FIXME emplacement de la table - la table est dans un fichier seacutepareacute selectorhtml

FIXME Cest encore en Polonais -(

FIXME doit ecirctre sgmliseacute

Quelques exemples

tc filter add dev ppp0 parent 10 prio 10 u32 match ip tos 0x10 0xff flowid 14

FIXME tcp dport match ne fonctionne pas comme deacutecrit ci-dessous

La regravegle ci-dessus correspondra agrave des paquets qui ont le champ TOS eacutegal agrave 0x10 Le champ TOS commenceau deuxiegraveme octet du paquet et occupe 1 octet ce qui nous permet deacutecrire un seacutelecteur geacuteneacuteral eacutequivalent match u8 0x10 0xff at 1 Cela nous donne une indication sur limpleacutementation du filtre u32 Les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seacutelecteurs geacuteneacuteraux 63

regravegles speacutecifiques sont toujours traduites en regravegles geacuteneacuterales et cest sous cette forme quelles sont stockeacutees enmeacutemoire par le noyau Cela amegravene agrave une autre conclusion les seacutelecteurs tcp et udp sont exactement lesmecircmes et cest la raison pour laquelle vous ne pouvez pas utiliser un simple seacutelecteur match tcp dport53 0xffff pour deacutesigner un paquet TCP envoyeacute sur un port donneacute Ce seacutelecteur deacutesigne aussi les paquetsUDP envoyeacutes sur ce port Vous devez eacutegalement speacutecifier le protocole avec la regravegle suivante

tc filter add dev ppp0 parent 10 prio 10 u32 match tcp dport 53 0xffff match ip protocol 0x6 0xff flowid 12

Le classificateur route

Ce classificateur filtre en se basant sur les informations des tables de routage Quand un paquet passant agravetravers les classes et en atteint une qui est marqueacutee avec le filtre route il divise le paquet en se basant surlinformation de la table de routage

tc filter add dev eth1 parent 10 protocol ip prio 100 route

Ici nous ajoutons un classificateur route sur le noeud parent 10 avec la prioriteacute 100 Quand un paquetatteint ce noeud (ce qui arrive immeacutediatement puisquil est racine) il consulte la table de routage et si uneentreacutee de la table correspond il envoie le paquet vers la classe donneacutee et lui donne une prioriteacute de 100Ensuite vous ajoutez lentreacutee de routage approprieacutee pour finalement activer les choses

Lastuce ici est de deacutefinir realm en se basant soit sur la destination soit sur la source Voici la faccedilon deproceacuteder

ip route add HostNetwork via Gateway dev Device realm RealmNumber

Par exemple nous pouvons deacutefinir notre reacuteseau de destination 192168100 avec le nombre realm eacutegalagrave 10

ip route add 19216810024 via 192168101 dev eth1 realm 10

Quand on ajoute des filtres route on peut utiliser les nombres realm pour repreacutesenter les reacuteseaux ou leshocirctes et speacutecifier quelle est la correspondance entre les routes et les filtres

tc filter add dev eth1 parent 10 protocol ip prio 100 route to 10 classid 110

La regravegle ci-dessus indique que les paquets allant vers le reacuteseau 192168100 correspondent agrave la classe110

Le filtre route peut aussi ecirctre utiliseacute avec les routes sources Par exemple il y a un sous-reacuteseau attacheacute agravenotre routeur Linux sur eth2

ip route add 1921682024 dev eth2 realm 2 tc filter add dev eth1 parent 10 protocol ip prio 100 route from 2 classid 12

Ici le filtre speacutecifie que les paquets venant du reacuteseau 19216820 (realm 2) correspondront agrave la classe12

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

64 Les seacutelecteurs speacutecifiques

Les filtres de reacuteglementation (Policing filters)

Pour reacutealiser des configurations encore plus compliqueacutees vous pouvez avoir des filtres qui analysent le traficagrave hauteur dune certaine bande passante Vous pouvez configurer un filtre pour quil cesse complegravetementlanalyse de tout le trafic au-dessus dun certain deacutebit ou pour quil nanalyse pas la bande passante deacutepassantun certain deacutebit

Ainsi si vous deacutecidez de reacuteglementer agrave 4mbits mais quun trafic de 5mbits est preacutesent vous pouvez cesserdanalyser lensemble des 5mbits ou seulement cesser danalyser le 1 mbits suppleacutementaire et envoyer 4mbits agrave la classe correspondante

Si la bande passante deacutepasse le deacutebit configureacute vous pouvez rejeter un paquet le reclassifier ou voir si unautre filtre y correspond

Techniques de reacuteglementation

Il y a essentiellement deux faccedilons de reacuteglementer Si vous avez compileacute le noyau avec Estimators celui-cipeut mesurer plus ou moins pour chaque filtre le trafic qui est passeacute Ces estimations ne sont pas coucircteuses entemps CPU eacutetant donneacute quil ne compte que 25 fois par seconde le nombre de donneacutees qui sont passeacutees etquil calcule le deacutebit agrave partir de lagrave

Lautre maniegravere utilise encore le Token Bucket Filter qui reacuteside agrave linteacuterieur du filtre cette fois Le TBF analyseseulement le trafic A HAUTEUR de la bande passante que vous avez configureacutee Si cette bande passante estdeacutepasseacutee seul lexcegraves est traiteacute par laction de deacutepassement de limite configureacutee

Avec lestimateur du noyau

Ceci est tregraves simple et il ny a quun seul paramegravetre avrate Soit le flux demeure sous avrate et le filtreclassifie le trafic vers la classe approprieacutee soit votre deacutebit le deacutepasse et laction indiqueacutee par deacutefaut laltlt reclassification gtgt est reacutealiseacutee dans ce cas

Le noyau utilise lalgorithme EWMA pour votre bande passante ce qui la rend moins sensible aux courtesrafales de donneacutees

Avec le Token Bucket Filter

Utilisez les paramegravetres suivants

buffermaxburstbull mtuminburstbull mpubull ratebull

Ceux-ci se comportent la plupart du temps de maniegravere identique agrave ceux deacutecrits dans la section Filtre agrave seau dejetonsgt Notez cependant que si vous configurez le mtu du filtre de reacuteglementation TBF trop bas aucunpaquet ne passera et le gestionnaire de mise en file dattente de sortie TBF ne fera que les ralentir

Une autre diffeacuterence est que la reacuteglementation ne peut que laisser passer ou jeter un paquet Il ne peut pas leretenir dans le but de le retarder

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Les filtres de reacuteglementation (Policing filters) 65

Actions de deacutepassement de limite (Overlimit actions)

Si votre filtre deacutecide quun deacutepassement de limite est atteint il peut mettre en oeuvre des ltlt actions gtgtActuellement trois actions sont disponibles

continueProvoque larrecirct de lanalyse du filtre bien que dautres filtres aient la possibiliteacute de le faire

dropCeci est une option tregraves feacuteroce qui supprime simplement le trafic exceacutedant un certain deacutebit Elle estsouvent employeacutee dans le Ingress policer et a des utilisations limiteacutees Par exemple si vous avez unserveur de noms qui seacutecroule sil traite plus de 5mbits de paquets alors vous pourrez dans ce casutiliser un filtre dentreacutee pour ecirctre sucircr quil ne traitera jamais plus de 5mbits

PassOKTransmettre le trafic Peut ecirctre utiliseacute pour mettre hors service un filtre compliqueacute tout en le laissanten place

reclassifyPermet le plus souvent une reclassification vers Best Effort Ceci est laction par deacutefaut

Exemples

Le seul vrai exemple connu est mentionneacute dans la section Proteacuteger votre machine des inondations SYNgt

FIXME Si vous avez deacutejagrave utiliseacute ceci partagez sil vous plaicirct votre expeacuterience avec nous

Filtres hacheacutes pour un filtrage massif tregraves rapide

Si vous avez besoin de milliers de regravegles par exemple dans le cas ougrave vous avez beaucoup de clients oudordinateurs tous avec des speacutecifications QoS diffeacuterentes vous pourrez constater que le noyau passebeaucoup de temps agrave analyser toutes ces regravegles

Par deacutefaut tous les filtres reacutesident dans une grande chaicircne qui est analyseacutee par ordre deacutecroissant des prioriteacutesSi vous avez 1000 regravegles 1000 controcircles peuvent ecirctre neacutecessaires pour deacuteterminer ce quil faut faire dunpaquet

La veacuterification irait plus vite sil y avait 256 chaicircnes avec chacune quatre regravegles et si vous pouviez reacutepartir lespaquets sur ces 256 chaicircnes afin que la bonne regravegle soit preacutesente

Ceci est rendu possible par le hachage Imaginons que vous ayez sur votre reacuteseau 1024 clients avec desmodems cacircble avec des adresses IP allant de 1200 agrave 123255 et que chacun doit avoir unclassement particulier par exemple ltlt pauvre gtgt ltlt moyen gtgt et ltlt bourrage gtgt Cela vous ferait alors1024 regravegles dans le genre

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123254 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123255 classid 12

Pour aller plus vite nous pouvons utiliser la derniegravere partie de ladresse IP comme ltlt cleacute de hachage gtgtNous obtenons alors 256 tables la premiegravere ressemblant agrave ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

66 Actions de deacutepassement de limite (Overlimit actions)

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1210 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1220 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1230 classid 12

La suivante commence comme ceci

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11

De cette maniegravere seules quatre recherches au plus sont neacutecessaires et deux en moyenne

La configuration est plutocirct compliqueacutee mais elle en vaut vraiment la peine du fait des nombreuses regraveglesNous creacuteons dabord un filtre racine puis une table avec 256 entreacutees

tc filter add dev eth1 parent 10 prio 5 protocol ip u32 tc filter add dev eth1 parent 10 prio 5 handle 2 u32 divisor 256

Nous ajoutons maintenant des regravegles dans la table preacuteceacutedemment creacuteeacutee

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 120123 flowid 11 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 121123 flowid 12 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 123123 flowid 13 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 124123 flowid 12

Ceci est lentreacutee 123 qui contient les correspondances pour 12013 121123 122123 et123123 qui les envoient respectivement vers 11 12 13 et 12 Notez que nous devons speacutecifiernotre seau de hachage en hexadeacutecimal 0x7b pour 123

Nous creacuteons ensuite un ltlt filtre de hachage gtgtqui dirige le trafic vers la bonne entreacutee de la table de hachage

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 800 match ip src 120016 hashkey mask 0x000000ff at 12 link 2

Ok certains nombres doivent ecirctre expliqueacutes La table de hachage par deacutefaut est appeleacutee 800 et tous lesfiltres deacutemarrent de lagrave Nous seacutelectionnons alors ladresse source qui est en position 12 13 14 et 15 danslen-tecircte IP et indiquons que seule la derniegravere partie nous inteacuteresse Ceci est envoyeacute vers la table de hachage2 qui a eacuteteacute creacuteeacutee plus tocirct

Cest plutocirct compliqueacute mais cela marche en pratique et les performances seront eacutepoustouflantes Notez quecet exemple pourrait ecirctre ameacutelioreacute pour que chaque chaicircne contienne un filtre ce qui repreacutesenterait le casideacuteal

Filtrer le trafic IPv6

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Filtres hacheacutes pour un filtrage massif tregraves rapide 67

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

La base de donneacutees des politiques de routage (RPDB) a remplaceacute le routage IPv4 et la structure dadressage agravelinteacuterieur du noyau Linux ce qui a permis les merveilleuses fonctionnaliteacutes deacutecrites dans ce HOWTOMalheureusement la pile IPv6 agrave linteacuterieur de Linux a eacuteteacute impleacutementeacutee en dehors de cette structure principaleBien quils partagent des fonctionnaliteacutes la structure RPDB de base ne participe pas dans ou avec lesstructures dadressage et de routage de IPv6

Ceci va sucircrement changer nous devons juste attendre un peu plus longtemps

FIXME Des ideacutees sur des personnes travaillant sur ce sujet Planifications

Marquer les paquets IPv6 en utilisant ip6tables

ip6tables est capable de marquer un paquet et de lui assigner un numeacutero

ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Ceci ne va cependant pas nous aider dans la mesure ougrave le paquet ne passera pas par la structure RPDB

Utiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

IPv6 est normalement encapsuleacute dans un tunnel SIT et transporteacute agrave travers les reacuteseaux IPv4 Voir la sectionsur le tunnel IPv6 pour de plus amples informations quant agrave la configuration dun tel tunnel Ceci nous permetde filtrer les paquets IPv4 en consideacuterant les paquets IPv6 comme la charge utile

Le filtre suivant repegravere tous les paquets IPv6 encapsuleacutes dans des paquets IPv4

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff flowid 4242

Continuons Supposons que les paquets IPv6 soient envoyeacutes gracircce agrave des paquets IPv4 et que ces paquets nontpas doptions On pourrait utiliser le filtre suivant pour repeacuterer ICMPv6 dans IPv6 dans IPv4 nayant aucuneoption 0x3a (58) est le type du champ en-tecircte suivant pour ICMPv6

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3a 0xff at 26 flowid 4242

Repeacuterer ladresse de destination IPv6 neacutecessite un peu plus de travail Le filtre suivant repegravere ladresse dedestination 3ffe202cffff322304ffffe08358d

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3f 0xff at 44 match u8 0xfe 0xff at 45 match u8 0x20 0xff at 46 match u8 0x2c 0xff at 47 match u8 0xff 0xff at 48 match u8 0xff 0xff at 49 match u8 0x00 0xff at 50 match u8 0x32 0xff at 51 match u8 0x02 0xff at 52

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

68 Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

match u8 0x30 0xff at 53 match u8 0x4f 0xff at 54 match u8 0xff 0xff at 55 match u8 0xfe 0xff at 56 match u8 0x08 0xff at 57 match u8 0x35 0xff at 58 match u8 0x8d 0xff at 59 flowid 1013

La mecircme technique peut ecirctre utiliseacutee pour repeacuterer les reacuteseaux Par exemple 2001

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x20 0xff at 28 match u8 0x01 0xff at 29 flowid 1013

Chapitre 13 Paramegravetres reacuteseau du noyauLe noyau utilise de nombreux paramegravetres qui peuvent ecirctre ajusteacutes en diffeacuterentes circonstances Bien quecomme dhabitude les paramegravetres par deacutefaut conviennent agrave 99amppercnt des installations nous ne pourrionspas appeler ce document ltlt HOWTO avanceacute gtgt sans en dire un mot

Les eacuteleacutements inteacuteressants sont dans procsysnet jetez-y un oeil Tout ne sera pas documenteacute ici audeacutepart mais nous y travaillons

En attendant vous pouvez jeter un oeil dans les sources du noyau Linux et lire le fichierDocumentationfilesystemsproctxt La plupart des fonctionnaliteacutes y sont expliqueacutees

Filtrage de Chemin Inverse (Reverse Path Filtering)

Par deacutefaut les routeurs routent tout mecircme les paquets qui visiblement nappartiennent pas agrave votre reacuteseau Unexemple courant est lespace des adresses IP priveacutees seacutechappant sur Internet Si vous avez une interface avecune route pour 1959696024 dessus vous ne vous attendrez pas agrave voir arriver des paquets venant de21264941

Beaucoup dutilisateurs veulent deacutesactiver cette fonctionnaliteacute Les deacuteveloppeurs du noyau ont permis de lefaire facilement Il y a des fichiers dans proc ougrave vous pouvez ordonner au noyau de le faire pour vous Lameacutethode est appeleacutee ltlt Filtrage par Chemin Inverse gtgt (Reverse Path Filtering) Pour faire simple si lareacuteponse agrave ce paquet ne sort pas par linterface par laquelle il est entreacute alors cest un paquet ltlt bogueacute gtgt et ilsera ignoreacute

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

for i in procsysnetipv4confrp_filter dogt echo 2 gt $i gt done

En reprenant lexemple du deacutebut si un paquet arrivant sur le routeur Linux par eth1 preacutetend venir du reacuteseauBureau+FAI il sera eacutelimineacute De mecircme si un paquet arrivant du reacuteseau Bureau preacutetend ecirctre de quelque part agravelexteacuterieur du pare-feu il sera eacutegalement eacutelimineacute

Ce qui est preacutesenteacute ci-dessus est le filtrage de chemin inverse complet Le parameacutetrage par deacutefaut filtreseulement sur les adresses IP des reacuteseaux directement connecteacutes Ce parameacutetrage par deacutefaut est utiliseacute parceque le filtrage complet eacutechoue dans le cas dun routage asymeacutetrique (ougrave il y a des paquets arrivant par un

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 13 Paramegravetres reacuteseau du noyau 69

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 reacuteseau Les donneacutees descendent vers la parabole satellite et les reacuteponses repartentpar des lignes terrestres normales)

Si cette exception sapplique dans votre cas (vous devriez ecirctre au courant) vous pouvez simplement deacutesactiverle rpamplowbarfilter sur linterface darriveacutee des donneacutees satellite Si vous voulez voir si des paquetssont eacutelimineacutes le fichier logamplowbarmartians du mecircme reacutepertoire indiquera au noyau de les enregistrerdans votre syslog

echo 1 gtprocsysnetipv4confltinterfacenamegtlog_martians

FIXME Est-ce que la configuration des fichiers dans confamplcubdefaultallamprcub suffit - martijn

Configurations obscures

Bon il y a beaucoup de paramegravetres qui peuvent ecirctre modifieacutes Nous essayons de tous les lister Voir aussi unedocumentation partielle dans Documentationip-sysctltxt

Certaines de ces configurations ont des valeurs par deacutefaut diffeacuterentes suivant que vous reacutepondez Yes ou No agravela question Configure as router and not host lors de la compilation du noyau

Oskar Andreasson a une page sur ces options et il apparaicirct quelle soit meilleure que la notre De ce fait allezeacutegalement voir httpipsysctl-tutorialfrozentuxnet

ipv4 geacuteneacuterique

En remarque geacuteneacuterale les fonctionnaliteacutes de limitation de deacutebit ne fonctionnent pas sur linterfaceloopback Nessayez donc pas de les tester localement Les limites sont exprimeacutees en ltlt tic-tac gtgt (jiffies)et elles utilisent obligatoirement le Token Bucket Filter mentionneacute plus tocirct

amplsqbNdT le terme jiffies deacutesigne un mouvement reacutegulier faisant reacutefeacuterence au ltlt tic-tac gtgt dune horlogeDans le noyau lui-mecircme une variable globale nommeacutee jiffies est increacutementeacutee agrave chaque interruptiondhorloge]

Le noyau a une horloge interne qui tourne agrave HZ impulsions (ou jiffies) par seconde Sur Intel HZ est la plupartdu temps eacutegale agrave 100 Donc configurer un fichier amplowbarrate agrave disons 50 autorise 2 paquets parseconde Le Token Bucket Filter est eacutegalement configureacute pour autoriser une rafale de donneacutees de 6 paquets auplus si suffisamment de jetons ont eacuteteacute gagneacutes

Plusieurs eacuteleacutements de la liste suivante proviennent du fichierusrsrclinuxDocumentationnetworkingip-sysctltxt eacutecrit par Alexey Kuznetsovltkuznetms2inracrugt et Andi Kleen ltakmucdegt

procsysnetipv4icmpamplowbardestunreachamplowbarrateSi le noyau deacutecide quil ne peut pas deacutelivrer un paquet il le rejettera et enverra agrave la source du paquetun ICMP notifiant ce rejet

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarallNagit en aucun cas comme eacutecho pour les paquets Ne configurez pas ceci par deacutefaut Cependant sivous ecirctes utiliseacute comme relais dans une attaque de Deacuteni de Services cela peut ecirctre utile

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarbroadcastsamplsqbUtileamprsqb

Si vous pinguez ladresse de diffusion dun reacuteseau tous les hocirctes sont senseacutes reacutepondre Cela permet decoquettes attaques de deacuteni de service Mettez cette valeur agrave 1 pour ignorer ces messages de diffusion

procsysnetipv4icmpamplowbarechoreplyamplowbarrate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

70 Filtrage de Chemin Inverse (Reverse Path Filtering)

Le deacutebit auquel les reacuteponses echo sont envoyeacutees aux destinatairesprocsysnetipv4icmpamplowbarignoreamplowbarbogusamplowbarerroramplowbarresponses

Configurer ceci pour ignorer les erreurs ICMP dhocirctes du reacuteseau reacuteagissant mal aux trames envoyeacuteesvers ce quils perccediloivent comme ladresse de diffusion

procsysnetipv4icmpamplowbarparamprobamplowbarrateUn message ICMP relativement peu connu qui est envoyeacute en reacuteponse agrave des paquets qui ont desen-tecirctes IP ou TCP erroneacutes Avec ce fichier vous pouvez controcircler le deacutebit auquel il est envoyeacute

procsysnetipv4icmpamplowbartimeexceedamplowbarrateVoici la ceacutelegravebre cause des ltlt eacutetoiles Solaris gtgt dans traceroute Limite le nombre de messages ICMPTime Exceeded envoyeacutes

procsysnetipv4igmpamplowbarmaxamplowbarmembershipsNombre maximal de sockets igmp (multidistribution) en eacutecoute sur lhocircte FIXME Est-ce vrai

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmaxtimeFIXME Ajouter une petite explication sur le stockage des partenaires internet (inet peer) Intervallede temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris en compte lorsdune faible (voire inexistante) utilisation du pool Mesureacute en jiffies amplsqbNdT Le pool deacutesigne icila liste des adresses IP des partenaires internet]

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmintimeIntervalle de temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris encompte lors dune utilisation intensive du pool Mesureacute en jiffies

procsysnetipv4inetamplowbarpeeramplowbarmaxttlDureacutee de conservation maximale des enregistrements Les entreacutees non utiliseacutees expireront au bout decet intervalle de temps (cest-agrave-dire quand le nombre dentreacutees dans le pool est tregraves petit) Mesureacute enjiffies

procsysnetipv4inetamplowbarpeeramplowbarminttlDureacutee de conservation minimale des enregistrements Devrait ecirctre suffisante pour prendre en comptele temps de vie des fragments sur lhocircte qui doit reacuteassembler les paquets Cette dureacutee minimale estgarantie si le nombre deacuteleacutements dans le pool est infeacuterieur au seuil fixeacute parinetamplowbarpeeramplowbarthreshold

procsysnetipv4inetamplowbarpeeramplowbarthresholdTaille approximative de lespace de stockage des partenaires internet A partir de ce seuil les entreacuteessont effaceacutees Ce seuil deacutetermine la dureacutee de vie des entreacutees ainsi que les intervalles de temps entredeux deacuteclenchements du ramasse-miettes Plus il y a dentreacutees plus le temps de vie est faible et pluslintervalle du ramasse-miettes est faible

procsysnetipv4ipamplowbarautoconfigCe fichier contient la valeur 1 si lhocircte a reccedilu sa configuration IP par RARP BOOTP DHCP ou unmeacutecanisme similaire Autrement il contient la valeur zeacutero

procsysnetipv4ipamplowbardefaultamplowbarttlDureacutee de vie (TTL) des paquets Fixer agrave la valeur sucircre de 64 Augmentez-la si vous avez un reacuteseauimmense mais pas ltlt pour samuser gtgt les boucles sans fin dun mauvais routage sont plusdangereuses si le TTL est eacuteleveacute Vous pouvez mecircme envisager de diminuer la valeur dans certainescirconstances

procsysnetipv4ipamplowbardynaddrVous aurez besoin de positionner cela si vous utilisez la connexion agrave la demande avec une adressedinterface dynamique Une fois que votre interface a eacuteteacute configureacutee toutes les sockets TCP locauxqui nont pas eu de paquets de reacuteponse seront retraiteacutees pour avoir la bonne adresse Cela reacutesout leproblegraveme poseacute par une connexion deacutefectueuse ayant configureacute une interface suivie par une deuxiegravemetentative reacuteussie (avec une adresse IP diffeacuterente)

procsysnetipv4ipamplowbarforwardLe noyau doit-il essayer de transmettre les paquets Deacutesactiveacute par deacutefaut

procsysnetipv4ipamplowbarlocalamplowbarportamplowbarrangeIntervalle des ports locaux pour les connexions sortantes En fait assez petit par deacutefaut 1024 agrave 4999

procsysnetipv4ipamplowbarnoamplowbarpmtuamplowbardiscConfigurez ceci si vous voulez deacutesactiver la deacutecouverte du MTU de chemin une technique pour

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 71

deacuteterminer le plus grand MTU possible sur votre chemin Voir aussi la section sur la deacutecouverte duMTU de chemin dans le chapitre Recettes de cuisinegt

procsysnetipv4ipfragamplowbarhighamplowbarthreshMeacutemoire maximum utiliseacutee pour reacuteassembler les fragments IP Quandipfragamplowbarhighamplowbarthresh octets de meacutemoire sont alloueacutes pour cela legestionnaire de fragments rejettera les paquets jusquagrave ce queipfragamplowbarlowamplowbarthresh soit atteint

procsysnetipv4ipamplowbarnonlocalamplowbarbindConfigurez ceci si vous voulez que vos applications soient capables de se lier agrave une adresse quinappartient pas agrave une interface de votre systegraveme Ceci peut ecirctre utile quand votre machine est sur unlien non-permanent (ou mecircme permanent) Vos services sont donc capables de deacutemarrer et de se lier agraveune adresse speacutecifique quand votre lien est inactif

procsysnetipv4ipfragamplowbarlowamplowbarthreshMeacutemoire minimale utiliseacutee pour reacuteassembler les fragments IP

procsysnetipv4ipfragamplowbartimeTemps en secondes du maintien dun fragment IP en meacutemoire

procsysnetipv4tcpamplowbarabortamplowbaronamplowbaroverflowUne option booleacuteenne controcirclant le comportement dans le cas de nombreuses connexions entrantesQuand celle-ci est activeacutee le noyau envoie rapidement des paquets RST quand un service estsurchargeacute

procsysnetipv4tcpamplowbarfinamplowbartimeoutTemps de maintien de leacutetat FIN-WAIT-2 pour un socket dans le cas ougrave il a eacuteteacute fermeacute de notre cocircteacuteLe partenaire peut ecirctre deacutefectueux et ne jamais avoir fermeacute son cocircteacute ou mecircme mourir de maniegravereinattendue La valeur par deacutefaut est de 60 secondes La valeur usuelle utiliseacutee dans le noyau 22 eacutetaitde 180 secondes Vous pouvez la remettre mais rappelez vous que si votre machine a un serveurWEB surchargeacute vous risquez de deacutepasser la meacutemoire avec des kilotonnes de sockets morts Lessockets FIN-WAIT2 sont moins dangereux que les sockets FIN-WAIT1 parce quils consomment aumaximum 15K de meacutemoire mais ils ont tendance agrave vivre plus longtemps Cftcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarkeepaliveamplowbartimeDureacutee entre lenvoi de deux messages keepalive quand loption keepalive est activeacutee Par deacutefaut 2heures

procsysnetipv4tcpamplowbarkeepaliveamplowbarintvlA quelle freacutequence les sondes sont retransmises lorsquil ny a pas eu acquittement de sonde Pardeacutefaut 75 secondes

procsysnetipv4tcpamplowbarkeepaliveamplowbarprobesCombien de sondes TCP keepalive seront envoyeacutees avant de deacutecider que la connexion est briseacutee Pardeacutefaut 9 En multipliant par tcpamplowbarkeepaliveamplowbarintvl cela donne le tempspendant lequel un lien peut ecirctre actif sans donner de reacuteponses apregraves lenvoi dun keepalive

procsysnetipv4tcpamplowbarmaxamplowbarorphansNombre maximum de sockets TCP qui ne sont pas relieacutes agrave un descripteur de fichier utilisateur geacutereacutepar le systegraveme Si ce nombre est deacutepasseacute les connexions orphelines sont immeacutediatement reacuteinitialiseacuteeset un avertissement est envoyeacute Cette limite existe seulement pour preacutevenir des attaques de deacuteni deservices simples Vous ne devez pas compter sur ceci ou diminuer cette limite artificiellement maisplutocirct laugmenter (probablement apregraves avoir augmenteacute la meacutemoire) si les conditions du reacuteseaureacuteclament plus que cette valeur par deacutefaut et reacutegler vos services reacuteseau pour quils deacutetruisent sanstarder ce type deacutetat Laissez-moi vous rappeler encore que chaque orphelin consomme jusquagraveenviron 64K de meacutemoire non swappable

procsysnetipv4tcpamplowbarorphanamplowbarretriesCombien dessais avant de deacutetruire une connexion TCP fermeacutee par notre cocircteacute La valeur par deacutefaut de7 correspond agrave un temps denviron 50s agrave 16 min suivant le RTO Si votre machine supporte un serveurWeb vous pouvez envisager de baisser cette valeur dans la mesure ougrave de tels sockets peuventconsommer des ressources significatives Cf tcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarmaxamplowbarsynamplowbarbacklog

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

72 ipv4 geacuteneacuterique

Nombre maximum de requecirctes dune connexion meacutemoriseacutee qui navait pas encore reccedilu daccuseacute dereacuteception du client connecteacute La valeur par deacutefaut est de 1024 pour des systegravemes avec plus de 128 Mode meacutemoire et 128 pour des machines avec moins de meacutemoire Si un serveur souffre de surchargeessayez daugmenter ce nombre Attention Si vous positionnez une valeur supeacuterieure agrave 1024 il seraitpreacutefeacuterable de changer TCPamplowbarSYNQamplowbarHSIZE dans le fichierincludenettcph pour garder TCPamplowbarSYNQamplowbarHSIZE16 lt=tcpamplowbarmaxamplowbarsynamplowbarbacklog et de recompiler de noyau

procsysnetipv4tcpamplowbarmaxamplowbartwamplowbarbucketsNombre maximum de sockets timewait geacutereacutees par le systegraveme simultaneacutement Si ce nombre estdeacutepasseacute le socket timewait est immeacutediatement deacutetruit et un message davertissement est envoyeacuteCette limite nexiste que pour preacutevenir des attaques de deacuteni de services simples Vous ne devez pasdiminuer cette limite artificiellement mais plutocirct laugmenter (probablement apregraves avoir augmenteacute lameacutemoire) si les conditions du reacuteseau reacuteclament plus que cette valeur par deacutefaut

procsysnetipv4tcpamplowbarretransamplowbarcollapseCompatibiliteacute bug agrave bug avec certaines imprimantes deacutefectueuses Tentative denvoi de plus grospaquets lors de la retransmission pour contourner le bug de certaines piles TCP

procsysnetipv4tcpamplowbarretries1Combien dessais avant de deacutecider que quelque chose est erroneacute et quil est neacutecessaire dinformer decette suspicion la couche reacuteseau La valeur minimale du RFC est de 3 Cest la valeur par deacutefaut ellecorrespond agrave un temps denviron 3 sec agrave 8 min suivant le RTO

procsysnetipv4tcpamplowbarretries2Combien dessais avant de deacutetruire une connexion TCP active Le RFC 1122 preacutecise que la limite nedevrait pas deacutepasser 100 secondes Cest un nombre trop petit La valeur par deacutefaut de 15 correspond agraveun temps de environ 13 agrave 30 minutes suivant le RTO

procsysnetipv4tcpamplowbarrfc1337Ce booleacuteen active un rectificatif pour ltlt lassassinat hasardeux des time-wait dans tcp gtgt deacutecrit dansle RFC 1337 Sil est activeacute le noyau rejette les paquets RST pour les sockets agrave leacutetat de time-waitPar deacutefaut 0

procsysnetipv4tcpamplowbarsackUtilise un ACK seacutelectif qui peut ecirctre utiliseacute pour signifier que des paquets speacutecifiques sont manquantFacilite ainsi une reacutecupeacuteration rapide

procsysnetipv4tcpamplowbarstdurgUtilise linterpreacutetation du RFC Host Requirements du champ TCP pointeur urgent La plupart deshocirctes utilisent la vieille interpreacutetation BSD Donc si vous activez cette option il se peut que Linux necommunique plus correctement avec eux Par deacutefaut FALSE (FAUX)

procsysnetipv4tcpamplowbarsynamplowbarretriesNombre de paquets SYN que le noyau enverra avant de tenter leacutetablissement dune nouvelleconnexion

procsysnetipv4tcpamplowbarsynackamplowbarretriesPour ouvrir lautre cocircteacute de la connexion le noyau envoie un SYN avec un ACK superposeacute(piggyback) pour accuser reacuteception du SYN preacuteceacutedemment envoyeacute Cest la deuxiegraveme partie de lapoigneacutee de main agrave trois voies (threeway handshake) Cette configuration deacutetermine le nombre depaquets SYN+ACK agrave envoyer avant que le noyau nabandonne la connexion

procsysnetipv4tcpamplowbartimestampsLes estampillages horaires sont utiliseacutes entre autres pour se proteacuteger du rebouclage des numeacuteros deseacutequence On peut concevoir quun lien agrave 1 gigabit puisse de nouveau rencontrer un numeacutero deseacutequence preacuteceacutedent avec une valeur hors-ligne parcequil eacutetait dune geacuteneacuteration preacuteceacutedenteLestampillage horaire permet de reconnaicirctre cet ltlt ancien paquet gtgt

procsysnetipv4tcpamplowbartwamplowbarrecycleMise en place du recyclage rapide des sockets TIME-WAIT La valeur par deacutefaut est 1 Celle-ci nedevrait pas ecirctre changeacutee sans le conseildemande dexperts techniques

procsysnetipv4tcpamplowbarwindowamplowbarscalingTCPIP autorise normalement des fenecirctres jusquagrave une taille de 65535 octets Pour des reacuteseauxvraiment rapides cela peut ne pas ecirctre assez Les options windows scaling autorisent des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 73

fenecirctres jusquau gigaoctet ce qui est adapteacute pour les produits agrave grande bande passante

Configuration des peacuteripheacuteriques

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4confDEVacceptamplowbarredirectsSi un routeur deacutecide que vous lutilisez agrave tort (cest-agrave-dire quil a besoin de reacute-envoyer votre paquet surla mecircme interface) il vous enverra un message ICMP Redirect Cela preacutesente cependant un petitrisque pour la seacutecuriteacute et vous pouvez le deacutesactiver ou utiliser les redirections seacutecuriseacutees

procsysnetipv4confDEVacceptamplowbarsourceamplowbarroutePlus vraiment utiliseacute On lutilisait pour ecirctre capable de donner agrave un paquet une liste dadresses IP agravevisiter Linux peut ecirctre configureacute pour satisfaire cette option IP

procsysnetipv4confDEVbootpamplowbarrelayAccepte les paquets avec une adresse source 0bcd et des adresses destinations qui ne correspondentni agrave cet hocircte ni au reacuteseau local On suppose quun deacutemon de relais BOOTP interceptera et transmettrade tels paquets

La valeur par deacutefaut est 0 puisque cette fonctionnaliteacute nest pas encore impleacutementeacutee (noyau 2212)procsysnetipv4confDEVforwarding

Active ou deacutesactive la transmission IP sur cette interfaceprocsysnetipv4confDEVlogamplowbarmartians

Voir la section sur le Filtrage de Chemin Inversegtprocsysnetipv4confDEVmcamplowbarforwarding

Si vous faites de la transmission multidistribution (multicast) sur cette interfaceprocsysnetipv4confDEVproxyamplowbararp

Si vous configurez ceci agrave 1 cet interface reacutepondra aux requecirctes ARP pour les adresses que le noyaudoit router Peut ecirctre tregraves utile si vous mettez en place des ltlt pseudo ponts ip gtgt Prenez bien gardedavoir des masques de sous-reacuteseau corrects avant dactiver cette option Faites eacutegalement attentionque le rp_filter agisse aussi sur le requecirctes ARP

procsysnetipv4confDEVrpamplowbarfilterVoir la section sur le Filtrage de Chemin Inversegt

procsysnetipv4confDEVsecureamplowbarredirectsAccepte les messages de redirection ICMP seulement pour les passerelles indiqueacutees dans la liste despasserelles par deacutefaut Activeacute par deacutefaut

procsysnetipv4confDEVsendamplowbarredirectsActive la possibiliteacute denvoyer les messages de redirections mentionneacutees ci-dessus

procsysnetipv4confDEVsharedamplowbarmediaSi cela nest pas activeacute le noyau ne considegravere pas que diffeacuterents sous-reacuteseaux peuvent communiquerdirectement sur cette interface La configuration par deacutefaut est Yes

procsysnetipv4confDEVtagFIXME agrave remplir

Politique de voisinage

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4neighDEVanycastamplowbardelayValeur maximum du deacutelai aleacuteatoire de reacuteponse exprimeacute en jiffies (1100 sec) aux messages desollicitation des voisins Nest pas encore impleacutementeacute (Linux ne possegravede pas encore le supportanycast)

procsysnetipv4neighDEVappamplowbarsolicit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

74 Configuration des peacuteripheacuteriques

Deacutetermine le nombre de requecirctes agrave envoyer au deacutemon ARP de lespace utilisateur Utilisez 0 pourdeacutesactiver

procsysnetipv4neighDEVbaseamplowbarreachableamplowbartimeUne valeur de base utiliseacutee pour le calcul du temps aleacuteatoire daccegraves comme speacutecifieacute dans leRFC2461

procsysnetipv4neighDEVdelayamplowbarfirstamplowbarprobeamplowbartimeDeacutelai avant de tester pour la premiegravere fois si le voisin peut ecirctre atteint (voirgcamplowbarstaleamplowbartime)

procsysnetipv4neighDEVgcamplowbarstaleamplowbartimeDeacutetermine la freacutequence agrave laquelle on doit veacuterifier les vieilles entreacutees ARP Si une entreacutee est obsolegraveteelle devra de nouveau ecirctre reacutesolue (ce qui est utile quand une adresse IP a eacuteteacute attribueacutee agrave une autremachine) Si ucastamplowbarsolicit est supeacuterieur agrave 0 alors on essaie dabord denvoyer unpaquet ARP directement agrave lhocircte connu Si cela eacutechoue et que mcastamplowbarsolicit estsupeacuterieur agrave 0 alors une requecircte ARP est multidiffuseacutee

procsysnetipv4neighDEVlocktimeUne entreacutee ARP nest remplaceacutee par une nouvelle que si lancienne est au moins preacutesente depuislocktime Cela eacutevite trop deacutecriture dans le cache

procsysnetipv4neighDEVmcastamplowbarsolicitNombre maximum dessais conseacutecutifs pour une sollicitation multicast

procsysnetipv4neighDEVproxyamplowbardelayTemps maximum (le temps reacuteel est aleacuteatoire et compris entre 0 et proxytime) avant de reacutepondre agraveune requecircte ARP pour laquelle nous avons une entreacutee de proxy ARP Peut ecirctre utiliseacute dans certainscas pour se preacutemunir des inondations reacuteseaux

procsysnetipv4neighDEVproxyamplowbarqlenLongueur maximale de la file dattente du temporisateur de cache arp en attente (Voirproxyamplowbardelay)

procsysnetipv4neighDEVretransamplowbartimeLe temps exprimeacute en jiffies (1100 sec) entre deux requecirctes ARP Utiliseacute pour la reacutesolutiondadresses et pour deacuteterminer si un voisin est inaccessible

procsysnetipv4neighDEVucastamplowbarsolicitNombre maximum de requecirctes ARP unicast

procsysnetipv4neighDEVunresamplowbarqlenLongueur maximum de la file dattente pour la requecircte ARP en cours le nombre de paquets qui sontaccepteacutes des autres couches pendant la reacutesolution ARP dune adresse

Internet QoS Architectures and Mechanisms for Quality of Service Zheng Wang ISBN 1-55860-608-4Livre traitant des sujets lieacutes agrave la qualiteacute de service Bien pour comprendre les concepts de base

Configuration du routage

procsysnetipv4routeerroramplowbarburstCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarburst est grand moins il yaura de messages Erroramplowbarburst controcircle le moment ougrave les messages seront supprimeacutesLes configurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeerroramplowbarcostCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarcost est grand moins il yaura de messages erroramplowbarburst controcircle le moment ougrave les messages seront jeteacutes Lesconfigurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeflushLeacutecriture dans ce fichier provoque la vidange du cache du routage

procsysnetipv4routegcamplowbarelasticityValeurs qui controcirclent la freacutequence et le comportement de lalgorithme garbage collection du cachede routage Ceci peut ecirctre important en cas de deacutefaut Au moins gcamplowbartimeout secondes

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de voisinage 75

seacutecouleront avant que le noyau ne passe agrave une autre route si la preacuteceacutedente nest plus opeacuterationnelleConfigureacute par deacutefaut agrave 300 Diminuez cette valeur si vous voulez passer plus rapidement ce type deproblegraveme

Voir aussi ce message par Ard van Breemenprocsysnetipv4routegcamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarminamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarthresh

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbartimeout

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routemaxamplowbardelay

Deacutelai dattente pour la vidange du cache du routageprocsysnetipv4routemaxamplowbarsize

Taille maximum du cache de routage Les vieilles entreacutees seront purgeacutees quand le cache aura atteintcette taille

procsysnetipv4routeminamplowbaradvamplowbarmssFIXME agrave remplir

procsysnetipv4routeminamplowbardelayDeacutelai dattente pour vider le cache de routage

procsysnetipv4routeminamplowbarpmtuFIXME agrave remplir

procsysnetipv4routemtuamplowbarexpiresFIXME agrave remplir

procsysnetipv4routeredirectamplowbarloadFacteurs qui deacuteterminent si plus de redirections ICMP doivent ecirctre envoyeacutees agrave un hocircte speacutecifiqueAucune redirection ne sera envoyeacutee une fois que la limite de charge (load limit) ou que le nombremaximum de redirections aura eacuteteacute atteint

procsysnetipv4routeredirectamplowbarnumberVoir procsysnetipv4routeredirectamplowbarload

procsysnetipv4routeredirectamplowbarsilenceTemporisation pour les redirections Au dela de cette peacuteriode les redirections seront de nouveauenvoyeacutees mecircme si elles ont eacuteteacute stoppeacutees parce que la charge ou le nombre limite a eacuteteacute atteint

Chapitre 14 Gestionnaires de mise en file dattenteavanceacutes amp moins communsSi vous constatez que vous avez des besoins qui ne sont pas geacutereacutes par les files dattente citeacutees preacuteceacutedemmentle noyau contient quelques autres files dattente plus speacutecialiseacutees mentionneacutees ici

bfifopfifo

Ces files dattente sans classes sont plus simples que pfifoamplowbarfast dans la mesure ougrave elles nontpas de bandes internes tout le trafic eacutetant vraiment eacutequivalent Elles ont cependant lavantage important dereacutealiser des statistiques Donc mecircme si vous navez pas besoin de mise en forme ou de donner une prioriteacutevous pouvez employer ce gestionnaire pour deacuteterminer larrieacutereacute (backlog) de votre interface

pfifo mesure en paquets et bfifo en octets

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

76 Chapitre 14 Gestionnaires de mise en file dattente avanceacutes amp moins communs

Paramegravetres amp usage

limitSpeacutecifie la taille de la file dattente Mesureacutee en octets pour bfifo et en paquets pour pfifo Pardeacutefaut correspond agrave des paquets de taille eacutegale au paramegravetre txqueuelen de linterface (voir lechapitre pfifo_fastgt) ou txqueuelenmtu octets pour bfifo

Algorithme Clark-Shenker-Zhang (CSZ)

Ceci est si theacuteorique que mecircme Alexey (lauteur principal de CBQ) preacutetend ne pas le comprendre De sonpropre avis

David D Clark Scott Shenker and Lixia Zhang Supporting Real-Time Applications in anIntegrated Services Packet Network Architecture and Mechanism

Comme je le comprends lideacutee principale est de creacuteer des flux WFQ pour chaque servicegaranti et dallouer le reste de la bande passante au flux factice appeleacute flow-0 Le Flux-0inclut le trafic de service preacutedictif et le trafic best-effort Il est traiteacute par un ordonnanceur deprioriteacute qui alloue la bande passante de plus grande prioriteacute aux services preacutedictifs et le resteaux paquets best-effort

Notez que dans CSZ les flux ne sont PAS limiteacutes agrave leur bande passante On suppose que leflux a passeacute le controcircle dadmission agrave la frontiegravere du reacuteseau QoS et quil na pas besoin demises en forme suppleacutementaires Nimporte quelles autres tentatives pour ameacuteliorer le flux oupour le mettre en forme gracircce agrave un seau de jetons lors deacutetapes intermeacutediaires introduiront desretards non deacutesireacutes et augmenteront la gigue

A lheure actuelle CSZ est le seul ordonnanceur qui fournit un veacuteritable service garanti Lesautres impleacutementations (incluant CBQ) nassurent pas un deacutelai garanti et rendent la giguealeacuteatoire

Ne semble pas actuellement un bon candidat agrave utiliser agrave moins que vous nayez lu et comprislarticle mentionneacute

DSMARK

Esteve Camps

ltmarvingrnesgtltestevehadesudgesgt

Ce texte est un extrait de ma thegravese sur le support QoS dans Linux Septembre 2000

Documents sources

Draft-almesberger-wajhak-diffserv-linux-01txtbull Exemples de la distribution iproute2bull White Paper-QoS protocols and architectures et Foires Aux Questions IP QoS les deux par Qualityof Service Forum

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 77

Introduction

Avant tout il serait preacutefeacuterable de lire les RFC eacutecrits sur ce sujet (RFC2474 RFC2475 RFC2597 et RFC2598)sur le site web du groupe de travail DiffServ IETF et sur le site web de Werner Almesberger (Il a eacutecrit lecode permettant le support des Services Diffeacuterencieacutes sous Linux)

A quoi DSMARK est-il relieacute

DSMARK est un gestionnaire de mise en file dattente qui offre les fonctionnaliteacutes dont ont besoin les servicesdiffeacuterencieacutes (Differentiated Services) (eacutegalement appeleacutes DiffServ ou tout simplement DS) DiffServ est lunedes deux architectures actuelles de la Qualiteacute de Services (QoS Quality of Services) (lautre est appeleacuteeservices inteacutegreacutes (Integrated Services) Elle se base sur la valeur du champ DS contenu dans len-tecircte IP dupaquet

Une des premiegraveres solutions dans IP pour offrir des niveaux de qualiteacute de services eacutetait le champ Type deService (octet TOS) de len-tecircte IP En modifiant la valeur de ce champ nous pouvions choisir un niveaueacuteleveacutefaible du deacutebit du deacutelai ou de la fiabiliteacute Cependant cela ne fournissait pas une flexibiliteacute suffisantepour les besoins de nouveaux services (comme les applications temps reacuteel les applications interactives etautres) Par la suite de nouvelles architectures sont apparues Lune delle a eacuteteacute DiffServ qui a gardeacute les bitsTOS et les a renommeacutes champ DS

Guide des services diffeacuterencieacutes

Les services diffeacuterencieacutes sont orienteacutes groupes Cela signifie que nous ne savons rien des flux (ce sera le butdes services inteacutegreacutes (integrated Services)) Nous connaissons par contre les agreacutegations de flux et nousadopterons des comportements diffeacuterents suivant lagreacutegation agrave laquelle appartient le paquet

Quand un paquet arrive agrave un noeud frontalier (noeud dentreacutee du domaine DiffServ) et entre dans un domaineDiffServ nous devrons avoir une politique une mise en forme etou un marquage de ces paquets (le marquagefait reacutefeacuterence agrave la mise en place dune valeur dans le champ DS Comme on le ferait pour des vaches -)) Cesera cette marquevaleur que les noeuds internes de votre domaine DiffServ regarderons pour deacuteterminer quelcomportement ou niveau de qualiteacute de service appliquer

Comme vous pouvez le deacuteduire les Services Diffeacuterencieacutes impliquent un domaine sur lequel toutes les regraveglesDS devront ecirctre appliqueacutees Vous pouvez raisonner de la faccedilon suivante ltlt Je classifierai tous les paquetsentrant dans mon domaine Une fois quils seront entreacutes dans mon domaine ils seront soumis aux regravegles quema classification impose et chaque noeud traverseacute appliquera son niveau de qualiteacute de service gtgt

En fait vous pouvez appliquer vos propres politiques dans vos domaines locaux mais des autorisations auniveau service devront ecirctre consideacutereacutees lors de la connexion agrave dautres domaines DS

En ce moment vous vous posez peut-ecirctre beaucoup de questions DiffServ est plus vaste que ce que jaiexpliqueacute En fait vous pouvez comprendre que je ne peux pas reacutesumer plus de trois RFC en 50 lignes -)

Travailler avec DSMARK

Comme le speacutecifie la bibliographie concernant DiffServ nous diffeacuterencions les noeuds frontaliers et lesnoeuds inteacuterieurs Ce sont deux eacuteleacutements importants dans le chemin quemprunte le trafic Les deux reacutealisentune classification quand un paquet arrive Le reacutesultat peut ecirctre utiliseacute agrave diffeacuterents endroits lors du processusDS avant que le paquet ne soit libeacutereacute vers le reacuteseau Cela est possible car le nouveau code DiffServ fournit unestructure appeleacutee skamplowbarbuff incluant un nouveau champ appeleacute skb-gttcindex Ce champmeacutemorisera le reacutesultat de la classification initiale et pourra ecirctre utiliseacute agrave plusieurs reprises dans le traitementDS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

78 Introduction

La valeur skb-gttcamplowbarindex sera initialement configureacutee par le gestionnaire de mise en filedattente DSMARK Cette valeur sera extraite du champ DS de len-tecircte IP de tous les paquets reccedilus En outrele classificateur clsamplowbartcindex lira tout ou une partie de la valeur skb-gttcindex et lutiliserapour seacutelectionner les classes

Mais avant tout regardons la commande qdisc DSMARK et ses paramegravetres

dsmark indices INDICES [ default_index DEFAULT_INDEX ] [ set_tc_index ]

Que signifient ces paramegravetres

indices taille de la table des couples (masquevaleur) La valeur maximum est 2ˆn ougrave ngt=0bull defaultamplowbarindex index dentreacutee par deacutefaut de la table si aucune correspondance nesttrouveacutee

bull

setamplowbartcamplowbarindex indique au gestionnaire DSMARK de reacutecupeacuterer le champs DSet de lenregistrer dans skb-gttcamplowbarindex

bull

Regardons DSMARK proceacuteder

Comment SCHamplowbarDSMARK travaille

Ce gestionnaire de mise en file dattente reacutealisera les eacutetapes suivantes

Si vous avez deacuteclareacute loption setamplowbartcamplowbarindex dans la commande qdisc lechamp DS est reacutecupeacutereacute et meacutemoriseacute dans la variable skb-gttcamplowbarindex

bull

Le classificateur est invoqueacute Celui-ci sera exeacutecuteacute et retournera un identificateur de classe (class ID)qui sera enregistreacute dans la variable skb-gttcamplowbarindex Si aucun filtre correspondant nesttrouveacute nous consideacuterons loption defaultamplowbarindex comme eacutetant lidentificateur de classeagrave enregistrer Si ni setamplowbartcamplowbarindex ni defaultamplowbarindex nont eacuteteacutedeacuteclareacutes alors les reacutesultats peuvent ecirctre non preacutedictifs

bull

Apregraves avoir eacuteteacute envoyeacute dans le gestionnaire de file dattente interne ougrave le reacutesultat du filtre peut ecirctrereacuteutiliseacute lidentificateur de classe retourneacute par le gestionnaire est stockeacute dans la variableskb-gttcamplowbarindex Cette valeur sera utiliseacutee plus tard pour indexer la table masque-valeurLe reacutesultat de lopeacuteration suivante sera assigneacute au paquet

Nouveau_champ_DS = ( Ancien_champ_DS amp masque ) | valeur

bull

La nouvelle valeur reacutesultera donc dun ET logique entre les valeurs du champamplowbarDS et dumasque suivi dun OU logique avec le paramegravetre valeur Regardez la figure suivante pourcomprendre tout ce processus

bull

skb-gtihp-gttos- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gt | | ^ | -- Si vous deacuteclarez set_tc_index nous configurons | | lt-----Peut changer | la valeur DS dans la variable skb-gttc_index | |O le champ DS | A| |R +-|-+ +------+ +---+-+ File dattente-+ +---N|-----|----+ | | | |filtre|---gt| | |--gt --gt| | | D| | | | | |-----gt| tc |---gt| | | interne | |----gt| v | | | | | |index |---gt| | | +---------------+ | ----gt(masquevaleur)|--gt| O | +------+ +-|-+--------------^----+ | ( ) | | | | ^ | | | | ( ) | | | +----------|---------|----------------|-------|--+ ( ) | | | sch_dsmark | | | | | +-|------------|---------|----------------|-------|------------------+ | | | lt- tc_index -gt | | | |(lecture)| peut changer | | lt--------------Index de la table

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Travailler avec DSMARK 79

| | | | | des couples v | v v | (masquevaleur)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -gt skb-gttc_index

Comment faire le marquage Il suffit de modifier le masque et la valeur associeacutes agrave la classe que vous voulezmarquer Regardez la ligne de code suivante

tc class change dev eth0 classid 11 dsmark mask 0x3 value 0xb8

Cela modifie le couple (masquevaleur) dans la table de hachage et re-marque les paquets appartenant agrave laclasse 11 Vous devez changer ces valeurs en raison des valeurs par deacutefaut que le couple (masque valeur)obtient initialement (voir le tableau ci-dessous)

Nous allons maintenant expliquer comment le filtre TCamplowbarINDEX travaille et comment il sintegravegredans tout cela En outre le filtre TCamplowbarINDEX peut ecirctre utiliseacute dans des configurations autres que cellesincluant les services DS

Le filtre TCamplowbarINDEX

Voici la commande de base pour deacuteclarer un filtre TCamplowbarINDEX

tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ] [ pass_on | fall_through ] [ classid CLASSID ] [ police POLICE_SPEC ]

Ensuite nous montrons lexemple utiliseacute pour expliquer le mode opeacuteratoire de TCamplowbarINDEX Soyezattentif aux mots en gras tc qdisc add dev eth0 handle 10 root dsmark indices 64setamplowbartcamplowbarindex tc filter add dev eth0 parent 10 protocol ip prio 1 tcindex mask 0xfc shift 2 tcqdisc add dev eth0 parent 10 handle 20 cbq bandwidth 10Mbit cell 8 avpkt 1000 mpu 64 ampnum Classe dutrafic EF tc class add dev eth0 parent 20 classid 21 cbq bandwidth 10Mbit rate 1500Kbit avpkt 1000 prio 1bounded isolated allot 1514 weight 1 maxburst 10 ampnum Gestionnaire de file dattente fifo pour le trafic EFtc qdisc add dev eth0 parent 21 pfifo limit 5 tc filter add dev eth0 parent 20 protocol ip prio 1 handle 0x2etcindex classid 21 passamplowbaron (Ce code nest pas complet Ce nest quun extrait de lexemple EFCBQinclus dans la distribution iproute2)

Avant tout supposons que nous recevons un paquet marqueacute comme EF Si vous lisez le RFC2598 vousverrez que DSCP recommande une valeur de 101110 pour le trafic EF Cela signifie que le champ DS seraeacutegal agrave 10111000 (rappelez- vous que les bits les moins significatifs de loctet TOS ne sont pas utiliseacutes dansDS) ou 0xb8 en notation hexadeacutecimale

FILTRE TC INDEX +---+ +-------+ +---+-+ +------+ +-+ +-------+ | | | | | | | |FILTRE| +-+ +-+ | | | | | |-----gt| MASK | -gt | | | -gt |HANDLE|-gt| | | | -gt | | -gt | | | | | =0xfc | | | | |0x2E | | +----+ | | | | | | | | | | | | +------+ +--------+ | | | | | | | | | | | | | | |--gt| | | SHIFT | | | | | | | |--gt | | | =2 | | | +----------------------------+ | | | | | | | | | CBQ 20 | | | | | +-------+ +---+--------------------------------+ | | | | | | | +-------------------------------------------------------------+ | | DSMARK 10 |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

80 Comment SCHamplowbarDSMARK travaille

+-------------------------------------------------------------------------+

Le paquet arrive alors avec la valeur du champ DS configureacutee agrave 0xb8 Comme je lai expliqueacute auparavant legestionnaire de mise en file dattente dsmark identifieacute par 10 dans cet exemple reacutecupegravere le champ DS etlenregistre dans la variable skb-gttcamplowbarindex Leacutetape suivante consistera agrave associer un filtre agrave cegestionnaire de mise en file dattente (la seconde ligne dans cet exemple) Les opeacuterations suivantes serontreacutealiseacutees

Valeur1 = skb-gttc_index amp MASKCleacute = Valeur1 gtgt SHIFT

Dans cet exemple MASK=0xFC et SHIFT=2

Valeur1 = 10111000 amp 11111100 = 10111000Cleacute = 10111000 gtgt 2 = 00101110 -gt 0x2E en hexadeacutecimal

La valeur retourneacutee correspondra agrave un identificateur de filtre du gestionnaire de file dattente interne (danslexemple identifier par 20) Si un filtre avec cet identificateur (id) existe les conditions de controcircle et deperformance seront veacuterifieacutees (au cas ougrave le filtre inclurait ceci) et lidentificateur de classe sera retourneacute (dansnotre exemple classid 21) et stockeacute dans la variable skb-gttcamplowbarindex

Si aucun filtre avec cet identificateur nest trouveacute le reacutesultat deacutependra de la deacuteclaration de loptionfallamplowbarthrough Si tel est le cas la valeur Cleacute est retourneacutee comme identificateur de classe Si cela nestpas le cas une erreur est retourneacutee et le traitement continue avec les filtres restant Faites attention si vousutilisez loption fallamplowbarthrough ceci ne peut ecirctre fait que si une relation existe entre les valeurs de lavariable skb-gttcamplowbarindex et les identificateurs de classe

Les derniers paramegravetres agrave commenter sont hash et passamplowbaron Le premier est relieacute agrave la taille de la tablede hachage Passamplowbaron sera utiliseacute pour indiquer dessayer le filtre suivant dans le cas ougrave aucunidentificateur de classe eacutegal au reacutesultat du filtre ne serait trouveacute Laction par deacutefaut est fallamplowbarthrough(regarder la table suivante)

Finalement regardons quelles sont les valeurs possibles pour la configuration de tous ces paramegravetresTCINDEX

Nom TC Valeur Deacutefaut-----------------------------------------------------------------Hash 10x10000 Deacutependant de limpleacutementationMask 00xffff 0xffffShift 015 0Fall through Pass_on Flag Fall_throughClassid Majorminor RienPolice Rien

Ce type de filtre est tregraves puissant Il est neacutecessaire dexplorer toutes les possibiliteacutes En outre ce filtre nest passeulement utiliseacute dans les configurations DiffServ Vous pouvez lutiliser comme nimporte quel autre filtre

Je vous recommande de regarder les exemples DiffServ inclus dans la distribution iproute2 Je vous prometsque jessaierai de compleacuteter ce texte degraves que possible Tout ce que jai expliqueacute est le reacutesultat de nombreux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le filtre TCamplowbarINDEX 81

tests Merci de me dire si je me suis trompeacute quelque part

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

Tous les gestionnaires de mise en file dattente dont nous avons discuteacute jusquici sont des gestionnaires desortie Chaque interface peut eacutegalement avoir un gestionnaire de mise en file dattente dentreacutee qui nest pasutiliseacute pour envoyer les paquets agrave lexteacuterieur du peacuteripheacuterique reacuteseau Au lieu de cela il vous autorise agraveappliquer des filtres tc aux paquets entrants par linterface indeacutependamment de sils ont une destination localeou sils sont destineacutes agrave ecirctre transmis

Etant donneacute que les filtres tc contiennent une impleacutementation complegravete du Filtre agrave Seau de Jetons et quilssont eacutegalement capables de sappuyer sur lestimation du flux fourni par le noyau il y a beaucoup defonctionnaliteacutes disponibles Ceci vous permet de reacuteglementer le trafic entrant de faccedilon efficace avant mecircmequil nentre dans la pile IP

Paramegravetres amp usage

Le gestionnaire de mise en file dattente dentreacutee ne neacutecessite pas de paramegravetres Il diffegravere des autresgestionnaires dans le fait quil noccupe pas la racine du peacuteripheacuterique Attachez-le comme ceci

tc qdisc add dev eth0 ingress

Ceci vous autorise agrave avoir dautres gestionnaires de sortie sur votre peacuteripheacuterique en plus du gestionnairedentreacutee

Pour un exemple inventeacute sur la faccedilon dont le gestionnaire dentreacutee peut ecirctre utiliseacute voir le chapitre Recettes decuisine

Random Early Detection (RED)

Ce chapitre est conccedilu comme une introduction au routage de dorsales (backbones) Ces liaisons impliquentsouvent des bandes passantes supeacuterieures agrave 100 meacutegabitss ce qui neacutecessite une approche diffeacuterente de cellede votre modem ADSL agrave la maison

Le comportement normal des files dattente de routeurs est appeleacute tail-drop (NdT eacutelimine le reste) Letail-drop consiste agrave mettre en file dattente un certain volume de trafic et agrave eacuteliminer tout ce qui deacuteborde Cenest pas du tout eacutequitable et cela conduit agrave des retransmissions de synchronisation Quand une retransmissionde synchronisation a lieu la brusque rafale de rejet dun routeur qui a atteint sa limite entraicircnera une rafale deretransmissions retardeacutee qui inondera agrave nouveau le routeur congestionneacute

Dans le but den finir avec les congestions occasionnelles des liens les routeurs de dorsales integravegrent souventdes files dattente de grande taille Malheureusement bien que ces files dattente offrent un bon deacutebit ellespeuvent augmenter sensiblement les temps de latence et entraicircner un comportement tregraves saccadeacute desconnexions TCP pendant la congestion

Ces problegravemes avec le tail-drop deviennent de plus en plus preacuteoccupants avec laugmentation de lutilisationdapplications hostiles au reacuteseau Le noyau Linux nous offre la technique RED abreacuteviation de Random EarlyDetect ou deacutetection preacutecoce directe

RED nest pas la solution miracle agrave tous ces problegravemes Les applications qui nintegravegrent pas correctement latechnique de lexponential backoff obtiennent toujours une part trop grande de bande passante Cependantavec la technique RED elles ne provoquent pas trop de deacutegacircts sur le deacutebit et les temps de latence des autresconnexions

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

82 Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

RED eacutelimine statistiquement des paquets du flux avant quil natteigne sa limite dure (hard) Sur une dorsalecongestionneacutee cela entraicircne un ralentissement en douceur de la liaison et eacutevite les retransmissions desynchronisation La technique RED aide aussi TCP agrave trouver une vitesse eacutequitable plus rapidement enpermettant deacuteliminer des paquets plus tocirct il conserve une file dattente plus courte et des temps de latencemieux controcircleacutes La probabiliteacute quun paquet soit eacutelimineacute dune connexion particuliegravere est proportionnelle agrave labande passante utiliseacutee par cette connexion plutocirct quau nombre de paquets quelle envoie

La technique RED est une bonne gestion de file dattente pour les dorsales ougrave vous ne pouvez pas vouspermettre le coucirct dune meacutemorisation deacutetat par session qui est neacutecessaire pour une mise en file dattentevraiment eacutequitable

Pour utiliser RED vous devez reacutegler trois paramegravetres Min Max et burst Min est la taille minimum de la filedattente en octets avant que les rejets naient lieu Max est le maximum doux (soft) en dessous duquellalgorithme sefforcera de rester et burst est le nombre maximum de paquets envoyeacutes en rafale

Vous devriez configurer Min en calculant le plus grand temps de latence acceptable pour la mise en filedattente multiplieacute par votre bande passante Par exemple sur mon lien ISDN agrave 64 Kbitss je voudrais avoirun temps de latence de base de mise en file dattente de 200 ms Je configure donc Min agrave 1600 octets (= 02 x64000 8) Imposer une valeur Min trop petite va deacutegrader le deacutebit et une valeur Min trop grande va deacutegraderle temps de latence Sur une liaison lente choisir un coefficient Min petit ne peut pas remplacer une reacuteductiondu MTU pour ameacuteliorer les temps de reacuteponse

Vous devriez configurer Max agrave au moins deux fois Min pour eacuteviter les synchronisations Sur des liens lentsavec de petites valeurs de Min il peut ecirctre prudent davoir Max quatre fois plus grand que Min ou plus

Burst controcircle la reacuteponse de lalgorithme RED aux rafales Burst doit ecirctre choisi plus grand que minavpkt(paquet moyen) Expeacuterimentalement jai trouveacute que (min+min+max)(3avpkt) marche bien

De plus vous devez configurer limit et avpkt Limit est une valeur de seacutecuriteacute sil y a plus de Limit octetsdans la file RED reprend la technique tail-drop Je choisis une valeur typique eacutegale agrave 8 fois Max Avpktdevrait ecirctre fixeacute agrave la taille moyenne dun paquet 1000 fonctionne correctement sur des liaisons Internet hautdeacutebit ayant un MTU de 1500 octets

Lire larticle sur la file dattente RED par Sally Floyd et Van Jacobson pour les informations techniques

Generic Random Early Detection

Il ny a pas grand chose de connu sur GRED Il ressemble agrave GRED avec plusieurs files dattente internescelles-ci eacutetant choisies en se basant sur le champ tcindex de Diffserv Selon une diapositive trouveacutee ici ilpossegravede les capaciteacutes Distributed Weighted RED de Cisco ainsi que les capaciteacutes RIO de Clark

Chaque file dattente virtuelle peut avoir ses propres Drop Parameters

FIXME Demandez agrave Jamal or Werner de nous en dire plus

Emulation VCATM

Ceci est leffort principal de Werner Almesberger pour vous autoriser agrave construire des circuits virtuelsau-dessus des sockets TCPIP Le circuit virtuel est un concept venant de la theacuteorie des reacuteseaux ATM

Pour plus dinformations voir la page ATM sur Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Random Early Detection (RED) 83

Weighted Round Robin (WRR)

Ce gestionnaire de mise en file dattente nest pas inclus dans les noyaux standards mais peut ecirctre teacuteleacutechargeacuteeagrave partir de ce lien Ce gestionnaire de mise en file dattente na eacuteteacute testeacute quavec les noyaux 22 mais marcheraprobablement eacutegalement avec les noyaux 2425

La file dattente WRR partage la bande passante entre ses classes en utilisant la technique du tourniquetpondeacutereacute Ceci est similaire agrave la file dattente CBQ qui contient des classes sur lesquelles lon peut associerarbitrairement des files dattente Toutes les classes qui ont suffisamment de demandes obtiendront la bandepassante proportionnellement au poids associeacute des classes Les poids peuvent ecirctre configureacutes manuellement enutilisant le programme tc Ils peuvent eacutegalement ecirctre configureacutes pour deacutecroicirctre automatiquement pour lesclasses transfeacuterant moins de donneacutees

La file dattente a un classificateur inteacutegreacute qui assigne les paquets venant ou allant vers diffeacuterentes machines agravediffeacuterentes classes On peut utiliser soit ladresse MAC soit ladresse IP de ladresse source ou de destinationLadresse MAC ne peut cependant ecirctre utiliseacutee que quand la boite Linux est un pont ethernet Les classes sontautomatiquement assigneacutees aux machines en fonction des paquets vus

Ce gestionnaire de mise en file dattente peut ecirctre tregraves utile au site comme les reacutesidences eacutetudiantes ougrave desindividus sans liens particuliers partagent une connexion Internet Un ensemble de scripts pour configurer untel cas de figure pour ce genre de site est proposeacute dans la distribution WRR

Chapitre 15 Recettes de cuisineCette section contient des ltlt recettes de cuisine gtgt qui peuvent vous aider agrave reacutesoudre vos problegravemes Un livrede cuisine ne remplace cependant pas une reacuteelle compreacutehension essayez donc dassimiler ce qui suit

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations)

Vous pouvez faire cela de plusieurs maniegraveres Apache possegravede un module qui permet de le supporter maisnous montrerons comment Linux peut le faire pour dautres services Les commandes ont eacuteteacute reprises dunepreacutesentation de Jamal Hadi dont la reacutefeacuterence est fournie ci-dessous

Disons que nous avons deux clients avec http ftp et du streaming audio Nous voulons leur vendre unelargeur de bande passante limiteacutee Nous le ferons sur le serveur lui-mecircme

Le client A doit disposer dau moins 2 meacutegabits et le client B a payeacute pour 5 meacutegabits Nous seacuteparons nosclients en creacuteant deux adresses IP virtuelles sur notre serveur

ip address add 1881771661 dev eth0 ip address add 1881771662 dev eth0

Cest agrave vous dassocier les diffeacuterents serveurs agrave la bonne adresse IP Tous les deacutemons courants supportent cela

Nous pouvons tout dabord attacher une mise en file dattente CBQ agrave eth0

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

Nous creacuteons ensuite les classes pour nos clients

tc class add dev eth0 parent 10 classid 11 cbq bandwidth 10Mbit rate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

84 Chapitre 15 Recettes de cuisine

2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 tc class add dev eth0 parent 10 classid 12 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 Quest-ce quundiviseur FIXME Un diviseur est lieacute agrave une table de hachage et au nombre deseaux -ahu tc filter add dev eth0 parent 10 protocol ip prio 5 handle 1 u32 divisor 1 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771661 flowid 11 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771662 flowid 12

Et voilagrave qui est fait

FIXME Pourquoi pas un filtre token bucket Y a t-il un retour par deacutefaut agrave pfifoamplowbarfast quelquepart

Proteacuteger votre machine des inondations SYN

Dapregraves la documentation iproute dAlexey adapteacutee agrave netfilter Si vous utilisez ceci prenez garde dajuster lesnombres avec des valeurs raisonnables pour votre systegraveme

Si vous voulez proteacuteger tout un reacuteseau oubliez ce script qui est plus adapteacute agrave un hocircte seul

Il apparaicirct que la toute derniegravere version de loutil iproute2 est neacutecessaire pour que ceci fonctionne avec lenoyau 240

binsh -x script simple utilisant les capaciteacutes 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 beacuteneacuteficier de puissantes fonctionnaliteacutes sur les SYN chemins vers les divers utilitaires Agrave changer en fonction des vocirctresTC=sbintcIP=sbinipIPTABLES=sbiniptablesINDEV=eth2 marque tous les paquets SYN entrant agrave travers $INDEV avec la valeur 1 $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn -j MARK --set-mark 1 installe la file dattente ingress sur linterface associeacutee $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 agrave 3 par seconde (pas vraiment utile mais sert agrave montrer ce point -JHS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations) 85

$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 $INDEVecho ---- Class parameters Ingress ----------$TC class ls dev $INDEVecho ---- filter parameters Ingress ----------$TC filter ls dev $INDEV parent ffff

supprime la file dattente ingress $TC qdisc del $INDEV ingress

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service

Reacutecemment les attaques distribueacutees de deacuteni de service sont devenues une nuisance importante sur InternetEn filtrant proprement et en limitant le deacutebit de votre reacuteseau vous pouvez agrave la fois eacuteviter de devenir victimeou source de ces attaques

Vous devriez filtrer vos reacuteseaux de telle sorte que vous nautorisiez pas les paquets avec une adresse IP sourcenon locale agrave quitter votre reacuteseau Cela empecircche les utilisateurs denvoyer de maniegravere anonyme descochonneries sur Internet

La limitation de deacutebit peut faire encore mieux comme vu plus haut Pour vous rafraicircchir la meacutemoire revoicinotre diagramme ASCII

[Internet] ---ltE3 T3 nimporte quoigt--- [routeur Linux] --- [Bureau+FAI] eth1 eth0

Nous allons dabord configurer les parties preacute-requises

tc qdisc add dev eth0 root handle 10 cbq bandwidth 10Mbit avpkt 1000 tc class add dev eth0 parent 100 classid 101 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 deacuteterminercombien de trafic ICMP vous voulez autoriser Vous pouvez reacutealiser des mesures avec tcpdump en eacutecrivantles reacutesultats dans un fichier pendant un moment et regarder combien de paquets ICMP passent par votrereacuteseau Ne pas oublier daugmenter la longueur du snapshot Si la mesure nest pas possible vous pouvezconsacrer par exemple 5amppercnt de votre bande passante disponible Configurons notre classe

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

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

86 Proteacuteger votre machine des inondations SYN

Cela limite le deacutebit agrave 100 Kbits sur la classe Maintenant nous avons besoin dun filtre pour assigner le traficICMP agrave cette classe

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

Donner la prioriteacute au trafic interactif

Si beaucoup de donneacutees arrivent agrave votre lien ou en partent et que vous essayez de faire de la maintenance viatelnet ou ssh cela peut poser problegraveme dautres paquets bloquent vos frappes clavier Cela ne serait-il pasmieux si vos paquets interactifs pouvaient se faufiler dans le trafic de masse Linux peut faire cela pour vous

Comme preacuteceacutedemment nous avons besoin de manipuler le trafic dans les deux sens Evidemment celamarche mieux sil y a des machines Linux aux deux extreacutemiteacutes du lien bien que dautres UNIX soientcapables de faire la mecircme chose Consultez votre gourou local SolarisBSD pour cela

Le gestionnaire standard pfifoamplowbarfast a trois bandes diffeacuterentes Le trafic de la bande 0 est transmis enpremier le trafic des bandes 1 et 2 eacutetant traiteacute apregraves Il est vital que votre trafic interactif soit dans la bande 0 Ce qui suit est adapteacute du (bientocirct obsolegravete) Ipchains-HOWTO

Il y a quatre bits rarement utiliseacutes dans len-tecircte IP appeleacutes bits de Type de Service (TOS) Ils affectent lamaniegravere dont les paquets sont traiteacutes Les quatre bits sont Deacutelai Minimum Deacutebit Maximum FiabiliteacuteMaximum et Coucirct Minimum Seul un de ces bits peut ecirctre positionneacute Rob van Nieuwkerk lauteur ducode TOS-mangling dans ipchains le configure comme suit

Le Deacutelai Minimum est particuliegraverement important pour moi Je lepositionne agrave 1 pour les paquets interactifs sur mon routeur (Linux)qui envoie le trafic vers lexteacuterieur Je suis derriegravere un modem agrave336 Kbps Linux reacutepartit les paquets dans trois filesdattente De cette maniegravere jobtiens des performances acceptablespour le trafic interactif tout en teacuteleacutechargeant en mecircme temps

Lutilisation la plus commune est de configurer les connexions telnet et ftp agrave Deacutelai Minimum et les donneacuteesFTP agrave Deacutebit 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 donneacutees venant dun telnet exteacuterieur vers votre ordinateur local Danslautre sens ccedila se fait tout seul telnet ssh et consorts configurent le champ TOS automatiquement pour lespaquets sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service 87

Si vous avez un client incapable de le faire vous pouvez toujours le faire avec netfilter Sur votre machinelocale

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

Cache web transparent utilisant netfilter iproute2 ipchains etsquid

Cette section a eacuteteacute envoyeacutee par le lecteur Ram Narula de Internet for Education (Internet pour leacuteducation)(Thailande)

La technique habituelle pour reacutealiser ceci dans Linux est probablement lutilisation dipchains APRES secirctreassureacute que le trafic sortant du port 80 (web) est routeacute agrave travers le serveur faisant fonctionner squid

Il y a 3 meacutethodes communes pour ecirctre sucircr que le trafic sortant du port 80 est routeacute vers le serveur faisantfonctionner squid et une quatriegraveme est introduite ici

La passerelle le faitSi vous pouvez dire agrave votre passerelle que les paquets sortants agrave destination du port 80 doivent ecirctreenvoyeacutes vers ladresse IP du serveur squid

MAIS

Ceci amegravenerait une charge suppleacutementaire sur le routeur et des routeurs commerciaux peuvent mecircmene pas supporter ceci

Utiliser un commutateur Couche 4Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problegraveme

MAIS

Le coucirct pour un tel eacutequipement est en geacuteneacuteral tregraves eacuteleveacute Typiquement un commutateur couche 4coucircte normalement plus cher quun serveur classique + un bon serveur linux

Utiliser le serveur cache comme passerelle reacuteseauVous pouvez forcer TOUT le trafic agrave travers le serveur cache

MAIS

Ceci est plutocirct risqueacute dans la mesure ougrave Squid utilise beaucoup de ressources CPU ce qui peutconduire agrave une baisse des performances de tout le reacuteseau Le serveur peut eacutegalement ne plusfonctionner et personne sur le reacuteseau ne pourra acceacuteder agrave Internet si cela a lieu

Routeur Linux+NetFilterEn utilisant Netfilter une autre technique peut ecirctre impleacutementeacutee Celle-ci consiste agrave utiliser Netfilterpour marquer les paquets agrave destination du port 80 et agrave utiliser iproute2 pour router les paquetsmarqueacutes vers le serveur Squid

|----------------|

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

88 Donner la prioriteacute au trafic interactif

| Impleacutementation ||----------------|

Adresses utiliseacutees 10001 naret (serveur NetFilter) 10002 silom (serveur Squid) 10003 donmuang (routeur connecteacute agrave Internet) 10004 kaosarn (un autre serveur sur le reacuteseau) 10005 RAS 1000024 reacuteseau principal 1000019 reacuteseau total

|----------------||Scheacutema du reacuteseau||----------------|

Internet|donmuang|------------hubcommutateur----------| | | |naret silom kaosarn RAS etc

Premiegraverement faire en sorte que tout le trafic passe par naret en eacutetant sucircr que cest la passerelle par deacutefaut agravelexception de silom La passerelle par deacutefaut de silom doit ecirctre donmuang (10003) ou ceci creacuteerait uneboucle du trafic web

(Tous les serveurs sur mon reacuteseau avaient 10001 comme passerelle par deacutefaut qui eacutetait lancienne adresse durouteur donmuang Cela ma conduit agrave attribuer 10003 comme adresse IP agrave donmuang et agrave donner 10001comme adresse IP agrave naret)

Silom------configurer squid et ipchains

Pour la configuration du serveur Squid sur silom soyez sucircr que celui-ci supporte le cacheproxy transparent(transparent cachingproxying) Le port par deacutefaut pour squid est en geacuteneacuteral 3128 Tout le trafic pour le port80 doit donc ecirctre redirigeacute localement vers le port 3128 Ceci peut ecirctre fait en utilisant ipchains comme suit

silom ipchains -N allow1silom ipchains -A allow1 -p TCP -s 1000019 -d 00 80 -j REDIRECT 3128silom ipchains -I input -j allow1

Ou avec netfilter

silom iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(note vous pouvez avoir eacutegalement dautres entreacutees)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Cache web transparent utilisant netfilter iproute2 ipchains etsquid 89

Pour plus dinformations sur la configuration du serveur Squid se reacutefeacuterer agrave la page FAQ Squid surhttpsquidnlanrnet)

Soyez sucircr que lip forwarding est actif sur votre serveur et que la passerelle par deacutefaut pour ce serveur estdonmuand (PAS naret)

Naret------ configurer squid et ipchains - deacutesactiver les messages icmp REDIRECT (si besoin)

Marquer les paquets agrave destination du port 80 avec la valeur 2

naret iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 2

1

Configurer iproute2 de sorte quil route les paquets avec la marque 2 vers silom

naret echo 202 wwwout gtgt etciproute2rt_tablesnaret ip rule add fwmark 2 table wwwoutnaret ip route add default via 10002 dev eth0 table wwwoutnaret ip route flush cache

Si donmuang et naret sont sur le mecircme reacuteseau naret ne doit pas envoyer de messages icmpREDIRECT Ceux-ci doivent ecirctre deacutesactiveacutes par

naret echo 0 gt procsysnetipv4confallsend_redirectsnaret echo 0 gt procsysnetipv4confdefaultsend_redirectsnaret echo 0 gt procsysnetipv4confeth0send_redirects

2

La configuration est termineacutee veacuterifions-la

Sur naret

naret iptables -t mangle -LChain PREROUTING (policy ACCEPT)target prot opt source destination MARK tcp -- anywhere anywhere tcp dptwww MARK set 0x2

Chain OUTPUT (policy ACCEPT)target prot opt source destination

naret ip rule ls0 from all lookup local 32765 from all fwmark 2 lookup wwwout 32766 from all lookup main

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

90 Cache web transparent utilisant netfilter iproute2 ipchains etsquid

32767 from all lookup default

naret ip route list table wwwoutdefault via 2031142248 dev eth0

naret ip route 10001 dev eth0 scope link 1000024 dev eth0 proto kernel scope link src 100011270008 dev lo scope link default via 10003 dev eth0

(soyez sucircr que silom appartiens agrave lune des lignes ci-dessus Dans ce cascest la ligne avec 1000024)

|------||-FAIT-||------|

Scheacutema du trafic apregraves limpleacutementation

|---------------------------------------||Scheacutema du trafic apregraves limpleacutementation||---------------------------------------|

INTERNET||-----------------routeur donmuang--------------------- |||| || |||| ||naret silom ||trafic agrave destination du port 80=====gt(cache) || || |||| ===================================kaosarn RAS etc

Noter que le reacuteseau est asymeacutetrique car il y a un saut suppleacutementaire sur le chemin sortant

Voici le cheminement dun paquet traversant le reacuteseau de kaosarn allant etvenant dInternet

Pour le trafic webhttp requecircte http kaosarn-gtnaret-gtsilom-gtdonmuang-gtInternetreacuteponse http de Internet-gtdonmuang-gtsilom-gtkaosarn

Pour les requecirctes non webhttp (par ex telnet) donneacutees sortantes kaosarn-gtnaret-gtdonmuang-gtInternetdonneacutees entrantes dInternet-gtdonmuang-gtkaosarn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Scheacutema du trafic apregraves limpleacutementation 91

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen configurant un MTU par routes

Pour envoyer de grande quantiteacute de donneacutees Internet fonctionne geacuteneacuteralement mieux quand de grandspaquets sont utiliseacutes Chaque paquet implique une deacutecision de routage Le transfert dun fichier de 1Mo peutentraicircner soit lenvoi de 700 paquets en maximisant la taille des paquets soit de 4000 paquets en utilisant laplus petite taille possible

Cependant tous les eacuteleacutements dInternet ne supportent pas une capaciteacute utile (payload) de 1460 octets parpaquet Il est de plus neacutecessaire dessayer de trouver le plus grand paquet qui conviendra le mieux dans lebut doptimiser la connexion

Ce processus est appeleacute Deacutecouverte du MTU de chemin ougrave MTU signifie Maximum Transfert Unit (Uniteacutede transfert maximum)

Quand un routeur rencontre un paquet qui est trop gros pour ecirctre envoyeacute en un seul morceau ET que celui-cia eacuteteacute marqueacute avec le bit Dont Fragment il retourne un message ICMP indiquant quil a eacuteteacute obligeacute de rejeterle paquet Lhocircte eacutemetteur prend acte de cette indication en envoyant des paquets plus petits et par iteacuterationpeut trouver la taille optimum du paquet pour une connexion agrave travers un chemin particulier

Ceci fonctionnait correctement jusquagrave ce que Internet soit deacutecouvert par des vandales qui sefforcent deperturber les communications Ceci a conduit les administrateurs agrave soit bloquer soit mettre en forme le traficICMP lors dessais malencontreux dans le but dameacuteliorer la seacutecuriteacute ou la robustesse de leurs servicesInternet

La conseacutequence maintenant est que la deacutecouverte du MTU de chemin fonctionne de moins en moins bien eteacutechoue pour certaines routes conduisant agrave deacutetranges sessions TCPIP qui tombent peu de temps apregraves

Bien que je naie pas de preuves de ceci deux sites avec qui javais lhabitude davoir des problegravemes faisaientfonctionner agrave la fois Alteon et Acedirectors avant les systegravemes affecteacutes Peut-ecirctre quelquun avec plus deconnaissances peut fournir des indices quant agrave la raison de ce qui se passe

Solution

Quand vous rencontrez des sites qui preacutesentent ce problegraveme vous pouvez deacutesactiver la deacutecouverte du MTUde chemin en le configurant manuellement Koos van den Hout a agrave peu pregraves eacutecrit

Le problegraveme suivant jai configureacute le mtu et mru de ma ligne deacutedieacutee fonctionnant avec ppp agrave296 dans la mesure ougrave le deacutebit est de seulement 33k6 et que je ne peux pas influencer la filedattente de lautre cocircteacute A 296 la reacuteponse agrave lappui dune touche intervient dans un deacutelairaisonnable

Et de mon cocircteacute jai un routeur avec translation dadresse (masquage) fonctionnant (bien sucircr)sous Linux

Reacutecemment jai seacutepareacute le serveur du routeur de sorte que la plupart des applicationsfonctionnent sur une machine diffeacuterente de celle qui reacutealise le routage

Jai alors eu des problegravemes en me connectant sur lirc Grosse panique Je vous assure quecertains essais trouvaient que jeacutetais connecteacute agrave lirc me montrant mecircme comme connecteacute surlirc mais je ne recevais pas le motd (message of the day message du jour) de lirc Jai

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

92Circonvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

veacuterifieacute ce qui pouvait ecirctre erroneacute et ai noteacute que javais deacutejagrave eu des soucis lieacutes au MTU encontactant certains sites web Je navais aucun souci pour les atteindre quand le MTU eacutetait agrave1500 le problegraveme napparaissant que lorsque le MTU eacutetait configureacute agrave 296 Puisque lesserveurs irc bloquent tout le trafic dont il nont pas besoin pour leurs opeacuterations immeacutediatesils bloquent aussi licmp

Jai manoeuvreacute pour convaincre les responsables dun serveur web que ceci eacutetait la cause dunproblegraveme mais les responsables du serveur irc navaient pas lintention de reacuteparer ceci

Donc je devais ecirctre sucircr que le trafic masqueacute sortant partait avec le mtu faible du lien externeMais je voulais que le trafic ethernet local ait le MTU normal (pour des choses comme letrafic nfs)

Solution

ip route add default via 10001 mtu 296

(10001 eacutetant ma passerelle par deacutefaut ladresse interne de mon routeur masquant)

En geacuteneacuteral il est possible doutrepasser la deacutecouverte du MTU de chemin en configurant des routesspeacutecifiques Par exemple si seuls certains reacuteseaux posent problegravemes ceci devrait aider

ip route add 1959696024 via 10001 mtu 1000

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

Comme expliqueacute au-dessus la deacutecouverte du MTU de chemin ne marche pas aussi bien que cela devrait ecirctreSi vous savez quun saut de votre reacuteseau a un MTU limiteacute (lt1500) vous ne pouvez pas compter sur ladeacutecouverte du MTU de chemin pour le deacutecouvrir

Outre le MTU il y a encore un autre moyen de configurer la taille maximum du paquet par ce qui est appeleacutele MSS (Maximum Segment Size Taille Maximum du Segment) Cest un champ dans les options TCP dupaquet SYN

Les noyaux Linux reacutecents et quelques pilotes de peacuteripheacuterique PPPoE (notamment lexcellent RoaringPenguin) impleacutementent la possibiliteacute de fixer le MSS

Le bon cocircteacute de tout ceci est que en positionnant la valeur MSS vous dicirctes agrave lhocircte distant de maniegravereeacutequivoque nessaie pas de menvoyer des paquets plus grands que cette valeur Aucun trafic ICMP nestneacutecessaire pour faire fonctionner cela

Malheureusement cest de la bidouille eacutevidente -- ccedila deacutetruit la proprieacuteteacute laquobout-en-boutraquo de la connexion enmodifiant les paquets Ayant dit cela nous utilisons cette astuce dans beaucoup dendroit et cela fonctionnecomme un charme

Pour que tout ceci fonctionne vous aurez besoin au moins de iptables-121a et de Linux 243 ou plus Laligne de commande basique est

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --clamp-mss-to-pmtu

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Solution 93

Ceci calcule le MSS approprieacute pour votre lien Si vous vous sentez courageux ou que vous pensez ecirctre lemieux placeacute pour juger vous pouvez aussi faire quelque chose comme ceci

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --set-mss 128

Ceci configure le MSS du paquet SYN agrave 128 Utilisez ceci si vous avez de la voix sur IP (VoIP) avec de touspetits paquets et de grands paquets http qui provoquent des coupures dans vos communications vocales

Le Conditionneur de Trafic Ultime Faible temps de latenceTeacuteleacutechargement vers lamont et laval rapide

Note ce script a reacutecemment eacuteteacute mis agrave niveau et il ne marchait avant quavec les clients Linux de votrereacuteseau Vous devriez donc le mettre agrave jour si vous avez des machines Windows ou des Macs dans votrereacuteseau qui neacutetaient pas capables de teacuteleacutecharger plus rapidement pendant que dautres eacutetaient en train deteacuteleacutecharger vers lamont

Jai essayeacute de creacuteer le Saint Graal

Maintenir agrave tout moment un faible temps de latence pour le trafic interactifCeci signifie que la reacutecupeacuteration ou la transmission de fichiers ne doivent pas perturber SSH ou mecircmetelnet Ceci est la chose la plus importante car mecircme un temps de latence de 200ms est importantpour pouvoir travailler confortablement

Autoriser le surf agrave des vitesses raisonnables pendant que lon teacuteleacutecharge vers lamont ou vers lavalMecircme si http est un trafic de masse les autres trafics ne doivent pas trop le noyer

Etre sucircr que le teacuteleacutechargement vers lamont ne va pas faire du tort aux teacuteleacutechargements vers laval et aux autreseacuteleacutements autour

Le principal pheacutenomegravene observeacute est la forte reacuteduction de la vitesse de teacuteleacutechargement vers lavalquand il y a du trafic montant

Il savegravere que tout ceci est possible au prix dune minuscule reacuteduction de la bande passante La preacutesence degrandes files dattente sur les dispositifs daccegraves domestiques comme le cacircble ou les modems DSL expliquepourquoi les teacuteleacutechargements vers lamont vers laval et ssh se peacutenalisent mutuellement

La prochaine partie explique en profondeur ce qui provoque les retards et comment nous pouvons lescorriger Vous pouvez sans danger la passer et aller directement au script si vous vous fichez de la faccedilon dontla magie opegravere

Pourquoi cela ne marche t-il pas bien par deacutefaut

Les FAI savent que leurs performances ne sont seulement jugeacutees que sur la vitesse agrave laquelle les personnespeuvent teacuteleacutecharger vers laval En plus de la bande passante disponible la vitesse de teacuteleacutechargement estlourdement influenceacutee par la perte des paquets qui gecircne seacuterieusement les performances de TCPIP Lesgrandes files dattente peuvent aider agrave preacutevenir la perte des paquets et augmenter les teacuteleacutechargements LesFAI configurent donc de grandes files dattente

Ces grandes files dattente endommagent cependant linteractiviteacute Une frappe doit dabord parcourir la filedattente du flux montant ce qui peut prendre plusieurs secondes et aller jusquagrave lhocircte distant Elle est alors

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

94Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

traiteacutee conduisant agrave un paquet de retour qui doit traverser la file dattente du flux descendant localiseacutee chezvotre FAI avant quelle napparaisse sur leacutecran

Cet HOWTO nous enseigne plusieurs maniegraveres de modifier et traiter la file dattente mais malheureusementtoutes les files dattente ne nous sont pas accessibles Les files dattente du FAI sont sans limites et la filedattente du flux montant reacuteside probablement dans votre modem cacircble ou votre peacuteripheacuterique DSL Il se peutque vous soyez capable ou non de le configurer La plupart du temps ce ne sera pas le cas

Et apregraves Etant donneacute que nous ne pouvons pas controcircler ces files dattente elles doivent disparaicirctre et ecirctretransfeacutereacutees sur notre routeur Linux Heureusement ceci est possible

Limiter la vitesse de teacuteleacutechargement vers lamont (upload)En limitant notre vitesse de teacuteleacutechargement vers lamont agrave une vitesse leacutegegraverement plus faible que lavitesse reacuteelle disponible il ny a pas de files dattente mises en place dans notre modem La filedattente est maintenant transfeacutereacutee vers Linux

Limiter la vitesse de teacuteleacutechargement vers laval (download)Ceci est leacutegegraverement plus ruseacute dans la mesure ougrave nous ne pouvons pas vraiment influencer la vitesse agravelaquelle Internet nous envoie les donneacutees Nous pouvons cependant rejeter les paquets qui arriventtrop vite ce qui provoque le ralentissement de TCPIP jusquau deacutebit deacutesireacute Comme nous ne voulonspas supprimer inutilement du trafic nous configurons une vitesse de rafale (burst) plus grande

Maintenant que nous avons fait ceci nous avons eacutelimineacute totalement la file dattente du flux descendant (saufpour de courtes rafales de donneacutees) et obtenu la possibiliteacute de geacuterer la file dattente du flux montant avectoute la puissance Linux

Il nous reste agrave nous assurer que le trafic interactif se retrouve au deacutebut de la file dattente du flux montantPour ecirctre sucircr que le flux montant ne va pas peacutenaliser le flux descendant nous deacuteplaccedilons eacutegalement les paquetsACK au deacutebut de la file dattente Cest ce qui provoque normalement un eacutenorme ralentissement quand dutrafic de masse est geacuteneacutereacute dans les deux sens Les paquets ACK du trafic descendant rentrent en concurrenceavec le trafic montant et sont donc ralentis

Si nous avons fait tout ceci nous obtenons les mesures suivantes en utilisant lexcellente connexion ADSL dexs4all en Hollande

Temps de latence de base round-trip minavgmax = 144171217 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers laval round-trip minavgmax = 560957365864 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers lamont round-trip minavgmax = 204142332124276 ms

Avec le conditionneur lors dun teacuteleacutechargement vers lamont agrave 220kbits round-trip minavgmax = 157518799 ms

Avec le conditionneur lors dun teacuteleacutechargement vers laval agrave 850kbits round-trip minavgmax = 204469740 ms

Lors dun teacuteleacutechargement vers lamont les teacuteleacutechargements vers laval seffectuent agrave environ80 de la vitesse maximale disponible et 90 pour les teacuteleacutechargements verslamont Le temps de latence augmente alors jusquagrave 850 ms je nai pas encoredeacutetermineacute la raison de ce pheacutenomegravene

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Pourquoi cela ne marche t-il pas bien par deacutefaut 95

Ce que vous pouvez attendre de ce script deacutepend largement de votre vitesse de lien reacuteelle Quand vousteacuteleacutechargez vers lamont agrave pleine vitesse il y aura toujours un paquet devant votre frappe de clavier Ceci estla limite basse de votre temps de latence Pour la calculer divisez votre MTU par la vitesse du flux montantLes valeurs classiques seront un peu plus eacuteleveacutees que ccedila Diminuez votre MTU pour un meilleur effet

Voici deux versions de ce script une avec lexcellent HTB de Devik et lautre avec CBQ qui est preacutesent danschaque noyau Linux contrairement agrave HTB Les deux ont eacuteteacute testeacutes et marchent correctement

Le script (CBQ)

Marche avec tous les noyaux A linteacuterieur du gestionnaire de mise en file dattente CBQ nous placcedilons deuxSFQ pour ecirctre sucircr que de multiples flux de masse ne vont pas mutuellement se peacutenaliser

Le trafic descendant est reacuteglementeacute en utilisant un filtre tc contenant un Token Bucket Filter

Vous pourriez ameacuteliorer ce script en ajoutant bounded aux lignes qui deacutemarrent avec tc class add classid120 Si vous avez diminueacute votre MTU diminuez aussi les nombres allot amp avpkt

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobitsDOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe CBQ agrave la racine

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence Classe principale

tc class add dev $DEV parent 1 classid 11 cbq rate $UPLINKkbit allot 1500 prio 5 bounded isolated

classe de prioriteacute supeacuterieure 110

tc class add dev $DEV parent 11 classid 110 cbq rate $UPLINKkbit allot 1600 prio 1 avpkt 1000

la classe par deacutefaut et pour le trafic de masse 120 Reccediloit leacutegegraverement moins que le trafic et a une prioriteacute plus faible bulk and default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 cbq rate $[9$UPLINK10]kbit allot 1600 prio 2 avpkt 1000

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

96 Le script (CBQ)

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

Deacutemarrage des filtres le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110 ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

tc filter add dev $DEV parent 1 protocol ip prio 13 u32 match ip dst 00000 flowid 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacuteelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Le script (HTB)

Le script suivant nous permet datteindre tous nos buts en utilisant la merveilleuse file dattente HTB Voir lechapitre correspondant Cela vaut la peine de mettre agrave jour votre noyau

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobits

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le script (HTB) 97

DOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe HTB agrave la racine le trafic ira par deacutefaut vers 120

tc qdisc add dev $DEV root handle 1 htb default 20

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence

tc class add dev $DEV parent 1 classid 11 htb rate $UPLINKkbit burst 6k

la classe de haute prioriteacute 110

tc class add dev $DEV parent 11 classid 110 htb rate $UPLINKkbit burst 6k prio 1

bulk amp default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 htb rate $[9$UPLINK10]kbit burst 6k prio 2

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110

ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacutelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

98 Le script (HTB)

attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau

Bien que ceci soit deacutecrit en deacutetail ailleurs et dans nos pages de manuel cette question est souvent poseacuteeHeureusement il y a une reacuteponse simple qui ne neacutecessite pas la compreacutehension complegravete du controcircle de trafic

Ce script de trois lignes met en place la limitation du deacutebit

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1 classid 11 cbq rate 512kbit allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1 protocol ip prio 16 u32 match ip dst 195969697 flowid 11

La premiegravere ligne installe un gestionnaire de mise en file dattente baseacute sur des classes sur votre interface etindique au noyau que pour ses calculs il peut la consideacuterer comme une interface agrave 10 Mbitss Cependant ilny aura pas de grands dommages si vous indiquez une valeur erroneacutee Donner la vraie valeur permettradavoir des choses plus preacutecises

La seconde ligne creacutee une classe de 512kbits avec des valeurs par deacutefaut raisonnables Pour les deacutetails voirles pages de manuel cbq et Chapitre 9gt

La derniegravere ligne indique quel trafic devra passer par la classe reacutealisant la mise en forme Le trafic qui nestseacutelectionneacute par cette regravegle nest PAS mis en forme Pour avoir des seacutelections plus compliqueacutees (sous-reacuteseauxports sources ou de destinations) voir la section intituleacutee Toutes les commandes de filtres dont vous aureznormalement besoin dans Chapitre 9gt

Si vous avez changeacute quelque chose et que vous vouliez recharger le script exeacutecutez la commande tc qdisc deldev $DEV root pour supprimer votre configuration actuelle

Le script peut ecirctre ameacutelioreacute en ajoutant une derniegravere ligne optionnelle tc qdisc add dev $DEV parent 11 sfqperturb 10 Voir la section intituleacutee Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing) dans Chapitre 9gt pour savoir ce que cela fait

Exemple dune solution de translation dadresse avec de la QoS

Je mappelle Pedro Larroy

ltpiotrmemberfsforggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau 99

Je deacutecris ici une configuration dans le cas ougrave de nombreux utilisateurs seraient connecteacutes agrave Internet agrave traversun routeur Linux qui possegravede une adresse publique et qui reacutealise de la translation dadresse (NAT) Jutilisecette configuration QoS pour fournir laccegraves agrave 198 utilisateurs dans une citeacute universitaire dans laquelle je vis etougrave jadministre le reacuteseau Les utilisateurs sont de gros consommateurs de programmes peer to peer et uncontrocircle de trafic correct est neacutecessaire Jespegravere que ceci servira dexemples pratiques agrave tous les lecteursinteacuteresseacutes par le lartc

Dans un premier temps la configuration sera reacutealiseacutee pas agrave pas et agrave la fin jexpliquerai comment rendre ceprocessus automatique au deacutemarrage Le reacuteseau utiliseacute pour cet exemple est un reacuteseau local connecteacute agraveInternet agrave travers un routeur Linux ayant une adresse publique Lajout dun ensemble de regravegles iptablespermettrait facilement lextension agrave plusieurs adresses IP publiques Les eacuteleacutements suivants sont neacutecessaires

Linux 2418 ou une version du noyau supeacuterieure installeacuteeSi vous utilisez le noyau 2418 vous devrez appliquer la mise agrave jour HTB

iprouteSoyez eacutegalement sucircr que le binaire tc est compatible avec HTB Un binaire preacute compileacute estdistribueacute avec HTB

iptables

Commenccedilons loptimisation de cette rare bande passante

Tout dabord nous allons configurer des gestionnaires de mise en file dattente dans lesquels nous allonsclassifier le trafic Nous creacuteons un gestionnaire htb composeacute de 6 classes avec des prioriteacutes croissantes Nousavons alors des classes qui obtiendront le deacutebit alloueacute et qui pourront de plus utiliser la bande passante dontles autres classes nont pas besoin Rappelons que les classes de plus hautes prioriteacutes (correspondant auxnombres prio les plus faibles) obtiendront en premier lexcegraves de bande passante Notre liaison ADSL agrave un fluxdescendant de 2Mbitss et un flux montant de 300 kbitss Jutilise un deacutebit de seuil (ceil rate) de 240 kbitsscar au-delagrave de cette limite les problegravemes de latence commence agrave prendre de lampleur Ceci est ducirc auremplissage dun tampon placeacute quelque part entre nous et les hocirctes distants

Ajuster la variable CEIL agrave 75 de votre bande passante montante maximum et ajuster le nom de linterface(eth0 dans la suite) agrave celle qui a ladresse publique Internet Exeacutecutez ce qui suit dans un shell root

CEIL=240 tc qdisc add dev eth0 root handle 1 htb default 15 tc class add dev eth0 parent 1 classid 11 htb rate $CEILkbit ceil $CEILkbit tc class add dev eth0 parent 11 classid 110 htb rate 80kbit ceil 80kbit prio 0 tc class add dev eth0 parent 11 classid 111 htb rate 80kbit ceil $CEILkbit prio 1 tc class add dev eth0 parent 11 classid 112 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 113 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 114 htb rate 10kbit ceil $CEILkbit prio 3 tc class add dev eth0 parent 11 classid 115 htb rate 30kbit ceil $CEILkbit prio 3 tc qdisc add dev eth0 parent 112 handle 120 sfq perturb 10 tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Nous avons juste creacuteeacute une arborescence htb avec un seul niveau de profondeur Quelque chose comme ceci

+-----------+ | racine 1 | +-----------+ | +---------------------------------------+ | classe 11 | +---------------------------------------+ | | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

100 Exemple dune solution de translation dadresse avec de la QoS

+----+ +----+ +----+ +----+ +----+ +----+ |110| |111| |112| |113| |114| |115| +----+ +----+ +----+ +----+ +----+ +----+

classid 110 htb rate 80kbit ceil 80kbit prio 0Ceci est la classe de prioriteacute la plus eacuteleveacutee Les paquets de cette classe auront le plus faible deacutelai etobtiendront en premier lexcegraves de bande passante Cest donc une bonne ideacutee de limiter le deacutebit deseuil de cette classe Nous enverrons dans cette classe les paquets qui ont un avantage agrave avoir unfaible deacutelai tel que le trafic interactif ssh telnet dns quake3 irc et les paquets avec le bit SYNactiveacute

classid 111 htb rate 80kbit ceil $CEILkbit prio 1Nous avons ici la premiegravere classe dans laquelle nous commenccedilons agrave mettre du trafic de masse Dansmon exemple jai le trafic provenant de mon serveur web local et les requecirctes pour les pages web respectivement le port source 80 et le port destination 80

classid 112 htb rate 20kbit ceil $CEILkbit prio 2Dans cette classe je mettrai le trafic configureacute avec le champ TOS Deacutebit Maximum activeacute ainsique le reste du trafic provenant des processus locaux de mon routeur vers Internet Les classessuivantes ne recevront donc que du trafic routeacute par cette machine

classid 113 htb rate 20kbit ceil $CEILkbit prio 2Cette classe est pour le trafic des autres machines NATeacutees (NdT beacuteneacuteficiant du service detranslation dadresse) qui ont besoin dune prioriteacute plus grande dans leur trafic de masse

classid 114 htb rate 10kbit ceil $CEILkbit prio 3Le trafic mail (SMTP pop3) et les paquets configureacutes avec le champ TOS Coucirct Minimum serontenvoyeacutes dans cette classe

classid 115 htb rate 30kbit ceil $CEILkbit prio 3Finalement nous avons ici le trafic de masse des machines NATeacutees se trouvant derriegravere le routeurLes paquets lieacutes agrave kazaa edonkey et autres iront ici pour ne pas interfeacuterer avec les autres services

Classification des paquets

Nous avons configureacute le gestionnaire de mise en file dattente mais aucune classification de paquets naencore eacuteteacute faite Pour linstant tous les paquets sortants passent par la classe 115 (car nous avons utiliseacute tcqdisc add dev eth0 root handle 1 htb default 15) Nous devons donc maintenant indiquer ougrave doivent aller lespaquets Ceci est la partie la plus importante

Nous allons maintenant configurer les filtres de tel sorte que nous puissions classifier les paquets aveciptables Je preacutefegravere vraiment le faire avec iptables car celui-ci est tregraves souple et que nous avons un compteurde paquets pour chaque regravegle De plus avec la cible RETURN les paquets nont pas besoin de traverser toutesles regravegles Nous exeacutecutons les commandes suivantes

tc filter add dev eth0 parent 10 protocol ip prio 1 handle 1 fw classid 110 tc filter add dev eth0 parent 10 protocol ip prio 2 handle 2 fw classid 111 tc filter add dev eth0 parent 10 protocol ip prio 3 handle 3 fw classid 112 tc filter add dev eth0 parent 10 protocol ip prio 4 handle 4 fw classid 113 tc filter add dev eth0 parent 10 protocol ip prio 5 handle 5 fw classid 114 tc filter add dev eth0 parent 10 protocol ip prio 6 handle 6 fw classid 115

Nous indiquons simplement au noyau que les paquets qui ont une valeur FWMARK speacutecifique (handle x fw)vont dans la classe speacutecifieacutee (classid xx) Voyons maintenant comment marquer les paquets avec iptables

Tout dabord nous devons comprendre comment les paquets traversent les filtres avec iptables

+------------+ +---------+ +-------------+ Paquets-| PREROUTING |--- Deacutecision----| FORWARD |-------+-------| POSTROUTING |- Paquets entrant +------------+ de routage +-minus-------+ | +-------------+ sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Commenccedilons loptimisation de cette rare bande passante 101

| | +-------+ +--------+ | INPUT |-- Processus locaux-| OUTPUT | +-------+ +--------+

Je suppose que toutes vos tables ont leur politique par deacutefaut configureacutee agrave ACCEPT (-P ACCEPT) ce quidevrait ecirctre le cas si vous navez pas encore toucheacute agrave iptables Notre reacuteseau priveacute est une classe B avecladresse 172170016 et notre adresse publique est 21217021172

Nous indiquons au noyau de faire de la translation dadresse NAT les clients du reacuteseau priveacute peuvent alorscommencer agrave dialoguer avec lexteacuterieur

echo 1 gt procsysnetipv4ip_forward iptables -t nat -A POSTROUTING -s 172170025525500 -o eth0 -j SNAT --to-source 21217021172

Veacuterifions maintenant que les paquets transitent bien agrave travers 115

tc -s class show dev eth0

Vous pouvez commencer agrave marquer les paquets en ajoutant les regravegles dans la chaicircne PREROUTING de latable mangle

iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p icmp -j RETURN

Vous devriez maintenant ecirctre capable de voir leacutevolution du compteur de paquets quand vous pinguez des sitessur Internet depuis les machines du reacuteseau priveacute Veacuterifiez que le compteur de paquets augmente dans 110

tc -s class show dev eth0

Nous avons mis -j RETURN de maniegravere agrave ce que les paquets ne traversent pas toutes les regravegles Les paquetsicmp ne scruteront pas les autres regravegles deacutefinies sous RETURN Gardez ceci agrave lesprit Nous commenccedilonsmaintenant agrave ajouter dautres regravegles pour geacuterer les champs TOS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6 iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

Donnons la prioriteacute aux paquets SSH

iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

Une bonne ideacutee est de donner la prioriteacute aux paquets initiant une connexion tcp agrave savoir ceux qui ont le bitSYN activeacute

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j MARK --set-mark 0x1 iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j RETURN

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

102 Classification des paquets

Et ainsi de suite Apregraves la mise en place des regravegles dans la chaicircne PREROUTING de la table mangle nousterminons par

iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

Ainsi le trafic non marqueacute est dirigeacute vers 115 En fait cette derniegravere eacutetape nest pas neacutecessaire puisque laclasse par deacutefaut est 115 Un marquage est quand mecircme reacutealiseacute de maniegravere agrave avoir une coheacuterence pourlensemble de la configuration De plus il est utile davoir une comptabiliteacute pour cette regravegle

Cest une bonne ideacutee de faire de mecircme avec la chaicircne OUTPUT Reacutepeacutetez ces commandes avec -A OUTPUT agravela place de PREROUTING (sPREROUTINGOUTPUT) Le trafic geacuteneacutereacute localement (sur le routeur Linux)sera alors eacutegalement classifieacute Je termine la chaicircne OUTPUT par -j MARK --set-mark 0x3 de tel sorte que letrafic local ait une prioriteacute plus grande

Ameacuteliorer notre configuration

Toute notre configuration est maintenant opeacuterationnelle Prenez du temps pour regarder les graphes etobserver ougrave votre bande passante est la plus utiliseacutee et cela correspond agrave vos souhaits Jai fait ceci pendant denombreuses heures ce qui ma permis davoir une connexion Internet fonctionnant tregraves bien Autrement vousserez confronteacute en permanence agrave des timeout et des allocations de bande passante presque nulles pour lesnouvelles connexions tcp

Si vous repeacuterez des classes qui sont pleines la plupart du temps ce peut ecirctre une bonne ideacutee de leur attacherun autre gestionnaire de mise en file dattente de maniegravere agrave ce que le partage de la bande passante soit pluseacutequitable

tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Rendre tout ceci actif au deacutemarrage

Il est certain que ceci peut ecirctre fait de diffeacuterentes faccedilons Dans mon cas jai un shell scriptetcinitdpacketfilter qui accepte les arguments [start | stop | stop-tables | start-tables |reload-tables] Celui-ci configure les gestionnaires de mise en file dattente et charge les modules du noyauneacutecessaires et se comporte donc comme une deacutemon Le mecircme script charge les regravegles iptables agrave partir deetcnetworkiptables-rules Je vais lembellir un peu et le rendrait disponible sur ma page webici

Chapitre 16 Construire des ponts et des pseudoponts avec du Proxy ARPLes ponts sont des peacuteripheacuteriques qui peuvent ecirctre installeacutes dans un reacuteseau sans aucune reconfiguration Uncommutateur reacuteseau est basiquement un pont multi-ports Un pont est souvent un commutateur avec 2 portsCependant Linux supporte tregraves bien plusieurs interfaces dans un pont le conduisant agrave fonctionner comme unvrai commutateur

Les ponts sont souvent deacuteployeacutes quand on est confronteacute agrave un reacuteseau deacutefaillant qui a besoin decirctre reacutepareacute sansaucune modification Dans la mesure ougrave un pont est un eacutequipement de niveau 2 la couche sous la couche IP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 16 Construire des ponts et des pseudo ponts avec du Proxy ARP 103

les routeurs et serveurs ne sont pas conscients de son existence Ceci signifie que vous pouvez bloquer oumodifier certains paquets de maniegravere transparente ou mettre en forme le trafic

Un autre eacuteleacutement positif est quun pont peut souvent ecirctre remplaceacute par un cacircble croiseacute ou un hub quand iltombe en panne

Laspect neacutegatif est que la mise en place dun pont peut engendrer beaucoup de confusion agrave moins quil ne soittregraves bien configureacute Le pont napparaicirct pas dans les traceroute mais pourtant des paquets disparaissent sansraison ou sont changeacutes en allant dun point A agrave un point B (ce reacuteseau est HANTE ) Vous devriez eacutegalementvous demander si une organisation qui ne veut rien changer fait le bon choix

Le pont Linux 2425 est documenteacute sur cette page

Etat des ponts et iptables

Au moment de Linux 2420 le pont et iptables ne se voient pas lun lautre sans une aide Si vous pontezles paquets de eth0 agrave eth1 ils ne passent pas par iptables Ceci signifie que vous ne pouvez pas faire defiltrage de translation dadresse (NAT) de deacutesossage ou quoique ce soit dautres Ceci a eacuteteacute corrigeacute dans lesversions 2545 et supeacuterieures

Vous devriez eacutegalement regarder ebtables qui est encore un autre projet Il vous permettra de faire deschoses vraiment terribles comme MACNAT et brouting Cest vraiment effroyable

Pont et mise en forme

Ca marche comme dans les reacuteclames Soyez sucircr du cocircteacute attribueacute agrave chaque interface Autrement il se peut quevous mettiez en forme le trafic sortant au niveau de votre interface interne ce qui ne marchera pas Utiliseztcpdump si neacutecessaire

Pseudo-pont avec du Proxy-ARP

Si vous voulez juste impleacutementer un pseudo pont allez jusquagrave la section Impleacutementez-le Cependant il estsage de lire un peu la faccedilon dont il fonctionne en pratique

Un pseudo pont travaille de maniegravere un peu diffeacuterente Par deacutefaut un pont transmet les paquets sans les alteacutererdune interface agrave une autre Il ne regarde que ladresse mateacuterielle des paquets pour deacuteterminer ougrave ils doiventaller Ceci signifie que vous pouvez pontez un trafic que Linux ne comprend pas aussi longtemps quil y aune adresse mateacuterielle

Un pseudo pont travaille diffeacuteremment et ressemble plus agrave un routeur cacheacute quagrave un pont Mais comme unpont il a un impact faible sur larchitecture du reacuteseau

Le fait quil ne soit pas un pont preacutesente lavantage que les paquets traversent reacuteellement le noyau et peuventecirctre filtreacutes modifieacutes redirigeacutes ou rerouteacutes

Un pont reacuteel peut eacutegalement reacutealiser ces tours de force mais il a besoin dun code speacutecial comme le EthernetFrame Diverter ou la mise agrave jour mentionneacutee au-dessus

Un autre avantage dun pseudo pont est quil ne transmet pas les paquets quil ne comprend pas nettoyant ainsivotre reacuteseau de beaucoup de cochonneries Dans le cas ougrave vous auriez besoin de ces cochonneries (comme lespaquets SAP ou Netbeui) utilisez un vrai pont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

104 Etat des ponts et iptables

ARP amp Proxy-ARP

Quand un hocircte veut dialoguer avec un autre hocircte sur le mecircme segment physique il envoie un paquet duProtocole de Reacutesolution dAdresse (ARP) qui en simplifiant quelque peu est lu comme ceci Qui a 10001le dire agrave 10007 En reacuteponse agrave ceci 10001 renvoie un petit paquet ici

10007 envoie alors des paquets agrave ladresse mateacuterielle mentionneacutee dans le paquet ici Il met dans un cachecette adresse mateacuterielle pour un temps relativement long et apregraves lexpiration du cache repose sa question

Quand on construit un pseudo pont on configure le pont pour quil reacuteponde agrave ces paquets ARP les hocirctes dureacuteseau envoyant alors leurs paquets au pont Le pont traite alors ces paquets et les envoie agrave linterface adapteacutee

Donc en reacutesumeacute quand un hocircte dun cocircteacute du pont demande ladresse mateacuterielle dun hocircte se situant de lautrecocircteacute le pont reacutepond avec un paquet qui dit transmets le moi

De cette faccedilon tout le trafic de donneacutees est transmis agrave la bonne place et il traverse toujours le pont

Impleacutementez-le

Les versions anciennes du noyau linux permettait de faire du proxy ARP uniquement agrave une granulariteacute sousreacuteseaux Ainsi pour configurer un pseudo pont il fallait speacutecifier les bonnes routes vers les deux cocircteacutes dupont et eacutegalement creacuteer les regravegles proxy-ARP correspondantes Ceacutetait peacutenible deacutejagrave par la quantiteacute de textequil fallait taper puis parce quil eacutetait facile de se tromper et creacuteer des configurations erroneacutees ougrave le pontreacutepondait agrave des requecirctes pour des reacuteseaux quil ne savait pas router

Avec Linux 24 (et peut-ecirctre bien le 22) cette possibiliteacute a eacuteteacute retireacutee et a eacuteteacute remplaceacutee par une option dansle reacutepertoire proc appeleacutee proxy-arp La proceacutedure pour construire un pseudo pont est maintenant

Assigner une adresse agrave chaque interface la gauche et la droite1 Creacuteer des routes pour que votre machine connaisse quels hocirctes reacutesident agrave gauche et quels hocirctesreacutesident agrave droite

2

Activer le proxy-ARP sur chaque interface echo 1 gt procsysnetipv4confethLproxyamplowbararpecho 1 gt procsysnetipv4confethRproxyamplowbararp ougrave L et R deacutesignent les numeacuteros delinterface du cocircteacute gauche (Left) et de celle du cocircteacute droit (Right)

3

Noubliez pas eacutegalement dactiver loption ipamplowbarforwarding Quand on convertit un vrai pont il se peutque vous trouviez cette option deacutesactiveacutee dans la mesure ougrave il ny en a pas besoin pour un pont

Une autre chose que vous devriez consideacuterer lors de la conversion est que vous aurez besoin deffacer le cachearp des ordinateurs du reacuteseau Le cache arp peut contenir danciennes adresses mateacuterielles du pont qui ne sontplus correctes

Sur un Cisco ceci est reacutealiseacute en utilisant la commande clear arp-cache et sous linux en utilisant arp -dipadresse Vous pouvez aussi attendre lexpiration manuelle du cache ce qui peut ecirctre plutocirct long

Il se peut que vous deacutecouvriez eacutegalement que votre reacuteseau eacutetait mal configureacute si vous avezaviez lhabitude despeacutecifier les routes sans les masques de sous-reacuteseau Dans le passeacute certaines versions de route pouvaientcorrectement deviner le masque ou au contraire se tromper sans pour autant vous le notifier Quand vousfaites du routage chirurgical comme deacutecrit plus haut il est vital que vous veacuterifiez vos masques desous-reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP amp Proxy-ARP 105

Chapitre 17 Routage Dynamique - OSPF et BGPSi votre reacuteseau commence agrave devenir vraiment gros ou si vous commencez agrave consideacuterer Internet comme votrepropre reacuteseau vous avez besoin doutils qui routent dynamiquement vos donneacutees Les sites sont souvent relieacutesentre eux par de multiples liens et de nouveaux liens surgissent en permanence

LInternet utilise la plupart du temps les standards OSPF (RFC 2328) et BGP4 (RFC 1771) Linux supporteles 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 travauxde reacutefeacuterence

Vue densemble

Cisco Systems Cisco Systems Designing large-scale IP Internetworks

Pour OSPF

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

Halabi a aussi eacutecrit un tregraves bon guide sur la conception du routage OSPF mais il semble avoir eacuteteacute effaceacute dusite 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

Bien que les exemples soient speacutecifiques agrave Cisco ils sont remarquablement semblables au langage deconfiguration de Zebra -)

Configurer OSPF avec Zebra

Contactez-moi si les informations qui suivent ne sont pas exactes ou si vous avez des suggestions Zebra estun formidable logiciel de routage dynamique eacutecrit par Kunihiro Ishiguro Toshiaki Takada et Yasuhiro OharaConfigurer OSPF avec zebra est simple et rapide mais en pratique il y a de nombreux paramegravetres dans le casougrave vous auriez des besoins speacutecifiques OSPF est labreacuteviation de Open Shortest Path First et quelques une deses fonctionnaliteacutes sont

hieacuterarchiqueLes reacuteseaux sont regroupeacutes par zones (areas) qui sont interconnecteacutees par une zone eacutepine dorsale quisera appeleacutee zone 0 Tout le trafic passe par la zone 0 et tous les routeurs de cette zone ont lesinformations de routage de toutes les autres zones

convergence rapideLes routes sont propageacutees tregraves rapidement compareacute agrave RIP par exemple

eacuteconomie de bande passanteUtilise la multi-distribution agrave la place de la diffusion ce qui eacutevite de submerger les autres hocirctes avecdes informations de routage sans inteacuterecirct pour eux La multi-distribution reacuteduit ainsi le deacutebit sur le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

106 Chapitre 17 Routage Dynamique - OSPF et BGP

reacuteseau De mecircme les routeurs internes (ceux dont toutes les interfaces sont situeacutees dans la mecircmezone) nobtiennent pas dinformations sur les autres zones Les routeurs avec des interfaces dans plusdune zone sont appeleacutes Area Border Routers Ils possegravedent les informations de topologie sur leszones auxquelles ils sont connecteacutes

Utilisation intensive de CPUOSPF est baseacute sur lalgorithme de Dijkstra Shortest Path First qui est coucircteux en temps de calculcompareacute aux autres algorithmes de routage Ce nest pas forceacutement mauvais dans la mesure ougrave le pluscourt chemin est calculeacute uniquement pour chaque zone Donc pour les reacuteseaux de petite agrave moyennetaille ce ne sera pas un problegraveme vous ne vous en rendrez pas compte

Information deacutetat de lienOSPF prend en compte les caracteacuteristiques speacutecifiques des reacuteseaux et interfaces telles que la bandepassante les deacutefauts de liens et le coucirct moneacutetaire

Protocole ouvert et logiciel sous license GPLOSPF est un protocole ouvert et Zebra est un logiciel sous license GPL ce qui repreacutesente un avantageeacutevident par rapport aux protocoles et logiciels proprieacutetaires

Preacuterequis

Noyau Linux Compileacute avec CONFIG_NETLINK_DEV and CONFIG_IP_MULTICAST (Je ne sais pas si dautreseacuteleacutements sont eacutegalement neacutecessaires)

IprouteZebra

Reacutecupeacuterez-le avec votre gestionnaire de paquet favori ou agrave partir de httpwwwzebraorg

Configurer Zebra

Prenons le reacuteseau suivant comme exemple

---------------------------------------------------- | 1921680024 | | | | Zone 0 100BaseTX Commuteacute | | Epine dorsale Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |1 |2 |253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSLATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172170016 Zone 1 | | 1921681024 wlan Zone 2 | ------------ | Reacuteseau etudiant (dortoir) | | Sans fil de Barcelone | ------------------------------------ -------------------------------

Ne soyez pas effrayeacute par ce diagramme Zebra reacutealise la plus grande partie du travail automatiquement cequi ne demandera aucun travail de saisie des routes avec Zebra Il serait peacutenible de maintenir toutes ces routesagrave la main au quotidien La chose la plus importante agrave maicirctriser clairement cest la topologie du reacuteseau Faitesparticuliegraverement attention agrave la zone 0 puisque cest la plus importante Dans un premier temps configurezZebra en eacuteditant zebraconf et en ladaptant agrave vos besoins

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configurer OSPF avec Zebra 107

hostname omega password xxx enable password xxx Interfaces description interface lo description test of desc interface eth1 multicast Static default route ip route 00000 21217021129 log file varlogzebrazebralog

Debian neacutecessite eacutegalement leacutedition de etczebradaemons pour quils soient lanceacutes au deacutemarrage

zebra=yes ospfd=yes

Nous devons maintenant editer ospfdconf si vous utilisez encore IPV4 ou ospf6dconf si vous travaillez avecIPV6 Mon fichier ospfdconf ressemble agrave ceci

hostname omega password xxx enable password xxx router ospf network 1921680024 area 0 network 172170016 area 1 log stdout log file varlogzebraospfdlog

Ceci indique agrave ospf la topologie de notre reacuteseau

Exeacutecuter Zebra

Nous devons maintenant deacutemarrer Zebra soit agrave la main en tapant zebra -d soit avec un script commeetcinitdzebra start En regardant attentivement les logs de ospdfd on peut voir les eacuteleacutements suivants

20021213 224624 OSPF interface 19216801 join AllSPFRouters Multicast group 20021213 224634 OSPF SMUX_CLOSE with reason 5 20021213 224644 OSPF SMUX_CLOSE with reason 5 20021213 224654 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF DR-Election[1st] Backup 19216801 20021213 224704 OSPF DR-Election[1st] DR 19216801 20021213 224704 OSPF DR-Election[2nd] Backup 0000 20021213 224704 OSPF DR-Election[2nd] DR 19216801 20021213 224704 OSPF interface 19216801 join AllDRouters Multicast group 20021213 224706 OSPF DR-Election[1st] Backup 19216802 20021213 224706 OSPF DR-Election[1st] DR 19216801 20021213 224706 OSPF Packet[DD] Negotiation done (Slave) 20021213 224706 OSPF nsm_change_status() scheduling new router-LSA origination 20021213 224711 OSPF ospf_intra_add_router Start

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

108 Configurer Zebra

Ignorez le message SMUX_CLOSE pour linstant dans la mesure ougrave il concerne SNMP Nous pouvons voirque 19216801 est routeur deacutesigneacute (Designated Router) et que 19216802 est le le routeur deacutesigneacute desauvegarde (Backup Designated Router)

Nous pouvons eacutegalement interagir avec zebra et ospfd en exeacutecutant

$ telnet localhost zebra$ telnet localhost ospfd

Voyons comment les routes se sont propageacutees en se connectant agrave zebra

rootatlantis~ telnet localhost zebra Trying 127001 Connected to atlantis Escape character is ^]

Hello this is zebra (version 092a) Copyright 1996-2001 Kunihiro Ishiguro

User Access Verification

Password atlantisgt show ip route Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Kgt 00000 via 19216801 eth1 Cgt 1270008 is directly connected lo O 172170016 [11010] is directly connected eth0 062153 Cgt 172170016 is directly connected eth0 O 1921680024 [11010] is directly connected eth1 062153 Cgt 1921680024 is directly connected eth1 atlantisgt show ip ospf border-routers ============ OSPF router routing table ============= R 1921680253 [10] area (0000) ABR via 1921680253 eth1 [10] area (0001) ABR via 1721702 eth0

ou directement avec iproute

rootomega~ ip route 2121702112826 dev eth0 proto kernel scope link src 21217021172 1921680024 dev eth1 proto kernel scope link src 19216801 172170016 via 19216802 dev eth1 proto zebra metric 20 default via 21217021129 dev eth0 proto zebra rootomega~

Nous pouvons voir les routes Zebra qui neacutetaient pas preacutesentes auparavant Il est vraiment agreacuteable de voirapparaicirctre les routes quelques secondes apregraves le lancement de zebra et ospfd Vous pouvez veacuterifier laconnectiviteacute avec les autres hocirctes en utilisant ping Les routes zebra sont automatiques Vous pouvez ajouterun autre routeur au reacuteseau configurez Zebra et voilagrave

Astuce vous pouvez utiliser

tcpdump -i eth1 ip[9] == 89

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exeacutecuter Zebra 109

pour analyser les paquets OSPF Le numeacutero du protocole OSPF est 89 et le champ du protocole est le 9iegravemeoctet de len-tecircte ip

OSPF possegravede de nombreux paramegravetres speacutecialement pour les grands reacuteseaux Dans de prochainsdeacuteveloppements du HOWTO nous montrerons des meacutethodes de reacuteglages fins dOSPF

Configurer BGP4 avec Zebra

Le Border Gateway Protocol Version 4 (BGP4) est un protocole de routage dynamique deacutecrit dans la RFC1771 Il permet la distribution des informations de connectiviteacute cest agrave dire les tables de routage vers dautresnoeuds BGP4 actifs Il peut ecirctre utiliseacute comme un EGP ou un IGP Dans le mode EGP chaque noeud doitavoir son propre numeacutero de systegraveme autonome ( utonomous System (AS)) BGP4 supporte etlaggreacutegation de routes (reacuteunir plusieurs routes en une seule) gt The Border Gateway Protocol Version 4(BGP4) is a dynamic routing gt protocol described in RFC 1771 It allows the distribution of gt reachabilityinformation ie routing tables to other BGP4 gt enabled nodes It can either be used as EGP or IGP in EGPmode gt each node must have its own Autonomous System (AS) number gt BGP4 supports Classless InterDomain Routing (CIDR) and route gt aggregation (merge multiple routes into one)

scheacutema reacuteseau (Exemple)

Le scheacutema reacuteseau suivant est utiliseacute pour les exemples agrave suivre AS 1 et 50 ont plusieurs voisins mais nousavons seulement besoin de configurer 1 et 50 comme nos voisins Les noeuds communiquent entre eux pardes tunnels dans cet exemple mais ce nest pas une obligation

Note les numeacuteros AS utiliseacutes dans cet exemple sont reacuteserveacutes Veuillez obtenir vos propres numeacuteros AS duRIPE si vous installez des liens officiels

-------------------- | 192168231224 | | AS 23 | -------------------- ------------------ ------------------ | 1921681124 |-------| 10101116 | | AS 1 | | AS 50 | ------------------ ------------------

Configuration (Exemple)

La configuration suivante est eacutecrite pour le noeud 192168231224 et elle sera facile agrave adapter pour les autresnoeuds

Elle commence par des eacuteleacutements geacuteneacuteraux comme le nom de lhocircte les mots de passe et les options de debug

hostname hostname anakin

login password password xxx

enable password (super user mode) enable password xxx

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

110 Configurer BGP4 avec Zebra

path to logfile log file varlogzebrabgpdlog

debugging be verbose (can be removed afterwards) debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates

La liste de controcircle daccegraves (Access list) est utiliseacutee pour limiter la redistribution aux reacuteseaux priveacutes (RFC1918)

RFC 1918 networks access-list local_nets permit 1921680016 access-list local_nets permit 172160012 access-list local_nets permit 100008 access-list local_nets deny any

Letape suivante consiste agrave configurer chaque AS

Own AS number router bgp 23

IP address of the router bgp router-id 1921682312

announce our own network to other neighbors network 19216823024

advertise all connected routes (= directly attached interfaces) redistribute connected

advertise kernel routes (= manually inserted routes) redistribute kernel

Chaque section router bgp contient une liste de voisins auquels le routeur est connecteacute

neighbor 19216811 remote-as 1 neighbor 19216811 distribute-list local_nets in neighbor 101011 remote-as 50 neighbor 101011 distribute-list local_nets in

Veacuterification de la configuration

Note vtysh est un multiplexeur qui connecte toutes les interfaces utilisateur de zebra ensemble

anakin sh ip bgp summary BGP router identifier 1921682312 local AS number 23 2 BGP AS-PATH entries 0 BGP community entries

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd 101001 4 50 35 40 0 0 0 002840 1 19216811 4 1 27574 27644 0 0 0 032604 14

Total number of neighbors 2 anakin anakin sh ip bgp neighbors 101001 BGP neighbor is 101001 remote AS 50 local AS 23 external link

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration (Exemple) 111

BGP version 4 remote router ID 101001 BGP state = Established up for 002901 anakin

Voyons quelles routes nous avons obtenues de nos voisins

anakin sh ip ro bgp Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Bgt 172160014 [200] via 19216811 tun0 2d10h19m Bgt 172300016 [200] via 19216811 tun0 100924 Bgt 19216851032 [200] via 19216811 tun0 2d10h27m Bgt 19216852632 [200] via 19216811 tun0 100924 Bgt 19216853632 [200] via 19216811 tun0 2d10h19m Bgt 19216817024 [200] via 19216811 tun0 3d05h07m Bgt 19216817132 [200] via 19216811 tun0 3d05h07m Bgt 19216832024 [200] via 19216811 tun0 2d10h27m anakin

Chapitre 18 Autres possibiliteacutesCe chapitre est une liste des projets ayant une relation avec le routage avanceacute et la mise en forme du traficsous Linux Certains de ces liens meacuteriteraient des chapitres speacutecifiques dautres sont tregraves bien documenteacutes etnont pas besoin de HOWTO en plus

Impleacutementation VLAN 8021Q pour Linux (site)VLAN est une faccedilon tregraves sympa de diviser vos reacuteseaux dune maniegravere plus virtuelle que physique Debonnes informations sur les VLAN pourront ecirctre trouveacutees ici Avec cette impleacutementation votre boiteLinux pourra dialoguer VLAN avec des machines comme les Cisco Catalyst 3ComamplcubCorebuilder Netbuilder II SuperStack II switch 630amprcub Extreme Ntwks Summit 48Foundry amplcubServerIronXL FastIronamprcub

Impleacutementation alternative VLAN 8021Q pour Linux(site)Une impleacutementation alternative de VLAN pour Linux Ce projet a deacutemarreacute suite au deacutesaccord aveclarchitecture et le style de codage du projet VLAN eacutetabli avec comme reacutesultat une structure delensemble plus clair Mise agrave jour a eacuteteacute inclus dans le noyau 2414 (peut-ecirctre dans le 2413)

Un bon HOWTO agrave propos des VLAN peut ecirctre trouveacute ici

Mise agrave jour a eacuteteacute inclue dans le noyau agrave partir de la version 2414 (peut-ecirctre 13)Serveur Linux Virtuel (Linux Virtual Server )(site)

Ces personnes sont tregraves talentueuses Le Serveur Virtuel Linux est un serveur agrave haute disponibiliteacutehautement eacutevolutif construit autour dune grappe (cluster) de serveurs avec un eacutequilibreur de chargetournant sur le systegraveme dexploitation Linux Larchitecture du cluster est transparente pour lesutilisateurs finaux qui ne voient quun simple serveur virtuel

En reacutesumeacute que vous ayez besoin deacutequilibrer votre charge ou de controcircler votre trafic LVS aura unemaniegravere de le faire Certaines de leurs techniques sont positivement diaboliques Par exemple ilspermettent agrave plusieurs machines davoir une mecircme adresse IP mais en deacutesactivant lARP dessusSeule la machine LVS qui a elle lARP actif deacutecide de lhocircte qui manipulera le paquet entrantCelui-ci est envoyeacute avec la bonne adresse MAC au serveur choisi Le trafic sortant passe directementpar le routeur et non par la machine LVS qui par conseacutequent na pas besoin de voir vos 5Gbits dedonneacutees allant sur Internet Cette machine LVS ne peut alors pas ecirctre un goulot deacutetranglement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

112 Chapitre 18 Autres possibiliteacutes

Limpleacutementation de LVS neacutecessite une mise agrave jour pour les noyaux 20 et 22 alors quun moduleNetfilter est disponible dans le 24 Il ny a donc pas besoin de mise agrave jour pour cette version dunoyau Le support 24 est encore en deacuteveloppement Battez-vous donc avec et envoyez voscommentaires ou vos mises agrave jour

CBQinit (site)Configurer CBQ peut ecirctre un peu intimidant speacutecialement si votre seul souhait est de mettre en formele trafic dordinateurs placeacutes derriegravere un routeur CBQinit peut vous aider agrave configurer Linux agrave laidedune syntaxe simplifieacutee

Par exemple si vous voulez que tous les ordinateurs de votre reacuteseau 1921681024 (sur eth110 Mbits) aient leur vitesse de teacuteleacutechargement limiteacutee agrave 28 Kbits remplissez le fichier deconfiguration de CBQinit avec ce qui suit

DEVICE=eth110Mbit1MbitRATE=28KbitWEIGHT=2KbitPRIO=5RULE=1921681024

Utiliser simplement ce programme si le comment et pourquoi ne vous inteacuteresse pas Nous utilisonsCBQinit en production et il marche tregraves bien On peut mecircme faire des choses plus avanceacutees commela mise en forme deacutependant du temps La documentation est directement inteacutegreacutee dans le script ce quiexplique labsence dun fichier README

Scripts faciles de mise en forme Chronox(site)Stephan Mueller (smuellerchronoxde) a eacutecrit deux scripts utiles limitconn et shaper Lepremier vous permet de maicirctriser une session de teacuteleacutechargement comme ceci

limitconn -s SERVERIP -p SERVERPORT -l LIMIT

Il fonctionne avec Linux 22 et 24

Le second script est plus compliqueacute et peut ecirctre utiliseacute pour mettre en place des files dattentediffeacuterentes baseacutees sur les regravegles iptables Celles-ci sont utiliseacutees pour marquer les paquets qui sontalors mis en forme

Impleacutementation du Protocole Redondant Routeur Virtuel (site)Ceci est purement pour la redondance Deux machines avec leurs propres adresses IP et MAC creacuteentune troisiegraveme adresse IP et MAC virtuelle Bien que destineacute agrave lorigine uniquement aux routeurs quiont besoin dadresses MAC constantes cela marche eacutegalement pour les autres serveurs

La beauteacute de cette approche est lincroyable faciliteacute de la configuration Pas de compilation de noyauou de neacutecessiteacute de mise agrave jour tout se passe dans lespace utilisateur

Lancer simplement ceci sur toutes les machines participant au service

vrrpd -i eth0 -v 50 100022

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 18 Autres possibiliteacutes 113

Et vous voilagrave opeacuterationnel 100022 est maintenant geacutereacute par lun de vos serveurs probablement lepremier agrave avoir lanceacute le deacutemon vrrp Deacuteconnectez maintenant cet ordinateur du reacuteseau et tregravesrapidement ladresse 100022 et ladresse MAC seront geacutereacutees par lun des autres ordinateurs

Jai essayeacute ceci et il a eacuteteacute actif et opeacuterationnel en 1 minute Pour une raison eacutetrange ma passerelle pardeacutefaut a eacuteteacute supprimeacutee Cependant loption -n permet de preacutevenir cela

Voici une deacutefaillance en direct

64 bytes from 100022 icmp_seq=3 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=4 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=5 ttl=255 time=168 ms64 bytes from 100022 icmp_seq=6 ttl=255 time=18 ms64 bytes from 100022 icmp_seq=7 ttl=255 time=17 ms

Pas un paquet ping na eacuteteacute perdu Apregraves 4 paquets jai deacuteconnecteacute mon P200 du reacuteseau et mon 486a pris le relais ce qui est visible par laugmentation du temps de latence

Chapitre 19 Lectures suppleacutementaireshttpsnafufreedomorglinux22iproute-noteshtml

Contient beaucoup dinformations techniques et de commentaires sur le noyauhttpwwwdavinottawaoncaols

Transparents de Jamal Hadi Salim un des auteurs du controcircleur de trafic de Linuxhttpdefiantcoinetcomiproute2ip-cref

Version HTML de la documentation LaTeX dAlexeys explique une partie diproute2 en deacutetailshttpwwwaciriorgfloydcbqhtml

Sally Floyd a une bonne page sur CBQ incluant ses publications originales Aucune nest speacutecifique agraveLinux mais il y a un travail de discussion sur la theacuteorie et lutilisation de CBQ Contenu tregravestechnique mais une bonne lecture pour ceux qui sont inteacuteresseacutes

Differentiated Services on LinuxThis document par Werner Almesberger Jamal Hadi Salim et Alexey Kuznetsov Deacutecrit les fonctionsDiffServ du noyau Linux entre autres les gestionnaires de mise en file dattente TBF GREDDSMARK et le classificateur tcindex

httpcetipl~ekravietzcbqNET4_tchtmlUn autre HOWTO en polonais Vous pouvez cependant copiercoller les lignes de commandes ellesfonctionnent de la mecircme faccedilon dans toutes les langues Lauteur travaille en collaboration avec nouset sera peut ecirctre bientocirct un auteur de sections de cet HOWTO

IOS Committed Access RateDes gens de Cisco qui ont pris la louable habitude de mettre leur documentation en ligne La syntaxede Cisco est diffeacuterente mais les concepts sont identiques sauf quon fait mieux et sans mateacuterielcoutant le prix dune voiture -)

TCPIP Illustrated volume 1 W Richard Stevens ISBN 0-201-63346-9Sa lecture est indispensable si vous voulez reacuteellement comprendre TCPIP et de plus elle estdivertissante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

114 Chapitre 19 Lectures suppleacutementaires

Chapitre 20 RemerciementsNotre but est de faire la liste de toutes les personnes qui ont contribueacute agrave ce HOWTO ou qui nous ont aideacutes agraveexpliquer le fonctionnement des choses Alors quil nexiste pas actuellement de tableau dhonneur Netfilternous souhaitons saluer les personnes qui apportent leur aide

Junk Alins

ltjuanjomatupcesgt

bull

Joe Van Andelbull Michael T Babcock

ltmbabcockfibrespeednetgt

bull

Christopher Barton

ltcpbartonuiucedugt

bull

Peter Bieringer

ltpbbieringerdegt

bull

Ard van Breemen

ltardkwaaknetgt

bull

Ron Brinker

ltserviceemciscomgt

bull

ukasz Bromirski

ltlbromirskimr0vkaeuorggt

bull

Lennert Buytenhek

ltbuytenhgnuorggt

bull

Esteve Camps

ltestevehadesudgesgt

bull

Ricardo Javier Cardenes

ltricardoconysiscomgt

bull

Stef Coene

ltstefcoenedocumorggt

bull

Don Cohen

ltdon-lartcisiscs3-inccomgt

bull

Jonathan Corbet

ltlwnlwnnetgt

bull

Gerry N5JXS Creager

ltgerrycstamuedugt

bull

Marco Davids

ltmarcosaranlgt

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 115

Jonathan Day

ltjd9812my-dejacomgt

bull

Martin aka devik Devera

ltdevikcdiczgt

bull

Hannes Ebner

lthefli4ldegt

bull

Derek Fawcus

ltdfawcusciscocomgt

bull

David Fries

ltdfriesmailwinorggt

bull

Stephan Kobold Gehring

ltStephanGehringbechtledegt

bull

Jacek Glinkowski

ltjglinkowhnscomgt

bull

Andrea Glorioso

ltsamaperchetopiorggt

bull

Thomas Graaf

lttgrafsuugchgt

bull

Sandy Harris

ltsandystormcagt

bull

Nadeem Hasan

ltnhasanusanetgt

bull

Erik Hensema

lterikhensemaxs4allnlgt

bull

Vik Heyndrickx

ltvikheyndrickxedchqcomgt

bull

Spauldo Da Hippie

ltspauldousanetgt

bull

Koos van den Hout

ltkooskzdoosxs4allnlgt

bull

Stefan Huelbrock ltshuelbrockdatasystemsdegtbull Ayotunde Itayemi

ltaitayemimetrongcomgt

bull

Alexander W Janssen ltyallaynfonaticdegtbull Andreas Jellinghaus ltajdungeoninkadegtbull Gareth John ltgdjohnzeplerorggtbull Dave Johnsonbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

116 Chapitre 20 Remerciements

ltdjwwwuklinuxorggtMartin Josefsson ltgandalfwlugwestbosegtbull Andi Kleen ltaksusedegtbull Andreas J Koenig ltandreaskoeniganimadegtbull Pawel Krawczyk ltkravietzalfacetiplgtbull Amit Kucheria ltamitkittckuedugtbull Edmund Lau ltedlauucficsuciedugtbull Philippe Latu ltphilippelatulinux-franceorggtbull Arthur van Leeuwen ltarthurvlscikunnlgtbull Jose Luis Domingo Lopez

ltjdomingo24x7linuxcomgt

bull

Robert Lowe

ltroberthlowelawrenceedugt

bull

Jason Lunz ltjccgatechedugtbull Stuart Lynne ltslfireplugnetgtbull Alexey Mahotkin ltalexmformulabezrugtbull Predrag Malicevic ltpmalicieeeorggtbull Patrick McHardy ltkabertrashnetgtbull Andreas Mohr ltandilisasdegtbull James Morris ltjmorrisintercodecomaugtbull Andrew Morton ltakpmzipcomaugtbull Wim van der Mostbull Stephan Mueller ltsmuellerchronoxdegtbull Togan Muftuoglu lttoganmyahoocomgtbull Chris Murray ltcmurraystargatecagtbull Patrick Nagelschmidt ltdtogmxnetgtbull Ram Narula ltramprincess1netgtbull Jorge Novo ltjnovoeducanetnetgtbull Patrik ltphkurdnugtbull Pl Osgyny ltoplabwestel900netgtbull Lutz Preszligler ltLutzPresslerSerNetDEgtbull Jason Pyeron ltjasonpyeroncomgtbull Rod Roark ltrodsunsetsystemscomgtbull Pavel Roskin ltproskignuorggtbull Rusty Russell ltrustyrustcorpcomaugtbull Mihai RUSU ltdizzyroedunetgtbull Rob Pitman ltrobpitmancozagtbull Jamal Hadi Salim lthadicyberuscagtbull Ren Serral ltrserralacupcesgtbull David Sauer ltdavidspenguinczgtbull Sheharyar Suleman Shaikh ltsss23drexeledugtbull Stewart Shields ltMourningBladebigfootcomgtbull Nick Silberstein ltnhsilberyahoocomgtbull Konrads Smelkov ltkonradsinterbaltikacomgtbull William Stearns

ltwstearnspoboxcomgt

bull

Andreas Steinmetz ltastdomdvdegtbull Matthew Strait ltstraitmmathcscarletonedugtbull Jason Tackaberry lttacklinuxcomgtbull Charles Tassell ltctassellisnnetgtbull Glen Turner ltglenturneraarneteduaugtbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 117

Tea Sponsor Eric Veldhuyzen ltericterranugtbull Thomas Walpuski ltthomasbenderthinknerddegtbull Song Wang ltwsongeceuciedugtbull Chris Wilson

ltchrisnetserverscoukgt

bull

Lazar Yanackiev

ltLyanackievgmxnetgt

bull

Pedro Larroy

ltpiotrmemberfsforggt

Chaptitre 15 section 10 Exemple dune solution de translation dadresse avec de la QoSdiams Chaptitre 17 section 1 Configurer OSPF avec Zebradiams

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

118 Chapitre 20 Remerciements

  • HOWTO du routage avanceacute et du controcircle de trafic sous Linux
Page 2: HOWTO du routage avanc© et du contr´le de trafic sous Linux

Guillaume Allegravegre

Relecteur

ltGuillaumeAllegreimagfrgt

Une approche pratique diproute2 de la mise en forme du trafic et un peu de netfilter

Table des matiegraveres1 Deacutedicace2 Introduction

Conditions de distribution et Mise en gardeConnaissances preacutealablesCe que Linux peut faire pour vousNotes diversesAccegraves CVS et propositions de mises agrave jourListe de diffusionPlan du document

3 Introduction agrave iproute2Pourquoi iproute2 Un tour dhorizon diproute2PreacuterequisExplorer votre configuration courante

ip nous montre nos liensip nous montre nos adresses IPip nous montre nos routes

ARP4 Regravegles - bases de donneacutees des politiques de routage

Politique de routage simple par ladresse sourceRoutage avec plusieurs accegraves Internetfournisseurs daccegraves

Accegraves seacutepareacuteBalance de charge

5 GRE et autres tunnelsQuelques remarques geacuteneacuterales agrave propos des tunnels IP dans un tunnel IPLe tunnel GRE

Le tunnel IPv4Le tunnel IPv6

Tunnels dans lespace utilisateur6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone)

Tunnel IPv67 IPSEC IP seacutecuriseacute agrave travers Internet

Introduction sur la gestion manuelle des cleacutesGestion automatique des cleacutes

TheacuteorieExempleGestion automatique des cleacutes en utilisant les certificats X509

tunnels IPSECAutre logiciel IPSEC

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

2 Laurent Foucher

Interopeacuterabiliteacute dIPSEC avec dautres systegravemesWindowsCheck Point VPN-1 NG

8 Routage multidistribution (multicast)9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en file dattenteGestionnaires de mise en file dattente simples sans classes

pfifoamplowbarfastFiltre agrave seau de jetons (Token Bucket Filter)Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

Conseils pour le choix de la file dattenteterminologieGestionnaires de file dattente baseacutes sur les classes

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur des classesLa famille des gestionnaires de mise en file dattente racines descripteurs descendances etparentsLe gestionnaire de mise en file dattente PRIOLe ceacutelegravebre gestionnaire de mise en file dattente CBQSeau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Classifier des paquets avec des filtresQuelques exemples simples de filtrageToutes les commandes de filtres dont vous aurez normalement besoin

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediate queueing device (IMQ))Configuration simple

10 Eacutequilibrage de charge sur plusieurs interfacesAvertissement

11 Netfilter et iproute - marquage de paquets12 Filtres avanceacutes pour la (re-)classification des paquets

Le classificateur u32Le seacutelecteur U32Seacutelecteurs geacuteneacuterauxLes seacutelecteurs speacutecifiques

Le classificateur routeLes filtres de reacuteglementation (Policing filters)

Techniques de reacuteglementationActions de deacutepassement de limite (Overlimit actions)Exemples

Filtres hacheacutes pour un filtrage massif tregraves rapideFiltrer le trafic IPv6

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas Marquer les paquets IPv6 en utilisant ip6tablesUtiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

13 Paramegravetres reacuteseau du noyauFiltrage de Chemin Inverse (Reverse Path Filtering)Configurations obscures

ipv4 geacuteneacuteriqueConfiguration des peacuteripheacuteriquesPolitique de voisinageConfiguration du routage

14 Gestionnaires de mise en file dattente avanceacutes amp moins communsbfifopfifo

Paramegravetres amp usageAlgorithme Clark-Shenker-Zhang (CSZ)DSMARK

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Laurent Foucher 3

IntroductionA quoi DSMARK est-il relieacute Guide des services diffeacuterencieacutesTravailler avec DSMARKComment SCHamplowbarDSMARK travailleLe filtre TCamplowbarINDEX

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)Paramegravetres amp usage

Random Early Detection (RED)Generic Random Early DetectionEmulation VCATMWeighted Round Robin (WRR)

15 Recettes de cuisineFaire tourner plusieurs sites avec diffeacuterentes SLA (autorisations)Proteacuteger votre machine des inondations SYNLimiter le deacutebit ICMP pour empecirccher les deacutenis de serviceDonner la prioriteacute au trafic interactifCache web transparent utilisant netfilter iproute2 ipchains et squid

Scheacutema du trafic apregraves limpleacutementationCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

SolutionCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en imposant le MSS (pour lesutilisateurs de lADSL du cacircble de PPPoE amp PPtP)Le Conditionneur de Trafic Ultime Faible temps de latence Teacuteleacutechargement vers lamont et lavalrapide

Pourquoi cela ne marche t-il pas bien par deacutefaut Le script (CBQ)Le script (HTB)

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseauExemple dune solution de translation dadresse avec de la QoS

Commenccedilons loptimisation de cette rare bande passanteClassification des paquetsAmeacuteliorer notre configurationRendre tout ceci actif au deacutemarrage

16 Construire des ponts et des pseudo ponts avec du Proxy ARPEtat des ponts et iptablesPont et mise en formePseudo-pont avec du Proxy-ARP

ARP amp Proxy-ARPImpleacutementez-le

17 Routage Dynamique - OSPF et BGPConfigurer OSPF avec Zebra

PreacuterequisConfigurer ZebraExeacutecuter Zebra

Configurer BGP4 avec Zebrascheacutema reacuteseau (Exemple)Configuration (Exemple)Veacuterification de la configuration

18 Autres possibiliteacutes19 Lectures suppleacutementaires20 Remerciements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

4 Laurent Foucher

Chapitre 1 DeacutedicaceCe document est deacutedieacute agrave beaucoup de gens dans ma tentative de tous me les rappeler je peux en citerquelques-uns

Rusty Russellbull Alexey N Kuznetsovbull La fine eacutequipe de Googlebull Leacutequipe de Casema Internetbull

Chapitre 2 IntroductionBienvenue cher lecteur

Ce document a pour but de vous eacuteclairer sur la maniegravere de faire du routage avanceacute avec Linux 2224Meacuteconnus par les utilisateurs les outils standard de ces noyaux permettent de faire des choses spectaculairesLes commandes comme route et ifconfig sont des interfaces vraiment pauvres par rapport agrave la grandepuissance potentielle diproute2

Jespegravere que ce HOWTO deviendra aussi lisible que ceux de Rusty Russell tregraves reacuteputeacute (parmi dautres choses)pour son netfilter

Vous pouvez nous contacter en nous eacutecrivant agrave leacutequipe HOWTO Cependant postez sil vous plaicirct vosquestions sur la liste de diffusion (voir la section correspondante) pour celles qui ne sont pas directement lieacuteesagrave ce HOWTO

Avant de vous perdre dans ce HOWTO si la seule chose que vous souhaitez faire est de la simple mise enforme de trafic allez directement au chapitre Autres possibiliteacutesgt et lisez ce qui concerne CBQinit

Conditions de distribution et Mise en garde

Ce document est distribueacute dans lespoir quil sera utile et utiliseacute mais SANS AUCUNE GARANTIE sansmecircme une garantie implicite de qualiteacute leacutegale et marchande ni aptitude agrave un quelconque usage

En un mot si votre dorsale STM-64 est tombeacutee ou distribue de la pornographie agrave vos estimeacutes clients celanest pas de notre faute Deacutesoleacute

Copyright (c) 2001 par Bert Hubert Gregory Maxwell et Martijn van Oosterhout Remco van Mook Paul BSchroeder et autres Ce document ne peut ecirctre distribueacute quen respectant les termes et les conditions exposeacutesdans la Open Publication License v10 ou supeacuterieure (la derniegravere version est actuellement disponible surhttpwwwopencontentorgopenpub)

Copiez et distribuez (vendez ou donnez) librement ce document dans nimporte quel format Les demandes decorrections etou de commentaires sont agrave adresser agrave la personne qui maintient ce document

Il est aussi demandeacute que si vous publiez cet HOWTO sur un support papier vous en envoyiez desexemplaires aux auteurs pour une ltlt relecture critique gtgt -)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 2 Introduction 5

Connaissances preacutealables

Comme le titre limplique ceci est un HOWTO ltlt avanceacute gtgt Bien quil ne soit pas besoin decirctre un expertreacuteseau certains preacute-requis sont neacutecessaires

Voici dautres reacutefeacuterences qui pourront vous aider agrave en apprendre plus

Rusty Russells networking-concepts-HOWTOTregraves bonne introduction expliquant ce quest un reacuteseau et comment on le connecte agrave dautres reacuteseaux

Linux Networking-HOWTO (ex Net-3 HOWTO)Excellent document bien que tregraves bavard Il vous apprendra beaucoup de choses qui sont deacutejagraveconfigureacutees si vous ecirctes capable de vous connecter agrave Internet Il peut eacuteventuellement ecirctre situeacute agraveusrdocHOWTONET-HOWTOtxt mais peut eacutegalement ecirctre trouveacute en ligne

Ce que Linux peut faire pour vous

Une petite liste des choses qui sont possibles

Limiter la bande passante pour certains ordinateursbull Limiter la bande passante VERS certains ordinateursbull Vous aider agrave partager eacutequitablement votre bande passantebull Proteacuteger votre reacuteseau des attaques de type Deacuteni de Servicebull Proteacuteger Internet de vos clientsbull Multiplexer plusieurs serveurs en un seul pour leacutequilibrage de charge ou une disponibiliteacute ameacutelioreacuteebull Restreindre laccegraves agrave vos ordinateursbull Limiter laccegraves de vos utilisateurs vers dautres hocirctesbull Faire du routage baseacute sur lID utilisateur (eh oui ) ladresse MAC ladresse IP source le port le typede service lheure ou le contenu

bull

Peu de personnes utilisent couramment ces fonctionnaliteacutes avanceacutees Il y a plusieurs raisons agrave cela Bien quela documentation soit fournie la prise en main est difficile Les commandes de controcircle du trafic ne sontpratiquement pas documenteacutees

Notes diverses

Il y a plusieurs choses qui doivent ecirctre noteacutees au sujet de ce document Bien que jen ai eacutecrit la majeure partieje ne veux vraiment pas quil reste tel quel Je crois beaucoup agrave lOpen Source je vous encourage donc agraveenvoyer des remarques des mises agrave jour des corrections etc Nheacutesitez pas agrave mavertir des coquilles ouderreurs pures et simples Si mon anglais vous paraicirct parfois peu naturel ayez en tecircte sil vous plaicirct quelanglais nest pas ma langue natale Nheacutesitez pas agrave menvoyer vos suggestions amplsqbNdT en anglais ]

Si vous pensez que vous ecirctes plus qualifieacute que moi pour maintenir une section ou si vous pensez que vouspouvez eacutecrire et maintenir de nouvelles sections vous ecirctes le bienvenu La version SGML de ce HOWTO estdisponible via CVS Jenvisage que dautres personnes puissent travailler dessus

Pour vous aider vous trouverez beaucoup de mentions FIXME (NdT A CORRIGER) Les corrections sonttoujours les bienvenues Si vous trouvez une mention FIXME vous saurez que vous ecirctes en territoire inconnuCela ne veut pas dire quil ny a pas derreurs ailleurs faites donc tregraves attention Si vous avez valideacute quelquechose faites-nous le savoir ce qui nous permettra de retirer la mention FIXME

Je prendrai quelques liberteacutes tout au long de cet HOWTO Par exemple je pars de lhypothegravese duneconnexion Internet agrave 10 Mbits bien que je sache tregraves bien que cela ne soit pas vraiment courant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

6 Connaissances preacutealables

Accegraves CVS et propositions de mises agrave jour

Ladresse canonique de cet HOWTO est Ici

Nous avons maintenant un CVS en accegraves anonyme disponible depuis le monde entier Cela est inteacuteressantpour plusieurs raisons Vous pouvez facilement teacuteleacutecharger les nouvelles versions de ce HOWTO et soumettredes mises agrave jour

En outre cela permet aux auteurs de travailler sur la source de faccedilon indeacutependante ce qui est une bonne choseaussi

$ export CVSROOT=pserveranonoutpostds9anlvarcvsroot$ cvs loginCVS password [enter cvs (sans les caractegraveres )]$ cvs co 24routingcvs server Updating 24routingU 24routinglartcdb

Si vous avez fait des changements et que vous vouliez contribuer au HOWTO exeacutecutez cvs -z3 diff-uBb et envoyez-nous le reacutesultat par courrier eacutelectronique de faccedilon agrave pouvoir facilement inteacutegrer lesmodifications Merci Au fait soyez sucircr que vous avez eacutediteacute le fichier db les autres documents eacutetant geacuteneacutereacutesagrave partir de celui-ci

Un fichier Makefile est fourni pour vous aider agrave creacuteer des fichiers PostScript dvi pdf html et texte Vouspouvez avoir agrave installer les docbook docbook-utils ghostscript et tetex pour obtenir tous les formats de sortie

Faites attention de ne pas eacutediter le fichier 24routingsgml Il contient une ancienne version du HOWTO Lebon fichier est lartcdb

Liste de diffusion

Les auteurs reccediloivent de plus en plus de courriers eacutelectroniques agrave propos de cet HOWTO Vu linteacuterecirct de lacommunauteacute il a eacuteteacute deacutecideacute la mise en place dune liste de diffusion ougrave les personnes pourront discuter duroutage avanceacute et du controcircle de trafic Vous pouvez vous abonner agrave la liste ici

Il devra ecirctre noteacute que les auteurs sont tregraves heacutesitants agrave reacutepondre agrave des questions qui nont pas eacuteteacute poseacutees sur laliste Nous aimerions que la liste devienne une sorte de base de connaissance Si vous avez une questionrecherchez sil vous plaicirct dabord dans larchive et ensuite postez-lagrave dans la liste de diffusion

Plan du document

Nous allons essayer de faire des manipulations inteacuteressantes degraves le deacutebut ce qui veut dire que tout ne sera pasexpliqueacute en deacutetail tout de suite Veuillez passer sur ces deacutetails et accepter de consideacuterer quils deviendrontclairs par la suite

Le routage et le filtrage sont deux choses distinctes Le filtrage est tregraves bien documenteacute dans le HOWTO deRusty disponible ici

Rustys Remarkably Unreliable Guidesbull

Nous nous focaliserons principalement sur ce quil est possible de faire en combinant netfilter et iproute2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Accegraves CVS et propositions de mises agrave jour 7

Chapitre 3 Introduction agrave iproute2

Pourquoi iproute2

La plupart des distributions Linux et des UNIX utilisent couramment les veacuteneacuterables commandes arp ifconfiget route Bien que ces outils fonctionnent ils montrent quelques comportements inattendus avec les noyauxLinux des seacuteries 22 et plus Par exemple les tunnels GRE font partie inteacutegrante du routage de nos jours maisils neacutecessitent des outils complegravetement diffeacuterents

Avec iproute2 les tunnels font partie inteacutegrante des outils

Les noyaux Linux des seacuteries 22 et plus ont un sous-systegraveme reacuteseau complegravetement reacuteeacutecrit Ce nouveau codagede la partie reacuteseau apporte agrave Linux des performances et des fonctionnaliteacutes qui nont pratiquement pasdeacutequivalent parmi les autres systegravemes dexploitation En fait le nouveau logiciel de filtrage routage et declassification possegravede plus de fonctionnaliteacutes que les logiciels fournis sur beaucoup de routeurs deacutedieacutes depare-feu et de produits de mise en forme (shaping) du trafic

Dans les systegravemes dexploitation existants au fur et agrave mesure que de nouveaux concepts reacuteseau apparaissaientles deacuteveloppeurs sont parvenus agrave les greffer sur les structures existantes Ce travail constant dempilage decouches a conduit agrave des codes reacuteseau aux comportements eacutetranges un peu comme les langues humaines Dansle passeacute Linux eacutemulait le mode de fonctionnement de SunOS ce qui neacutetait pas lideacuteal

La nouvelle structure diproute2 a permis de formuler clairement des fonctionnaliteacutes impossibles agraveimpleacutementer dans le sous-systegraveme reacuteseau preacuteceacutedent

Un tour dhorizon diproute2

Linux possegravede un systegraveme sophistiqueacute dallocation de bande passante appeleacute Controcircle de trafic (TrafficControl) Ce systegraveme supporte diffeacuterentes meacutethodes pour classer ranger par ordre de prioriteacute partager etlimiter le trafic entrant et sortant

Nous commencerons par un petit tour dhorizon des possibiliteacutes diproute2

Preacuterequis

Vous devez ecirctre sucircr que vous avez installeacute les outils utilisateur (NdT userland tools par opposition agrave la partieltlt noyau gtgt diproute2) Le paquet concerneacute sappelle iproute sur RedHat et Debian Autrement il peut ecirctretrouveacute agrave ftpftpinracruip-routingiproute2-224-now-sstargz

Vous pouvez aussi essayer iproute2-currenttargz pour la derniegravere version

Certains eacuteleacutements diproute vous imposent lactivation de certaines options du noyau Il devra eacutegalement ecirctrenoteacute que toutes les versions de RedHat jusquagrave la version 62 incluse nont pas les fonctionnaliteacutes du controcirclede trafic activeacutees dans le noyau fourni par deacutefaut

RedHat 72 contient tous les eacuteleacutements par deacutefaut

Soyez eacutegalement sucircr que vous avez le support netlink mecircme si vous devez choisir de compiler votrepropre noyau iproute2 en a besoin

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

8 Chapitre 3 Introduction agrave iproute2

Explorer votre configuration courante

Cela peut vous paraicirctre surprenant mais iproute2 est deacutejagrave configureacute Les commandes courantes ifconfig etroute utilisent deacutejagrave les appels systegraveme avanceacutes diproute2 mais essentiellement avec les options par deacutefaut(cest-agrave-dire ennuyeuses)

Loutil ip est central et nous allons lui demander de nous montrer les interfaces

ip nous montre nos liens

[ahuhome ahu]$ ip link list1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 0000000000002 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff4 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp

La sortie peut varier mais voici ce qui est afficheacute pour mon routeur NAT (NdT translation dadresse) chezmoi Jexpliquerai seulement une partie de la sortie dans la mesure ougrave tout nest pas directement pertinent

La premiegravere interface que nous voyons est linterface loopback Bien que votre ordinateur puissefonctionner sans je vous le deacuteconseille La taille de MTU (uniteacute maximum de transmission) est de 3924octets et loopback nest pas supposeacute ecirctre mis en file dattente ce qui prend tout son sens dans la mesure ougravecette interface est le fruit de limagination de votre noyau

Je vais passer sur linterface dummy pour linstant et il se peut quelle ne soit pas preacutesente sur votre ordinateurIl y a ensuite mes deux interfaces physiques lune du cocircteacute de mon modem cacircble lautre servant mon segmentethernet agrave la maison De plus nous voyons une interface ppp0

Notons labsence dadresses IP Iproute deacuteconnecte les concepts de ltlt liens gtgt et ltlt dadresses IP gtgt AveclIP aliasing le concept de ladresse IP canonique est devenu de toute faccedilon sans signification

ip nous montre bien cependant ladresse MAC lidentifiant mateacuteriel de nos interfaces ethernet

ip nous montre nos adresses IP

[ahuhome ahu]$ ip address show 1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 000000000000 inet 1270018 brd 127255255255 scope host lo2 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff inet 100018 brd 10255255255 scope global eth04 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp inet 2126494251 peer 2126494132 scope global ppp0

Cela contient plus dinformations ip montre toutes nos adresses et agrave quelles cartes elles appartiennent inetsignifie Internet (IPv4) Il y a beaucoup dautres familles dadresses mais elles ne nous concernent pas pour le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explorer votre configuration courante 9

moment

Examinons linterface eth0 de plus pregraves Il est dit quelle est relieacutee agrave ladresse internet 100018Quest-ce que cela signifie Le 8 deacutesigne le nombre de bits reacuteserveacutes agrave ladresse reacuteseau Il y a 32 bits donc ilreste 24 bits pour deacutesigner une partie de notre reacuteseau Les 8 premiers bits de 10001 correspondent agrave10000 notre adresse reacuteseau et notre masque de sous-reacuteseau est 255000

Les autres bits repegraverent des machines directement connecteacutees agrave cette interface Donc 10250313 estdirectement disponible sur eth0 comme lest 10001 dans notre exemple

Avec ppp0 le mecircme concept existe bien que les nombres soient diffeacuterents Son adresse est2126494251 sans masque de sous-reacuteseau Cela signifie que vous avez une liaison point agrave point et quetoutes les adresses agrave lexception de 2126494251 sont distantes Il y a cependant plus dinformationsEn effet on nous dit que de lautre cocircteacute du lien il ny a encore quune seule adresse 21264941 Le 32nous preacutecise quil ny a pas de ltlt bits reacuteseau gtgt

Il est absolument vital que vous compreniez ces concepts Reacutefeacuterez-vous agrave la documentation mentionneacutee audeacutebut de ce HOWTO si vous avez des doutes

Vous pouvez aussi noter qdisc qui deacutesigne la gestion de la mise en file dattente (Queueing Discipline)Cela deviendra vital plus tard

ip nous montre nos routes

Nous savons maintenant comment trouver les adresses 10xyz et nous sommes capables datteindre21264941 Cela nest cependant pas suffisant et nous avons besoin dinstructions pour atteindre lemonde LInternet est disponible via notre connexion PPP et il se trouve que 21264941 est precirct agravepropager nos paquets agrave travers le monde et agrave nous renvoyer le reacutesultat

[ahuhome ahu]$ ip route show21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Cela se comprend de soi-mecircme Les 4 premiegraveres lignes donnent explicitement ce qui eacutetait sous-entendu parip address show la derniegravere ligne nous indiquant que le reste du monde peut ecirctre trouveacute via21264941 notre passerelle par deacutefaut Nous pouvons voir que cest une passerelle agrave cause du motltlt via gtgt qui nous indique que nous avons besoin denvoyer les paquets vers 21264941 et que cestelle qui se chargera de tout

En reacutefeacuterence voici ce que lancien utilitaire route nous propose

[ahuhome ahu]$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref UseIface21264941 0000 255255255255 UH 0 0 0 ppp010000 0000 255000 U 0 0 0 eth0127000 0000 255000 U 0 0 0 lo0000 21264941 0000 UG 0 0 0 ppp0

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

10 ip nous montre nos adresses IP

ARP

ARP est le Protocole de Reacutesolution dAdresse (Address Resolution Protocol) Il est deacutecrit dans le RFC 826ARP est utiliseacute par une machine dun reacuteseau local pour retrouver ladresse mateacuterielle (la localisation) duneautre machine sur le mecircme reacuteseau Les machines sur Internet sont geacuteneacuteralement connues par leur nom auquelcorrespond une adresse IP Cest ainsi quune machine sur le reacuteseau foocom est capable de communiqueravec une autre machine qui est sur le reacuteseau barnet Une adresse IP cependant ne peut pas vous indiquerla localisation physique de la machine Cest ici que le protocole ARP entre en jeu

Prenons un exemple tregraves simple Supposons que jaie un reacuteseau composeacute de plusieurs machines dont lamachine foo dadresse IP 10001 et la machine bar qui a ladresse IP 10002 Maintenant fooveut envoyer un ping vers bar pour voir sil est actif mais foo na aucune indication sur la localisation debar Donc si foo deacutecide denvoyer un ping vers bar il a besoin denvoyer une requecircte ARP Cette requecircteARP est une faccedilon pour foo de crier sur le reacuteseau ltlt Bar (10002) Ougrave es-tu gtgt Par conseacutequent toutesles machines sur le reacuteseau entendront foo crier mais seul bar (10002) reacutepondra Bar enverra unereacuteponse ARP directement agrave foo ce qui revient agrave dire ltlt Foo (10001) je suis ici agrave ladresse006094E0812 gtgt Apregraves cette simple transaction utiliseacutee pour localiser son ami sur le reacuteseau foo estcapable de communiquer avec bar jusquagrave ce quil (le cache ARP de foo) oublie ougrave bar est situeacute(typiquement au bout de 15 minutes sur Unix)

Maintenant voyons comment cela fonctionne Vous pouvez consulter votre cache (table) ARP (neighbor)comme ceci

[rootespa041 homesrciputils] ip neigh show937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Comme vous pouvez le voir ma machine espa041 (937641) sait ougrave trouver espa042 (937642)et espagate (93761) Maintenant ajoutons une autre machine dans le cache ARP

[rootespa041 homepaulschgnome-desktop] ping -c 1 espa043PING espa043austinibmcom (937643) from 937641 56(84) bytes of data64 bytes from 937643 icmp_seq=0 ttl=255 time=09 ms

1 packets transmitted 1 packets received 0 packet lossround-trip minavgmax = 090909 ms

[rootespa041 homesrciputils] ip neigh show937643 dev eth0 lladdr 000629218020 nud reachable937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Par conseacutequent lorsque espa041 a essayeacute de contacter espa043 ladresse mateacuterielle de espa043 (salocalisation) a alors eacuteteacute ajouteacutee dans le cache ARP Donc tant que la dureacutee de vie de lentreacutee correspondant agraveespa043 dans le cache ARP nest pas deacutepasseacutee espa041 sait localiser espa043 et na plus besoindenvoyer de requecircte ARP

Maintenant effaccedilons espa043 de notre cache ARP

[rootespa041 homesrciputils] ip neigh delete 937643 dev eth0[rootespa041 homesrciputils] ip neigh show937643 dev eth0 nud failed937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud stale

Maintenant espa041 a agrave nouveau oublieacute la localisation despa043 et aura besoin denvoyer une autrerequecircte ARP la prochaine fois quil voudra communiquer avec lui Vous pouvez aussi voir ci-dessus que leacutetat

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP 11

despagate (93761) est passeacute en stale Cela signifie que la localisation connue est encore valide maisquelle devra ecirctre confirmeacutee agrave la premiegravere transaction avec cette machine

Chapitre 4 Regravegles - bases de donneacutees des politiquesde routageSi vous avez un routeur important il se peut que vous vouliez satisfaire les besoins de diffeacuterentes personnesqui peuvent ecirctre traiteacutees diffeacuteremment Les bases de donneacutees des politiques de routage vous aident agrave fairecela en geacuterant plusieurs ensembles de tables de routage

Si vous voulez utiliser cette fonctionnaliteacute assurez-vous que le noyau est compileacute avec les options IP Advanced router et IP policy routing

Quand le noyau doit prendre une deacutecision de routage il recherche quelle table consulter Par deacutefaut il y a troistables Lancien outil route modifie les tables principale (main) et locale (local) comme le fait loutil ip (pardeacutefaut)

Les regravegles par deacutefaut

[ahuhome ahu]$ ip rule list0 from all lookup local 32766 from all lookup main 32767 from all lookup default

Ceci liste la prioriteacute de toutes les regravegles Nous voyons que toutes les regravegles sont appliqueacutees agrave tous les paquets(from all) Nous avons vu la table main preacuteceacutedemment sa sortie seffectuant avec ip route ls mais lestables local et default sont nouvelles

Si nous voulons faire des choses fantaisistes nous pouvons creacuteer des regravegles qui pointent vers des tablesdiffeacuterentes et qui nous permettent de redeacutefinir les regravegles de routage du systegraveme

Pour savoir exactement ce que fait le noyau en preacutesence dun assortiment de regravegles plus complet reacutefeacuterez-vousagrave la documentation ip-cref dAlexey amplsqbNdT dans le paquetage iproute2 de votre distribution]

Politique de routage simple par ladresse source

Prenons encore une fois un exemple reacuteel Jai 2 modems cacircble connecteacutes agrave un routeur Linux NAT(masquerading) Les personnes habitant avec moi me paient pour avoir accegraves agrave Internet Supposons quun demes co-locataires consulte seulement hotmail et veuille payer moins Cest daccord pour moi mais il utiliserale modem le plus lent

Le modem cacircble ltlt rapide gtgt est connu sous 2126494251 et est en liaison PPP avec 21264941Le modem cacircble ltlt lent gtgt est connu sous diverses adresses IP 2126478148 dans notre exemple avecun lien vers 1959698253

La table locale

[ahuhome ahu]$ ip route list table localbroadcast 127255255255 dev lo proto kernel scope link src 127001 local 10001 dev eth0 proto kernel scope host src 10001 broadcast 10000 dev eth0 proto kernel scope link src 10001 local 2126494251 dev ppp0 proto kernel scope host src 2126494251 broadcast 10255255255 dev eth0 proto kernel scope link src 10001 broadcast 127000 dev lo proto kernel scope link src 127001

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

12 Chapitre 4 Regravegles - bases de donneacutees des politiques de routage

local 2126478148 dev ppp2 proto kernel scope host src 2126478148 local 127001 dev lo proto kernel scope host src 127001 local 1270008 dev lo proto kernel scope host src 127001

Il y a beaucoup de choses eacutevidentes mais aussi des choses qui ont besoin decirctre preacuteciseacutees quelque peu ce quenous allons faire La table de routage par deacutefaut est vide

Regardons la table principale (main)

[ahuhome ahu]$ ip route list table main 1959698253 dev ppp2 proto kernel scope link src 2126478148 21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Maintenant nous geacuteneacuterons une nouvelle regravegle que nous appellerons John pour notre hypotheacutetiqueco-locataire Bien que nous puissions travailler avec des nombres IP purs il est plus facile dajouter notre tabledans le fichier etciproute2rtamplowbartables

echo 200 John gtgt etciproute2rt_tables ip rule add from 100010 table John ip rule ls0 from all lookup local 32765 from 100010 lookup John32766 from all lookup main 32767 from all lookup default

Maintenant tout ce quil reste agrave faire est de geacuteneacuterer la table John et de vider le cache des routes

ip route add default via 1959698253 dev ppp2 table John ip route flush cache

Et voilagrave qui est fait Il ne reste plus comme exercice laisseacute au lecteur quagrave impleacutementer cela dans ip-up

Routage avec plusieurs accegraves Internetfournisseurs daccegraves

Une configuration classique est la suivante ougrave deux fournisseurs daccegraves permettent la connexion dun reacuteseaulocal (ou mecircme dune simple machine) agrave Internet

________ +--------------+ | | | +-------------+ Fournisseur 1+------- __ | | | ___ _ +------+-------+ +--------------+ | _ __ | if1 | | | || Reacuteseau Local -----+ Routeur Linux| | Internet _ __ | | | __ __ | if2 | ___ +------+-------+ +--------------+ | | | | +-------------+ Fournisseur 2+------- | | | +--------------+ ________

Il y a geacuteneacuteralement deux questions agrave se poser pour cette configuration

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de routage simple par ladresse source 13

Accegraves seacutepareacute

La premiegravere est de savoir comment router les reacuteponses aux paquets entrants par un fournisseur particulierdisons le Fournisseur 1 vers ce mecircme fournisseur

Commenccedilons par deacutefinir quelques symboles $IF1 sera le nom de la premiegravere interface (if1 sur la figureau-dessus) et $IF2 le nom de la deuxiegraveme interface $IP1 sera alors ladresse IP associeacutee agrave $IF1 et $IP2 seraladresse IP associeacutee agrave $IF2 $P1 sera ladresse IP de la passerelle du fournisseur daccegraves 1 et $P2 seraladresse IP de la passerelle du fournisseur daccegraves 2 Enfin $P1_NET sera ladresse reacuteseau agrave linteacuterieur duquelse situe $P1 et $P2_NET sera ladresse reacuteseau agrave linteacuterieur duquel se situe $P2

Deux tables de routage suppleacutementaires sont creacuteeacutees par exemple T1 et T2 Celles-ci sont ajouteacutees dansetciproute2rt_tables La configuration du routage dans ces tables seffectue de la faccedilonsuivante

ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2

Rien de vraiment spectaculaire Une route est simplement positionneacutee vers la passerelle et une route pardeacutefaut via cette passerelle est mise en place comme nous le ferions dans le cas dun seul fournisseur daccegravesIci les routes sont placeacutees dans des tables seacutepareacutees une par fournisseur daccegraves Il est agrave noter que la route versle reacuteseau suffit dans la mesure ougrave elle indique comment trouver nimporte quel hocircte dans ce reacuteseau ce quiinclut la passerelle

La table de routage principale est maintenant configureacutee Cest une bonne ideacutee de router les eacuteleacutements agravedestination dun voisin direct agrave travers linterface connecteacutee agrave ce voisin Notez les arguments src qui assurentque la bonne adresse IP source sera choisie

ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2

Indiquez maintenant votre preacutefeacuterence pour votre route par deacutefaut

ip route add default via $P1

Vous configurez ensuite les regravegles de routage Celles-ci deacutefinissent la table qui sera vraiment choisie pour leroutage Il faut sassurer que le routage seffectue agrave travers une interface donneacutee si vous avez ladresse sourcecorrespondante

ip rule add from $IP1 table T1 ip rule add from $IP2 table T2

Cet ensemble de commandes vous assure que toutes les reacuteponses au trafic entrant sur une interface particuliegravereseront envoyeacutees par cette interface

Avertissement

Notes dun lecteur si $P0_NET est le reacuteseau local et $IF0 est son interface alors les entreacutees suivantes sontdeacutesirables

ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

14 Accegraves seacutepareacute

ip route add 1270008 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 1270008 dev lo table T2

Nous avons maintenant une configuration tregraves basique Elle marchera pour tous les processus exeacutecuteacutes sur lerouteur lui-mecircme ainsi que pour le reacuteseau local si celui-ci est masqueacute Si ce nest pas le cas soit vous avezune plage dadresses IP pour chaque fournisseur daccegraves soit vous masquez vers lun des deux fournisseursdaccegraves Dans les deux cas vous ajouterez des regravegles indiquant en fonction de ladresse IP de la machine dureacuteseau local vers quel fournisseur vous allez router

Balance de charge

La seconde question concerne la balance de charge du trafic sortant vers les deux fournisseurs daccegraves Cecinest pas vraiment tregraves dur si vous avez deacutejagrave configureacute laccegraves seacutepareacute comme deacutecrit ci-dessus

Au lieu de choisir lun des deux fournisseurs daccegraves comme route par deacutefaut celle-ci peut ecirctre une routemulti-chemin Par deacutefaut le noyau reacutepartira les routes vers les deux fournisseurs daccegraves Ceci est reacutealiseacute de lafaccedilon suivante (construit eacutegalement sur lexemple de la section de laccegraves seacutepareacute)

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

Ceci reacutealisera la balance des routes vers les deux fournisseurs Les paramegravetres weight peuvent permettre defavoriser un fournisseur par rapport agrave un autre

Il est agrave noter que la balance de charge ne sera pas parfaite dans la mesure ougrave elle est baseacutee sur les routes et quecelles-ci sont mises dans des caches Ceci signifie que les routes vers les sites les plus souvent utiliseacutespasseront toujours par le mecircme fournisseur daccegraves

De plus si vous voulez vraiment mettre en oeuvre ceci vous devriez eacutegalement aller consulter les mises agrave jourde Julien Anastasov agrave httpwwwssibg~jaroutes Elles rendront le travail plus facile

Chapitre 5 GRE et autres tunnelsIl y a trois sortes de tunnels sous Linux lIP dans un tunnel IP le tunnel GRE et les tunnels qui existent endehors du noyau (comme PPTP par exemple)

Quelques remarques geacuteneacuterales agrave propos des tunnels

Les tunnels peuvent faire des choses tregraves inhabituelles et vraiment sympas Ils peuvent aussi absolument toutdeacutetraquer si vous ne les avez pas configureacutes correctement Ne deacutefinissez pas votre route par deacutefaut sur untunnel agrave moins que vous ne sachiez EXACTEMENT ce que vous faites

De plus le passage par un tunnel augmente le poids des en-tecirctes (overhead) puisquun en-tecircte IPsuppleacutementaire est neacutecessaire Typiquement ce surcoucirct est de 20 octets par paquet Donc si la taillemaximum de votre paquet sur votre reacuteseau (MTU) est de 1500 octets un paquet qui est envoyeacute agrave travers untunnel sera limiteacute agrave une taille de 1480 octets Ce nest pas neacutecessairement un problegraveme mais soyez sucircr davoirbien eacutetudieacute la fragmentation et le reacuteassemblage des paquets IP quand vous preacutevoyez de relier des reacuteseaux degrande taille par des tunnels Et bien sucircr la maniegravere la plus rapide de creuser un tunnel est de creuser des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 5 GRE et autres tunnels 15

cocircteacutes

IP dans un tunnel IP

Ce type de tunnel est disponible dans Linux depuis un long moment Il neacutecessite deux modules ipipo etnewamplowbartunnelo

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsInternet) Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C

et le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quel paquet de A vers B etvice-versa Il est eacutegalement possible dutiliser lInternet pour cela

Voici ce quil faut faire

Premiegraverement assurez-vous que les modules soient installeacutes

insmod ipipoinsmod new_tunnelo

Ensuite sur le routeur du reacuteseau A faites la chose suivante

ifconfig tunl0 10011 pointopoint 172192021route add -net 10020 netmask 2552552550 dev tunl0

et sur le routeur du reacuteseau B

ifconfig tunl0 10021 pointopoint 172161718route add -net 10010 netmask 2552552550 dev tunl0

Et quand vous aurez termineacute avec votre tunnel

ifconfig tunl0 down

Vite fait bien fait Vous ne pouvez pas transmettre les paquets de diffusion (broadcast) ni le trafic IPv6 agravetravers un tunnel IP-IP Vous ne pouvez connecter que deux reacuteseaux IPv4 qui normalement ne seraient pascapables de se ltlt parler gtgt cest tout Dans la mesure ougrave la compatibiliteacute a eacuteteacute conserveacutee ce code tournedepuis un bon moment et il reste compatible depuis les noyaux 13 Le tunnel Linux IP dans IP ne fonctionnepas avec dautres systegravemes dexploitation ou routeurs pour autant que je sache Cest simple ccedila marcheUtilisez-le si vous le pouvez autrement utilisez GRE

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

16 Quelques remarques geacuteneacuterales agrave propos des tunnels

Le tunnel GRE

GRE est un protocole de tunnel qui a eacuteteacute agrave lorigine deacuteveloppeacute par Cisco et qui peut reacutealiser plus de chosesque le tunnel IP dans IP Par exemple vous pouvez aussi transporter du trafic multi-diffusion (multicast) et delIPv6 agrave travers un tunnel GRE

Dans Linux vous aurez besoin du module ipamplowbargreo

Le tunnel IPv4

Dans un premier temps inteacuteressons-nous au tunnel IPv4

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsinternet)

Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C Appelons ce reacuteseau neta

Et pour le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C Appelons ce reacuteseau netb

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quels paquets de A vers B etvice-versa Comment et pourquoi on sen moque

Sur le routeur du reacuteseau A nous faisons la chose suivante

ip tunnel add netb mode gre remote 172192021 local 172161718 ttl 255ip link set netb upip addr add 10011 dev netbip route add 1002024 dev netb

Discutons un peu de cela Sur la ligne 1 nous avons ajouteacute un peacuteripheacuterique tunnel que nous avons appeleacutenetb (ce qui est eacutevident dans la mesure ougrave cest lagrave que nous voulons aller) De plus nous lui avons ditdutiliser le protocole GRE (mode gre) que ladresse distante est 172192021 (le routeur de lautrecocircteacute) que nos paquets ltlt tunneleacutes gtgt devront ecirctre geacuteneacutereacutes agrave partir de 172161718 (ce qui autorise votreserveur agrave avoir plusieurs adresses IP sur le reacuteseau C et ainsi vous permet de choisir laquelle sera utiliseacutee pourvotre tunnel) et que le champ TTL de vos paquets sera fixeacute agrave 255 (ttl 255)

La deuxiegraveme ligne active le peacuteripheacuterique

Sur la troisiegraveme ligne nous avons donneacute agrave cette nouvelle interface ladresse 10011 Cest bon pour depetits reacuteseaux mais quand vous commencez une exploitation miniegravere (BEAUCOUP de tunnels ) vouspouvez utiliser une autre gamme dadresses IP pour vos interfaces ltlt tunnel gtgt (dans cet exemple vouspourriez utiliser 10030)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le tunnel GRE 17

Sur la quatriegraveme ligne nous positionnons une route pour le reacuteseau B Notez la notation diffeacuterente pour lemasque de sous-reacuteseau Si vous necirctes pas familiariseacute avec cette notation voici comment ccedila marche vouseacutecrivez le masque de sous-reacuteseau sous sa forme binaire et vous comptez tous les 1 Si vous ne savez pascomment faire cela rappelez-vous juste que 255000 est 8 25525500 est 16 et2552552550 est 24 Et 2552552540 est 23 au cas ougrave ccedila vous inteacuteresserait

Mais arrecirctons ici et continuons avec le routeur du reacuteseau B

ip tunnel add neta mode gre remote 172161718 local 172192021 ttl 255ip link set neta upip addr add 10021 dev netaip route add 1001024 dev neta

Et quand vous voudrez retirer le tunnel sur le routeur A

ip link set netb downip tunnel del netb

Bien sucircr vous pouvez remplacer netb par neta pour le routeur B

Le tunnel IPv6

Voir la section 6 pour une courte description des adresses IPv6

Agrave propos des tunnels

Supposons que vous ayez le reacuteseau IPv6 suivant et que vous vouliez le connecter agrave une dorsale IPv6 (6bone)ou agrave un ami

Reacuteseau 3ffe406515a2196

Votre adresse IPv4 est 172161718 et le routeur 6bone a une adresse IPv4 172222324

ip tunnel add sixbone mode sit remote 172222324 local 172161718 ttl 255ip link set sixbone upip addr add 3ffe406515a2196 dev sixboneip route add 3ffe15 dev sixbone

Voyons cela de plus pregraves Sur la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique tunnel appeleacute sixboneNous lui avons affecteacute le mode sit (qui est le tunnel IPv6 sur IPv4) et lui avons dit ougrave lon va (remote) etdougrave lon vient (local) TTL est configureacute agrave son maximum 255 Ensuite nous avons rendu le peacuteripheacuteriqueactif (up) Puis nous avons ajouteacute notre propre adresse reacuteseau et configureacute une route pour 3ffe15 agravetravers le tunnel

Les tunnels GRE constituent actuellement le type de tunnel preacutefeacutereacute Cest un standard qui est largementadopteacute mecircme agrave lexteacuterieur de la communauteacute Linux ce qui constitue une bonne raison de lutiliser

Tunnels dans lespace utilisateur

Il y a des dizaines dimpleacutementations de tunnels agrave lexteacuterieur du noyau Les plus connues sont bien sucircr PPP etPPTP mais il y en a bien plus (certaines proprieacutetaires certaines seacutecuriseacutes dautres qui nutilisent pas IP) quideacutepassent le cadre de ce HOWTO

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

18 Le tunnel IPv4

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsaleIPv6 (6bone)Par Marco Davids ltmarcosaranlgt

NOTE au mainteneur

En ce qui me concerne ce tunnel IPv6-IPv4 nest pas par deacutefinition un tunnel GRE Vous pouvez reacutealiser untunnel IPv6 sur IPv4 au moyen des peacuteripheacuteriques tunnels GRE (tunnels GRE NIMPORTE QUOI vers IPv4)mais le peacuteripheacuterique utiliseacute ici (sit) ne permet que des tunnels IPv6 sur IPv4 ce qui est quelque chose dediffeacuterent

Tunnel IPv6

Voici une autre application des possibiliteacutes de tunnels de Linux Celle-ci est populaire parmi les premiersadeptes dIPv6 ou les pionniers si vous preacutefeacuterez Lexemple pratique deacutecrit ci-dessous nest certainement pas laseule maniegravere de reacutealiser un tunnel IPv6 Cependant cest la meacutethode qui est souvent utiliseacutee pour reacutealiser untunnel entre Linux et un routeur Cisco IPv6 et lexpeacuterience ma appris que cest ce type deacutequipement quebeaucoup de personnes ont Dix contre un que ceci sappliquera aussi pour vous -)

De petites choses agrave propos des adresses IPv6

Les adresses IPv6 sont en comparaison avec les adresses IPv4 vraiment grandes 128 bits contre 32 bits Etceci nous fournit la chose dont nous avons besoin beaucoup beaucoup dadresses IP 340282266920938463463374607431768211465 pour ecirctre preacutecis A part ceci IPv6 (ou IPnggeacuteneacuteration suivante (Next Generation)) est supposeacute fournir des tables de routage plus petites sur les routeursdes dorsales Internet une configuration plus simple des eacutequipements une meilleure seacutecuriteacute au niveau IP etun meilleur support pour la Qualiteacute de Service (QoS)

Un exemple 2002836b9820000000000000836b9886

Ecrire les adresses IPv6 peut ecirctre un peu lourd Il existe donc des regravegles qui rendent la vie plus facile

Ne pas utiliser les zeacuteros de tecircte comme dans IPv4 bull Utiliser des double-points de seacuteparation tous les 16 bits ou 2 octets bull Quand vous avez beaucoup de zeacuteros conseacutecutifs vous pouvez eacutecrire Vous ne pouvez cependantfaire cela quune seule fois par adresse et seulement pour une longueur de 16 bits

bull

Ladresse 2002836b9820000000000000836b9886 peut ecirctre eacutecrite2002836b9820836b9886 ce qui est plus amical

Un autre exemple ladresse 3ffe0000000000000000000034A1F32C peut ecirctre eacutecrite3ffe2034A1F32C ce qui est beaucoup plus court

IPv6 a pour but decirctre le successeur de lactuel IPv4 Dans la mesure ougrave cette technologie est relativementreacutecente il ny a pas encore de reacuteseau natif IPv6 agrave leacutechelle mondiale Pour permettre un deacuteveloppement rapidela dorsale IPv6 (6bone) a eacuteteacute introduite

Les reacuteseaux natifs IPv6 sont interconnecteacutes gracircce agrave lencapsulation du protocole IPv6 dans des paquets IPv4qui sont envoyeacutes agrave travers linfrastructure IPv4 existante dun site IPv6 agrave un autre

Cest dans cette situation que lon monte un tunnel

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone) 19

Pour ecirctre capable dutiliser IPv6 vous devrez avoir un noyau qui le supporte Il y a beaucoup de bonsdocuments qui expliquent la maniegravere de reacutealiser cela Mais tout se reacutesume agrave quelques eacutetapes

Reacutecupeacuterer une distribution Linux reacutecente avec une glibc convenablebull Reacutecupeacuterer alors les sources agrave jour du noyaubull

Si tout cela est fait vous pouvez alors poursuivre en compilant un noyau supportant lIPv6

Aller dans usrsrclinux et tapez bull make menuconfigbull Choisir Networking Optionsbull Seacutelectionner The IPv6 protocol IPv6 enable EUI-64 token format IPv6disable provider based addresses

bull

ASTUCE Ne compiler pas ces options en tant que module Ceci ne marchera souvent pas bien

En dautres termes compilez IPv6 directement dans votre noyau Vous pouvez alors sauvegarder votreconfiguration comme dhabitude et entreprendre la compilation de votre noyau

ASTUCE Avant de faire cela modifier votre Makefile comme suit EXTRAVERSION = -x --gt EXTRAVERSION = -x-IPv6

Il y a beaucoup de bonnes documentations sur la compilation et linstallation dun noyau Cependant cedocument ne traite pas de ce sujet Si vous rencontrez des problegravemes agrave ce niveau allez et recherchez dans ladocumentation des renseignements sur la compilation du noyau Linux correspondant agrave vos propresspeacutecifications

Le fichier usrsrclinuxREADME peut constituer un bon deacutepart Apregraves avoir reacutealiseacute tout ceci etredeacutemarreacute avec votre nouveau noyau flambant neuf vous pouvez lancer la commande sbinifconfig -a etnoter un nouveau peacuteripheacuterique sit0 SIT signifie Transition Simple dInternet (Simple Internet Transition)Vous pouvez vous auto complimenter vous avez maintenant franchi une eacutetape importante vers IP laprochaine geacuteneacuteration -)

Passons maintenant agrave leacutetape suivante Vous voulez connecter votre hocircte ou peut-ecirctre mecircme tout votre reacuteseauLAN agrave dautres reacuteseaux IPv6 Cela pourrait ecirctre la dorsale IPv6 ltlt 6bone gtgt qui a eacuteteacute speacutecialement mise enplace dans ce but particulier

Supposons que vous avez le reacuteseau IPv6 suivant 3ffe6046864 et que vous vouliez le connecter agraveune dorsale IPv6 ou agrave un ami Notez sil vous plaicirct que la notation sous-reacuteseau 64 est similaire agrave celle desadresses IPv4

Votre adresse IPv4 est 14510024181 et le routeur 6bone a ladresse IPv4 14510015

ip tunnel add sixbone mode sit remote 14510015 [local 14510024181 ttl 225] ip link set sixbone up ip addr add 3FFE60467296 dev sixbone ip route add 3ffe015 dev sixbone

Discutons de ceci Dans la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique appeleacute sixbone Nous lui avonsdonneacute lattribut sit (mode sit) (qui est le tunnel IPv6 dans IPv4) et nous lui avons dit ougrave aller (remote)et dougrave nous venions (local) TTL est configureacute agrave son maximum 255

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

20 Tunnel IPv6

Ensuite nous avons rendu le peacuteripheacuterique actif (up) Apregraves cela nous avons ajouteacute notre propre adressereacuteseau et configureacute une route pour 3ffe15 (qui est actuellement la totaliteacute du 6bone) agrave travers le tunnelSi la machine sur laquelle vous mettez en place tout ceci est votre passerelle IPv6 ajoutez alors les lignessuivantes

echo 1 gtprocsysnetipv6confallforwarding usrlocalsbinradvd

En derniegravere instruction radvd est un deacutemon dannonce comme zebra qui permet de supporter lesfonctionnaliteacutes dautoconfiguration dIPv6 Recherchez le avec votre moteur de recherche favori Vous pouvezveacuterifier les choses comme ceci

sbinip -f inet6 addr

Si vous arrivez agrave avoir radvd tournant sur votre passerelle IPv6 et que vous deacutemarrez une machine avec IPv6sur votre reacuteseau local vous serez ravi de voir les beacuteneacutefices de lautoconfiguration IPv6

sbinip -f inet6 addr1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue inet6 1128 scope host

3 eth0 ltBROADCASTMULTICASTUPgt mtu 1500 qdisc pfifo_fast qlen 100inet6 3ffe6046850544cfffe01e3d664 scope global dynamicvalid_lft forever preferred_lft 604646sec inet6 fe8050544cfffe01e3d610 scope link

Vous pouvez maintenant configurer votre serveur de noms pour les adresses IPv6 Le type A a un eacutequivalentpour IPv6 AAAA Leacutequivalent de in-addrarpa est ip6int Il y a beaucoup dinformationsdisponibles sur ce sujet

Il y a un nombre croissant dapplications IPv6 disponibles comme le shell seacutecuriseacute telnet inetd le navigateurMozilla le serveur web Apache et beaucoup dautres Mais ceci est en dehors du sujet de ce document deroutage -)

Du cocircteacute Cisco la configuration ressemblera agrave ceci

interface Tunnel1description IPv6 tunnelno ip addressno ip directed-broadcastipv6 address 3FFE60467196tunnel source Serial0tunnel destination 14510024181tunnel mode ipv6ipipv6 route 3FFE6046864 Tunnel1

Si vous navez pas un Cisco agrave votre disposition essayez un des prestataires de tunnel IPv6 disponible surInternet Ils sont precircts agrave configurer leur Cisco avec un tunnel suppleacutementaire pour vous le plus souvent aumoyen dune agreacuteable interface web Cherchez ipv6 tunnel broker avec votre moteur de recherche favori

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers InternetA ce jour deux versions dIPSEC sont disponibles pour Linux FreeSWAN qui fucirct la premiegravereimpleacutementation majeure existe pour les noyaux Linux 22 et 24 Ce projet a un site officiel et eacutegalement unsite non officiel qui est bien maintenu FreeSWAN na jamais eacuteteacute inteacutegreacute dans le noyau pour un certainnombre de raisons Celle qui est la plus souvent mentionneacutee concerne un problegraveme politique avec les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers Internet 21

ameacutericains travaillant sur la cryptographie qui freinent son exportabiliteacute De plus la mise en place deFreeSWAN dans le noyau Linux est deacutelicate ce qui nen fait pas un bon candidat pour une reacuteelle inteacutegration

De plus des personnes se sont inquieacuteteacutees de la qualiteacute du code Pour configurer FreeSWAN de nombreusesdocumentations sont disponibles

Une impleacutementation native dIPSEC est preacutesente dans le noyau agrave partir de la version Linux 2547 Elle a eacuteteacuteeacutecrite par Alexey Kuznetsov et Dave Miller qui se sont inspireacutes des travaux du groupe USAGI IPv6 Aveccette fusion les CryptoAPI de James Morris deviennent eacutegalement une partie du noyau qui fait ainsi vraimentdu cryptage

Ce HOWTO ne documente que la version 25 dIPSEC FreeSWAN est recommandeacute pour linstant pour lesutilisateurs de Linux 24 Faicirctes cependant attention dans la mesure ougrave sa configuration est diffeacuterente delIPSEC natif Il y a maintenant une mise agrave jour qui permet au code FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux

A partir du noyau 2549 IPSEC fonctionne sans lajout de mises agrave jour suppleacutementaires

Note Les outils de lespace utilisateur sont disponibles ici Il y a plusieurs programmesdisponibles celui qui est proposeacute dans le lien est baseacute sur Racoon

Lors de la compilation du noyau soyez sucircr dactiver PF_KEY AH et tous les eacuteleacutements deCryptoAPI

Avertissement

Lauteur de ce chapitre est un complet nigaud en ce qui concerne IPSEC Si vous trouvez les ineacutevitableserreurs envoyez un courrier eacutelectronique agrave Bert Hubert ltahuds9anlgt

Tout dabord nous montrerons comment configurer manuellement une communication seacutecuriseacutee entre deuxhocirctes Une grande partie de ce processus peut ecirctre automatiseacutee mais nous le ferons ici agrave la main afin decomprendre ce qui se passe sous le capot

Passez agrave la section suivante si la seule gestion automatique des cleacutes vous inteacuteresse Soyez cependant conscientque la compreacutehension de la gestion manuelle des cleacutes est utile

Introduction sur la gestion manuelle des cleacutes

IPSEC est un sujet compliqueacute De nombreuses informations sont disponibles en ligne Ce HOWTO seconcentrera sur la mise en place et agrave lexplication des principes de base Tous les exemples sont baseacutes surRacoon dont le lien est donneacute au-dessus

Note Certaines configurations iptables rejettent les paquets IPSEC Pour transmettreIPSEC utilisez iptables -A xxx -p 50 -j ACCEPT et iptables -A xxx -p 51 -j ACCEPT

IPSEC offre une version seacutecuriseacutee de la couche IP (Internet Protocol) La seacutecuriteacute dans ce contexte prend deuxformes lencryptage et lauthentification Une vision naiumlve de la seacutecuriteacute ne propose que le cryptage On peutcependant montrer facilement que cest insuffisant il se peut que vous ayez une communication crypteacutee maisvous navez aucune garantie que lhocircte distant est bien celui auquel vous pensez

IPSEC supporte Encapsulated Security Payload (Encapsulation Seacutecuriseacutee de la Charge utile) (ESP) pour lecryptage et Authentication Header (Entecircte dAuthentification) (AH) pour authentifier le partenaire distantVous pouvez configurer les deux ou deacutecider de ne faire que lun des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

22 Introduction sur la gestion manuelle des cleacutes

ESP et AH sappuient tous les deux sur des Associations de Seacutecuriteacute (Security Associations (SA)) UneAssociation de Seacutecuriteacute (SA) consiste en une source une destination et une instruction Un exemple simpledAssociation de Seacutecuriteacute (SA) pour lauthentification peut ressembler agrave ceci

add 100011 1000216 ah 15700 -A hmac-md5 1234567890123456

Ceci indique que le trafic allant de 100011 vers 1000216 a besoin dun En-tecircte dAuthentification(AH) qui peut ecirctre signeacute en utilisant HMAC-MD et le secret 1234567890123456 Cette instruction estrepeacutereacutee par lidentificateur SPI (Security Parameter Index)15700 dont nous parlerons plus par la suite Lepoint inteacuteressant agrave propos des Associations de Seacutecuriteacute (SA) est quelles sont symeacutetriques Les deux coteacutes dela conversation partagent exactement la mecircme Association de Seacutecuriteacute (SA) qui nest pas recopieacutee sur lhocirctedistant Notez cependant quil ny a pas de regravegles dinversion automatique Cette Association de Seacutecuriteacute(SA) deacutecrit une authentification possible de 100011 vers 1000216 Pour un trafic bidirectionneldeux Associations de Seacutecuriteacute (SA) sont neacutecessaires

Un exemple dAssociation de Seacutecuriteacute (SA) pour le cryptage ESP

add 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012

Ceci signifie que le trafic allant de 100011 vers 1000216 est chiffreacute en utilisant 3des-cbc avec lacleacute 123456789012123456789012 Lidentificateur SPI est 15701

Jusquici nous avons vu que les Associations de Seacutecuriteacute (SA) deacutecrivent les instructions possibles mais pas lapolitique qui indique quand ces SA doivent ecirctre utiliseacutees En fait il pourrait y avoir un nombre arbitraire deSA presques identiques ne se diffeacuterenciant que par les identificateurs SPI Entre parenthegraveses SPI signifieSecurity Parameter Index ou Index du Paramegravetre de Seacutecuriteacute en franccedilais Pour faire vraiment du cryptagenous devons deacutecrire une politique Cette politique peut inclure des choses comme utiliser ipsec sil estdisponible ou rejeter le trafic agrave moins que vous ayez ipsec

Une Politique de Seacutecuriteacute (Security Policy (SP)) typique ressemble agrave ceci

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Si cette configuration est appliqueacutee sur lhocircte 1000216 cela signifie que tout le trafic allant vers100011 doit ecirctre encrypteacute et encapsuleacute dans un en-tecircte dauthentification AH Notez que ceci ne deacutecritpas quelle SA sera utiliseacutee Cette deacutetermination est un exercice laisseacute agrave la charge du noyau

En dautres termes une Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons une Association de Seacutecuriteacutedeacutecrit COMMENT nous le voulons

Les paquets sortants sont eacutetiqueteacutes avec le SPI SA (le comment) que le noyau utilise pour lencryptage etlauthentification et lhocircte distant peut consulter les instructions de veacuterification et de deacutecryptagecorrespondantes

Ce qui suit est une configuration tregraves simple permettant le dialogue de lhocircte 1000216 vers lhocircte100011 en utilisant lencryptage et lauthentification Notez que le trafic de retour de cette premiegravereversion est en clair et que cette configuration ne doit pas ecirctre deacuteployeacutee

Sur lhocircte 1000216

sbinsetkey -f

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Introduction sur la gestion manuelle des cleacutes 23

add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456 add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Sur lhocircte 100011 nous donnons les mecircmes Associations de Seacutecuriteacute (SA) Nous ne donnons pas dePolitique de Seacutecuriteacute

sbinsetkey -fadd 1000216 100011 ah 24500 -A hmac-md5 1234567890123456add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

Avec la mise en place de la configuration ci-dessus (ces fichiers peuvent ecirctre exeacutecuteacutes si setkey est installeacutedans sbin) la commande ping 100011 exeacutecuteacutee sur 1000216 va donner la sortie suivante avec tcpdump

223752 1000216 gt 100011 AH(spi=0x00005fb4seq=0xa) ESP(spi=0x00005fb5seq=0xa) (DF)223752 100011 gt 1000216 icmp echo reply

Notez que le paquet de retour provenant de 100011 est en effet complegravetement visible Le paquet ping eacutemispar 1000216 ne peut eacutevidemment pas ecirctre lu par tcpdump mais celui-ci montre lIndex du Paramegravetre deSeacutecuriteacute (SPI) de lAH ainsi que lESP qui indique agrave 100011 comment veacuterifier lauthenticiteacute de notre paquetet comment le deacutecrypter

Quelques eacuteleacutements doivent ecirctre mentionneacutes La configuration ci-dessus est proposeacutee dans de nombreuxexemples dIPSEC mais elle est tregraves dangereuse Le problegraveme est quelle contient la politique indiquant agrave1000216 comment traiter les paquets allant vers 100011 et comment 100011 doit traiter ces paquetsmais ceci nINDIQUE pas agrave 100011 de rejeter le trafic non authentifieacute et non encrypteacute

Nimporte qui peut maintenant inseacuterer des donneacutees spoofeacutees (NdT usurpeacutees) et entiegraverement non crypteacuteesque 10001 acceptera Pour remeacutedier agrave ceci nous devons avoir sur 100011 une Politique de Seacutecuriteacute pourle trafic entrant

sbinsetkey -f spdadd 1000216 100011 any -P IN ipsec esptransportrequire ahtransportrequire

Ceci indique agrave 100011 que tout le trafic venant de 1000216 neacutecessite davoir un ESP et AH valide

Maintenant pour compleacuteter cette configuration nous devons eacutegalement renvoyer un trafic encrypteacute etauthentifieacute La configuration complegravete sur 1000216 est la suivante

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

24 Introduction sur la gestion manuelle des cleacutes

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire ahtransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 100011 1000216 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire ahtransportrequire

Notez que dans cet exemple nous avons utiliseacute des cleacutes identiques pour les deux directions du trafic Cecinest cependant en aucun cas exigeacute

Pour examiner la configuration que nous venons de creacuteer exeacutecuter setkey -D qui montre les SA ou setkey-DP qui montre les politiques configureacutees

Gestion automatique des cleacutes

Dans la section preacuteceacutedente lencryptage eacutetait configureacute pour utiliser simplement le partage de secrets Endautres termes pour rester seacutecuriseacute nous devons transfeacuterer la configuration de notre encryptage agrave travers untunnel seacutecuriseacute Si nous avons configureacute lhocircte distant par telnet nimporte quel tiers pourrait avoir prisconnaissance de notre secret partageacute et ainsi notre configuration ne serait plus sucircre

De plus puisque le secret est partageacute ce nest pas un secret Lhocircte distant ne peut pas en faire grand chosemais nous devons ecirctre sucircrs dutiliser un secret diffeacuterent pour les communications avec tous nos partenairesCeci neacutecessite un grand nombre de cleacutes Pour 10 partenaires nous devrions avoir au moins 50 secretsdiffeacuterents

En plus du problegraveme des cleacutes symeacutetriques le renouvellement des cleacutes est eacutegalement neacutecessaire Si un tierseacutecoute suffisamment le trafic il peut ecirctre en position de retrouver la cleacute par reacutetro ingeacutenierie On peut senpreacutemunir en modifiant la cleacute de temps en temps mais ce processus a besoin decirctre automatiseacute

Un autre problegraveme est que la gestion manuelle des cleacutes deacutecrite au-dessus impose de deacutefinir preacuteciseacutement lesalgorithmes et les longueurs de cleacutes utiliseacutees ce qui neacutecessite une grande coordination avec lhocircte distant Il

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestion automatique des cleacutes 25

serait preacutefeacuterable davoir la capaciteacute agrave deacutecrire une politique des cleacutes plus large comme par exemple Nouspouvons faire du 3DES et du Blowfish avec les longueurs de cleacutes suivantes

Pour reacutesoudre ces problegravemes IPSEC fournit lEchange de Cleacute sur Internet (Internet Key Echange (IKE))permettant dautomatiser leacutechange de cleacutes geacuteneacutereacutees aleacuteatoirement Ces cleacutes sont transmises en utilisant unetechnologie dencryptage asymeacutetrique neacutegocieacutee

Limpleacutementation IPSEC de Linux 25 fonctionne avec le deacutemon IKE KAME racoon Depuis le 9novembre la version de racoon preacutesente la distribution iptools dAlexey peut ecirctre compileacutee en supprimant aupreacutealable include ltnetroutehgt dans deux fichiers Je fournis une version preacutecompileacutee

Note LEchange de Cleacute sur Internet (IKE) doit avoir accegraves au port UDP 500 Soyez sucircr queiptables ne le bloque pas

Theacuteorie

Comme expliqueacute avant la gestion automatique des cleacutes reacutealise beaucoup dopeacuterations pour nousSpeacutecifiquement il creacutee agrave la voleacutee les Associations de Seacutecuriteacute Il ne configure cependant pas la politique pournous ce qui est le fonctionnement attendu

Donc pour beacuteneacuteficier de IKE configurez une politique mais ne fournissez aucune Association de Seacutecuriteacute Sile noyau deacutecouvre quil y a une politique IPSEC mais pas dAssociation de Seacutecuriteacute il va le notifier au deacutemonIKE qui va chercher agrave en neacutegocier une

De nouveau rappelons que la Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons tandis que lAssociation deSeacutecuriteacute deacutecrit COMMENT nous le voulons Lutilisation de la gestion automatique des cleacutes nous permet dene speacutecifier que ce que nous voulons

Exemple

Kame racoon possegravede un grand nombre doptions dont la plupart des valeurs par deacutefaut sont corrects nousnavons donc pas besoin de les modifier Comme nous lavons dit auparavant lopeacuterateur doit deacutefinir unePolitique de Seacutecuriteacute mais pas dAssociations de Seacutecuriteacute Nous laissons cette neacutegociation au deacutemon IKE

Dans cet exemple 10001 et 1000216 sont encore une fois sur le point deacutetablir des communicationsseacutecuriseacutees mais cette fois avec laide du deacutemon racoon Par soucis de simplification cette configurationutilisera des cleacutes preacute-partageacutees les redouteacutes secrets partageacutes Nous discuterons des certificats X509 dans unesection agrave part Voir la section intituleacutee Gestion automatique des cleacutes en utilisant les certificats X509gt

Nous allons agrave peu pregraves rester fidegravele agrave la configuration par deacutefaut qui est identique sur les deux hocirctes

path pre_shared_key usrlocaletcracoonpsktxt

remote anonymous exchange_mode aggressivemain doi ipsec_doi situation identity_only

my_identifier address

lifetime time 2 min secminhour initial_contact on proposal_check obey obey strict or claim

proposal encryption_algorithm 3des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

26 Theacuteorie

hash_algorithm sha1 authentication_method pre_shared_key dh_group 2

sainfo anonymous pfs_group 1 lifetime time 2 min encryption_algorithm 3des authentication_algorithm hmac_sha1 compression_algorithm deflate

Beaucoup de paramegravetres Je pense que lon peut encore en supprimer pour se rapprocher de la configurationpar deacutefaut Remarquons ici quelques eacuteleacutements notables Nous avons configureacute deux sections anonymous cequi convient pour tous les hocirctes distants Ceci va ainsi faciliter les configurations suppleacutementaires Il nest pasneacutecessaire davoir de sections speacutecifiques agrave une machine particuliegravere agrave moins que vous ne le vouliez vraiment

De plus la configuration preacutecise que nous nous identifions gracircce agrave notre adresse IP (my_identifier address) etque nous pouvons faire du 3des sha1 et que nous utiliserons une cleacute preacute-partageacutee se trouvant dans psktxt

Dans le fichier psktxt nous avons configureacute deux entreacutees qui sont diffeacuterentes suivant les hocirctes Sur100011

1000216 password2

Sur 1000216

100011 password2

Soyez sucircr que ces fichiers sont la proprieacuteteacute de root et quils ont le mode 0600 Dans le cas contraire racoonne pourra faire confiance agrave leur contenu Notez que ces fichiers sont symeacutetriques lun de lautre

Nous sommes maintenant precirct agrave configurer notre politique qui est assez simple Sur lhocircte 1000216

sbinsetkey -fflushspdflush

spdadd 1000216 100011 any -P out ipsec esptransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

spdadd 100011 1000216 any -P out ipsec esptransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire

Noter que ces politiques sont encore une fois symeacutetriques

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exemple 27

Nous sommes maintenant precirct agrave lancer racoon Une fois lanceacute au moment ougrave nous essayons une connexionun telnet depuis 100011 vers 1000216 ou linverse racoon aura deacutemarreacute la neacutegociation

121844 INFO isakmpc1689isakmp_post_acquire() IPsec-SA request for 100011 queued due to no phase1 found121844 INFO isakmpc794isakmp_ph1begin_i() initiate new phase 1 negotiation 1000216[500]lt=gt100011[500]121844 INFO isakmpc799isakmp_ph1begin_i() begin Aggressive mode121844 INFO vendoridc128check_vendorid() received Vendor ID KAMEracoon121844 NOTIFY oakleyc2037oakley_skeyid() couldnt find the proper pskey try to get one by the peers address121844 INFO isakmpc2417log_ph1established() ISAKMP-SA established 1000216[500]-100011[500] spi044d25dede78a4d1ff01e5b4804f0680121845 INFO isakmpc938isakmp_ph2begin_i() initiate new phase 2 negotiation 1000216[0]lt=gt100011[0]121845 INFO pfkeyc1106pk_recvupdate() IPsec-SA established ESPTransport 100011-gt1000216 spi=44556347(0x2a7e03b)121845 INFO pfkeyc1318pk_recvadd() IPsec-SA established ESPTransport 1000216-gt100011 spi=15863890(0xf21052)

Lexeacutecution de la commande setkey -D qui nous montre les Associations de Seacutecuriteacute nous indique quellessont en effet preacutesentes

1000216 100011 esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000) E 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04 A hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99 seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last Nov 11 122912 2002 hard 0(s) soft 0(s) current 304(bytes) hard 0(bytes) soft 0(bytes) allocated 3 hard 0 soft 0 sadb_seq=1 pid=17112 refcnt=0100011 1000216 esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000) E 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a A hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last hard 0(s) soft 0(s) current 231(bytes) hard 0(bytes) soft 0(bytes) allocated 2 hard 0 soft 0 sadb_seq=0 pid=17112 refcnt=0

Nous avons les Politiques de Seacutecuriteacute que nous avons nous-mecircme configureacutees

100011[any] 1000216[any] tcp in ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122912 2002 lifetime0(s) validtime0(s) spid=3616 seq=5 pid=17134 refcnt=31000216[any] 100011[any] tcp out ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122844 2002 lifetime0(s) validtime0(s) spid=3609 seq=4 pid=17134 refcnt=3

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

28 Exemple

Problegravemes et deacutefauts connus

Si cela ne marche pas veacuterifiez que tous les fichiers de configuration sont la proprieacuteteacute de root et quils nepeuvent ecirctre lus que par celui-ci Pour deacutemarrer racoon en avant-plan utilisez -F Pour le forcer agrave lire unfichier de configuration agrave la place de celui preacuteciseacute lors de la compilation utilisez -f Pour obtenir denombreux deacutetails ajouter loption log debug dans le fichier racoonconf

Gestion automatique des cleacutes en utilisant les certificats X509

Comme nous lavons dit avant lutilisation de secrets partageacutes est compliqueacutee car ils ne peuvent pas ecirctrefacilement partageacutes et une fois quils le sont ils ne sont plus secrets Heureusement nous avons latechnologie dencryptage asymmeacutetrique pour nous aider agrave reacutesoudre ce problegraveme

Si chaque participant dune liaison IPSEC creacutee une cleacute publique et priveacutee des communications seacutecuriseacuteespeuvent ecirctre mises en place par les deux parties en publiant leur cleacute publique et en configurant leur politique

Creacuteer une cleacute est relativement facile bien que cela exige un peu de travail Ce qui suit est baseacute sur loutilopenssl

Construire un certificat X509 pour votre hocircte

OpenSSL dispose dune importante infrastructure de gestions des clefs capable de geacuterer des clefs signeacutees ounon par une autoriteacute de certification Pour linstant nous avons besoin de court-circuiter toute cetteinfrastructure et de mettre en place une seacutecuriteacute de charlatan et de travailler sans autoriteacute de certification

Nous allons tout dabord creacuteer une requecircte de certificat (certificate request) pour notre hocircte appeleacute laptop

$ openssl req -new -nodes -newkey rsa1024 -sha1 -keyform PEM -keyout laptopprivate -outform PEM -out requestpem

Des questions nous sont poseacutees

Country Name (2 letter code) [AU]NLState or Province Name (full name) [Some-State]Locality Name (eg city) []DelftOrganization Name (eg company) [Internet Widgits Pty Ltd]Linux AdvancedRouting amp Traffic ControlOrganizational Unit Name (eg section) []laptopCommon Name (eg YOUR name) []bert hubertEmail Address []ahuds9anl

Please enter the following extra attributesto be sent with your certificate requestA challenge password []An optional company name []

Vous avez toute liberteacute quant aux reacuteponses Vous pouvez ou non mettre le nom dhocircte en fonction de vosbesoins de seacutecuriteacute Cest ce que nous avons fait dans cet exemple

Nous allons maintenant auto signer cette requecircte

$ openssl x509 -req -in requestpem -signkey laptopprivate -out laptoppublicSignature oksubject=C=NLL=DelftO=Linux Advanced Routing amp Traffic ControlOU=laptopCN=bert hubertEmail=ahuds9anl

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Problegravemes et deacutefauts connus 29

Getting Private key

Le fichier requestpem peut maintenant ecirctre eacutelimineacute

Reacutepeacutetez cette proceacutedure pour tous les hocirctes qui ont besoin dune cleacute Vous pouvez distribuer le fichier publicen toute impuniteacute mais garder le fichier private priveacute

Configuration et lancement

Une fois que nous avons les cleacutes publiques et priveacutees pour nos hocirctes nous pouvons indiquer agrave racoon de lesutiliser

Reprenons notre configuration preacuteceacutedente et les deux hocirctes 100011 (upstairs) et 1000216 (laptop)

Dans le fichier racoonconf preacutesent sur 100011 nous ajoutons

path certificate usrlocaletcracooncerts

remote 1000216 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

certificate_type x509 upstairspublic upstairsprivate

peers_certfile laptoppublic proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Ceci indique agrave racoon que les certificats se trouvent dans usrlocaletcracooncerts De plusil contient des eacuteleacutements speacutecifiques pour lhocircte distant 1000216

La ligne asn1dn indique agrave racoon que lidentification pour lhocircte local et distant doit ecirctre extraite des cleacutespubliques Ceci correspond agrave la ligne subject=C=NLL=DelftO=Linux Advanced Routing amp TrafficControlOU=laptopCN=bert hubertEmail=ahuds9anl donneacute au-dessus

La ligne certificate_type preacutecise lemplacement des cleacutes publiques et priveacutees locales La deacuteclarationpeers_certfile preacutecise agrave racoon que la cleacute publique de lhocircte distant se trouve dans le fichierlaptoppublic

La section proposal reste inchangeacutee par rapport agrave ce que nous avons vu plus tocirct agrave lexception deauthentification_method qui est maintenant rsasig ce qui indique lutilisation de cleacute RSA publiquepriveacuteepour lauthentification

La configuration ajouteacutee sur 1000216 est presque identique exception faite de lhabituelle symeacutetrie

path certificate usrlocaletcracooncerts

remote 100011 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

30 Construire un certificat X509 pour votre hocircte

certificate_type x509 laptoppublic laptopprivate

peers_certfile upstairspublic

proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Maintenant que nous avons ajouteacute ces eacuteleacutements sur les deux hocirctes la seule chose qui reste agrave faire est de mettreen place les fichiers contenant les cleacutes La machine upstairs doit avoir les fichiers upstairsprivateupstairspublic et laptoppublic placeacutes dans usrlocaletcracooncerts Soyez sucircrque le reacutepertoire est la proprieacuteteacute de root et quil possegravede les droits 0700 Dans le cas contraire racoon pourraitrefuser de lire le contenu de ce reacutepertoire

La machine laptop doit avoir les fichiers upstairsprivate upstairspublic etlaptoppublic placeacutes dans usrlocaletcracooncerts Autrement dit chaque hocircte doitavoir ses propres cleacutes publique et priveacutee et de plus la cleacute publique de lhocircte distant

Veacuterifiez que la Politique de Seacutecuriteacute est en place (exeacutecutez la commande spdadd vue dans la section intituleacuteeExemplegt) Lancez alors racoon et tout devrait fonctionner

Comment configurer des tunnels seacutecuriseacutes

Pour configurer des communications seacutecuriseacutees avec un hocircte distant nous devons eacutechanger des cleacutespubliques Bien quil ne soit pas neacutecessaire que la cleacute publique reste secregravete il est important decirctre sucircr quecette cleacute na pas eacuteteacute modifieacutee En dautres termes vous devez ecirctre certain quil ny a pas de man in the middle[NdT man in the middle est le nom dune attaque qui consiste agrave se placer entre lhocircte eacutemetteur et lhocircte dedestination]

Pour faciliter ceci OpenSSL propose la commande digest

$ openssl dgst upstairspublic MD5(upstairspublic)= 78a3bddafb4d681c1ca8ed4d23da4ff1

La seule chose que nous devons faire est de veacuterifier que notre partenaire distant voit la mecircme empreinte Cecipeut ecirctre effectueacute en se rencontrant physiquement ou par teacuteleacutephone en sassurant que le numeacutero de teacuteleacutephonede lhocircte distant na pas eacuteteacute envoyeacute dans le mecircme courrier eacutelectronique que celui qui contenait la cleacute

Une autre maniegravere de faire ceci est dutiliser un tiers de confiance qui exeacutecute le service dautoriteacute decertification (Certificate Authority) Cette autoriteacute de certification (CA) peut alors signer votre cleacute celle quenous avons nous-mecircme creacuteeacute au-dessus

tunnels IPSEC

Jusquici nous navons seulement consideacutereacute IPSEC dans le mode appeleacute transport ougrave les points terminauxcomprennent directement IPSEC Comme ceci nest pas souvent le cas il peut ecirctre neacutecessaire davoir desrouteurs qui eux seuls comprennent IPSEC et qui reacutealisent le travail pour les hocirctes se trouvant derriegravere euxCeci est appeleacute le mode tunnel

Configurer ceci est tregraves rapide Pour tunneler tout le trafic vers 1301610016 agrave partir de 1000216 via100011 nous eacuteditons ce qui suit sur 1000216

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration et lancement 31

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P out ipsec esptunnel1000216-100011require

Notez que loption -m tunnel est vitale Ceci configure tout dabord une Association de Seacutecuriteacute ESP entreles points terminaux de notre tunnel agrave savoir 1000216 et 100011

Nous allons ensuite reacuteellement configurer le tunnel On doit indiquer au noyau dencrypter tout le trafic de1000024 vers 13016100 De plus ce trafic doit ecirctre envoyeacute vers 100011

100011 a eacutegalement besoin decirctre configureacute

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P in ipsec esptunnel1000216-100011require

Notez que ceci est exactement identique agrave lexception du changement de -P out en -P in Les exemplespreacuteceacutedents nont configureacute le trafic que dans un seul sens Il est laisseacute comme exercice au lecteur le soin decompleacuteter lautre moitieacute du tunnel

Le nom de proxy ESP est eacutegalement donneacute pour cette configuration ce qui est un peu plus clair

Note Le tunnel IPSEC a besoin davoir la transmission IP activeacutee dans le noyau

Autre logiciel IPSEC

Thomas Walpuski preacutecise quil a eacutecrit une mise agrave jour pour que OpenBSD isakpmd puisse fonctionner avecLinux 25 IPSEC De plus la repository principale CVS de isakpmd contient maintenant le code Des notessont disponibles sur cette page

isakpmd est diffeacuterent de racoon mentionneacute au-dessus mais de nombreuses personnes lappreacutecient Il peut ecirctretrouveacute ici Dautres eacuteleacutements de lecture sur le CVS dOpenBSD ici Thomas a eacutegalement creacuteeacute un tarball pourceux qui ne sont pas habitueacutes agrave CVS ou patch

De plus des mises agrave jour sont disponibles pour permettre aux outils FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux 25 Vous pourrez les trouver ici

Interopeacuterabiliteacute dIPSEC avec dautres systegravemes

FIXME Ecrire ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

32 tunnels IPSEC

Windows

Andreas Jellinghaus ltajdungeoninkadegt rapporte win2k cela marche preacute-partage de cleacute et ladresse ippour lauthentification (je ne pense pas que windows supporte fdqn ou userfdqn) Les certificats devraienteacutegalement marcher mais cela na pas eacuteteacute essayeacute

Check Point VPN-1 NG

Peter Bieringer rapporte

Voici des reacutesultats (seul le mode tunnel a eacuteteacute testeacute auth=SHA1) DES ok 3DES ok AES-128 ok AES-192 non supporteacute par CP VPN-1 AES-256 ok CAST non supporteacute par le noyau Linux utiliseacute

Version Testeacutee FP4 aka R54 aka wAI

Plus dinformations ici

Chapitre 8 Routage multidistribution (multicast)FIXME Pas de reacutedacteur

Le Multicast-HOWTO est (relativement) ancien De ce fait il peut ecirctre impreacutecis ou induire en erreur agravecertains endroits

Avant que vous ne puissiez faire du routage multidistribution le noyau Linux a besoin decirctre configureacute poursupporter le type de routage multidistribution que vous voulez faire Ceci agrave son tour exige une deacutecision quantau choix du protocole de routage multidistribution que vous vous preacuteparez agrave utiliser Il y a essentiellementquatre types ltlt communs gtgt de protocoles DVMRP (la version multidistribution du protocole RIP unicast)MOSPF (la mecircme chose mais pour OSPF) PIM-SM (Protocol Independant Multicasting - Sparse Mode) quisuppose que les utilisateurs de nimporte quel groupe de multidistribution sont disperseacutes plutocirct que regroupeacutes)et PIM-DM (le mecircme mais Dense Mode) qui suppose quil y aura un regroupement significatif des utilisateursdun mecircme groupe de multidistribution

On pourra noter que ces options napparaissent pas dans le noyau Linux Ceci sexplique par le fait que leprotocole lui-mecircme est geacutereacute par une application de routage comme Zebra mrouted ou pind Cependant vousdevez avoir une bonne ideacutee de ce que vous allez utiliser de maniegravere agrave seacutelectionner les bonnes options dans lenoyau

Pour tout routage multidistribution vous avez forceacutement besoin de seacutelectionner les options multicastinget multicasting routing Ceci est suffisant pour DVMRP et MOSPF Dans le cas de PIM vous devezeacutegalement valider les options PIMv1 ou PIMv2 suivant que le reacuteseau que vous connectez utilise la version 1ou 2 du protocole PIM

Une fois que tout cela a eacuteteacute reacutealiseacute et que votre nouveau noyau a eacuteteacute compileacute vous verrez au deacutemarrage queIGMP est inclus dans la liste des protocoles IP Celui-ci est un protocole permettant de geacuterer les groupesmultidistribution Au moment de la reacutedaction Linux ne supportait que les versions 1 et 2 de IGMP bien quela version 3 existe et ait eacuteteacute documenteacutee Ceci ne va pas vraiment nous affecter dans la mesure ougrave IGMPv3 estencore trop reacutecent pour que ses fonctionnaliteacutes suppleacutementaires soient largement utiliseacutees Puisque IGMP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 8 Routage multidistribution (multicast) 33

soccupe des groupes seules les fonctionnaliteacutes preacutesentes dans la plus simple version de IGMP geacuterant ungroupe entier seront utiliseacutees IGMPv2 sera utiliseacute dans la plupart des cas bien que IGMPv1 puisse encoreecirctre rencontreacute

Jusque-lagrave cest bon Nous avons activeacute la multidistribution Nous devons dire au noyau de lutiliserconcregravetement Nous allons donc deacutemarrer le routage Ceci signifie que nous ajoutons un reacuteseau virtuel demultidistribution agrave la table du routeur

ip route add 2240004 dev eth0

(En supposant bien sucircr que vous diffusez agrave travers eth0 Remplacez-le par le peacuteripheacuterique de votre choix sineacutecessaire)

Maintenant dire agrave Linux de transmettre les paquets

echo 1 gt procsysnetipv4ipamplowbarforward

Arriveacute ici il se peut que vous vous demandiez si ceci va faire quelque chose Donc pour tester notreconnexion nous pinguons le groupe par deacutefaut 224001 pour voir si des machines sont preacutesentesToutes les machines du reacuteseau local avec la multidistribution activeacutee DEVRAIENT reacutepondre et aucune autreVous remarquerez quaucune des machines qui reacutepondent ne le fait avec ladresse IP 224001 Quellesurprise ) Ceci est une adresse de groupe (une ltlt diffusion gtgt pour les abonneacutes) et tous les membres dugroupe reacutepondront avec leur propre adresse et non celle du groupe

ping -c 2 224001

Maintenant vous ecirctes precirct agrave faire du vrai routage multidistribution Bien en supposant que vous ayez deuxreacuteseaux agrave router lun vers lautre

(A continuer )

Chapitre 9 Gestionnaires de mise en file dattentepour ladministration de la bande passanteQuand je lai deacutecouvert cela ma VRAIMENT souffleacute Linux 22 contient toutes les fonctionnaliteacutes pour lagestion de la bande passante de maniegravere comparable agrave un systegraveme deacutedieacute de haut niveau

Linux deacutepasse mecircme ce que lATM et le Frame peuvent fournir

Afin deacuteviter toute confusion voici les regravegles utiliseacutees par tc pour la speacutecification de la bande passante

mbps = 1024 kbps = 1024 1024 bps =gt bytes (octetss)mbit = 1024 kbit =gt kilo bitsmb = 1024 kb = 1024 1024 b =gt byte (octet)mbit = 1024 kbit =gt kilo bit

En interne les nombres sont stockeacutes en bps (octets) et b (octet)

Mais tc utilise luniteacute suivante lors de laffichage des deacutebits

1Mbit = 1024 Kbit = 1024 1024 bps =gt octetss

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

34 Chapitre 9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en filedattente

Avec la mise en file dattente nous deacuteterminons la maniegravere dont les donneacutees sont ENVOYEES Il est importantde comprendre que nous ne pouvons mettre en forme que les donneacutees que nous transmettons

Avec la maniegravere dont Internet travaille nous navons pas de controcircle direct sur ce que les personnes nousenvoient Cest un peu comme votre boicircte aux lettres (physique ) chez vous Il ny a pas de faccedilon dinfluencerle nombre de lettres que vous recevez agrave moins de contacter tout le monde

Cependant lInternet est principalement baseacute sur TCPIP qui possegravede quelques fonctionnaliteacutes qui vontpouvoir nous aider TCPIP na pas daptitude agrave connaicirctre les performances dun reacuteseau entre deux hocirctes Ilenvoie donc simplement des paquets de plus en plus rapidement (ltlt slow start gtgt) et quand des paquetscommencent agrave se perdre il ralentit car il na plus la possibiliteacute de les envoyer En fait cest un peu plus eacuteleacutegantque cela mais nous en dirons plus par la suite

Cest comme si vous ne lisiez que la moitieacute de votre courrier en espeacuterant que vos correspondants arrecircteront devous en envoyer Agrave la diffeacuterence que ccedila marche sur Internet -)

Si vous avez un routeur et que vous souhaitez eacuteviter que certains hocirctes de votre reacuteseau aient des vitesses deteacuteleacutechargement trop grandes vous aurez besoin de mettre en place de la mise en forme de trafic sur linterfaceINTERNE de votre routeur celle qui envoie les donneacutees vers vos propres ordinateurs

Vous devez eacutegalement ecirctre sucircr que vous controcirclez le goulot deacutetranglement de la liaison Si vous avez unecarte reacuteseau agrave 100Mbit et un routeur avec un lien agrave 256kbit vous devez vous assurer que vous nenvoyez pasplus de donneacutees que ce que le routeur peut manipuler Autrement ce sera le routeur qui controcirclera le lien etqui mettra en forme la bande passante disponible Nous devons pour ainsi dire ltlt ecirctre le proprieacutetaire de la filedattente gtgt et ecirctre le lien le plus lent de la chaicircne Heureusement cest facilement reacutealisable

Gestionnaires de mise en file dattente simples sans classes

Comme nous lavons deacutejagrave dit la gestion de mise en file dattente permet de modifier la faccedilon dont les donneacuteessont envoyeacutees Les gestionnaires de mise en file dattente sans classes sont ceux qui en gros acceptent lesdonneacutees et qui ne font que les reacuteordonner les retarder ou les jeter

Ils peuvent ecirctre utiliseacutes pour mettre en forme le trafic dune interface sans aucune subdivision Il estprimordial que vous compreniez cet aspect de la mise en file dattente avant de continuer sur les gestionnairesde mise en files dattente baseacutes sur des classes contenant dautres gestionnaires de mise en file dattente

Le gestionnaire le plus largement utiliseacute est de loin pfifoamplowbarfast qui est celui par deacutefaut Ceciexplique aussi pourquoi ces fonctionnaliteacutes avanceacutees sont si robustes Elles ne sont rien de plus ltlt quuneautre file dattente gtgt

Chacune de ces files dattente a ses forces et ses faiblesses Toutes nont peut-ecirctre pas eacuteteacute bien testeacutees

pfifoamplowbarfast

Cette file dattente comme son nom lindique premier entreacute premier sorti (First In First Out) signifie queles paquets ne subissent pas de traitements speacuteciaux En fait ce nest pas tout agrave fait vrai Cette file dattente atrois ltlt bandes gtgt A linteacuterieur de chacune de ces bandes des regravegles FIFO sappliquent Cependant tant quily a un paquet en attente dans la bande 0 la bande 1 ne sera pas traiteacutee Il en va de mecircme pour la bande 1 et labande 2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explication sur les files dattente et la gestion de la mise en file dattente 35

Le noyau prend en compte la valeur du champ Type de Service des paquets et prend soin dinseacuterer dans labande 0 les paquets ayant le bit ltlt deacutelai minimum gtgt activeacute

Ne pas confondre ce gestionnaire de mise en file dattente sans classes avec celui baseacute sur des classes PRIO Bien quils aient des comportements similaires pfifoamplowbarfast ne possegravede pas de classes et vous nepourrez pas y ajouter de nouveaux gestionnaires avec la commande tc

Paramegravetres amp usage

Vous ne pouvez pas configurer le gestionnaire pfifoamplowbarfast dans la mesure ougrave cest celui pardeacutefaut Voici sa configuration par deacutefaut

priomapDeacutetermine comment les prioriteacutes des paquets sont relieacutees aux bandes telles que deacutefinies par le noyauLa relation est eacutetablie en se basant sur loctet TOS du paquet qui ressemble agrave ceci

0 1 2 3 4 5 6 7+-----+-----+-----+-----+-----+-----+-----+-----+| | | || PRECEDENCE | TOS | MBZ || | | |+-----+-----+-----+-----+-----+-----+-----+-----+

Les quatre bits TOS (le champ TOS) sont deacutefinis comme suit

Binaire Deacutecimal Signification-----------------------------------------1000 8 Minimise le Deacutelai (Minimize delay) (md)0100 4 Maximalise le Deacutebit (Maximize throughput) (mt)0010 2 Maximalise la Fiabiliteacute (Maximize reliability) (mr)0001 1 Minimalise le Coucirct Moneacutetaire (Minimize monetary cost) (mmc)0000 0 Service Normal

Comme il y a 1 bit sur la droite de ces quatre bits la valeur reacuteelle du champ TOS est le double de lavaleur des bits TOS tcpdump -v -v fournit la valeur de tout le champ TOS et non pas seulementla valeur des quatre bits Cest la valeur que lon peut voir dans la premiegravere colonne du tableausuivant

TOS Bits Signification Prioriteacute Linux Bande------------------------------------------------------------------------0x0 0 Service Normal 0 Best Effort 10x2 1 Minimise le Coucirct Moneacutetaire (mmc) 1 Filler 20x4 2 Maximalise la Fiabiliteacute (mr) 0 Best Effort 10x6 3 mmc+mr 0 Best Effort 10x8 4 Maximalise le Deacutebit (mt) 2 Masse 20xa 5 mmc+mt 2 Masse 20xc 6 mr+mt 2 Masse 20xe 7 mmc+mr+mt 2 Masse 20x10 8 Minimise le Deacutelai (md) 6 Interactive 00x12 9 mmc+md 6 Interactive 00x14 10 mr+md 6 Interactive 00x16 11 mmc+mr+md 6 Interactive 00x18 12 mt+md 4 Int Masse 10x1a 13 mmc+mt+md 4 Int Masse 10x1c 14 mr+mt+md 4 Int Masse 10x1e 15 mmc+mr+mt+md 4 Int Masse 1

amplsqbNdT par flux de masse (bulk flow) il faut entendre ltlt gros flot de donneacutees transmises encontinu gtgt comme un transfert FTP A lopposeacute un flux interactif (interactive flow) correspond agravecelui geacuteneacutereacute par des requecirctes SSH]

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

36 pfifoamplowbarfast

Beaucoup de nombres La seconde colonne contient la valeur correspondante des quatre bits TOSsuivi de leur signification Par exemple 15 repreacutesente un paquet voulant un coucirct moneacutetaire minimalune fiabiliteacute maximum un deacutebit maximum ET un deacutelai minimum Jappellerai ceci un ltlt paquetHollandais gtgt

La quatriegraveme colonne liste la maniegravere dont le noyau Linux interpregravete les bits TOS en indiquant agravequelle prioriteacute ils sont relieacutes

La derniegravere colonne montre la carte des prioriteacutes par deacutefaut Sur la ligne de commande la carte desprioriteacutes ressemble agrave ceci

1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Ceci signifie par exemple que la prioriteacute 4 sera relieacutee agrave la bande numeacutero 1 La carte des prioriteacutesvous permet eacutegalement de lister des prioriteacutes plus grandes (gt 7) qui ne correspondent pas agrave unerelation avec le champ TOS mais qui sont configureacutees par dautres moyens

Le tableau suivant provenant de la RFC 1349 (agrave lire pour plus de deacutetails) indique comment lesapplications devraient configurer leurs bits TOS pour fonctionner correctement

TELNET 1000 (minimise le deacutelai)FTP Controcircle 1000 (minimise le deacutelai) Donneacutees 0100 (maximalise le deacutebit)

TFTP 1000 (minimise le deacutelai)

SMTP phase de commande 1000 (minimise le deacutelai) phase DATA 0100 (maximalise le deacutebit)

Domain Name Service requecircte UDP 1000 (minimise le deacutelai) requecircte TCP 0000 Transfert de Zone 0100 (maximalise le deacutebit)

NNTP 0001 (minimise le coucirct moneacutetaire)

ICMP Erreurs 0000 Requecirctes 0000 (presque) Reacuteponses ltmecircme chose que requecirctegt (presque)

txqueuelenLa longueur de cette file dattente est fournie par la configuration de linterface que vous pouvez voiret configurer avec ifconfig et ip Pour configurer la longueur de la file dattente agrave 10 exeacutecuter ifconfig eth0 txqueuelen 10

Vous ne pouvez pas configurer ce paramegravetre avec tc

Filtre agrave seau de jetons (Token Bucket Filter)

Le Token Bucket Filter (TBF) est un gestionnaire de mise en file dattente simple Il ne fait que laisser passerles paquets entrants avec un deacutebit nexceacutedant pas une limite fixeacutee administrativement Lenvoi de courtesrafales de donneacutees avec un deacutebit deacutepassant cette limite est cependant possible

TBF est tregraves preacutecis et peu gourmand du point de vue reacuteseau et processeur Consideacuterez-le en premier si vousvoulez simplement ralentir une interface

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 37

Limpleacutementation TBF consiste en un tampon (seau) constamment rempli par des eacuteleacutements virtuelsdinformation appeleacutes jetons avec un deacutebit speacutecifique (deacutebit de jeton) Le paramegravetre le plus important dutampon est sa taille qui correspond au nombre de jetons quil peut stocker

Chaque jeton entrant laisse sortir un paquet de donneacutees de la file dattente de donneacutees et ce jeton est alorssupprimeacute du seau Lassociation de cet algorithme avec les deux flux de jetons et de donneacutees nous conduit agravetrois sceacutenarios possibles

Les donneacutees arrivent dans TBF avec un deacutebit EGAL au deacutebit des jetons entrants Dans ce cas chaquepaquet entrant a son jeton correspondant et passe la file dattente sans deacutelai

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS PETIT que le deacutebit des jetons Seule une partiedes jetons est supprimeacutee au moment ougrave les paquets de donneacutees sortent de la file dattente de sorte queles jetons saccumulent jusquagrave atteindre la taille du tampon Les jetons libres peuvent ecirctre utiliseacutespour envoyer des donneacutees avec un deacutebit supeacuterieur au deacutebit des jetons standard si de courtes rafales dedonneacutees arrivent

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS GRAND que le deacutebit des jetons Ceci signifie quele seau sera bientocirct deacutepourvu de jetons ce qui provoque larrecirct de TBF pendant un moment Cecisappelle ltlt une situation de deacutepassement de limite gtgt (overlimit situation) Si les paquets continuentagrave arriver ils commenceront agrave ecirctre eacutelimineacutes

bull

Le dernier sceacutenario est tregraves important car il autorise la mise en forme administrative de la bande passantedisponible pour les donneacutees traversant le filtre

Laccumulation de jetons autorise leacutemission de courtes rafales de donneacutees sans perte en situation dedeacutepassement de limite mais toute surcharge prolongeacutee causera systeacutematiquement le retard des paquets puisleur rejet

Notez que dans limpleacutementation reacuteelle les jetons correspondent agrave des octets et non des paquets

Paramegravetres amp usage

Mecircme si vous naurez probablement pas besoin de les changer TBF a des paramegravetres Dabord ceux toujoursdisponibles sont

limit or latencyLimit est le nombre doctets qui peuvent ecirctre mis en file dattente en attendant la disponibiliteacute dejetons Vous pouvez eacutegalement indiquer ceci dune autre maniegravere en configurant le paramegravetrelatency qui speacutecifie le temps maximal pendant lequel un paquet peut rester dans TBF Ce dernierparamegravetre prend en compte la taille du seau le deacutebit et sil est configureacute le deacutebit de crecircte(peakrate)

burstbuffermaxburstTaille du seau en octets Cest la quantiteacute maximale en octets de jetons dont on disposerasimultaneacutement En geacuteneacuteral plus les deacutebits de mise en forme sont importants plus le tampon doit ecirctregrand Pour 10 Mbits sur plateforme Intel vous avez besoin dun tampon dau moins 10 kilo-octets sivous voulez atteindre la limitation configureacutee

Si votre tampon est trop petit les paquets pourront ecirctre rejeteacutes car il arrive plus de jetons par topdhorloge que ne peut en contenir le tampon

mpuUn paquet de taille nulle nutilise pas une bande passante nulle Pour ethernet la taille minimale dunpaquet est de 64 octets LUniteacute Minimale de Paquet (Minimun Packet Unit) deacutetermine le nombreminimal de jetons agrave utiliser pour un paquet

rateLe paramegravetre de la vitesse Voir les remarques au-dessus agrave propos des limites

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

38 Filtre agrave seau de jetons (Token Bucket Filter)

Si le seau contient des jetons et quil est autoriseacute agrave se vider alors il le fait par deacutefaut avec une vitesse infinieSi ceci vous semble inacceptable utilisez les paramegravetres suivants

peakrateSi des jetons sont disponibles et que des paquets arrivent ils sont immeacutediatement envoyeacutes par deacutefaut et pour ainsi dire agrave ltlt la vitesse de la lumiegravere gtgt Cela peut ne pas vous convenir speacutecialement sivous avez un grand seau

Le deacutebit de crecircte (peak rate) peut ecirctre utiliseacute pour speacutecifier la vitesse agrave laquelle le seau est autoriseacute agravese vider Si tout se passe comme eacutecrit dans les livres ceci est reacutealiseacute en libeacuterant un paquet puis enattendant suffisamment longtemps pour libeacuterer le paquet suivant Le temps dattente est calculeacute demaniegravere agrave obtenir un deacutebit eacutegal au deacutebit de crecircte

Cependant eacutetant donneacute que la reacutesolution du minuteur (timer) dUNIX est de 10 ms et que les paquetsont une taille moyenne de 10 000 bits nous sommes limiteacutes agrave un deacutebit de crecircte de 1mbits

mtuminburstLe deacutebit de crecircte de 1Mbs ne sert pas agrave grand chose si votre deacutebit habituel est supeacuterieur agrave cettevaleur Un deacutebit de crecircte plus eacuteleveacute peut ecirctre atteint en eacutemettant davantage de paquets par top duminuteur ce qui a pour effet de creacuteer un second seau

Ce second bucket ne prend par deacutefaut quun seul paquet et nest donc en aucun cas un seau

Pour calculer le deacutebit de crecircte maximum multipliez le mtu que vous avez configureacute par 100 (ou plusexactement par HZ qui est eacutegal agrave 100 sur Intel et agrave 1024 sur Alpha)

Configuration simple

Voici une configuration simple mais tregraves utile

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Pourquoi est-ce utile Si vous avez un peacuteripheacuterique reacuteseau avec une grande file dattente comme un modemDSL ou un modem cacircble et que le dialogue se fasse agrave travers une interface rapide comme une interfaceethernet vous observerez que teacuteleacutecharger vers lamont (uploading) deacutegrade complegravetement linteractiviteacute

amplsqbNdT uploading deacutesigne une opeacuteration qui consiste agrave transfeacuterer des donneacutees ou des programmesstockeacutes dans un ordinateur local vers un ordinateur distant agrave travers un reacuteseau La traduction officielle pour ceterme est ltlt teacuteleacutechargement vers lamont gtgt On parle alors de voie montante Le downloading deacutesignelopeacuteration inverse (transfert dun hocircte distant vers lordinateur local) et est traduit par ltlt teacuteleacutechargement gtgtou ltlt teacuteleacutechargement vers laval gtgt On parle alors de la voie descendante]

Le teacuteleacutechargement vers lamont va en effet remplir la file dattente du modem Celle-ci est probablementENORME car cela aide vraiment agrave obtenir de bon deacutebit de teacuteleacutechargement vers lamont Cependant ceci nestpas forceacutement ce que voulez Vous ne voulez pas forceacutement avoir une file dattente importante de maniegravere agravegarder linteractiviteacute et pouvoir encore faire des choses pendant que vous envoyez des donneacutees

La ligne de commande au-dessus ralentit lenvoi de donneacutees agrave un deacutebit qui ne conduit pas agrave une mise en filedattente dans le modem La file dattente reacuteside dans le noyau Linux ougrave nous pouvons lui imposer une taillelimite

Modifier la valeur 220kbit avec votre vitesse de lien REELLE moins un petit pourcentage Si vous avez unmodem vraiment rapide augmenter un peu le paramegravetre burst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 39

Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing)

Stochastic Fairness Queueing (SFQ) est une impleacutementation simple de la famille des algorithmes de mise enfile dattente eacutequitable Cette impleacutementation est moins preacutecise que les autres mais elle neacutecessite aussi moinsde calculs tout en eacutetant presque parfaitement eacutequitable

Le mot cleacute dans SFQ est conversation (ou flux) qui correspond principalement agrave une session TCP ou un fluxUDP Le trafic est alors diviseacute en un grand nombre de jolies files dattente FIFO une par conversation Letrafic est alors envoyeacute dans un tourniquet donnant une chance agrave chaque session denvoyer leurs donneacutees touragrave tour

Ceci conduit agrave un comportement tregraves eacutequitable et empecircche quune seule conversation eacutetouffe les autres SFQest appeleacute ltlt Stochastic gtgt car il nalloue pas vraiment une file dattente par session mais a un algorithme quidivise le trafic agrave travers un nombre limiteacute de files dattente en utilisant un algorithme de hachage

A cause de ce hachage plusieurs sessions peuvent finir dans le mecircme seau ce qui peut reacuteduire de moitieacute leschances dune session denvoyer un paquet et donc reacuteduire de moitieacute la vitesse effective disponible Pourempecirccher que cette situation ne devienne importante SFQ change tregraves souvent son algorithme de hachagepour que deux sessions entrantes en collision ne le fassent que pendant un nombre reacuteduit de secondes

Il est important de noter que SFQ nest seulement utile que dans le cas ougrave votre interface de sortie est vraimentsatureacutee Si ce nest pas le cas il ny aura pas de files dattente sur votre machine Linux et donc pas deffetsPlus tard nous deacutecrirons comment combiner SFQ avec dautres gestionnaires de mise en files dattente pourobtenir le meilleur des deux mondes

Configurer speacutecialement SFQ sur linterface ethernet qui est en relation avec votre modem cacircble ou votrerouteur DSL est vain sans dautres mises en forme du trafic

Paramegravetres amp usage

SFQ est presque configureacute de base

perturbReconfigure le hachage une fois toutes les pertub secondes Sil nest pas indiqueacute le hachage se serajamais reconfigureacute Ce nest pas recommandeacute 10 secondes est probablement une bonne valeur

quantumNombre doctets quun flux est autoriseacute agrave retirer de la file dattente avant que la prochaine file dattentene prenne son tour Par deacutefaut eacutegal agrave la taille maximum dun paquet (MTU) Ne le configurez pas endessous du MTU

Configuration simple

Si vous avez un peacuteripheacuterique qui a une vitesse identique agrave celle du lien et un deacutebit reacuteel disponible comme unmodem teacuteleacutephonique cette configuration aidera agrave promouvoir leacutequiteacute

tc qdisc add dev ppp0 root sfq perturb 10 tc -s -d qdisc lsqdisc sfq 800c dev ppp0 quantum 1514b limit 128p flows 1281024 perturb 10sec Sent 4812 bytes 62 pkts (dropped 0 overlimits 0)

Le nombre 800c est un descripteur (handle) automatiquement assigneacute et limit signifie que 128 paquetspeuvent attendre dans la file dattente Il y a 1024 ltlt seaux de hachage gtgt disponibles pour la comptabiliteacute128 pouvant ecirctre actifs agrave la fois (pas plus de paquets ne conviennent dans la file dattente) Le hachage est

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

40 Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

reconfigureacute toutes les 10 secondes

Conseils pour le choix de la file dattente

Pour reacutesumer ces files dattente simples gegraverent le trafic en reacuteordonnant en ralentissant ou en supprimant lespaquets

Les astuces suivantes peuvent vous aider agrave choisir la file dattente agrave utiliser Elles mentionnent certaines filesdattente deacutecrites dans le chapitre Gestionnaires de mise en file dattente avanceacutesgt

Pour simplement ralentir le trafic sortant utilisez le Token Bucket Filter Il convient bien pour leseacutenormes bandes passantes si vous paramegravetrez en conseacutequence le seau

bull

Si votre lien est vraiment satureacute et que vous voulez ecirctre sucircr quaucune session ne va accaparer labande passante vers lexteacuterieur utilisez le Stochastical Fairness Queueing

bull

Si vous avez une grande dorsale et que vous voulez savoir ce que vous faites consideacuterez RandomEarly Drop (voir le chapitre Gestionnaires de mise en file dattente avanceacutesgt)

bull

Pour ltlt mettre en forme gtgt le trafic entrant qui nest pas transmis utilisez la reacuteglementation Ingress(Ingress Policier) La mise en forme du flux entrant est appeleacutee ltlt reacuteglementation gtgt (policing) etnon ltlt mise en forme gtgt (shaping)

bull

Si vous transmettez le trafic utilisez TBF sur linterface vers laquelle vous transmettez les donneacutees Sivous voulez mettre en forme un trafic pouvant sortir par plusieurs interfaces alors le seul facteurcommun est linterface entrante Dans ce cas utilisez la reacuteglementation Ingress

bull

Si vous ne voulez pas mettre en forme le trafic mais que vous vouliez voir si votre interface esttellement chargeacutee quelle a ducirc mettre en file dattente les donneacutees utilisez la file dattente pfifo (paspfifoamplowbarfast) Elle na pas de bandes internes mais assure le comptage de la taille de sonaccumulateur

bull

Finalement vous pouvez aussi faire de la ltlt mise en forme sociale gtgt La technologie nest pastoujours capable de reacutealiser ce que vous voulez Les utilisateurs sont hostiles aux contraintestechniques Un mot aimable peut eacutegalement vous aider agrave avoir votre bande passante correctementdiviseacutee

bull

terminologie

Pour comprendre correctement des configurations plus compliqueacutees il est dabord neacutecessaire dexpliquerquelques concepts A cause de la complexiteacute et de la relative jeunesse du sujet beaucoup de mots diffeacuterentssont utiliseacutes par les personnes mais ils signifient en fait la mecircme chose

Ce qui suit est lacircchement inspireacute du texte draft-ietf-diffserv-model-06txt An InformalManagement Model for Diffserv Routers Il peut ecirctre trouveacute agrave ladressehttpwwwietforginternet-draftsdraft-ietf-diffserv-model-04txt

Lisez-le pour les deacutefinitions strictes des termes utiliseacutes

Gestionnaire de mise en file dattente (qdisc) (Queueing Discipline)Un algorithme qui gegravere la file dattente dun peacuteripheacuterique soit pour les donneacutees entrantes (ingress)soit pour les donneacutees sortantes (egress)

Gestionnaire de mise en file dattente sans classes (Classless qdisc)Un gestionnaire de mise en file dattente qui na pas de subdivisions internes configurables

Gestionnaire de mise en file dattente baseacute sur des classes (Classful qdisc)Un gestionnaire de mise en file dattente baseacute sur des classes contient de multiples classes Certainesde ces classes contiennent un gestionnaire de mise en file dattente suppleacutementaire qui peut encoreecirctre baseacute sur des classes mais ce nest pas obligatoire Si lon sen tient agrave la deacutefinition strictepfifoamplowbarfast EST baseacute sur des classes dans la mesure ougrave il contient trois bandes qui sont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 41

en fait des classes Cependant dun point de vue des perspectives de configuration pour lutilisateur ilest sans classes dans la mesure ougrave ces classes ne peuvent ecirctre modifieacutees avec loutil tc

ClassesUn gestionnaire de mise en file dattente baseacute sur les classes peut avoir beaucoup de classes chacunedelles eacutetant internes au gestionnaire Une classe peut agrave son tour se voir ajouter plusieurs classes Uneclasse peut donc avoir comme parent soit un gestionnaire de mise en file dattente soit une autreclasse Une classe terminale est une classe qui ne possegravede de classes enfants Seul 1 gestionnaire demise en file dattente est attacheacute agrave cette classe Ce gestionnaire est responsable de lenvoi des donneacuteesde cette classe Quand vous creacuteez une classe un gestionnaire de mise en file dattente fifo est creacuteeacuteQuand vous ajoutez une classe enfant ce gestionnaire est supprimeacute Le gestionnaire fifo dune classeterminale peut ecirctre remplaceacute par un autre gestionnaire plus adapteacute Vous pouvez mecircme remplacer cegestionnaire fifo par un gestionnaire de mise en file dattente baseacute sur des classes de sorte que vouspourrez rajouter des classes suppleacutementaires

Classificateur (Classifier)Chaque gestionnaire de mise en file dattente baseacute sur des classes a besoin de deacuteterminer vers quellesclasses il doit envoyer un paquet Ceci est reacutealiseacute en utilisant le classificateur

Filtre (Filter)La classification peut ecirctre reacutealiseacutee en utilisant des filtres Un filtre est composeacute dun certain nombre deconditions qui si elles sont toutes veacuterifieacutees satisfait le filtre

Ordonnancement (Scheduling)Un gestionnaire de mise en file dattente peut avec laide dun classificateur deacutecider que des paquetsdoivent sortir plus tocirct que dautres Ce processus est appeleacute ordonnancement (scheduling) et estreacutealiseacute par exemple par le gestionnaire pfifoamplowbarfast mentionneacute plus tocirctLordonnancement est aussi appeleacute ltlt reclassement gtgt (reordering) ce qui peut precircter agrave confusion

Mise en forme (Shaping)Le processus qui consiste agrave retarder leacutemission des paquets sortants pour avoir un trafic conforme agrave undeacutebit maximum configureacute La mise en forme est reacutealiseacutee sur egress Familiegraverement rejeter despaquets pour ralentir le trafic est eacutegalement souvent appeleacute Mise en forme

Reacuteglementation (Policing)Retarder ou jeter des paquets dans le but davoir un trafic restant en dessous dune bande passanteconfigureacutee Dans Linux la reacuteglementation ne peut que jeter un paquet et non le retarder dans lamesure ougrave il ny a pas de ltlt file dattente dentreacutee gtgt (ingress queue)

Work-ConservingUn gestionnaire de mise en file dattente work-conserving deacutelivre toujours un paquet sil y en a un dedisponible En dautres termes il ne retarde jamais un paquet si ladaptateur reacuteseau est precirct agrave lenvoyer(dans le cas du gestionnaire egress)

non-Work-ConservingQuelques gestionnaire de mise en files dattente comme par exemple le Token Bucket Filter peuventavoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante Cecisignifie quils refusent parfois de libeacuterer un paquet bien quils en aient un de disponible

Maintenant que nous avons deacutefini notre terminologie voyons ougrave tous ces eacuteleacutements sont situeacutes

Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------gt Pile IP | | | | | | | Y | | | Y | | ^ | | | | ----------gt Transmission -gt | | ^ | | | | Y | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

42 terminologie

| ^ Y -qdisc1- | | | Classificateur --qdisc2-- | ---gt-gtGestionnaire de mise de sortie ---qdisc3---- | -gt | en file dattente (Egress) __qdisc4__ | | dentreacutee (Ingress) -qdiscN_ | | | +-----------------------------------------------------------+

Merci agrave Jamal Hadi Salim pour cette repreacutesentation ASCII

Le grand rectangle repreacutesente le noyau La flegraveche la plus agrave gauche repreacutesente le trafic du reacuteseau entrant dansvotre machine Celui-ci alimente alors le gestionnaire de mise en file dattente Ingress qui peut appliquer desfiltres agrave un paquet et deacutecider de le supprimer Ceci est appeleacute ltlt reacuteglementation gtgt (Policing)

Ce processus a lieu tregraves tocirct avant davoir beaucoup parcouru le noyau Cest par conseacutequent un tregraves bonendroit pour rejeter au plus tocirct du trafic sans pour autant consommer beaucoup de ressources CPU

Si le paquet est autoriseacute agrave continuer il peut ecirctre destineacute agrave une application locale et dans ce cas il entre dans lacouche IP pour ecirctre traiteacute et deacutelivreacute agrave un programme utilisateur Le paquet peut eacutegalement ecirctre transmis sansentrer dans une application et dans ce cas ecirctre destineacute agrave egress Les programmes utilisateurs peuventeacutegalement deacutelivrer des donneacutees qui sont alors transmises et examineacutees par le classificateur Egress

Lagrave il est examineacute et mis en file dattente vers un certain nombre de gestionnaire de mise en file dattente Pardeacutefaut il ny a quun seul gestionnaire egress installeacute pfifoamplowbarfast qui reccediloit tous les paquetsCeci correspond agrave ltlt la mise en file dattente gtgt (enqueueing)

Le paquet reacuteside maintenant dans le gestionnaire de mise en file dattente attendant que le noyau le reacuteclamepour le transmettre agrave travers linterface reacuteseau Ceci correspond au ltlt retrait de la file dattente gtgt(dequeueing)

Le scheacutema ne montre que le cas dun seul adaptateur reacuteseau Les flegraveches entrantes et sortantes du noyau nedoivent pas ecirctre trop prises au pied de la lettre Chaque adaptateur reacuteseau a un gestionnaire dentreacutee et desortie

Gestionnaires de file dattente baseacutes sur les classes

Les gestionnaires de mise en file dattente baseacutes sur des classes sont tregraves utiles si vous avez diffeacuterentes sortesde trafic qui doivent ecirctre traiteacutes diffeacuteremment Lun dentre eux est appeleacute CBQ pour Class Based QueueingIl est si souvent mentionneacute que les personnes identifient les gestionnaires de mise en file dattente baseacutes surdes classes uniquement agrave CBQ ce qui nest pas le cas

CBQ est le meacutecanisme le plus ancien ainsi que le plus compliqueacute Il naura pas forceacutement les effets que vousrecherchez Ceci surprendra peut-ecirctre ceux qui sont sous lemprise de ltlt leffet Sendmail gtgt qui nousenseigne quune technologie complexe non documenteacutee est forceacutement meilleure que toute autre

Nous eacutevoquerons bientocirct plus agrave propos CBQ et ses alternatives

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

Quand le trafic entre dans un gestionnaire de mise en file dattente baseacute sur des classes il doit ecirctre envoyeacute verslune de ses classes il doit ecirctre ltlt classifieacute gtgt Pour deacuteterminer que faire dun paquet les eacuteleacutements appeleacutesltlt filtres gtgt sont consulteacutes Il est important de savoir que les filtres sont appeleacutes de linteacuterieur dungestionnaire et pas autrement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestionnaires de file dattente baseacutes sur les classes 43

Les filtres attacheacutes agrave ce gestionnaire renvoient alors une deacutecision que le gestionnaire utilise pour mettre en filedattente le paquet vers lune des classes Chaque sous-classe peut essayer dautres filtres pour voir si denouvelles instructions sappliquent Si ce nest pas le cas la classe met le paquet en file dattente dans legestionnaire de mise en file dattente quelle contient

En plus de contenir dautres gestionnaires la plupart des gestionnaires de mise en file dattente baseacutes sur desclasses reacutealisent eacutegalement de la mise en forme Ceci est utile pour reacutealiser agrave la fois lordonnancement (avecSFQ par exemple) et le controcircle de deacutebit Vous avez besoin de ceci dans les cas ougrave vous avez une interface agravehaut deacutebit (ethernet par exemple) connecteacutee agrave un peacuteripheacuterique plus lent (un modem cacircble)

Si vous nutilisez que SFQ rien ne devait se passer dans la mesure ougrave les paquets entrent et sortent du routeursans deacutelai linterface de sortie est de loin beaucoup plus rapide que la vitesse reacuteelle de votre liaison il ny aalors pas de files dattente agrave reacuteordonnancer

La famille des gestionnaires de mise en file dattente racines descripteursdescendances et parents

Chaque interface agrave ltlt un gestionnaire de mise en file dattente racine gtgt de sortie (egress root qdisc) Pardeacutefaut le gestionnaire de mise en file dattente sans classes mentionneacute plus tocirct pfifoamplowbarfastChaque gestionnaire et classe est repeacutereacute par un descripteur (handle) qui pourra ecirctre utiliseacute par les prochainesdeacuteclarations de configuration pour se reacutefeacuterer agrave ce gestionnaire En plus du gestionnaire de sortie une interfacepeut eacutegalement avoir un gestionnaire dentreacutee (ingress) qui reacuteglemente le trafic entrant

Ces descripteurs sont constitueacutes de deux parties un nombre majeur et un nombre mineur ltmajorgtltminorgtIl est habituel de nommer le gestionnaire racine 1 ce qui est eacutequivalent agrave 10 Le nombre mineur dungestionnaire de mise en file dattente est toujours 0

Les classes doivent avoir le mecircme nombre majeur que leur parent Le nombre majeur doit ecirctre unique agravelinteacuterieur dune configuration egress ou ingress Le nombre mineur doit ecirctre unique agrave linteacuterieur dungestionnaire de mise en file dattente et de ses classes

Comment les filtres sont utiliseacutes pour classifier le trafic

Pour reacutecapituler une hieacuterarchie typique pourrait ressembler agrave ceci

1 Gestionnaire de mise en file dattente racine | 11 classe enfant | | | | 110 111 112 classes enfants | | | | 11 | classe terminale | | 10 12 Gestionnaire de mise en file dattente 101 102 121 122 classes terminales

Mais ne laissez pas cet arbre vous abuser Vous ne devriez pas imaginer le noyau ecirctre au sommet de larbre etle reacuteseau en dessous ce qui nest justement pas le cas Les paquets sont mis et retireacutes de la file dattente agrave laracine du gestionnaire qui est le seul eacuteleacutement avec lequel le noyau dialogue

Un paquet pourrait ecirctre classifieacute agrave travers une chaicircne suivante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

44 Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

1 -gt 11 -gt 12 -gt 122

Le paquet reacuteside maintenant dans la file dattente du gestionnaire attacheacute agrave la classe 122 Dans cet exempleun filtre a eacuteteacute attacheacute agrave chaque noeud de larbre chacun choisissant la prochaine branche agrave prendre Cela estreacutealisable Cependant ceci est eacutegalement possible

1 -gt 122

Dans ce cas un filtre attacheacute agrave la racine a deacutecideacute denvoyer le paquet directement agrave 122

Comment les paquets sont retireacutes de la file dattente et envoyeacutes vers le mateacuteriel

Quand le noyau deacutecide quil doit extraire des paquets pour les envoyer vers linterface le gestionnaire racine1 reccediloit une requecircte dequeue qui est transmise agrave 11 et qui agrave son tour est passeacutee agrave 10 11 et 12chacune interrogeant leurs descendances qui essaient de retirer les paquets de leur file dattente Dans ce casle noyau doit parcourir lensemble de larbre car seul 122 contient un paquet

En reacutesumeacute les classes ltlt emboicircteacutees gtgt parlent uniquement agrave leur gestionnaire de mise en file dattenteparent jamais agrave une interface Seul la file dattente du gestionnaire racine est videacutee par le noyau

Ceci a pour reacutesultat que les classes ne retirent jamais les paquets dune file dattente plus vite que ce que leurparent autorise Et cest exactement ce que nous voulons de cette maniegravere nous pouvons avoir SFQ dans uneclasse interne qui ne fait pas de mise en forme mais seulement de lordonnancement et avoir un gestionnairede mise en file dattente exteacuterieur qui met en forme le trafic

Le gestionnaire de mise en file dattente PRIO

Le gestionnaire de mise en file dattente ne met pas vraiment en forme le trafic il ne fait que le subdiviser ense basant sur la maniegravere dont vous avez configureacute vos filtres Vous pouvez consideacuterer les gestionnaires PRIOcomme une sorte de super pfifoamplowbarfast dopeacute ougrave chaque bande est une classe seacutepareacutee au lieudune simple FIFO

Quand un paquet est mis en file dattente dans le gestionnaire PRIO une classe est choisie en fonction desfiltres que vous avez donneacutes Par deacutefaut trois classes sont creacuteeacutees Ces classes contiennent par deacutefaut de pursgestionnaires de mise en file dattente FIFO sans structure interne mais vous pouvez les remplacer parnimporte quels gestionnaires disponibles

Chaque fois quun paquet doit ecirctre retireacute dune file dattente la classe 1 est dabord testeacutee Les classes pluseacuteleveacutees ne sont utiliseacutees que si aucune des bandes plus faibles na pas fourni de paquets

Cette file dattente est tregraves utile dans le cas ougrave vous voulez donner la prioriteacute agrave certains trafics en utilisant toutela puissance des filtres tc et en ne se limitant pas seulement aux options du champ TOS Vous pouvezeacutegalement ajouter un autre gestionnaire de mise en file dattente aux trois classes preacutedeacutefinies tandis quepfifoamplowbarfast est limiteacute aux simples gestionnaires FIFO

Puisquil ne met pas vraiment en forme on applique le mecircme avertissement que pour SFQ Utilisez PRIOseulement si votre lien physique est vraiment satureacute ou inteacutegrez-le agrave linteacuterieur dun gestionnaire de mise enfile dattente baseacute sur des classes qui reacutealisent la mise en forme Ce dernier cas est valable pour pratiquementtous les modems-cacircbles et les peacuteripheacuteriques DSL

En termes formels le gestionnaire de mise en file dattente PRIO est un ordonnanceur Work-Conserving

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Comment les filtres sont utiliseacutes pour classifier le trafic 45

Paramegravetres PRIO amp usage

Les paramegravetres suivants sont reconnus par tc

bandsNombre de bandes agrave creacuteer Chaque bande est en fait une classe Si vous changez ce nombre vousdevez eacutegalement changer

priomapSi vous ne fournissez pas de filtres tc pour classifier le trafic le gestionnaire PRIO regarde la prioriteacuteTCamplowbarPRIO pour deacutecider comment mettre en file dattente le trafic

Ceci fonctionne comme le gestionnaire de mise en file dattente pfifoamplowbarfast mentionneacuteplus tocirct Voir la section correspondante pour plus de deacutetails

Les bandes sont des classes et sont appeleacutees par deacutefaut majeur1 agrave majeur3 Donc si votre gestionnaire demise en file dattente est appeleacute 12 tc filtre le trafic vers 121 pour lui accorder une plus grande prioriteacute

Par iteacuteration la bande 0 correspond au nombre mineur 1 la bande 1 au nombre mineur 2 etc

Configuration simple

Nous allons creacuteer cet arbre

racine 1 prio 1 Gestionnaire racine | | | 11 12 13 classes | | | 10 20 30 gestionnaire gestionnaire sfq tbf sfqbande 0 1 2

Le trafic de masse ira vers 30 tandis que le trafic interactif ira vers 20 ou 10

Les lignes de commande

tc qdisc add dev eth0 root handle 1 prio Ceci creacutee instantaneacutement les classes 11 12 13

tc qdisc add dev eth0 parent 11 handle 10 sfq tc qdisc add dev eth0 parent 12 handle 20 tbf rate 20kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 13 handle 30 sfq

Regardons maintenant ce que nous avons creacuteeacute

tc -s qdisc ls dev eth0 qdisc sfq 30 quantum 1514b Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 132 bytes 2 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0 overlimits 0)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

46 Paramegravetres PRIO amp usage

Comme vous pouvez le voir la bande 0 a deacutejagrave reccedilu du trafic et un paquet a eacuteteacute envoyeacute pendant lexeacutecution decette commande

Nous allons maintenant geacuteneacuterer du trafic de masse avec un outil qui configure correctement les options TOSet regarder de nouveau

scp tc ahu100011ahu100011s password tc 100 || 353 KB 0000 tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 2230 bytes 31 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0 overlimits 0)

Comme vous pouvez le voir tout le trafic a eacuteteacute envoyeacute comme preacutevu vers le descripteur 30 qui est la bandede plus faible prioriteacute Maintenant pour veacuterifier que le trafic interactif va vers les bandes de plus grandeprioriteacute nous geacuteneacuterons du trafic interactif

tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 14926 bytes 193 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0 overlimits 0)

Ca a marcheacute Tout le trafic suppleacutementaire a eacuteteacute vers 10 qui est notre gestionnaire de plus grande prioriteacuteAucun trafic na eacuteteacute envoyeacute vers les prioriteacutes les plus faibles qui avaient reccedilu au preacutealable tout le trafic venantde notre scp

Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Comme dit avant CBQ est le gestionnaire de mise en file dattente disponible le plus complexe celui qui a eule plus de publiciteacute qui est le moins compris et qui est probablement le plus farceur lors de sa mise au pointCe nest pas parce que les auteurs sont mauvais ou incompeacutetents loin de lagrave mais lalgorithme CBQ nest pasremarquablement preacutecis et il ne correspond pas vraiment agrave la faccedilon dont Linux fonctionne

En plus decirctre baseacute sur des classes CBQ sert eacutegalement agrave la mise en forme de trafic et cest sur cet aspect quilne fonctionne pas tregraves bien Il travaille comme ceci si vous essayez de mettre en forme une connexion de10mbits agrave 1mbitss le lien doit ecirctre inactif 90amppercnt du temps Si ce nest pas le cas nous devons limiter letaux de sorte quil soit inactif 90amppercnt du temps

Ceci est assez dur agrave mesurer et cest pour cette raison que CBQ deacuteduit le temps dinactiviteacute du nombre demicrosecondes qui seacutecoulent entre les requecirctes de la couche mateacuterielle pour avoir plus de donneacutees Cettecombinaison peut ecirctre utiliseacutee pour eacutevaluer si le lien est chargeacute ou non

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 47

Ceci est plutocirct leacuteger et lon arrive pas toujours agrave des reacutesultats convenables Par exemple quen est-il de lavitesse de liaison reacuteelle dune interface qui nest pas capable de transmettre pleinement les donneacutees agrave100mbits peut-ecirctre agrave cause dun mauvais pilote de peacuteripheacuterique Une carte reacuteseau PCMCIA ne pourrajamais atteindre 100mbits agrave cause de la conception du bus De nouveau comment calculons-nous le tempsdinactiviteacute

Cela devient mecircme pire quand on considegravere un peacuteripheacuterique reacuteseau pas-vraiment-reacuteel comme PPP OverEthernet ou PPTP over TCPIP La largeur de bande effective est dans ce cas probablement deacutetermineacutee parlefficaciteacute des tubes vers lespace utilisateur qui est eacutenorme

Les personnes qui ont effectueacute des mesures ont deacutecouvert que CBQ nest pas toujours tregraves exact et parfoismecircme tregraves eacuteloigneacute de la configuration

Cependant il marche bien dans de nombreuses circonstances Avec la documentation fournie ici vous devriezecirctre capable de le configurer pour quil fonctionne bien dans la plupart des cas

Mise en forme CBQ en deacutetail

Comme dit preacuteceacutedemment CBQ fonctionne en sassurant que le lien est inactif juste assez longtemps pourabaisser la bande passante reacuteelle au deacutebit configureacute Pour reacutealiser cela il calcule le temps qui devrait seacutecoulerentre des paquets de taille moyennne

En cours de fonctionnement le temps dinactiviteacute effectif (the effective idletime) est mesureacute en utilisantlalgorithme EWMA (Exponential Weighted Moving Average) qui considegravere que les paquets reacutecents sontexponentiellement plus nombreux que ceux passeacutes La charge moyenne UNIX (UNIX loadaverage) estcalculeacutee de la mecircme maniegravere

Le temps dinactiviteacute calculeacute est soustrait agrave celui mesureacute par EWMA et le nombre reacutesultant est appeleacuteavgidle Un lien parfaitement chargeacute a un avgidle nul un paquet arrive agrave chaque intervalle calculeacute

Une liaison surchargeacutee a un avgidle neacutegatif et sil devient trop neacutegatif CBQ sarrecircte un moment et se placealors en deacutepassement de limite (overlimit)

Inversement un lien inutiliseacute peut accumuler un avgidle eacutenorme qui autoriserait alors des bandespassantes infinies apregraves quelques heures dinactiviteacute Pour eacuteviter cela avgidle est borneacute agrave maxidle

En situation de deacutepassement de limite CBQ peut en theacuteorie bloquer le deacutebit pour une dureacutee eacutequivalente autemps qui doit seacutecouler entre deux paquets moyens puis laisser passer un paquet et bloquer de nouveau ledeacutebit Regardez cependant le paramegravetre minburst ci-dessous

Voici les paramegravetres que vous pouvez speacutecifier pour configurer la mise en forme

avpktTaille moyenne dun paquet mesureacutee en octets Neacutecessaire pour calculer maxidle qui deacuterive demaxburst qui est speacutecifieacute en paquets

bandwidthLa bande passante physique de votre peacuteripheacuterique neacutecessaire pour les calculs du temps de nonutilisation (idle time)

cellLa dureacutee de transmission dun paquet naugmente pas neacutecessairement de maniegravere lineacuteaire en fonctionde sa taille Par exemple un paquet de 800 octets peut ecirctre transmis en exactement autant de tempsquun paquet de 806 octets Ceci deacutetermine la granulariteacute Cette valeur est geacuteneacuteralement positionneacutee agrave8 et doit ecirctre une puissance de deux

maxburst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

48 Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Ce nombre de paquets est utiliseacute pour calculer maxidle de telle sorte que quand avgidle est eacutegalagrave maxidle le nombre de paquets moyens peut ecirctre envoyeacute en rafale avant que avgidle neretombe agrave 0 Augmentez-le pour ecirctre plus toleacuterant vis agrave vis des rafales de donneacutees Vous ne pouvezpas configurer maxidle directement mais seulement via ce paramegravetre

minburstComme nous lavons deacutejagrave indiqueacute CBQ doit bloquer le deacutebit dans le cas dun deacutepassement de limiteLa solution ideacuteale est de le faire pendant exactement le temps dinutilisation calculeacute puis de laisserpasser un paquet Cependant les noyaux UNIX ont geacuteneacuteralement du mal agrave preacutevoir des eacuteveacutenementsplus courts que 10 ms il vaut donc mieux limiter le deacutebit pendant une peacuteriode plus longue puisenvoyer minburst paquets dun seul coup et dormir pendant une dureacutee de minburst

Le temps dattente est appeleacute offtime De plus grandes valeurs de minburst megravenent agrave une mise enforme plus preacutecise dans le long terme mais provoquent de plus grandes rafales de donneacutees pendantdes peacuteriodes de quelques millisecondes

minidleSi avgidle est infeacuterieur agrave 0 nous sommes en deacutepassement de limite et nous devons attendre jusquagravece que avgidle devienne suffisamment important pour envoyer un paquet Pour eacuteviter quunebrusque rafale de donneacutees nempecircche le lien de fonctionner pendant une dureacutee prolongeacutee avgidleest remis agrave minidle sil atteint une valeur trop basse

La valeur minidle est speacutecifieacutee en microsecondes neacutegatives 10 signifie alors que avgidle estborneacute agrave -10micros

mpuTaille minumum dun paquet Neacutecessaire car mecircme un paquet de taille nulle est encapsuleacute par 64octets sur ethernet et il faut donc un certain temps pour le transmettre CBQ doit connaicirctre ceparamegravetre pour calculer preacuteciseacutement le temps dinutilisation

rateDeacutebit du trafic sortant du gestionnaire Ceci est le ltlt paramegravetre de vitesse gtgt

En interne CBQ est finement optimiseacute Par exemple les classes qui sont connues pour ne pas avoir dedonneacutees preacutesentes dans leur file dattente ne sont pas interrogeacutees Les classes en situation de deacutepassement delimite sont peacutenaliseacutees par la diminution de leur prioriteacute effective Tout ceci est tregraves habile et compliqueacute

Le comportement CBQ classful

En plus de la mise en forme en utilisant les approximations idletime mentionneacutees ci-dessus CBQ peuteacutegalement agir comme une file dattente PRIO dans le sens ougrave les classes peuvent avoir diffeacuterentes prioriteacutesLes prioriteacutes de plus faible valeur seront examineacutees avant celles de valeurs plus eacuteleveacutees

Chaque fois quun paquet est demandeacute par la couche mateacuterielle pour ecirctre envoyeacute sur le reacuteseau un processusweighted round robin (WRR) deacutemarre en commenccedilant par les classes de plus faibles numeacuteros

Celles-ci sont regroupeacutees et interrogeacutees si elles ont des donneacutees disponibles Apregraves quune classe ait eacuteteacuteautoriseacutee agrave retirer de la file dattente un nombre doctets la classe de prioriteacute suivante est consulteacutee

Les paramegravetres suivants controcirclent le processus WRR

allotQuand le CBQ racine reccediloit une demande denvoi de paquets sur une interface il va essayer tous lesgestionnaires internes (dans les classes) tour agrave tour suivant lordre du paramegravetre priority Achaque passage une classe ne peut envoyer quune quantiteacute limiteacutee de donneacutees Le paramegravetre allotest luniteacute de base de cette quantiteacute Voir le paramegravetre weight pour plus dinformations

prioCBQ peut eacutegalement agir comme un peacuteripheacuterique PRIO Les classes internes avec les prioriteacutes les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Mise en forme CBQ en deacutetail 49

plus eacuteleveacutees sont consulteacutees en premier et aussi longtemps quelles ont du trafic les autres classes nesont pas examineacutees

weightLe paramegravetre weight assiste le processus Weighted Round Robin Chaque classe a tour agrave tour lapossibiliteacute denvoyer ses donneacutees Si vous avez des classes avec des bandes passantessignificativement plus importantes il est logique de les autoriser agrave envoyer plus de donneacutees agrave chaquetour que les autres

Vous pouvez utiliser des nombres arbitraires dans la mesure ougrave CBQ additionne tous les paramegravetresweight preacutesents sous une classe et les normalise La regravegle empirique qui consiste agrave prendrerate10 semble fonctionner correctement Le paramegravetre weight normaliseacute est multiplieacute par leparamegravetre allot pour deacuteterminer la quantiteacute de donneacutees agrave envoyer agrave chaque tour

Notez sil vous plaicirct que toutes les classes agrave linteacuterieur dune hieacuterarchie CBQ doivent avoir le mecircme nombremajeur

Paramegravetres CBQ qui deacuteterminent le partage amp le precirct du lien

En plus de purement limiter certains trafics il est eacutegalement possible de speacutecifier quelles classes peuventemprunter de la bande passante aux autres classes ou reacuteciproquement precircter sa bande passante

isolated sharingUne classe qui est configureacutee avec isolated ne precirctera pas sa bande passante agrave ses classes enfantsUtilisez ceci si vous avez sur votre lien deux agences concurrentes ou qui ne sappreacutecient pas et qui neveulent pas se precircter gratuitement de la bande passante

Le programme de controcircle tc connait eacutegalement sharing qui agit agrave linverse du paramegravetreisolated

bounded borrowUne classe peut aussi ecirctre borneacutee (bounded) ce qui signifie quelle nessaiera pas demprunter de labande passante agrave ses classes enfants tc connait eacutegalement borrow qui agit agrave linverse de bounded

Une situation typique pourrait ecirctre le cas ougrave vous avez deux agences preacutesentes sur votre lien qui sont agrave la foisisolated et bounded Ceci signifie quelles sont strictement limiteacutees agrave leur deacutebit et quelles ne precircterontpas aux autres leur bande passante

A linteacuterieur de ces classes dagence il pourrait y avoir dautres classes qui sont autoriseacutees agrave eacutechanger leurbande passante

Configuration simple

1 gestionnaire de mise en file dattente racine | 11 classe enfant 13 14 classes terminales | | 30 40 gestionnares de mise en file dattente (sfq) (sfq)

Cette configuration limite le trafic dun serveur web agrave 5 mbit et le trafic SMTP agrave 3 mbit Il est souhaitablequils noccupent pas plus de 6 mbit agrave eux deux Nous avons une carte reacuteseau agrave 100 mbit et les classes peuventsemprunter mutuellement de la bande passante

tc qdisc add dev eth0 root handle 10 cbq bandwidth 100Mbit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

50 Le comportement CBQ classful

avpkt 1000 cell 8 tc class add dev eth0 parent 10 classid 11 cbq bandwidth 100Mbit rate 6Mbit weight 06Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

Cette partie installe la racine et la classe 11 habituelle La classe 11 est borneacutee la bande passante totale nepourra donc pas exceacuteder 6 mbit

Comme dit avant CBQ a besoin de NOMBREUX paramegravetres Tous ces paramegravetres sont cependant expliqueacutesau-dessus La configuration HTB correspondante est beaucoup plus simple

tc class add dev eth0 parent 11 classid 13 cbq bandwidth 100Mbit rate 5Mbit weight 05Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 tc class add dev eth0 parent 11 classid 14 cbq bandwidth 100Mbit rate 3Mbit weight 03Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000

Ce sont nos deux classes Notez comment nous avons configureacute la valeur du paramegravetre weight en fonctiondu paramegravetre rate La bande passante de lensemble des deux classes ne pourra jamais deacutepasser 6 mbit Enfait les identifieurs de classe (classid) doivent avoir le mecircme numeacutero majeur que le gestionnaire de miseen file dattente parent

tc qdisc add dev eth0 parent 13 handle 30 sfq tc qdisc add dev eth0 parent 14 handle 40 sfq

Les deux classes ont par deacutefaut un gestionnaire de mise en file dattente FIFO Nous les remplaccedilons par unefile dattente SFQ de telle sorte que chaque flux de donneacutees soit traiteacute de maniegravere eacutegale

tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 13 tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 14

Ces commandes directement attacheacutees agrave la racine envoient le trafic vers le bon gestionnaire de mise en filedattente

Notez que nous utilisons tc class add pour CREER des classes agrave linteacuterieur dun gestionnaire de mise enfile dattente et que nous utilisons tc qdisc add pour veacuteritablement configurer ces classes

Vous vous demandez peut-ecirctre ce qui arrive au trafic qui nest classifieacute par aucune des deux regravegles Dans cecas les donneacutees seront traiteacutees agrave linteacuterieur de 10 et le deacutebit ne sera pas limiteacute

Si le trafic SMTP+web tente de deacutepasser la limite de 6 mbits la bande passante sera diviseacutee selon leparamegravetre weight donnant 58 du trafic au serveur web et 38 au serveur smtp

Avec cette configuration vous pouvez eacutegalement dire que le trafic du serveur web sera au minimum de 58 6 mbit = 375 mbit

Dautres paramegravetres CBQ split amp defmap

Comme preacuteciseacute avant un gestionnaire de mise en file dattente baseacute sur des classes doit appeler des filtrespour deacuteterminer dans quelle classe un paquet sera mis en file dattente

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 51

En plus dappeler les filtres CBQ offre dautres options defmap amp split Cest plutocirct compliqueacute agravecomprendre et de plus ce nest pas vital Mais eacutetant donneacute que ceci est le seul endroit connu ougrave defmap ampsplit sont correctement expliqueacutes je vais faire de mon mieux

Etant donneacute que nous voulons le plus souvent reacutealiser le filtrage en ne consideacuterant que le champ TOS unesyntaxe speacuteciale est fournie Chaque fois que CBQ doit trouver ougrave le paquet doit ecirctre mis en file dattente ilveacuterifie si le noeud est un noeud daiguillage (split node) Si cest le cas un de ses sous-gestionnaires a indiqueacuteson souhait de recevoir tous les paquets configureacutes avec une certaine prioriteacute Celle ci peut ecirctre deacuteriveacutee duchamp TOS ou des options des sockets positionneacutees par les applications

Les bits de prioriteacutes des paquets subissent un ET logique avec le champ defmap pour voir si unecorrespondance existe En dautres termes cest un moyen pratique de creacuteer un filtre tregraves rapide qui ne seraactif que pour certaines prioriteacutes Un defmap de ff (en hexadeacutecimal) veacuterifiera tout tandis quune valeur de 0ne veacuterifiera rien Une configuration simple aidera peut-ecirctre agrave rendre les choses plus claires

tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 mpu 64

tc class add dev eth1 parent 10 classid 11 cbq bandwidth 10Mbit rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000

Preacuteambule standard de CBQ Je nai jamais pris lhabitude de la quantiteacute de nombres neacutecessaires

Le paramegravetre defmap se reacutefegravere aux bits TCamplowbarPRIO qui sont deacutefinis comme suit

TC_PRIO Num Correspond agrave TOS-------------------------------------------------BESTEFFORT 0 Maximalise la Fiabiliteacute FILLER 1 Minimalise le Coucirct BULK 2 Maximalise le Deacutebit (0x8) INTERACTIVE_BULK 4 INTERACTIVE 6 Minimise le Deacutelai (0x10) CONTROL 7

Les nombres TCamplowbarPRIO correspondent aux bits compteacutes agrave partir de la droite Voir la sectionpfifoamplowbarfast pour plus de deacutetails sur la faccedilon dont les bits TOS sont convertis en prioriteacutes

Maintenant les classes interactive et de masse

tc class add dev eth1 parent 11 classid 12 cbq bandwidth 10Mbit rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 10 defmap c0

tc class add dev eth1 parent 11 classid 13 cbq bandwidth 10Mbit rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 10 defmap 3f

La gestion de mise en file dattente daiguillage (split qdisc) est 10 et cest agrave ce niveau que le choix sera faitC0 correspond au nombre binaire 11000000 et 3F au nombre binaire 00111111 Ces valeurs sont choisiesde telle sorte quagrave elles deux elles veacuterifient tous les bits La premiegravere classe correspond aux bits 6 amp 7 ce quiest eacutequivalent aux trafics ltlt interactif gtgt et de ltlt controcircle gtgt La seconde classe correspond au reste

Le noeud 10 possegravede maintenant la table suivante

prioriteacute envoyer agrave0 131 132 13

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

52 Dautres paramegravetres CBQ split amp defmap

3 134 135 136 127 12

Pour dautres amusements vous pouvez eacutegalement donner un ltlt masque de changement gtgt qui indiqueexactement les prioriteacutes que vous souhaitez changer Nutilisez ceci quavec la commande tc classchange Par exemple pour ajouter le trafic best effort agrave la classe 12 nous devrons exeacutecuter ceci

tc class change dev eth1 classid 12 cbq defmap 0101

La carte des prioriteacutes au niveau de 10 ressemble maintenant agrave ceci

prioriteacute envoyer agrave0 121 132 133 134 135 136 127 12

FIXME tc class change na pas eacuteteacute testeacute mais simplement vu dans les sources

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Martin Devera(ltdevikgt) reacutealisa agrave juste titre que CBQ est complexe et quil ne semble pas optimiseacute pour denombreuses situations classiques Son approche hieacuterarchique est bien adapteacutee dans le cas de configurations ougraveil y a une largeur de bande passante fixeacutee agrave diviser entre diffeacuterents eacuteleacutements Chacun de ces eacuteleacutements aura unebande passante garantie avec la possibiliteacute de speacutecifier la quantiteacute de bande passante qui pourra ecirctreemprunteacutee

HTB travaille juste comme CBQ mais il na pas recourt agrave des calculs de temps dinoccupation pour la mise enforme A la place cest un Token Bucket Filter baseacute sur des classes dougrave son nom Il na que quelquesparamegravetres qui sont bien documenteacutes sur ce site

Au fur et agrave mesure que votre configuration HTB se complexifie votre configuration sadapte bien Avec CBQelle est deacutejagrave complexe mecircme dans les cas simples HTB3 (voir sa page principale pour les deacutetails desversions HTB) fait maintenant parti des sources officielles du noyau (agrave partir des versions 2420-pre1 et2531 et supeacuterieures) Il est encore cependant possible que vous soyez obligeacute de reacutecupeacuterer la version mise agravejour de tc pour HTB3 Les programmes de lespace utilisateur et la partie HTB du noyau doivent avoir lemecircme numeacutero majeur Sans cela tc ne marchera pas avec HTB13

Si vous avez deacutejagrave un noyau reacutecent ou si vous ecirctes sur le point de mettre agrave jour votre noyau consideacuterez HTBcoucircte que coucircte

Configuration simple

Fonctionnellement presque identique agrave la configuration simple CBQ preacutesenteacutee ci-dessus

tc qdisc add dev eth0 root handle 1 htb default 30

tc class add dev eth0 parent 1 classid 11 htb rate 6mbit burst 15k

tc class add dev eth0 parent 11 classid 110 htb rate 5mbit burst 15k tc class add dev eth0 parent 11 classid 120 htb rate 3mbit ceil 6mbit burst 15k

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket) 53

tc class add dev eth0 parent 11 classid 130 htb rate 1kbit ceil 6mbit burst 15k

Lauteur recommande SFQ sous ces classes

tc qdisc add dev eth0 parent 110 handle 10 sfq perturb 10 tc qdisc add dev eth0 parent 120 handle 20 sfq perturb 10 tc qdisc add dev eth0 parent 130 handle 30 sfq perturb 10

Ajouter les filtres qui dirigent le trafic vers les bonnes classes

U32=tc filter add dev eth0 protocol ip parent 10 prio 1 u32 $U32 match ip dport 80 0xffff flowid 110 $U32 match ip sport 25 0xffff flowid 120

Et cest tout Pas de vilains nombres non expliqueacutes pas de paramegravetres non documenteacutes

HTB semble vraiment merveilleux Si 10 et 20 ont atteint tous les deux leur bande passante garantie etquil en reste agrave partager ils lempruntent avec un rapport de 53 comme attendu

Le trafic non classifieacute est achemineacute vers 30 qui a une petite bande passante mais qui peut emprunter tout cequi est laisseacute libre Puisque nous avons choisi SFQ en interne on heacuterite naturellement de leacutequiteacute

Classifier des paquets avec des filtres

Pour deacuteterminer quelle classe traitera un paquet la ltlt chaicircne de classificateurs gtgt est appeleacutee chaque foisquun choix a besoin decirctre fait Cette chaicircne est constitueacutee de tous les filtres attacheacutes aux gestionnaires demise en file dattente baseacutes sur des classes qui doivent prendre une deacutecision

On reprend larbre qui nest pas un arbre

racine 1 | _11_ | | | 10 11 12 101 102 121 122

Quand un paquet est mis en file dattente linstruction approprieacutee de la chaicircne de filtre est consulteacutee agrave chaquebranche Une configuration typique devrait avoir un filtre en 11 qui dirige le paquet vers 12 et un filtre en12 qui lenvoie vers 122

Vous pourriez eacutegalement avoir ce dernier filtre en 11 mais vous pouvez gagner en efficaciteacute en ayant destests plus speacutecifiques plus bas dans la chaicircne

A ce propos vous ne pouvez pas filtrer un paquet ltlt vers le haut gtgt Donc avec HTB vous devrez attachertous les filtres agrave la racine

Encore une fois les paquets ne sont mis en file dattente que vers le bas Quand ils sont retireacutes de la filedattente ils montent de nouveau vers linterface Ils ne tombent PAS vers lextreacutemiteacute de larbre en direction deladaptateur reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

54 Configuration simple

Quelques exemples simples de filtrage

Comme expliqueacute dans le chapitre Filtres avanceacutes pour la classification des paquetsgt vous pouvez vraimentanalyser nimporte quoi en utilisant une syntaxe tregraves compliqueacutee Pour commencer nous allons montrercomment reacutealiser les choses eacutevidentes ce qui heureusement est plutocirct facile

Disons que nous avons un gestionnaire de mise en file dattente PRIO appeleacute 10 qui contient trois classes etque nous voulons assigner agrave la bande de plus haute prioriteacute tout le trafic allant et venant du port 22 Les filtresseraient les suivants

tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip dport 22 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip sport 80 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Quest-ce que cela signifie Cela dit attacher agrave eth0 au noeud 10 un filtre u32 de prioriteacute 1 qui analysele port de destination ip 22 et qui lenvoie vers la bande 101 La mecircme chose est reacutepeacuteteacutee avec le port source80 La derniegravere commande indique que si aucune correspondance nest trouveacutee alors le trafic devra aller versla bande 102 la plus grande prioriteacute suivante

Vous devez ajouter eth0 ou nimporte laquelle de vos interfaces car chaque interface possegravede un espace denommage de ses descripteurs qui lui est propre

Pour seacutelectionner une adresse IP utilisez ceci

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip dst 432132 flowid 101 tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 123432 flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Ceci dirige le trafic allant vers 4321 et venant de 1234 vers la file dattente de plus haute prioriteacutetandis que le reste ira vers la prochaine plus haute prioriteacute

Vous pouvez rassembler ces deux veacuterifications pour reacutecupeacuterer le trafic venant de 1234 avec le portsource 80

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 432132 match ip sport 80 0xffff flowid 101

Toutes les commandes de filtres dont vous aurez normalement besoin

La plupart des commandes preacutesenteacutees ici commencent avec le preacuteambule suivant

tc filter add dev eth0 parent 10 protocol ip prio 1 u32

Ils sont appeleacutes filtres u32 et analysent NIMPORTE QUELLE partie dun paquet

Sur ladresse sourcedestinationMasque pour la source match ip src 123024 et masque pour la destination match ipdst 432024 Pour analyser un hocircte simple employez 32 ou omettez le masque

Sur le port sourcedestination tous les protocoles IPSource match ip sport 80 0xffff et destination match ip dport 0xffff

Sur le protocole ip (tcp udp icmp gre ipsec)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Quelques exemples simples de filtrage 55

Utilisez les nombres deacutefinis dans etcprotocols par exemple 1 pour icmp match ipprotocol 1 0xff

Sur fwmarkVous pouvez marquer les paquets avec ipchains ou iptables et voir cette marque preacuteserveacutee lors duroutage agrave travers les interfaces Ceci est vraiment utile pour mettre uniquement en forme le trafic sureth1 et venant de eth0 par exemple La syntaxe est la suivante

tc filter add dev eth1 protocol ip parent 10 prio 1 handle 6 fw flowid 11

Notez que ce nest pas une correspondance u32

Vous pouvez positionner une marque comme ceci

iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

Le nombre 6 est arbitraire

Si vous ne voulez pas assimiler la syntaxe complegravete de tc filter utilisez juste iptables et apprenezseulement la seacutelection baseacutee sur fwmark

Sur le champ TOSPour seacutelectionner le trafic interactif deacutelai minimum

tc filter add dev ppp0 parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 14

Utilisez 0x08 0xff pour le trafic de masse

Pour plus de commandes de filtrage voir le chapitre Filtres avanceacutes pour la classification des paquetsgt

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediatequeueing device (IMQ))

Le peacuteripheacuterique IMQ nest pas un gestionnaire de mise en file dattente mais son utilisation est fortement lieacutee agraveceux-ci Au coeur de Linux les gestionnaires de mise en file dattente sont attacheacutes aux peacuteripheacuteriques reacuteseauxet tout ce qui est mis en file dattente dans ce peacuteripheacuterique lest dabord dans le gestionnaire Avec ce conceptil existe deux limitations

1 Seule la mise en forme du trafic sortant est possible (un gestionnaire dentreacutee existe mais ses possibiliteacutessont tregraves limiteacutees en comparaison des gestionnaires de mise en file baseacutes sur les classes)

2 Un gestionnaire de mise en file dattente ne voit le trafic que dune interface et des limitations globales nepeuvent pas ecirctre mises en place

IMQ est ici pour aider agrave reacutesoudre ces deux limitations En reacutesumeacute vous pouvez mettre tout ce que vousvoulez dans un gestionnaire de mise en file dattente Les paquets speacutecialement marqueacutes sont intercepteacutes parles points daccroche netfilter NF_IP_PRE_ROUTING et NF_IP_POST_ROUTING et sont transfeacutereacutes vers legestionnaire attacheacute au peacuteripheacuterique imq Une cible iptables est utiliseacutee pour le marquage des paquets

Ceci vous permet de reacutealiser de la mise en forme dentreacutee eacutetant donneacute que vous pouvez marquer les paquetsentrant par un peacuteripheacuterique quelconque etou traiter les interfaces comme des classes pour configurer deslimites globales Vous pouvez eacutegalement reacutealiser de nombreuses autres choses comme simplement mettrevotre trafic http dans un gestionnaire mettre les requecirctes de nouvelles connexions dans un gestionnaire

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

56 Toutes les commandes de filtres dont vous aurez normalement besoin

Configuration simple

La premiegravere chose qui devrait vous venir agrave lesprit est dutiliser la mise en forme du trafic entrant pour vousgarantir une grande passante ) La configuration se fait comme avec nimporte quelle autre interface

tc qdisc add dev imq0 root handle 1 htb default 20

tc class add dev imq0 parent 1 classid 11 htb rate 2mbit burst 15k

tc class add dev imq0 parent 11 classid 110 htb rate 1mbittc class add dev imq0 parent 11 classid 120 htb rate 1mbit

tc qdisc add dev imq0 parent 110 handle 10 pfifotc qdisc add dev imq0 parent 120 handle 20 sfq

tc filter add dev imq0 parent 100 protocol ip prio 1 u32 match ip dst 100023032 flowid 110

Dans cet exemple u32 est utiliseacute pour la classification Les autres classificateurs devraient marcher tout aussibien Le trafic doit ensuite ecirctre seacutelectionneacute et marqueacute pour ecirctre mis en file dattente vers imq0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0

ip link set imq0 up

Les cibles iptables IMQ sont valides dans les chaicircnes PREROUTING et POSTROUTING de la table mangleLa syntaxe est la suivante

IMQ [ --todev n ] n numeacutero du peacuteripheacuterique imq

Il existe aussi une cible ip6tables

Notez que le trafic nest pas mis en file dattente quand la cible est activeacutee mais apregraves La localisation exactede lentreacutee du trafic dans le peacuteripheacuterique imq deacutepend de la direction de ce trafic (entrantsortant) Ces entreacuteessont les points daccroche preacutedeacutefinis de netfilter et utiliseacutes par iptables

enum nf_ip_hook_priorities NF_IP_PRI_FIRST = INT_MIN NF_IP_PRI_CONNTRACK = -200 NF_IP_PRI_MANGLE = -150 NF_IP_PRI_NAT_DST = -100 NF_IP_PRI_FILTER = 0 NF_IP_PRI_NAT_SRC = 100 NF_IP_PRI_LAST = INT_MAX

Pour le trafic entrant imq se deacuteclare avec la prioriteacute NF_IP_PRI_MANGLE + 1 ce qui signifie que lespaquets entrent dans le peacuteripheacuterique imq juste apregraves la chaine PREROUTING de la table mangle

Pour le trafic sortant imq utilise NF_IP_PRI_LAST qui honore le fait que les paquets rejeteacutes par la table filternoccuperont pas de bande passante

Les mises agrave jour et de plus amples informations peuvent ecirctre trouveacutees sur le site imq

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 57

Chapitre 10 Eacutequilibrage de charge sur plusieursinterfacesIl existe plusieurs maniegraveres pour le faire Une des plus faciles et des plus directes est TEQL (True (or Trivial)Link Equalizer Comme la plupart des eacuteleacutements en relation avec la gestion de file dattente leacutequilibrage decharge est bidirectionnel Les deux eacutequipements terminaux du lien ont besoin de participer pour obtenir uneefficaciteacute optimale

Imaginez la situation suivante

+-------+ eth1 +-------+ | |==========| | reacuteseau 1 -----| A | | B |---- reacuteseau 2 | |==========| | +-------+ eth2 +-------+

A et B sont des routeurs dont nous supposerons quils fonctionnent avec Linux pour le moment Si le trafic vadu reacuteseau 1 vers le reacuteseau 2 le routeur A a besoin de distribuer les paquets sur les deux liens allant vers B Lerouteur B a besoin decirctre configureacute pour laccepter On retrouve la mecircme chose dans le sens inverse pour lespaquets allant du reacuteseau 2 vers le reacuteseau 1 Le routeur B a besoin denvoyer les paquets agrave la fois sur eth1 eteth2

La reacutepartition est faite par un peacuteripheacuterique TEQL comme ceci (cela ne pouvait pas ecirctre plus simple)

tc qdisc add dev eth1 root teql0 tc qdisc add dev eth2 root teql0 ip link set dev teql0 up

Noubliez pas la commande ip link set up

Ceci a besoin decirctre fait sur les deux hocirctes Le peacuteripheacuterique teql0 est basiquement un distributeur tourniquetau-dessus de eth1 et eth2 pour lenvoi des paquets Aucune donneacutee narrive jamais agrave travers unpeacuteripheacuterique teql mais les donneacutees apparaissent sur eth1 et eth2

Nous navons pour le moment que les peacuteripheacuteriques et nous avons eacutegalement besoin dun routage correctLune des possibiliteacutes pour reacutealiser cela est dassigner un reacuteseau 31 sur chacun des liens ainsi que sur lepeacuteripheacuterique teql0

FIXME Avons nous besoin de quelque chose comme nobroadcast Un 31 est trop petit pour contenirune adresse reacuteseau et une adresse de diffusion Si cela ne marche pas comme preacutevu essayez un 30 etajustez les adresses IP Vous pouvez mecircme essayer sans attribuer dadresses agrave eth1 et eth2

Sur le routeur A

ip addr add dev eth1 1000031 ip addr add dev eth2 1000231 ip addr add dev teql0 1000431

Sur le routeur B

ip addr add dev eth1 1000131 ip addr add dev eth2 1000331 ip addr add dev teql0 1000531

Le routeur A devrait maintenant ecirctre capable de lancer un ping vers 10001 10003 et 10005 agrave

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

58 Chapitre 10 Eacutequilibrage de charge sur plusieurs interfaces

travers les deux liens physiques et le peacuteripheacuterique ltlt eacutegaliseacute gtgt Le routeur B devrait maintenant ecirctre capablede lancer un ping vers 10000 10002 et 10004 agrave travers les liens

Si cela marche le routeur A peut prendre 10005 comme route vers le reacuteseau 2 et le routeur B10004 comme route vers le reacuteseau 1 Pour le cas particulier ougrave le reacuteseau 1 est votre reacuteseau personnel etougrave le reacuteseau 2 est lInternet le routeur A peut prendre 10005 comme passerelle par deacutefaut

Avertissement

Rien nest aussi simple quil y paraicirct Les interfaces eth1 et eth2 sur les deux routeurs A et B ne doivent pasavoir la fonction de filtrage par chemin inverse activeacutee Dans le cas contraire ils rejetteront les paquetsdestineacutes agrave des adresses autres que les leurs

echo 0 gt procsysnetipv4confeth1rp_filter echo 0 gt procsysnetipv4confeth2rp_filter

Il y a un seacuterieux problegraveme avec le reacuteordonnancement des paquets Supposons que six paquets aient besoindecirctre envoyeacutes de A vers B Par exemple eth1 peut traiter les paquets 1 3 et 5 et eth2 les paquets 2 4 et 6Dans un monde ideacuteal le routeur B devrait recevoir ces paquets dans lordre 1 2 3 4 5 6 Mais il est plusprobable que le noyau les recevra comme ceci 2 1 4 3 6 5 Ce problegraveme va perturber TCPIP Alors quilny a pas de problegravemes pour les liens transportant diffeacuterentes sessions TCPIP vous ne serez pas capable deregrouper plusieurs liens et obtenir par ftp un simple fichier beaucoup plus rapidement agrave moins que lesystegraveme dexploitation envoyant ou recevant ne soit Linux En effet celui-ci nest pas facilement perturbeacute parde simples reacuteordonnancements

Cependant leacutequilibrage de charge est une bonne ideacutee pour de nombreuses applications

Chapitre 11 Netfilter et iproute - marquage depaquetsJusquagrave maintenant nous avons vu comment iproute travaille et netfilter a eacuteteacute mentionneacute plusieurs fois Vousne perdrez pas votre temps agrave consulter Rustys Remarkably Unreliable Guides Le logiciel Netfilter peut ecirctretrouveacute ici

Netfilter nous permet de filtrer les paquets ou de deacutesosser leurs en-tecirctes Une de ses fonctionnaliteacutesparticuliegraveres est de pouvoir marquer un paquet avec un nombre gracircce agrave loption --set-mark

Comme exemple la commande suivante marque tous les paquets destineacutes au port 25 en loccurrence lecourrier 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 chegravere au meacutegaoctet) et une qui est pluslente mais avec un tarif moins eacuteleveacute Nous souhaiterions que le courrier passe par la route la moins chegravere

Nous avons deacutejagrave marqueacute le paquet avec un 1 et nous allons maintenant renseigner la base de donneacutees de lapolitique de routage pour quelle agisse sur ces paquets marqueacutes

echo 201 mailout gtgt etciproute2rt_tables ip rule add fwmark 1 table mailout ip rule ls0 from all lookup local 32764 from all fwmark 1 lookup mailout

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 11 Netfilter et iproute - marquage de paquets 59

32766 from all lookup main 32767 from all lookup default

Nous allons maintenant geacuteneacuterer la table mailout avec une route vers la ligne lente mais peu coucircteuse

sbinip route add default via 1959698253 dev ppp0 table mailout

Voilagrave qui est fait Il se peut que nous voulions mettre en place des exceptions et il existe de nombreuxmoyens pour le faire Nous pouvons modifier la configuration de netfilter pour exclure certains hocirctes ou nouspouvons inseacuterer une regravegle avec une prioriteacute plus faible qui pointe sur la table principale pour nos hocirctes faisantexception

Nous pouvons aussi utiliser cette fonctionnaliteacute pour nous conformer aux bits TOS en marquant les paquetsavec diffeacuterents types de service et les nombres correspondants On creacutee ensuite les regravegles qui agissent sur cestypes de service De cette faccedilon on peut deacutedier une ligne RNIS aux connexions interactives

Inutile de le dire cela marche parfaitement sur un hocircte qui fait de la translation dadresse (NAT) autrementdit du masquerading

IMPORTANT Nous avons reccedilu une information selon laquelle MASQ et SNAT entrent en conflit avec lemarquage de paquets Rusty Russell lexplique dans ce courrier

Deacutesactivez le filtrage de chemin inverse pour que cela fonctionne correctement

Note pour marquer les paquets vous aurez besoin de valider quelques options du noyau

IP advanced router (CONFIG_IP_ADVANCED_ROUTER) [Yn]IP policy routing (CONFIG_IP_MULTIPLE_TABLES) [Yn]IP use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Yn]

Voir aussi la section intituleacutee Cache web transparent utilisant netfilter iproute2 ipchains et squid dansChapitre 15gt dans le chapitre Recettes de cuisinegt

Chapitre 12 Filtres avanceacutes pour la (re-)classificationdes paquetsComme expliqueacute dans la section sur les gestionnaires de mise en file dattente baseacutes sur des classes les filtressont neacutecessaires pour classifier les paquets dans nimporte laquelle des sous-files dattente Ces filtres sontappeleacutes agrave linteacuterieur des gestionnaires de mise en file dattente baseacutes sur des classes

Voici une liste incomplegravete des classificateurs disponibles

fwBase la deacutecision sur la faccedilon dont le pare-feu a marqueacute les paquets Ceci peut ecirctre un passage facile sivous ne voulez pas apprendre la syntaxe tc lieacutee aux filtres Voir le chapitre sur les gestionnaires demise en file dattente pour plus de deacutetails

u32Base la deacutecision sur les champs agrave linteacuterieur du paquet (cest-agrave-dire ladresse IP source etc)

routeBase la deacutecision sur la route que va emprunter le paquet

rsvp rsvp6Route les paquets en se basant sur RSVP Seulement utile sur les reacuteseaux que vous controcirclez Internetne respecte pas RSVP

tcindex

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

60 Chapitre 12 Filtres avanceacutes pour la (re-)classification des paquets

Utiliseacute par le gestionnaire de file dattente DSMARK Voir la section DSMARKgt

Notez quil y a geacuteneacuteralement plusieurs maniegraveres de classifier un paquet Cela deacutepend du systegraveme declassification que vous souhaitez utiliser

Les classificateurs acceptent en geacuteneacuteral quelques arguments communs Ils sont listeacutes ici pour des raisonspratiques

protocolLe protocole que ce classificateur acceptera Geacuteneacuteralement on nacceptera que le trafic IP Exigeacute

parentLe descripteur auquel ce classificateur est attacheacute Ce descripteur doit ecirctre une classe deacutejagrave existanteExigeacute

prioLa prioriteacute de ce classificateur Les plus petits nombres seront testeacutes en premier

handleCette reacutefeacuterence a plusieurs significations suivant les diffeacuterents filtres

Toutes les sections suivantes supposeront que vous essayez de mettre en forme le trafic allant vers HostACes sections supposeront que la classe racine a eacuteteacute configureacutee sur 1 et que la classe vers laquelle vousvoulez envoyer le trafic seacutelectionneacute est 11

Le classificateur u32

Le filtre u32 est le filtre le plus avanceacute dans limpleacutementation courante Il est entiegraverement baseacute sur des tablesde hachage ce qui le rend robuste quand il y a beaucoup de regravegles de filtrage

Dans sa forme la plus simple le filtre u32 est une liste denregistrements chacun consistant en deux champs un seacutelecteur et une action Les seacutelecteurs deacutecrits ci-dessous sont compareacutes avec le paquet IP traiteacute jusquagrave lapremiegravere correspondance et laction associeacutee est reacutealiseacutee Le type daction le plus simple serait de diriger lepaquet vers une classe CBQ deacutefinie

La ligne de commande du programme tc filter utiliseacutee pour configurer le filtre consiste en trois parties laspeacutecification du filtre un seacutelecteur et une action La speacutecification du filtre peut ecirctre deacutefinie comme

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

Le champ protocol deacutecrit le protocole sur lequel le filtre sera appliqueacute Nous ne discuterons que du cas duprotocole ip Le champ preference (priority peut ecirctre utiliseacute comme alternative) fixe la prioriteacute dufiltre que lon deacutefinit Cest important dans la mesure ougrave vous pouvez avoir plusieurs filtres (listes de regravegles)avec des prioriteacutes diffeacuterentes Chaque liste sera scruteacutee dans lordre dajout des regravegles Alors la liste avec laprioriteacute la plus faible (celle qui a le numeacutero de preacutefeacuterence le plus eacuteleveacute) sera traiteacutee Le champ parentdeacutefinit le sommet de larbre CBQ (par ex 10) auquel le filtre doit ecirctre attacheacute

Les options deacutecrites sappliquent agrave tous les filtres pas seulement agrave u32

Le seacutelecteur U32

Le seacutelecteur U32 contient la deacutefinition dun modegravele qui sera compareacute au paquet traiteacute Plus preacuteciseacutement ildeacutefinit quels bits doivent correspondre dans len-tecircte du paquet et rien de plus mais cette meacutethode simple esttregraves puissante Jetons un oeil sur lexemple suivant directement tireacute dun filtre assez complexe reacuteellementexistant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le classificateur u32 61

tc filter parent 1 protocol ip pref 10 u32 fh 800800 order 2048 key ht 800 bkt 0 flowid 13 match 0010000000ff0000 at 0

Pour linstant laissons de cocircteacute la premiegravere ligne tous ces paramegravetres deacutecrivent les tables de hachage du filtreFocalisons-nous sur la ligne de seacutelection contenant le mot-cleacute match Ce seacutelecteur fera correspondre lesen-tecirctes IP dont le second octet sera 0x10 (0010) Comme nous pouvons le deviner le nombre 00ff est lemasque de correspondance disant au filtre quels bits il doit regarder Ici cest 0xff donc loctetcorrespondra si cest exactement 0x10 Le mot-cleacute at signifie que la correspondance doit deacutemarrer audeacutecalage speacutecifieacute (en octets) - dans notre cas cest au deacutebut du paquet Traduisons tout cela en langagehumain le paquet correspondra si son champ Type de Service (TOS) a le bit ltlt faible deacutelai gtgt positionneacuteAnalysons une autre regravegle

tc filter parent 1 protocol ip pref 10 u32 fh 800803 order 2051 key ht 800 bkt 0 flowid 13 match 000000160000ffff at nexthdr+0

Loption nexthdr deacutesigne len-tecircte suivant encapsuleacute dans le paquet IP cest agrave dire celui du protocole de lacouche supeacuterieure La correspondance commencera eacutegalement au deacutebut du prochain en-tecircte Elle devrait avoirlieu dans le deuxiegraveme mot de 32 bits de len-tecircte Dans les protocoles TCP et UDP ce champ contient le portde destination du paquet Le nombre est donneacute dans le format big-endian cest-agrave-dire les bits les plussignificatifs en premier Il faut donc lire 0x0016 comme 22 en deacutecimal qui correspond au service SSH dans lecas de TCP Comme vous le devinez cette correspondance est ambigueuml sans un contexte et nous endiscuterons plus loin

Ayant compris tout cela nous trouverons le seacutelecteur suivant tregraves facile agrave lire matchc0a80100ffffff00 at 16 Ce que nous avons ici cest une correspondance de trois octets au 17egravemeoctet en comptant agrave partir du deacutebut de len-tecircte IP Cela correspond aux paquets qui ont une adresse dedestination quelconque dans le reacuteseau 192168124 Apregraves avoir analyseacute les exemples nous pouvonsreacutesumer ce que nous avons appris

Seacutelecteurs geacuteneacuteraux

Les seacutelecteurs geacuteneacuteraux deacutefinissent le modegravele le masque et le deacutecalage qui seront compareacutes au contenu dupaquet En utilisant les seacutelecteurs geacuteneacuteraux vous pouvez rechercher des correspondances sur nimporte quelbit de len-tecircte IP (ou des couches supeacuterieures) Ils sont quand mecircme plus difficiles agrave eacutecrire et agrave lire que lesseacutelecteurs speacutecifiques deacutecrits ci-dessus La syntaxe geacuteneacuterale des seacutelecteurs est

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

Un des mots-cleacutes u32 u16 ou u8 doit speacutecifier la longueur du modegravele en bits PATTERN et MASK serapporteront agrave la longueur deacutefinie par ce mot-cleacute Le paramegravetre OFFSET est le deacutecalage en octets pour ledeacutemarrage de la recherche de correspondance Si le mot-clef nexthdr+ est preacutesent le deacutecalage sera relatif agravelen-tecircte de la couche reacuteseau supeacuterieure

Quelques exemples

tc filter add dev ppp14 parent 10 prio 10 u32 match u8 64 0xff at 8 flowid 14

Un paquet correspondra agrave cette regravegle si sa ltlt dureacutee de vie gtgt (TTL) est de 64 TTL est le champ deacutemarrantjuste apregraves le 8egraveme octet de len-tecircte IP

Correspond agrave tous les paquets TCP ayant le bit ACK activeacute

tc filter add dev ppp14 parent 10 prio 10 u32 match ip protocol 6 0xff

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

62 Le seacutelecteur U32

match u8 0x10 0xff at nexthdr+13 flowid 13

Utilisez ceci pour deacuteterminer la preacutesence du bit ACK sur les paquets dune longueur infeacuterieure agrave 64 octets

Veacuterifie la preacutesence dun ACK protocol IP 6 longueur de len-tecircte IP 0x5(mots de 32 bits) longueur total IP 0x34 (ACK + 12 octets doptions TCP) TCP ack actif (bit 5 offset 33) tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 13

Seuls les paquets TCP sans charge utile et avec le bit ACK positionneacute veacuterifieront cette regravegle Ici nouspouvons voir un exemple dutilisation de deux seacutelecteurs le reacutesultat final eacutetant un ET logique de leur reacutesultatSi nous jetons un coup doeil sur un scheacutema de len-tecircte TCP nous pouvons voir que le bit ACK est le secondbit (0x10) du 14egraveme octet de len-tecircte TCP (at nexthdr+13) Comme second seacutelecteur si nous voulonsnous compliquer la vie nous pouvons eacutecrire match u8 0x06 0xff at 9 agrave la place du seacutelecteurspeacutecifique protocol tcp puisque 6 est le numeacutero du protocole TCP speacutecifieacute au 10egraveme octet de len-tecircteIP Dun autre cocircteacute dans cet exemple nous ne pourrons pas utiliser de seacutelecteur speacutecifique pour la premiegraverecorrespondance simplement parce quil ny a pas de seacutelecteur speacutecifique pour deacutesigner les bits TCP ACK

Le filtre ci dessous est une version modifieacutee du filtre preacutesenteacute au-dessus La diffeacuterence est quil ne veacuterifie pasla longueur de len-tecircte ip Pourquoi Car le filtre au-dessus ne marche que sur les systegravemes 32 bits

tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 match u16 0x0000 0xffc0 at 2 flowid 13

Les seacutelecteurs speacutecifiques

La table suivante contient la liste de tous les seacutelecteurs speacutecifiques que les auteurs de cette section ont trouveacutesdans le code source du programme tc Ils rendent simplement la vie plus facile en accroissant la lisibiliteacute de laconfiguration du filtre

FIXME emplacement de la table - la table est dans un fichier seacutepareacute selectorhtml

FIXME Cest encore en Polonais -(

FIXME doit ecirctre sgmliseacute

Quelques exemples

tc filter add dev ppp0 parent 10 prio 10 u32 match ip tos 0x10 0xff flowid 14

FIXME tcp dport match ne fonctionne pas comme deacutecrit ci-dessous

La regravegle ci-dessus correspondra agrave des paquets qui ont le champ TOS eacutegal agrave 0x10 Le champ TOS commenceau deuxiegraveme octet du paquet et occupe 1 octet ce qui nous permet deacutecrire un seacutelecteur geacuteneacuteral eacutequivalent match u8 0x10 0xff at 1 Cela nous donne une indication sur limpleacutementation du filtre u32 Les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seacutelecteurs geacuteneacuteraux 63

regravegles speacutecifiques sont toujours traduites en regravegles geacuteneacuterales et cest sous cette forme quelles sont stockeacutees enmeacutemoire par le noyau Cela amegravene agrave une autre conclusion les seacutelecteurs tcp et udp sont exactement lesmecircmes et cest la raison pour laquelle vous ne pouvez pas utiliser un simple seacutelecteur match tcp dport53 0xffff pour deacutesigner un paquet TCP envoyeacute sur un port donneacute Ce seacutelecteur deacutesigne aussi les paquetsUDP envoyeacutes sur ce port Vous devez eacutegalement speacutecifier le protocole avec la regravegle suivante

tc filter add dev ppp0 parent 10 prio 10 u32 match tcp dport 53 0xffff match ip protocol 0x6 0xff flowid 12

Le classificateur route

Ce classificateur filtre en se basant sur les informations des tables de routage Quand un paquet passant agravetravers les classes et en atteint une qui est marqueacutee avec le filtre route il divise le paquet en se basant surlinformation de la table de routage

tc filter add dev eth1 parent 10 protocol ip prio 100 route

Ici nous ajoutons un classificateur route sur le noeud parent 10 avec la prioriteacute 100 Quand un paquetatteint ce noeud (ce qui arrive immeacutediatement puisquil est racine) il consulte la table de routage et si uneentreacutee de la table correspond il envoie le paquet vers la classe donneacutee et lui donne une prioriteacute de 100Ensuite vous ajoutez lentreacutee de routage approprieacutee pour finalement activer les choses

Lastuce ici est de deacutefinir realm en se basant soit sur la destination soit sur la source Voici la faccedilon deproceacuteder

ip route add HostNetwork via Gateway dev Device realm RealmNumber

Par exemple nous pouvons deacutefinir notre reacuteseau de destination 192168100 avec le nombre realm eacutegalagrave 10

ip route add 19216810024 via 192168101 dev eth1 realm 10

Quand on ajoute des filtres route on peut utiliser les nombres realm pour repreacutesenter les reacuteseaux ou leshocirctes et speacutecifier quelle est la correspondance entre les routes et les filtres

tc filter add dev eth1 parent 10 protocol ip prio 100 route to 10 classid 110

La regravegle ci-dessus indique que les paquets allant vers le reacuteseau 192168100 correspondent agrave la classe110

Le filtre route peut aussi ecirctre utiliseacute avec les routes sources Par exemple il y a un sous-reacuteseau attacheacute agravenotre routeur Linux sur eth2

ip route add 1921682024 dev eth2 realm 2 tc filter add dev eth1 parent 10 protocol ip prio 100 route from 2 classid 12

Ici le filtre speacutecifie que les paquets venant du reacuteseau 19216820 (realm 2) correspondront agrave la classe12

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

64 Les seacutelecteurs speacutecifiques

Les filtres de reacuteglementation (Policing filters)

Pour reacutealiser des configurations encore plus compliqueacutees vous pouvez avoir des filtres qui analysent le traficagrave hauteur dune certaine bande passante Vous pouvez configurer un filtre pour quil cesse complegravetementlanalyse de tout le trafic au-dessus dun certain deacutebit ou pour quil nanalyse pas la bande passante deacutepassantun certain deacutebit

Ainsi si vous deacutecidez de reacuteglementer agrave 4mbits mais quun trafic de 5mbits est preacutesent vous pouvez cesserdanalyser lensemble des 5mbits ou seulement cesser danalyser le 1 mbits suppleacutementaire et envoyer 4mbits agrave la classe correspondante

Si la bande passante deacutepasse le deacutebit configureacute vous pouvez rejeter un paquet le reclassifier ou voir si unautre filtre y correspond

Techniques de reacuteglementation

Il y a essentiellement deux faccedilons de reacuteglementer Si vous avez compileacute le noyau avec Estimators celui-cipeut mesurer plus ou moins pour chaque filtre le trafic qui est passeacute Ces estimations ne sont pas coucircteuses entemps CPU eacutetant donneacute quil ne compte que 25 fois par seconde le nombre de donneacutees qui sont passeacutees etquil calcule le deacutebit agrave partir de lagrave

Lautre maniegravere utilise encore le Token Bucket Filter qui reacuteside agrave linteacuterieur du filtre cette fois Le TBF analyseseulement le trafic A HAUTEUR de la bande passante que vous avez configureacutee Si cette bande passante estdeacutepasseacutee seul lexcegraves est traiteacute par laction de deacutepassement de limite configureacutee

Avec lestimateur du noyau

Ceci est tregraves simple et il ny a quun seul paramegravetre avrate Soit le flux demeure sous avrate et le filtreclassifie le trafic vers la classe approprieacutee soit votre deacutebit le deacutepasse et laction indiqueacutee par deacutefaut laltlt reclassification gtgt est reacutealiseacutee dans ce cas

Le noyau utilise lalgorithme EWMA pour votre bande passante ce qui la rend moins sensible aux courtesrafales de donneacutees

Avec le Token Bucket Filter

Utilisez les paramegravetres suivants

buffermaxburstbull mtuminburstbull mpubull ratebull

Ceux-ci se comportent la plupart du temps de maniegravere identique agrave ceux deacutecrits dans la section Filtre agrave seau dejetonsgt Notez cependant que si vous configurez le mtu du filtre de reacuteglementation TBF trop bas aucunpaquet ne passera et le gestionnaire de mise en file dattente de sortie TBF ne fera que les ralentir

Une autre diffeacuterence est que la reacuteglementation ne peut que laisser passer ou jeter un paquet Il ne peut pas leretenir dans le but de le retarder

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Les filtres de reacuteglementation (Policing filters) 65

Actions de deacutepassement de limite (Overlimit actions)

Si votre filtre deacutecide quun deacutepassement de limite est atteint il peut mettre en oeuvre des ltlt actions gtgtActuellement trois actions sont disponibles

continueProvoque larrecirct de lanalyse du filtre bien que dautres filtres aient la possibiliteacute de le faire

dropCeci est une option tregraves feacuteroce qui supprime simplement le trafic exceacutedant un certain deacutebit Elle estsouvent employeacutee dans le Ingress policer et a des utilisations limiteacutees Par exemple si vous avez unserveur de noms qui seacutecroule sil traite plus de 5mbits de paquets alors vous pourrez dans ce casutiliser un filtre dentreacutee pour ecirctre sucircr quil ne traitera jamais plus de 5mbits

PassOKTransmettre le trafic Peut ecirctre utiliseacute pour mettre hors service un filtre compliqueacute tout en le laissanten place

reclassifyPermet le plus souvent une reclassification vers Best Effort Ceci est laction par deacutefaut

Exemples

Le seul vrai exemple connu est mentionneacute dans la section Proteacuteger votre machine des inondations SYNgt

FIXME Si vous avez deacutejagrave utiliseacute ceci partagez sil vous plaicirct votre expeacuterience avec nous

Filtres hacheacutes pour un filtrage massif tregraves rapide

Si vous avez besoin de milliers de regravegles par exemple dans le cas ougrave vous avez beaucoup de clients oudordinateurs tous avec des speacutecifications QoS diffeacuterentes vous pourrez constater que le noyau passebeaucoup de temps agrave analyser toutes ces regravegles

Par deacutefaut tous les filtres reacutesident dans une grande chaicircne qui est analyseacutee par ordre deacutecroissant des prioriteacutesSi vous avez 1000 regravegles 1000 controcircles peuvent ecirctre neacutecessaires pour deacuteterminer ce quil faut faire dunpaquet

La veacuterification irait plus vite sil y avait 256 chaicircnes avec chacune quatre regravegles et si vous pouviez reacutepartir lespaquets sur ces 256 chaicircnes afin que la bonne regravegle soit preacutesente

Ceci est rendu possible par le hachage Imaginons que vous ayez sur votre reacuteseau 1024 clients avec desmodems cacircble avec des adresses IP allant de 1200 agrave 123255 et que chacun doit avoir unclassement particulier par exemple ltlt pauvre gtgt ltlt moyen gtgt et ltlt bourrage gtgt Cela vous ferait alors1024 regravegles dans le genre

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123254 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123255 classid 12

Pour aller plus vite nous pouvons utiliser la derniegravere partie de ladresse IP comme ltlt cleacute de hachage gtgtNous obtenons alors 256 tables la premiegravere ressemblant agrave ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

66 Actions de deacutepassement de limite (Overlimit actions)

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1210 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1220 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1230 classid 12

La suivante commence comme ceci

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11

De cette maniegravere seules quatre recherches au plus sont neacutecessaires et deux en moyenne

La configuration est plutocirct compliqueacutee mais elle en vaut vraiment la peine du fait des nombreuses regraveglesNous creacuteons dabord un filtre racine puis une table avec 256 entreacutees

tc filter add dev eth1 parent 10 prio 5 protocol ip u32 tc filter add dev eth1 parent 10 prio 5 handle 2 u32 divisor 256

Nous ajoutons maintenant des regravegles dans la table preacuteceacutedemment creacuteeacutee

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 120123 flowid 11 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 121123 flowid 12 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 123123 flowid 13 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 124123 flowid 12

Ceci est lentreacutee 123 qui contient les correspondances pour 12013 121123 122123 et123123 qui les envoient respectivement vers 11 12 13 et 12 Notez que nous devons speacutecifiernotre seau de hachage en hexadeacutecimal 0x7b pour 123

Nous creacuteons ensuite un ltlt filtre de hachage gtgtqui dirige le trafic vers la bonne entreacutee de la table de hachage

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 800 match ip src 120016 hashkey mask 0x000000ff at 12 link 2

Ok certains nombres doivent ecirctre expliqueacutes La table de hachage par deacutefaut est appeleacutee 800 et tous lesfiltres deacutemarrent de lagrave Nous seacutelectionnons alors ladresse source qui est en position 12 13 14 et 15 danslen-tecircte IP et indiquons que seule la derniegravere partie nous inteacuteresse Ceci est envoyeacute vers la table de hachage2 qui a eacuteteacute creacuteeacutee plus tocirct

Cest plutocirct compliqueacute mais cela marche en pratique et les performances seront eacutepoustouflantes Notez quecet exemple pourrait ecirctre ameacutelioreacute pour que chaque chaicircne contienne un filtre ce qui repreacutesenterait le casideacuteal

Filtrer le trafic IPv6

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Filtres hacheacutes pour un filtrage massif tregraves rapide 67

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

La base de donneacutees des politiques de routage (RPDB) a remplaceacute le routage IPv4 et la structure dadressage agravelinteacuterieur du noyau Linux ce qui a permis les merveilleuses fonctionnaliteacutes deacutecrites dans ce HOWTOMalheureusement la pile IPv6 agrave linteacuterieur de Linux a eacuteteacute impleacutementeacutee en dehors de cette structure principaleBien quils partagent des fonctionnaliteacutes la structure RPDB de base ne participe pas dans ou avec lesstructures dadressage et de routage de IPv6

Ceci va sucircrement changer nous devons juste attendre un peu plus longtemps

FIXME Des ideacutees sur des personnes travaillant sur ce sujet Planifications

Marquer les paquets IPv6 en utilisant ip6tables

ip6tables est capable de marquer un paquet et de lui assigner un numeacutero

ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Ceci ne va cependant pas nous aider dans la mesure ougrave le paquet ne passera pas par la structure RPDB

Utiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

IPv6 est normalement encapsuleacute dans un tunnel SIT et transporteacute agrave travers les reacuteseaux IPv4 Voir la sectionsur le tunnel IPv6 pour de plus amples informations quant agrave la configuration dun tel tunnel Ceci nous permetde filtrer les paquets IPv4 en consideacuterant les paquets IPv6 comme la charge utile

Le filtre suivant repegravere tous les paquets IPv6 encapsuleacutes dans des paquets IPv4

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff flowid 4242

Continuons Supposons que les paquets IPv6 soient envoyeacutes gracircce agrave des paquets IPv4 et que ces paquets nontpas doptions On pourrait utiliser le filtre suivant pour repeacuterer ICMPv6 dans IPv6 dans IPv4 nayant aucuneoption 0x3a (58) est le type du champ en-tecircte suivant pour ICMPv6

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3a 0xff at 26 flowid 4242

Repeacuterer ladresse de destination IPv6 neacutecessite un peu plus de travail Le filtre suivant repegravere ladresse dedestination 3ffe202cffff322304ffffe08358d

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3f 0xff at 44 match u8 0xfe 0xff at 45 match u8 0x20 0xff at 46 match u8 0x2c 0xff at 47 match u8 0xff 0xff at 48 match u8 0xff 0xff at 49 match u8 0x00 0xff at 50 match u8 0x32 0xff at 51 match u8 0x02 0xff at 52

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

68 Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

match u8 0x30 0xff at 53 match u8 0x4f 0xff at 54 match u8 0xff 0xff at 55 match u8 0xfe 0xff at 56 match u8 0x08 0xff at 57 match u8 0x35 0xff at 58 match u8 0x8d 0xff at 59 flowid 1013

La mecircme technique peut ecirctre utiliseacutee pour repeacuterer les reacuteseaux Par exemple 2001

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x20 0xff at 28 match u8 0x01 0xff at 29 flowid 1013

Chapitre 13 Paramegravetres reacuteseau du noyauLe noyau utilise de nombreux paramegravetres qui peuvent ecirctre ajusteacutes en diffeacuterentes circonstances Bien quecomme dhabitude les paramegravetres par deacutefaut conviennent agrave 99amppercnt des installations nous ne pourrionspas appeler ce document ltlt HOWTO avanceacute gtgt sans en dire un mot

Les eacuteleacutements inteacuteressants sont dans procsysnet jetez-y un oeil Tout ne sera pas documenteacute ici audeacutepart mais nous y travaillons

En attendant vous pouvez jeter un oeil dans les sources du noyau Linux et lire le fichierDocumentationfilesystemsproctxt La plupart des fonctionnaliteacutes y sont expliqueacutees

Filtrage de Chemin Inverse (Reverse Path Filtering)

Par deacutefaut les routeurs routent tout mecircme les paquets qui visiblement nappartiennent pas agrave votre reacuteseau Unexemple courant est lespace des adresses IP priveacutees seacutechappant sur Internet Si vous avez une interface avecune route pour 1959696024 dessus vous ne vous attendrez pas agrave voir arriver des paquets venant de21264941

Beaucoup dutilisateurs veulent deacutesactiver cette fonctionnaliteacute Les deacuteveloppeurs du noyau ont permis de lefaire facilement Il y a des fichiers dans proc ougrave vous pouvez ordonner au noyau de le faire pour vous Lameacutethode est appeleacutee ltlt Filtrage par Chemin Inverse gtgt (Reverse Path Filtering) Pour faire simple si lareacuteponse agrave ce paquet ne sort pas par linterface par laquelle il est entreacute alors cest un paquet ltlt bogueacute gtgt et ilsera ignoreacute

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

for i in procsysnetipv4confrp_filter dogt echo 2 gt $i gt done

En reprenant lexemple du deacutebut si un paquet arrivant sur le routeur Linux par eth1 preacutetend venir du reacuteseauBureau+FAI il sera eacutelimineacute De mecircme si un paquet arrivant du reacuteseau Bureau preacutetend ecirctre de quelque part agravelexteacuterieur du pare-feu il sera eacutegalement eacutelimineacute

Ce qui est preacutesenteacute ci-dessus est le filtrage de chemin inverse complet Le parameacutetrage par deacutefaut filtreseulement sur les adresses IP des reacuteseaux directement connecteacutes Ce parameacutetrage par deacutefaut est utiliseacute parceque le filtrage complet eacutechoue dans le cas dun routage asymeacutetrique (ougrave il y a des paquets arrivant par un

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 13 Paramegravetres reacuteseau du noyau 69

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 reacuteseau Les donneacutees descendent vers la parabole satellite et les reacuteponses repartentpar des lignes terrestres normales)

Si cette exception sapplique dans votre cas (vous devriez ecirctre au courant) vous pouvez simplement deacutesactiverle rpamplowbarfilter sur linterface darriveacutee des donneacutees satellite Si vous voulez voir si des paquetssont eacutelimineacutes le fichier logamplowbarmartians du mecircme reacutepertoire indiquera au noyau de les enregistrerdans votre syslog

echo 1 gtprocsysnetipv4confltinterfacenamegtlog_martians

FIXME Est-ce que la configuration des fichiers dans confamplcubdefaultallamprcub suffit - martijn

Configurations obscures

Bon il y a beaucoup de paramegravetres qui peuvent ecirctre modifieacutes Nous essayons de tous les lister Voir aussi unedocumentation partielle dans Documentationip-sysctltxt

Certaines de ces configurations ont des valeurs par deacutefaut diffeacuterentes suivant que vous reacutepondez Yes ou No agravela question Configure as router and not host lors de la compilation du noyau

Oskar Andreasson a une page sur ces options et il apparaicirct quelle soit meilleure que la notre De ce fait allezeacutegalement voir httpipsysctl-tutorialfrozentuxnet

ipv4 geacuteneacuterique

En remarque geacuteneacuterale les fonctionnaliteacutes de limitation de deacutebit ne fonctionnent pas sur linterfaceloopback Nessayez donc pas de les tester localement Les limites sont exprimeacutees en ltlt tic-tac gtgt (jiffies)et elles utilisent obligatoirement le Token Bucket Filter mentionneacute plus tocirct

amplsqbNdT le terme jiffies deacutesigne un mouvement reacutegulier faisant reacutefeacuterence au ltlt tic-tac gtgt dune horlogeDans le noyau lui-mecircme une variable globale nommeacutee jiffies est increacutementeacutee agrave chaque interruptiondhorloge]

Le noyau a une horloge interne qui tourne agrave HZ impulsions (ou jiffies) par seconde Sur Intel HZ est la plupartdu temps eacutegale agrave 100 Donc configurer un fichier amplowbarrate agrave disons 50 autorise 2 paquets parseconde Le Token Bucket Filter est eacutegalement configureacute pour autoriser une rafale de donneacutees de 6 paquets auplus si suffisamment de jetons ont eacuteteacute gagneacutes

Plusieurs eacuteleacutements de la liste suivante proviennent du fichierusrsrclinuxDocumentationnetworkingip-sysctltxt eacutecrit par Alexey Kuznetsovltkuznetms2inracrugt et Andi Kleen ltakmucdegt

procsysnetipv4icmpamplowbardestunreachamplowbarrateSi le noyau deacutecide quil ne peut pas deacutelivrer un paquet il le rejettera et enverra agrave la source du paquetun ICMP notifiant ce rejet

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarallNagit en aucun cas comme eacutecho pour les paquets Ne configurez pas ceci par deacutefaut Cependant sivous ecirctes utiliseacute comme relais dans une attaque de Deacuteni de Services cela peut ecirctre utile

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarbroadcastsamplsqbUtileamprsqb

Si vous pinguez ladresse de diffusion dun reacuteseau tous les hocirctes sont senseacutes reacutepondre Cela permet decoquettes attaques de deacuteni de service Mettez cette valeur agrave 1 pour ignorer ces messages de diffusion

procsysnetipv4icmpamplowbarechoreplyamplowbarrate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

70 Filtrage de Chemin Inverse (Reverse Path Filtering)

Le deacutebit auquel les reacuteponses echo sont envoyeacutees aux destinatairesprocsysnetipv4icmpamplowbarignoreamplowbarbogusamplowbarerroramplowbarresponses

Configurer ceci pour ignorer les erreurs ICMP dhocirctes du reacuteseau reacuteagissant mal aux trames envoyeacuteesvers ce quils perccediloivent comme ladresse de diffusion

procsysnetipv4icmpamplowbarparamprobamplowbarrateUn message ICMP relativement peu connu qui est envoyeacute en reacuteponse agrave des paquets qui ont desen-tecirctes IP ou TCP erroneacutes Avec ce fichier vous pouvez controcircler le deacutebit auquel il est envoyeacute

procsysnetipv4icmpamplowbartimeexceedamplowbarrateVoici la ceacutelegravebre cause des ltlt eacutetoiles Solaris gtgt dans traceroute Limite le nombre de messages ICMPTime Exceeded envoyeacutes

procsysnetipv4igmpamplowbarmaxamplowbarmembershipsNombre maximal de sockets igmp (multidistribution) en eacutecoute sur lhocircte FIXME Est-ce vrai

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmaxtimeFIXME Ajouter une petite explication sur le stockage des partenaires internet (inet peer) Intervallede temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris en compte lorsdune faible (voire inexistante) utilisation du pool Mesureacute en jiffies amplsqbNdT Le pool deacutesigne icila liste des adresses IP des partenaires internet]

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmintimeIntervalle de temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris encompte lors dune utilisation intensive du pool Mesureacute en jiffies

procsysnetipv4inetamplowbarpeeramplowbarmaxttlDureacutee de conservation maximale des enregistrements Les entreacutees non utiliseacutees expireront au bout decet intervalle de temps (cest-agrave-dire quand le nombre dentreacutees dans le pool est tregraves petit) Mesureacute enjiffies

procsysnetipv4inetamplowbarpeeramplowbarminttlDureacutee de conservation minimale des enregistrements Devrait ecirctre suffisante pour prendre en comptele temps de vie des fragments sur lhocircte qui doit reacuteassembler les paquets Cette dureacutee minimale estgarantie si le nombre deacuteleacutements dans le pool est infeacuterieur au seuil fixeacute parinetamplowbarpeeramplowbarthreshold

procsysnetipv4inetamplowbarpeeramplowbarthresholdTaille approximative de lespace de stockage des partenaires internet A partir de ce seuil les entreacuteessont effaceacutees Ce seuil deacutetermine la dureacutee de vie des entreacutees ainsi que les intervalles de temps entredeux deacuteclenchements du ramasse-miettes Plus il y a dentreacutees plus le temps de vie est faible et pluslintervalle du ramasse-miettes est faible

procsysnetipv4ipamplowbarautoconfigCe fichier contient la valeur 1 si lhocircte a reccedilu sa configuration IP par RARP BOOTP DHCP ou unmeacutecanisme similaire Autrement il contient la valeur zeacutero

procsysnetipv4ipamplowbardefaultamplowbarttlDureacutee de vie (TTL) des paquets Fixer agrave la valeur sucircre de 64 Augmentez-la si vous avez un reacuteseauimmense mais pas ltlt pour samuser gtgt les boucles sans fin dun mauvais routage sont plusdangereuses si le TTL est eacuteleveacute Vous pouvez mecircme envisager de diminuer la valeur dans certainescirconstances

procsysnetipv4ipamplowbardynaddrVous aurez besoin de positionner cela si vous utilisez la connexion agrave la demande avec une adressedinterface dynamique Une fois que votre interface a eacuteteacute configureacutee toutes les sockets TCP locauxqui nont pas eu de paquets de reacuteponse seront retraiteacutees pour avoir la bonne adresse Cela reacutesout leproblegraveme poseacute par une connexion deacutefectueuse ayant configureacute une interface suivie par une deuxiegravemetentative reacuteussie (avec une adresse IP diffeacuterente)

procsysnetipv4ipamplowbarforwardLe noyau doit-il essayer de transmettre les paquets Deacutesactiveacute par deacutefaut

procsysnetipv4ipamplowbarlocalamplowbarportamplowbarrangeIntervalle des ports locaux pour les connexions sortantes En fait assez petit par deacutefaut 1024 agrave 4999

procsysnetipv4ipamplowbarnoamplowbarpmtuamplowbardiscConfigurez ceci si vous voulez deacutesactiver la deacutecouverte du MTU de chemin une technique pour

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 71

deacuteterminer le plus grand MTU possible sur votre chemin Voir aussi la section sur la deacutecouverte duMTU de chemin dans le chapitre Recettes de cuisinegt

procsysnetipv4ipfragamplowbarhighamplowbarthreshMeacutemoire maximum utiliseacutee pour reacuteassembler les fragments IP Quandipfragamplowbarhighamplowbarthresh octets de meacutemoire sont alloueacutes pour cela legestionnaire de fragments rejettera les paquets jusquagrave ce queipfragamplowbarlowamplowbarthresh soit atteint

procsysnetipv4ipamplowbarnonlocalamplowbarbindConfigurez ceci si vous voulez que vos applications soient capables de se lier agrave une adresse quinappartient pas agrave une interface de votre systegraveme Ceci peut ecirctre utile quand votre machine est sur unlien non-permanent (ou mecircme permanent) Vos services sont donc capables de deacutemarrer et de se lier agraveune adresse speacutecifique quand votre lien est inactif

procsysnetipv4ipfragamplowbarlowamplowbarthreshMeacutemoire minimale utiliseacutee pour reacuteassembler les fragments IP

procsysnetipv4ipfragamplowbartimeTemps en secondes du maintien dun fragment IP en meacutemoire

procsysnetipv4tcpamplowbarabortamplowbaronamplowbaroverflowUne option booleacuteenne controcirclant le comportement dans le cas de nombreuses connexions entrantesQuand celle-ci est activeacutee le noyau envoie rapidement des paquets RST quand un service estsurchargeacute

procsysnetipv4tcpamplowbarfinamplowbartimeoutTemps de maintien de leacutetat FIN-WAIT-2 pour un socket dans le cas ougrave il a eacuteteacute fermeacute de notre cocircteacuteLe partenaire peut ecirctre deacutefectueux et ne jamais avoir fermeacute son cocircteacute ou mecircme mourir de maniegravereinattendue La valeur par deacutefaut est de 60 secondes La valeur usuelle utiliseacutee dans le noyau 22 eacutetaitde 180 secondes Vous pouvez la remettre mais rappelez vous que si votre machine a un serveurWEB surchargeacute vous risquez de deacutepasser la meacutemoire avec des kilotonnes de sockets morts Lessockets FIN-WAIT2 sont moins dangereux que les sockets FIN-WAIT1 parce quils consomment aumaximum 15K de meacutemoire mais ils ont tendance agrave vivre plus longtemps Cftcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarkeepaliveamplowbartimeDureacutee entre lenvoi de deux messages keepalive quand loption keepalive est activeacutee Par deacutefaut 2heures

procsysnetipv4tcpamplowbarkeepaliveamplowbarintvlA quelle freacutequence les sondes sont retransmises lorsquil ny a pas eu acquittement de sonde Pardeacutefaut 75 secondes

procsysnetipv4tcpamplowbarkeepaliveamplowbarprobesCombien de sondes TCP keepalive seront envoyeacutees avant de deacutecider que la connexion est briseacutee Pardeacutefaut 9 En multipliant par tcpamplowbarkeepaliveamplowbarintvl cela donne le tempspendant lequel un lien peut ecirctre actif sans donner de reacuteponses apregraves lenvoi dun keepalive

procsysnetipv4tcpamplowbarmaxamplowbarorphansNombre maximum de sockets TCP qui ne sont pas relieacutes agrave un descripteur de fichier utilisateur geacutereacutepar le systegraveme Si ce nombre est deacutepasseacute les connexions orphelines sont immeacutediatement reacuteinitialiseacuteeset un avertissement est envoyeacute Cette limite existe seulement pour preacutevenir des attaques de deacuteni deservices simples Vous ne devez pas compter sur ceci ou diminuer cette limite artificiellement maisplutocirct laugmenter (probablement apregraves avoir augmenteacute la meacutemoire) si les conditions du reacuteseaureacuteclament plus que cette valeur par deacutefaut et reacutegler vos services reacuteseau pour quils deacutetruisent sanstarder ce type deacutetat Laissez-moi vous rappeler encore que chaque orphelin consomme jusquagraveenviron 64K de meacutemoire non swappable

procsysnetipv4tcpamplowbarorphanamplowbarretriesCombien dessais avant de deacutetruire une connexion TCP fermeacutee par notre cocircteacute La valeur par deacutefaut de7 correspond agrave un temps denviron 50s agrave 16 min suivant le RTO Si votre machine supporte un serveurWeb vous pouvez envisager de baisser cette valeur dans la mesure ougrave de tels sockets peuventconsommer des ressources significatives Cf tcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarmaxamplowbarsynamplowbarbacklog

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

72 ipv4 geacuteneacuterique

Nombre maximum de requecirctes dune connexion meacutemoriseacutee qui navait pas encore reccedilu daccuseacute dereacuteception du client connecteacute La valeur par deacutefaut est de 1024 pour des systegravemes avec plus de 128 Mode meacutemoire et 128 pour des machines avec moins de meacutemoire Si un serveur souffre de surchargeessayez daugmenter ce nombre Attention Si vous positionnez une valeur supeacuterieure agrave 1024 il seraitpreacutefeacuterable de changer TCPamplowbarSYNQamplowbarHSIZE dans le fichierincludenettcph pour garder TCPamplowbarSYNQamplowbarHSIZE16 lt=tcpamplowbarmaxamplowbarsynamplowbarbacklog et de recompiler de noyau

procsysnetipv4tcpamplowbarmaxamplowbartwamplowbarbucketsNombre maximum de sockets timewait geacutereacutees par le systegraveme simultaneacutement Si ce nombre estdeacutepasseacute le socket timewait est immeacutediatement deacutetruit et un message davertissement est envoyeacuteCette limite nexiste que pour preacutevenir des attaques de deacuteni de services simples Vous ne devez pasdiminuer cette limite artificiellement mais plutocirct laugmenter (probablement apregraves avoir augmenteacute lameacutemoire) si les conditions du reacuteseau reacuteclament plus que cette valeur par deacutefaut

procsysnetipv4tcpamplowbarretransamplowbarcollapseCompatibiliteacute bug agrave bug avec certaines imprimantes deacutefectueuses Tentative denvoi de plus grospaquets lors de la retransmission pour contourner le bug de certaines piles TCP

procsysnetipv4tcpamplowbarretries1Combien dessais avant de deacutecider que quelque chose est erroneacute et quil est neacutecessaire dinformer decette suspicion la couche reacuteseau La valeur minimale du RFC est de 3 Cest la valeur par deacutefaut ellecorrespond agrave un temps denviron 3 sec agrave 8 min suivant le RTO

procsysnetipv4tcpamplowbarretries2Combien dessais avant de deacutetruire une connexion TCP active Le RFC 1122 preacutecise que la limite nedevrait pas deacutepasser 100 secondes Cest un nombre trop petit La valeur par deacutefaut de 15 correspond agraveun temps de environ 13 agrave 30 minutes suivant le RTO

procsysnetipv4tcpamplowbarrfc1337Ce booleacuteen active un rectificatif pour ltlt lassassinat hasardeux des time-wait dans tcp gtgt deacutecrit dansle RFC 1337 Sil est activeacute le noyau rejette les paquets RST pour les sockets agrave leacutetat de time-waitPar deacutefaut 0

procsysnetipv4tcpamplowbarsackUtilise un ACK seacutelectif qui peut ecirctre utiliseacute pour signifier que des paquets speacutecifiques sont manquantFacilite ainsi une reacutecupeacuteration rapide

procsysnetipv4tcpamplowbarstdurgUtilise linterpreacutetation du RFC Host Requirements du champ TCP pointeur urgent La plupart deshocirctes utilisent la vieille interpreacutetation BSD Donc si vous activez cette option il se peut que Linux necommunique plus correctement avec eux Par deacutefaut FALSE (FAUX)

procsysnetipv4tcpamplowbarsynamplowbarretriesNombre de paquets SYN que le noyau enverra avant de tenter leacutetablissement dune nouvelleconnexion

procsysnetipv4tcpamplowbarsynackamplowbarretriesPour ouvrir lautre cocircteacute de la connexion le noyau envoie un SYN avec un ACK superposeacute(piggyback) pour accuser reacuteception du SYN preacuteceacutedemment envoyeacute Cest la deuxiegraveme partie de lapoigneacutee de main agrave trois voies (threeway handshake) Cette configuration deacutetermine le nombre depaquets SYN+ACK agrave envoyer avant que le noyau nabandonne la connexion

procsysnetipv4tcpamplowbartimestampsLes estampillages horaires sont utiliseacutes entre autres pour se proteacuteger du rebouclage des numeacuteros deseacutequence On peut concevoir quun lien agrave 1 gigabit puisse de nouveau rencontrer un numeacutero deseacutequence preacuteceacutedent avec une valeur hors-ligne parcequil eacutetait dune geacuteneacuteration preacuteceacutedenteLestampillage horaire permet de reconnaicirctre cet ltlt ancien paquet gtgt

procsysnetipv4tcpamplowbartwamplowbarrecycleMise en place du recyclage rapide des sockets TIME-WAIT La valeur par deacutefaut est 1 Celle-ci nedevrait pas ecirctre changeacutee sans le conseildemande dexperts techniques

procsysnetipv4tcpamplowbarwindowamplowbarscalingTCPIP autorise normalement des fenecirctres jusquagrave une taille de 65535 octets Pour des reacuteseauxvraiment rapides cela peut ne pas ecirctre assez Les options windows scaling autorisent des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 73

fenecirctres jusquau gigaoctet ce qui est adapteacute pour les produits agrave grande bande passante

Configuration des peacuteripheacuteriques

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4confDEVacceptamplowbarredirectsSi un routeur deacutecide que vous lutilisez agrave tort (cest-agrave-dire quil a besoin de reacute-envoyer votre paquet surla mecircme interface) il vous enverra un message ICMP Redirect Cela preacutesente cependant un petitrisque pour la seacutecuriteacute et vous pouvez le deacutesactiver ou utiliser les redirections seacutecuriseacutees

procsysnetipv4confDEVacceptamplowbarsourceamplowbarroutePlus vraiment utiliseacute On lutilisait pour ecirctre capable de donner agrave un paquet une liste dadresses IP agravevisiter Linux peut ecirctre configureacute pour satisfaire cette option IP

procsysnetipv4confDEVbootpamplowbarrelayAccepte les paquets avec une adresse source 0bcd et des adresses destinations qui ne correspondentni agrave cet hocircte ni au reacuteseau local On suppose quun deacutemon de relais BOOTP interceptera et transmettrade tels paquets

La valeur par deacutefaut est 0 puisque cette fonctionnaliteacute nest pas encore impleacutementeacutee (noyau 2212)procsysnetipv4confDEVforwarding

Active ou deacutesactive la transmission IP sur cette interfaceprocsysnetipv4confDEVlogamplowbarmartians

Voir la section sur le Filtrage de Chemin Inversegtprocsysnetipv4confDEVmcamplowbarforwarding

Si vous faites de la transmission multidistribution (multicast) sur cette interfaceprocsysnetipv4confDEVproxyamplowbararp

Si vous configurez ceci agrave 1 cet interface reacutepondra aux requecirctes ARP pour les adresses que le noyaudoit router Peut ecirctre tregraves utile si vous mettez en place des ltlt pseudo ponts ip gtgt Prenez bien gardedavoir des masques de sous-reacuteseau corrects avant dactiver cette option Faites eacutegalement attentionque le rp_filter agisse aussi sur le requecirctes ARP

procsysnetipv4confDEVrpamplowbarfilterVoir la section sur le Filtrage de Chemin Inversegt

procsysnetipv4confDEVsecureamplowbarredirectsAccepte les messages de redirection ICMP seulement pour les passerelles indiqueacutees dans la liste despasserelles par deacutefaut Activeacute par deacutefaut

procsysnetipv4confDEVsendamplowbarredirectsActive la possibiliteacute denvoyer les messages de redirections mentionneacutees ci-dessus

procsysnetipv4confDEVsharedamplowbarmediaSi cela nest pas activeacute le noyau ne considegravere pas que diffeacuterents sous-reacuteseaux peuvent communiquerdirectement sur cette interface La configuration par deacutefaut est Yes

procsysnetipv4confDEVtagFIXME agrave remplir

Politique de voisinage

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4neighDEVanycastamplowbardelayValeur maximum du deacutelai aleacuteatoire de reacuteponse exprimeacute en jiffies (1100 sec) aux messages desollicitation des voisins Nest pas encore impleacutementeacute (Linux ne possegravede pas encore le supportanycast)

procsysnetipv4neighDEVappamplowbarsolicit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

74 Configuration des peacuteripheacuteriques

Deacutetermine le nombre de requecirctes agrave envoyer au deacutemon ARP de lespace utilisateur Utilisez 0 pourdeacutesactiver

procsysnetipv4neighDEVbaseamplowbarreachableamplowbartimeUne valeur de base utiliseacutee pour le calcul du temps aleacuteatoire daccegraves comme speacutecifieacute dans leRFC2461

procsysnetipv4neighDEVdelayamplowbarfirstamplowbarprobeamplowbartimeDeacutelai avant de tester pour la premiegravere fois si le voisin peut ecirctre atteint (voirgcamplowbarstaleamplowbartime)

procsysnetipv4neighDEVgcamplowbarstaleamplowbartimeDeacutetermine la freacutequence agrave laquelle on doit veacuterifier les vieilles entreacutees ARP Si une entreacutee est obsolegraveteelle devra de nouveau ecirctre reacutesolue (ce qui est utile quand une adresse IP a eacuteteacute attribueacutee agrave une autremachine) Si ucastamplowbarsolicit est supeacuterieur agrave 0 alors on essaie dabord denvoyer unpaquet ARP directement agrave lhocircte connu Si cela eacutechoue et que mcastamplowbarsolicit estsupeacuterieur agrave 0 alors une requecircte ARP est multidiffuseacutee

procsysnetipv4neighDEVlocktimeUne entreacutee ARP nest remplaceacutee par une nouvelle que si lancienne est au moins preacutesente depuislocktime Cela eacutevite trop deacutecriture dans le cache

procsysnetipv4neighDEVmcastamplowbarsolicitNombre maximum dessais conseacutecutifs pour une sollicitation multicast

procsysnetipv4neighDEVproxyamplowbardelayTemps maximum (le temps reacuteel est aleacuteatoire et compris entre 0 et proxytime) avant de reacutepondre agraveune requecircte ARP pour laquelle nous avons une entreacutee de proxy ARP Peut ecirctre utiliseacute dans certainscas pour se preacutemunir des inondations reacuteseaux

procsysnetipv4neighDEVproxyamplowbarqlenLongueur maximale de la file dattente du temporisateur de cache arp en attente (Voirproxyamplowbardelay)

procsysnetipv4neighDEVretransamplowbartimeLe temps exprimeacute en jiffies (1100 sec) entre deux requecirctes ARP Utiliseacute pour la reacutesolutiondadresses et pour deacuteterminer si un voisin est inaccessible

procsysnetipv4neighDEVucastamplowbarsolicitNombre maximum de requecirctes ARP unicast

procsysnetipv4neighDEVunresamplowbarqlenLongueur maximum de la file dattente pour la requecircte ARP en cours le nombre de paquets qui sontaccepteacutes des autres couches pendant la reacutesolution ARP dune adresse

Internet QoS Architectures and Mechanisms for Quality of Service Zheng Wang ISBN 1-55860-608-4Livre traitant des sujets lieacutes agrave la qualiteacute de service Bien pour comprendre les concepts de base

Configuration du routage

procsysnetipv4routeerroramplowbarburstCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarburst est grand moins il yaura de messages Erroramplowbarburst controcircle le moment ougrave les messages seront supprimeacutesLes configurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeerroramplowbarcostCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarcost est grand moins il yaura de messages erroramplowbarburst controcircle le moment ougrave les messages seront jeteacutes Lesconfigurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeflushLeacutecriture dans ce fichier provoque la vidange du cache du routage

procsysnetipv4routegcamplowbarelasticityValeurs qui controcirclent la freacutequence et le comportement de lalgorithme garbage collection du cachede routage Ceci peut ecirctre important en cas de deacutefaut Au moins gcamplowbartimeout secondes

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de voisinage 75

seacutecouleront avant que le noyau ne passe agrave une autre route si la preacuteceacutedente nest plus opeacuterationnelleConfigureacute par deacutefaut agrave 300 Diminuez cette valeur si vous voulez passer plus rapidement ce type deproblegraveme

Voir aussi ce message par Ard van Breemenprocsysnetipv4routegcamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarminamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarthresh

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbartimeout

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routemaxamplowbardelay

Deacutelai dattente pour la vidange du cache du routageprocsysnetipv4routemaxamplowbarsize

Taille maximum du cache de routage Les vieilles entreacutees seront purgeacutees quand le cache aura atteintcette taille

procsysnetipv4routeminamplowbaradvamplowbarmssFIXME agrave remplir

procsysnetipv4routeminamplowbardelayDeacutelai dattente pour vider le cache de routage

procsysnetipv4routeminamplowbarpmtuFIXME agrave remplir

procsysnetipv4routemtuamplowbarexpiresFIXME agrave remplir

procsysnetipv4routeredirectamplowbarloadFacteurs qui deacuteterminent si plus de redirections ICMP doivent ecirctre envoyeacutees agrave un hocircte speacutecifiqueAucune redirection ne sera envoyeacutee une fois que la limite de charge (load limit) ou que le nombremaximum de redirections aura eacuteteacute atteint

procsysnetipv4routeredirectamplowbarnumberVoir procsysnetipv4routeredirectamplowbarload

procsysnetipv4routeredirectamplowbarsilenceTemporisation pour les redirections Au dela de cette peacuteriode les redirections seront de nouveauenvoyeacutees mecircme si elles ont eacuteteacute stoppeacutees parce que la charge ou le nombre limite a eacuteteacute atteint

Chapitre 14 Gestionnaires de mise en file dattenteavanceacutes amp moins communsSi vous constatez que vous avez des besoins qui ne sont pas geacutereacutes par les files dattente citeacutees preacuteceacutedemmentle noyau contient quelques autres files dattente plus speacutecialiseacutees mentionneacutees ici

bfifopfifo

Ces files dattente sans classes sont plus simples que pfifoamplowbarfast dans la mesure ougrave elles nontpas de bandes internes tout le trafic eacutetant vraiment eacutequivalent Elles ont cependant lavantage important dereacutealiser des statistiques Donc mecircme si vous navez pas besoin de mise en forme ou de donner une prioriteacutevous pouvez employer ce gestionnaire pour deacuteterminer larrieacutereacute (backlog) de votre interface

pfifo mesure en paquets et bfifo en octets

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

76 Chapitre 14 Gestionnaires de mise en file dattente avanceacutes amp moins communs

Paramegravetres amp usage

limitSpeacutecifie la taille de la file dattente Mesureacutee en octets pour bfifo et en paquets pour pfifo Pardeacutefaut correspond agrave des paquets de taille eacutegale au paramegravetre txqueuelen de linterface (voir lechapitre pfifo_fastgt) ou txqueuelenmtu octets pour bfifo

Algorithme Clark-Shenker-Zhang (CSZ)

Ceci est si theacuteorique que mecircme Alexey (lauteur principal de CBQ) preacutetend ne pas le comprendre De sonpropre avis

David D Clark Scott Shenker and Lixia Zhang Supporting Real-Time Applications in anIntegrated Services Packet Network Architecture and Mechanism

Comme je le comprends lideacutee principale est de creacuteer des flux WFQ pour chaque servicegaranti et dallouer le reste de la bande passante au flux factice appeleacute flow-0 Le Flux-0inclut le trafic de service preacutedictif et le trafic best-effort Il est traiteacute par un ordonnanceur deprioriteacute qui alloue la bande passante de plus grande prioriteacute aux services preacutedictifs et le resteaux paquets best-effort

Notez que dans CSZ les flux ne sont PAS limiteacutes agrave leur bande passante On suppose que leflux a passeacute le controcircle dadmission agrave la frontiegravere du reacuteseau QoS et quil na pas besoin demises en forme suppleacutementaires Nimporte quelles autres tentatives pour ameacuteliorer le flux oupour le mettre en forme gracircce agrave un seau de jetons lors deacutetapes intermeacutediaires introduiront desretards non deacutesireacutes et augmenteront la gigue

A lheure actuelle CSZ est le seul ordonnanceur qui fournit un veacuteritable service garanti Lesautres impleacutementations (incluant CBQ) nassurent pas un deacutelai garanti et rendent la giguealeacuteatoire

Ne semble pas actuellement un bon candidat agrave utiliser agrave moins que vous nayez lu et comprislarticle mentionneacute

DSMARK

Esteve Camps

ltmarvingrnesgtltestevehadesudgesgt

Ce texte est un extrait de ma thegravese sur le support QoS dans Linux Septembre 2000

Documents sources

Draft-almesberger-wajhak-diffserv-linux-01txtbull Exemples de la distribution iproute2bull White Paper-QoS protocols and architectures et Foires Aux Questions IP QoS les deux par Qualityof Service Forum

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 77

Introduction

Avant tout il serait preacutefeacuterable de lire les RFC eacutecrits sur ce sujet (RFC2474 RFC2475 RFC2597 et RFC2598)sur le site web du groupe de travail DiffServ IETF et sur le site web de Werner Almesberger (Il a eacutecrit lecode permettant le support des Services Diffeacuterencieacutes sous Linux)

A quoi DSMARK est-il relieacute

DSMARK est un gestionnaire de mise en file dattente qui offre les fonctionnaliteacutes dont ont besoin les servicesdiffeacuterencieacutes (Differentiated Services) (eacutegalement appeleacutes DiffServ ou tout simplement DS) DiffServ est lunedes deux architectures actuelles de la Qualiteacute de Services (QoS Quality of Services) (lautre est appeleacuteeservices inteacutegreacutes (Integrated Services) Elle se base sur la valeur du champ DS contenu dans len-tecircte IP dupaquet

Une des premiegraveres solutions dans IP pour offrir des niveaux de qualiteacute de services eacutetait le champ Type deService (octet TOS) de len-tecircte IP En modifiant la valeur de ce champ nous pouvions choisir un niveaueacuteleveacutefaible du deacutebit du deacutelai ou de la fiabiliteacute Cependant cela ne fournissait pas une flexibiliteacute suffisantepour les besoins de nouveaux services (comme les applications temps reacuteel les applications interactives etautres) Par la suite de nouvelles architectures sont apparues Lune delle a eacuteteacute DiffServ qui a gardeacute les bitsTOS et les a renommeacutes champ DS

Guide des services diffeacuterencieacutes

Les services diffeacuterencieacutes sont orienteacutes groupes Cela signifie que nous ne savons rien des flux (ce sera le butdes services inteacutegreacutes (integrated Services)) Nous connaissons par contre les agreacutegations de flux et nousadopterons des comportements diffeacuterents suivant lagreacutegation agrave laquelle appartient le paquet

Quand un paquet arrive agrave un noeud frontalier (noeud dentreacutee du domaine DiffServ) et entre dans un domaineDiffServ nous devrons avoir une politique une mise en forme etou un marquage de ces paquets (le marquagefait reacutefeacuterence agrave la mise en place dune valeur dans le champ DS Comme on le ferait pour des vaches -)) Cesera cette marquevaleur que les noeuds internes de votre domaine DiffServ regarderons pour deacuteterminer quelcomportement ou niveau de qualiteacute de service appliquer

Comme vous pouvez le deacuteduire les Services Diffeacuterencieacutes impliquent un domaine sur lequel toutes les regraveglesDS devront ecirctre appliqueacutees Vous pouvez raisonner de la faccedilon suivante ltlt Je classifierai tous les paquetsentrant dans mon domaine Une fois quils seront entreacutes dans mon domaine ils seront soumis aux regravegles quema classification impose et chaque noeud traverseacute appliquera son niveau de qualiteacute de service gtgt

En fait vous pouvez appliquer vos propres politiques dans vos domaines locaux mais des autorisations auniveau service devront ecirctre consideacutereacutees lors de la connexion agrave dautres domaines DS

En ce moment vous vous posez peut-ecirctre beaucoup de questions DiffServ est plus vaste que ce que jaiexpliqueacute En fait vous pouvez comprendre que je ne peux pas reacutesumer plus de trois RFC en 50 lignes -)

Travailler avec DSMARK

Comme le speacutecifie la bibliographie concernant DiffServ nous diffeacuterencions les noeuds frontaliers et lesnoeuds inteacuterieurs Ce sont deux eacuteleacutements importants dans le chemin quemprunte le trafic Les deux reacutealisentune classification quand un paquet arrive Le reacutesultat peut ecirctre utiliseacute agrave diffeacuterents endroits lors du processusDS avant que le paquet ne soit libeacutereacute vers le reacuteseau Cela est possible car le nouveau code DiffServ fournit unestructure appeleacutee skamplowbarbuff incluant un nouveau champ appeleacute skb-gttcindex Ce champmeacutemorisera le reacutesultat de la classification initiale et pourra ecirctre utiliseacute agrave plusieurs reprises dans le traitementDS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

78 Introduction

La valeur skb-gttcamplowbarindex sera initialement configureacutee par le gestionnaire de mise en filedattente DSMARK Cette valeur sera extraite du champ DS de len-tecircte IP de tous les paquets reccedilus En outrele classificateur clsamplowbartcindex lira tout ou une partie de la valeur skb-gttcindex et lutiliserapour seacutelectionner les classes

Mais avant tout regardons la commande qdisc DSMARK et ses paramegravetres

dsmark indices INDICES [ default_index DEFAULT_INDEX ] [ set_tc_index ]

Que signifient ces paramegravetres

indices taille de la table des couples (masquevaleur) La valeur maximum est 2ˆn ougrave ngt=0bull defaultamplowbarindex index dentreacutee par deacutefaut de la table si aucune correspondance nesttrouveacutee

bull

setamplowbartcamplowbarindex indique au gestionnaire DSMARK de reacutecupeacuterer le champs DSet de lenregistrer dans skb-gttcamplowbarindex

bull

Regardons DSMARK proceacuteder

Comment SCHamplowbarDSMARK travaille

Ce gestionnaire de mise en file dattente reacutealisera les eacutetapes suivantes

Si vous avez deacuteclareacute loption setamplowbartcamplowbarindex dans la commande qdisc lechamp DS est reacutecupeacutereacute et meacutemoriseacute dans la variable skb-gttcamplowbarindex

bull

Le classificateur est invoqueacute Celui-ci sera exeacutecuteacute et retournera un identificateur de classe (class ID)qui sera enregistreacute dans la variable skb-gttcamplowbarindex Si aucun filtre correspondant nesttrouveacute nous consideacuterons loption defaultamplowbarindex comme eacutetant lidentificateur de classeagrave enregistrer Si ni setamplowbartcamplowbarindex ni defaultamplowbarindex nont eacuteteacutedeacuteclareacutes alors les reacutesultats peuvent ecirctre non preacutedictifs

bull

Apregraves avoir eacuteteacute envoyeacute dans le gestionnaire de file dattente interne ougrave le reacutesultat du filtre peut ecirctrereacuteutiliseacute lidentificateur de classe retourneacute par le gestionnaire est stockeacute dans la variableskb-gttcamplowbarindex Cette valeur sera utiliseacutee plus tard pour indexer la table masque-valeurLe reacutesultat de lopeacuteration suivante sera assigneacute au paquet

Nouveau_champ_DS = ( Ancien_champ_DS amp masque ) | valeur

bull

La nouvelle valeur reacutesultera donc dun ET logique entre les valeurs du champamplowbarDS et dumasque suivi dun OU logique avec le paramegravetre valeur Regardez la figure suivante pourcomprendre tout ce processus

bull

skb-gtihp-gttos- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gt | | ^ | -- Si vous deacuteclarez set_tc_index nous configurons | | lt-----Peut changer | la valeur DS dans la variable skb-gttc_index | |O le champ DS | A| |R +-|-+ +------+ +---+-+ File dattente-+ +---N|-----|----+ | | | |filtre|---gt| | |--gt --gt| | | D| | | | | |-----gt| tc |---gt| | | interne | |----gt| v | | | | | |index |---gt| | | +---------------+ | ----gt(masquevaleur)|--gt| O | +------+ +-|-+--------------^----+ | ( ) | | | | ^ | | | | ( ) | | | +----------|---------|----------------|-------|--+ ( ) | | | sch_dsmark | | | | | +-|------------|---------|----------------|-------|------------------+ | | | lt- tc_index -gt | | | |(lecture)| peut changer | | lt--------------Index de la table

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Travailler avec DSMARK 79

| | | | | des couples v | v v | (masquevaleur)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -gt skb-gttc_index

Comment faire le marquage Il suffit de modifier le masque et la valeur associeacutes agrave la classe que vous voulezmarquer Regardez la ligne de code suivante

tc class change dev eth0 classid 11 dsmark mask 0x3 value 0xb8

Cela modifie le couple (masquevaleur) dans la table de hachage et re-marque les paquets appartenant agrave laclasse 11 Vous devez changer ces valeurs en raison des valeurs par deacutefaut que le couple (masque valeur)obtient initialement (voir le tableau ci-dessous)

Nous allons maintenant expliquer comment le filtre TCamplowbarINDEX travaille et comment il sintegravegredans tout cela En outre le filtre TCamplowbarINDEX peut ecirctre utiliseacute dans des configurations autres que cellesincluant les services DS

Le filtre TCamplowbarINDEX

Voici la commande de base pour deacuteclarer un filtre TCamplowbarINDEX

tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ] [ pass_on | fall_through ] [ classid CLASSID ] [ police POLICE_SPEC ]

Ensuite nous montrons lexemple utiliseacute pour expliquer le mode opeacuteratoire de TCamplowbarINDEX Soyezattentif aux mots en gras tc qdisc add dev eth0 handle 10 root dsmark indices 64setamplowbartcamplowbarindex tc filter add dev eth0 parent 10 protocol ip prio 1 tcindex mask 0xfc shift 2 tcqdisc add dev eth0 parent 10 handle 20 cbq bandwidth 10Mbit cell 8 avpkt 1000 mpu 64 ampnum Classe dutrafic EF tc class add dev eth0 parent 20 classid 21 cbq bandwidth 10Mbit rate 1500Kbit avpkt 1000 prio 1bounded isolated allot 1514 weight 1 maxburst 10 ampnum Gestionnaire de file dattente fifo pour le trafic EFtc qdisc add dev eth0 parent 21 pfifo limit 5 tc filter add dev eth0 parent 20 protocol ip prio 1 handle 0x2etcindex classid 21 passamplowbaron (Ce code nest pas complet Ce nest quun extrait de lexemple EFCBQinclus dans la distribution iproute2)

Avant tout supposons que nous recevons un paquet marqueacute comme EF Si vous lisez le RFC2598 vousverrez que DSCP recommande une valeur de 101110 pour le trafic EF Cela signifie que le champ DS seraeacutegal agrave 10111000 (rappelez- vous que les bits les moins significatifs de loctet TOS ne sont pas utiliseacutes dansDS) ou 0xb8 en notation hexadeacutecimale

FILTRE TC INDEX +---+ +-------+ +---+-+ +------+ +-+ +-------+ | | | | | | | |FILTRE| +-+ +-+ | | | | | |-----gt| MASK | -gt | | | -gt |HANDLE|-gt| | | | -gt | | -gt | | | | | =0xfc | | | | |0x2E | | +----+ | | | | | | | | | | | | +------+ +--------+ | | | | | | | | | | | | | | |--gt| | | SHIFT | | | | | | | |--gt | | | =2 | | | +----------------------------+ | | | | | | | | | CBQ 20 | | | | | +-------+ +---+--------------------------------+ | | | | | | | +-------------------------------------------------------------+ | | DSMARK 10 |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

80 Comment SCHamplowbarDSMARK travaille

+-------------------------------------------------------------------------+

Le paquet arrive alors avec la valeur du champ DS configureacutee agrave 0xb8 Comme je lai expliqueacute auparavant legestionnaire de mise en file dattente dsmark identifieacute par 10 dans cet exemple reacutecupegravere le champ DS etlenregistre dans la variable skb-gttcamplowbarindex Leacutetape suivante consistera agrave associer un filtre agrave cegestionnaire de mise en file dattente (la seconde ligne dans cet exemple) Les opeacuterations suivantes serontreacutealiseacutees

Valeur1 = skb-gttc_index amp MASKCleacute = Valeur1 gtgt SHIFT

Dans cet exemple MASK=0xFC et SHIFT=2

Valeur1 = 10111000 amp 11111100 = 10111000Cleacute = 10111000 gtgt 2 = 00101110 -gt 0x2E en hexadeacutecimal

La valeur retourneacutee correspondra agrave un identificateur de filtre du gestionnaire de file dattente interne (danslexemple identifier par 20) Si un filtre avec cet identificateur (id) existe les conditions de controcircle et deperformance seront veacuterifieacutees (au cas ougrave le filtre inclurait ceci) et lidentificateur de classe sera retourneacute (dansnotre exemple classid 21) et stockeacute dans la variable skb-gttcamplowbarindex

Si aucun filtre avec cet identificateur nest trouveacute le reacutesultat deacutependra de la deacuteclaration de loptionfallamplowbarthrough Si tel est le cas la valeur Cleacute est retourneacutee comme identificateur de classe Si cela nestpas le cas une erreur est retourneacutee et le traitement continue avec les filtres restant Faites attention si vousutilisez loption fallamplowbarthrough ceci ne peut ecirctre fait que si une relation existe entre les valeurs de lavariable skb-gttcamplowbarindex et les identificateurs de classe

Les derniers paramegravetres agrave commenter sont hash et passamplowbaron Le premier est relieacute agrave la taille de la tablede hachage Passamplowbaron sera utiliseacute pour indiquer dessayer le filtre suivant dans le cas ougrave aucunidentificateur de classe eacutegal au reacutesultat du filtre ne serait trouveacute Laction par deacutefaut est fallamplowbarthrough(regarder la table suivante)

Finalement regardons quelles sont les valeurs possibles pour la configuration de tous ces paramegravetresTCINDEX

Nom TC Valeur Deacutefaut-----------------------------------------------------------------Hash 10x10000 Deacutependant de limpleacutementationMask 00xffff 0xffffShift 015 0Fall through Pass_on Flag Fall_throughClassid Majorminor RienPolice Rien

Ce type de filtre est tregraves puissant Il est neacutecessaire dexplorer toutes les possibiliteacutes En outre ce filtre nest passeulement utiliseacute dans les configurations DiffServ Vous pouvez lutiliser comme nimporte quel autre filtre

Je vous recommande de regarder les exemples DiffServ inclus dans la distribution iproute2 Je vous prometsque jessaierai de compleacuteter ce texte degraves que possible Tout ce que jai expliqueacute est le reacutesultat de nombreux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le filtre TCamplowbarINDEX 81

tests Merci de me dire si je me suis trompeacute quelque part

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

Tous les gestionnaires de mise en file dattente dont nous avons discuteacute jusquici sont des gestionnaires desortie Chaque interface peut eacutegalement avoir un gestionnaire de mise en file dattente dentreacutee qui nest pasutiliseacute pour envoyer les paquets agrave lexteacuterieur du peacuteripheacuterique reacuteseau Au lieu de cela il vous autorise agraveappliquer des filtres tc aux paquets entrants par linterface indeacutependamment de sils ont une destination localeou sils sont destineacutes agrave ecirctre transmis

Etant donneacute que les filtres tc contiennent une impleacutementation complegravete du Filtre agrave Seau de Jetons et quilssont eacutegalement capables de sappuyer sur lestimation du flux fourni par le noyau il y a beaucoup defonctionnaliteacutes disponibles Ceci vous permet de reacuteglementer le trafic entrant de faccedilon efficace avant mecircmequil nentre dans la pile IP

Paramegravetres amp usage

Le gestionnaire de mise en file dattente dentreacutee ne neacutecessite pas de paramegravetres Il diffegravere des autresgestionnaires dans le fait quil noccupe pas la racine du peacuteripheacuterique Attachez-le comme ceci

tc qdisc add dev eth0 ingress

Ceci vous autorise agrave avoir dautres gestionnaires de sortie sur votre peacuteripheacuterique en plus du gestionnairedentreacutee

Pour un exemple inventeacute sur la faccedilon dont le gestionnaire dentreacutee peut ecirctre utiliseacute voir le chapitre Recettes decuisine

Random Early Detection (RED)

Ce chapitre est conccedilu comme une introduction au routage de dorsales (backbones) Ces liaisons impliquentsouvent des bandes passantes supeacuterieures agrave 100 meacutegabitss ce qui neacutecessite une approche diffeacuterente de cellede votre modem ADSL agrave la maison

Le comportement normal des files dattente de routeurs est appeleacute tail-drop (NdT eacutelimine le reste) Letail-drop consiste agrave mettre en file dattente un certain volume de trafic et agrave eacuteliminer tout ce qui deacuteborde Cenest pas du tout eacutequitable et cela conduit agrave des retransmissions de synchronisation Quand une retransmissionde synchronisation a lieu la brusque rafale de rejet dun routeur qui a atteint sa limite entraicircnera une rafale deretransmissions retardeacutee qui inondera agrave nouveau le routeur congestionneacute

Dans le but den finir avec les congestions occasionnelles des liens les routeurs de dorsales integravegrent souventdes files dattente de grande taille Malheureusement bien que ces files dattente offrent un bon deacutebit ellespeuvent augmenter sensiblement les temps de latence et entraicircner un comportement tregraves saccadeacute desconnexions TCP pendant la congestion

Ces problegravemes avec le tail-drop deviennent de plus en plus preacuteoccupants avec laugmentation de lutilisationdapplications hostiles au reacuteseau Le noyau Linux nous offre la technique RED abreacuteviation de Random EarlyDetect ou deacutetection preacutecoce directe

RED nest pas la solution miracle agrave tous ces problegravemes Les applications qui nintegravegrent pas correctement latechnique de lexponential backoff obtiennent toujours une part trop grande de bande passante Cependantavec la technique RED elles ne provoquent pas trop de deacutegacircts sur le deacutebit et les temps de latence des autresconnexions

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

82 Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

RED eacutelimine statistiquement des paquets du flux avant quil natteigne sa limite dure (hard) Sur une dorsalecongestionneacutee cela entraicircne un ralentissement en douceur de la liaison et eacutevite les retransmissions desynchronisation La technique RED aide aussi TCP agrave trouver une vitesse eacutequitable plus rapidement enpermettant deacuteliminer des paquets plus tocirct il conserve une file dattente plus courte et des temps de latencemieux controcircleacutes La probabiliteacute quun paquet soit eacutelimineacute dune connexion particuliegravere est proportionnelle agrave labande passante utiliseacutee par cette connexion plutocirct quau nombre de paquets quelle envoie

La technique RED est une bonne gestion de file dattente pour les dorsales ougrave vous ne pouvez pas vouspermettre le coucirct dune meacutemorisation deacutetat par session qui est neacutecessaire pour une mise en file dattentevraiment eacutequitable

Pour utiliser RED vous devez reacutegler trois paramegravetres Min Max et burst Min est la taille minimum de la filedattente en octets avant que les rejets naient lieu Max est le maximum doux (soft) en dessous duquellalgorithme sefforcera de rester et burst est le nombre maximum de paquets envoyeacutes en rafale

Vous devriez configurer Min en calculant le plus grand temps de latence acceptable pour la mise en filedattente multiplieacute par votre bande passante Par exemple sur mon lien ISDN agrave 64 Kbitss je voudrais avoirun temps de latence de base de mise en file dattente de 200 ms Je configure donc Min agrave 1600 octets (= 02 x64000 8) Imposer une valeur Min trop petite va deacutegrader le deacutebit et une valeur Min trop grande va deacutegraderle temps de latence Sur une liaison lente choisir un coefficient Min petit ne peut pas remplacer une reacuteductiondu MTU pour ameacuteliorer les temps de reacuteponse

Vous devriez configurer Max agrave au moins deux fois Min pour eacuteviter les synchronisations Sur des liens lentsavec de petites valeurs de Min il peut ecirctre prudent davoir Max quatre fois plus grand que Min ou plus

Burst controcircle la reacuteponse de lalgorithme RED aux rafales Burst doit ecirctre choisi plus grand que minavpkt(paquet moyen) Expeacuterimentalement jai trouveacute que (min+min+max)(3avpkt) marche bien

De plus vous devez configurer limit et avpkt Limit est une valeur de seacutecuriteacute sil y a plus de Limit octetsdans la file RED reprend la technique tail-drop Je choisis une valeur typique eacutegale agrave 8 fois Max Avpktdevrait ecirctre fixeacute agrave la taille moyenne dun paquet 1000 fonctionne correctement sur des liaisons Internet hautdeacutebit ayant un MTU de 1500 octets

Lire larticle sur la file dattente RED par Sally Floyd et Van Jacobson pour les informations techniques

Generic Random Early Detection

Il ny a pas grand chose de connu sur GRED Il ressemble agrave GRED avec plusieurs files dattente internescelles-ci eacutetant choisies en se basant sur le champ tcindex de Diffserv Selon une diapositive trouveacutee ici ilpossegravede les capaciteacutes Distributed Weighted RED de Cisco ainsi que les capaciteacutes RIO de Clark

Chaque file dattente virtuelle peut avoir ses propres Drop Parameters

FIXME Demandez agrave Jamal or Werner de nous en dire plus

Emulation VCATM

Ceci est leffort principal de Werner Almesberger pour vous autoriser agrave construire des circuits virtuelsau-dessus des sockets TCPIP Le circuit virtuel est un concept venant de la theacuteorie des reacuteseaux ATM

Pour plus dinformations voir la page ATM sur Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Random Early Detection (RED) 83

Weighted Round Robin (WRR)

Ce gestionnaire de mise en file dattente nest pas inclus dans les noyaux standards mais peut ecirctre teacuteleacutechargeacuteeagrave partir de ce lien Ce gestionnaire de mise en file dattente na eacuteteacute testeacute quavec les noyaux 22 mais marcheraprobablement eacutegalement avec les noyaux 2425

La file dattente WRR partage la bande passante entre ses classes en utilisant la technique du tourniquetpondeacutereacute Ceci est similaire agrave la file dattente CBQ qui contient des classes sur lesquelles lon peut associerarbitrairement des files dattente Toutes les classes qui ont suffisamment de demandes obtiendront la bandepassante proportionnellement au poids associeacute des classes Les poids peuvent ecirctre configureacutes manuellement enutilisant le programme tc Ils peuvent eacutegalement ecirctre configureacutes pour deacutecroicirctre automatiquement pour lesclasses transfeacuterant moins de donneacutees

La file dattente a un classificateur inteacutegreacute qui assigne les paquets venant ou allant vers diffeacuterentes machines agravediffeacuterentes classes On peut utiliser soit ladresse MAC soit ladresse IP de ladresse source ou de destinationLadresse MAC ne peut cependant ecirctre utiliseacutee que quand la boite Linux est un pont ethernet Les classes sontautomatiquement assigneacutees aux machines en fonction des paquets vus

Ce gestionnaire de mise en file dattente peut ecirctre tregraves utile au site comme les reacutesidences eacutetudiantes ougrave desindividus sans liens particuliers partagent une connexion Internet Un ensemble de scripts pour configurer untel cas de figure pour ce genre de site est proposeacute dans la distribution WRR

Chapitre 15 Recettes de cuisineCette section contient des ltlt recettes de cuisine gtgt qui peuvent vous aider agrave reacutesoudre vos problegravemes Un livrede cuisine ne remplace cependant pas une reacuteelle compreacutehension essayez donc dassimiler ce qui suit

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations)

Vous pouvez faire cela de plusieurs maniegraveres Apache possegravede un module qui permet de le supporter maisnous montrerons comment Linux peut le faire pour dautres services Les commandes ont eacuteteacute reprises dunepreacutesentation de Jamal Hadi dont la reacutefeacuterence est fournie ci-dessous

Disons que nous avons deux clients avec http ftp et du streaming audio Nous voulons leur vendre unelargeur de bande passante limiteacutee Nous le ferons sur le serveur lui-mecircme

Le client A doit disposer dau moins 2 meacutegabits et le client B a payeacute pour 5 meacutegabits Nous seacuteparons nosclients en creacuteant deux adresses IP virtuelles sur notre serveur

ip address add 1881771661 dev eth0 ip address add 1881771662 dev eth0

Cest agrave vous dassocier les diffeacuterents serveurs agrave la bonne adresse IP Tous les deacutemons courants supportent cela

Nous pouvons tout dabord attacher une mise en file dattente CBQ agrave eth0

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

Nous creacuteons ensuite les classes pour nos clients

tc class add dev eth0 parent 10 classid 11 cbq bandwidth 10Mbit rate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

84 Chapitre 15 Recettes de cuisine

2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 tc class add dev eth0 parent 10 classid 12 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 Quest-ce quundiviseur FIXME Un diviseur est lieacute agrave une table de hachage et au nombre deseaux -ahu tc filter add dev eth0 parent 10 protocol ip prio 5 handle 1 u32 divisor 1 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771661 flowid 11 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771662 flowid 12

Et voilagrave qui est fait

FIXME Pourquoi pas un filtre token bucket Y a t-il un retour par deacutefaut agrave pfifoamplowbarfast quelquepart

Proteacuteger votre machine des inondations SYN

Dapregraves la documentation iproute dAlexey adapteacutee agrave netfilter Si vous utilisez ceci prenez garde dajuster lesnombres avec des valeurs raisonnables pour votre systegraveme

Si vous voulez proteacuteger tout un reacuteseau oubliez ce script qui est plus adapteacute agrave un hocircte seul

Il apparaicirct que la toute derniegravere version de loutil iproute2 est neacutecessaire pour que ceci fonctionne avec lenoyau 240

binsh -x script simple utilisant les capaciteacutes 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 beacuteneacuteficier de puissantes fonctionnaliteacutes sur les SYN chemins vers les divers utilitaires Agrave changer en fonction des vocirctresTC=sbintcIP=sbinipIPTABLES=sbiniptablesINDEV=eth2 marque tous les paquets SYN entrant agrave travers $INDEV avec la valeur 1 $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn -j MARK --set-mark 1 installe la file dattente ingress sur linterface associeacutee $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 agrave 3 par seconde (pas vraiment utile mais sert agrave montrer ce point -JHS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations) 85

$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 $INDEVecho ---- Class parameters Ingress ----------$TC class ls dev $INDEVecho ---- filter parameters Ingress ----------$TC filter ls dev $INDEV parent ffff

supprime la file dattente ingress $TC qdisc del $INDEV ingress

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service

Reacutecemment les attaques distribueacutees de deacuteni de service sont devenues une nuisance importante sur InternetEn filtrant proprement et en limitant le deacutebit de votre reacuteseau vous pouvez agrave la fois eacuteviter de devenir victimeou source de ces attaques

Vous devriez filtrer vos reacuteseaux de telle sorte que vous nautorisiez pas les paquets avec une adresse IP sourcenon locale agrave quitter votre reacuteseau Cela empecircche les utilisateurs denvoyer de maniegravere anonyme descochonneries sur Internet

La limitation de deacutebit peut faire encore mieux comme vu plus haut Pour vous rafraicircchir la meacutemoire revoicinotre diagramme ASCII

[Internet] ---ltE3 T3 nimporte quoigt--- [routeur Linux] --- [Bureau+FAI] eth1 eth0

Nous allons dabord configurer les parties preacute-requises

tc qdisc add dev eth0 root handle 10 cbq bandwidth 10Mbit avpkt 1000 tc class add dev eth0 parent 100 classid 101 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 deacuteterminercombien de trafic ICMP vous voulez autoriser Vous pouvez reacutealiser des mesures avec tcpdump en eacutecrivantles reacutesultats dans un fichier pendant un moment et regarder combien de paquets ICMP passent par votrereacuteseau Ne pas oublier daugmenter la longueur du snapshot Si la mesure nest pas possible vous pouvezconsacrer par exemple 5amppercnt de votre bande passante disponible Configurons notre classe

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

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

86 Proteacuteger votre machine des inondations SYN

Cela limite le deacutebit agrave 100 Kbits sur la classe Maintenant nous avons besoin dun filtre pour assigner le traficICMP agrave cette classe

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

Donner la prioriteacute au trafic interactif

Si beaucoup de donneacutees arrivent agrave votre lien ou en partent et que vous essayez de faire de la maintenance viatelnet ou ssh cela peut poser problegraveme dautres paquets bloquent vos frappes clavier Cela ne serait-il pasmieux si vos paquets interactifs pouvaient se faufiler dans le trafic de masse Linux peut faire cela pour vous

Comme preacuteceacutedemment nous avons besoin de manipuler le trafic dans les deux sens Evidemment celamarche mieux sil y a des machines Linux aux deux extreacutemiteacutes du lien bien que dautres UNIX soientcapables de faire la mecircme chose Consultez votre gourou local SolarisBSD pour cela

Le gestionnaire standard pfifoamplowbarfast a trois bandes diffeacuterentes Le trafic de la bande 0 est transmis enpremier le trafic des bandes 1 et 2 eacutetant traiteacute apregraves Il est vital que votre trafic interactif soit dans la bande 0 Ce qui suit est adapteacute du (bientocirct obsolegravete) Ipchains-HOWTO

Il y a quatre bits rarement utiliseacutes dans len-tecircte IP appeleacutes bits de Type de Service (TOS) Ils affectent lamaniegravere dont les paquets sont traiteacutes Les quatre bits sont Deacutelai Minimum Deacutebit Maximum FiabiliteacuteMaximum et Coucirct Minimum Seul un de ces bits peut ecirctre positionneacute Rob van Nieuwkerk lauteur ducode TOS-mangling dans ipchains le configure comme suit

Le Deacutelai Minimum est particuliegraverement important pour moi Je lepositionne agrave 1 pour les paquets interactifs sur mon routeur (Linux)qui envoie le trafic vers lexteacuterieur Je suis derriegravere un modem agrave336 Kbps Linux reacutepartit les paquets dans trois filesdattente De cette maniegravere jobtiens des performances acceptablespour le trafic interactif tout en teacuteleacutechargeant en mecircme temps

Lutilisation la plus commune est de configurer les connexions telnet et ftp agrave Deacutelai Minimum et les donneacuteesFTP agrave Deacutebit 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 donneacutees venant dun telnet exteacuterieur vers votre ordinateur local Danslautre sens ccedila se fait tout seul telnet ssh et consorts configurent le champ TOS automatiquement pour lespaquets sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service 87

Si vous avez un client incapable de le faire vous pouvez toujours le faire avec netfilter Sur votre machinelocale

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

Cache web transparent utilisant netfilter iproute2 ipchains etsquid

Cette section a eacuteteacute envoyeacutee par le lecteur Ram Narula de Internet for Education (Internet pour leacuteducation)(Thailande)

La technique habituelle pour reacutealiser ceci dans Linux est probablement lutilisation dipchains APRES secirctreassureacute que le trafic sortant du port 80 (web) est routeacute agrave travers le serveur faisant fonctionner squid

Il y a 3 meacutethodes communes pour ecirctre sucircr que le trafic sortant du port 80 est routeacute vers le serveur faisantfonctionner squid et une quatriegraveme est introduite ici

La passerelle le faitSi vous pouvez dire agrave votre passerelle que les paquets sortants agrave destination du port 80 doivent ecirctreenvoyeacutes vers ladresse IP du serveur squid

MAIS

Ceci amegravenerait une charge suppleacutementaire sur le routeur et des routeurs commerciaux peuvent mecircmene pas supporter ceci

Utiliser un commutateur Couche 4Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problegraveme

MAIS

Le coucirct pour un tel eacutequipement est en geacuteneacuteral tregraves eacuteleveacute Typiquement un commutateur couche 4coucircte normalement plus cher quun serveur classique + un bon serveur linux

Utiliser le serveur cache comme passerelle reacuteseauVous pouvez forcer TOUT le trafic agrave travers le serveur cache

MAIS

Ceci est plutocirct risqueacute dans la mesure ougrave Squid utilise beaucoup de ressources CPU ce qui peutconduire agrave une baisse des performances de tout le reacuteseau Le serveur peut eacutegalement ne plusfonctionner et personne sur le reacuteseau ne pourra acceacuteder agrave Internet si cela a lieu

Routeur Linux+NetFilterEn utilisant Netfilter une autre technique peut ecirctre impleacutementeacutee Celle-ci consiste agrave utiliser Netfilterpour marquer les paquets agrave destination du port 80 et agrave utiliser iproute2 pour router les paquetsmarqueacutes vers le serveur Squid

|----------------|

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

88 Donner la prioriteacute au trafic interactif

| Impleacutementation ||----------------|

Adresses utiliseacutees 10001 naret (serveur NetFilter) 10002 silom (serveur Squid) 10003 donmuang (routeur connecteacute agrave Internet) 10004 kaosarn (un autre serveur sur le reacuteseau) 10005 RAS 1000024 reacuteseau principal 1000019 reacuteseau total

|----------------||Scheacutema du reacuteseau||----------------|

Internet|donmuang|------------hubcommutateur----------| | | |naret silom kaosarn RAS etc

Premiegraverement faire en sorte que tout le trafic passe par naret en eacutetant sucircr que cest la passerelle par deacutefaut agravelexception de silom La passerelle par deacutefaut de silom doit ecirctre donmuang (10003) ou ceci creacuteerait uneboucle du trafic web

(Tous les serveurs sur mon reacuteseau avaient 10001 comme passerelle par deacutefaut qui eacutetait lancienne adresse durouteur donmuang Cela ma conduit agrave attribuer 10003 comme adresse IP agrave donmuang et agrave donner 10001comme adresse IP agrave naret)

Silom------configurer squid et ipchains

Pour la configuration du serveur Squid sur silom soyez sucircr que celui-ci supporte le cacheproxy transparent(transparent cachingproxying) Le port par deacutefaut pour squid est en geacuteneacuteral 3128 Tout le trafic pour le port80 doit donc ecirctre redirigeacute localement vers le port 3128 Ceci peut ecirctre fait en utilisant ipchains comme suit

silom ipchains -N allow1silom ipchains -A allow1 -p TCP -s 1000019 -d 00 80 -j REDIRECT 3128silom ipchains -I input -j allow1

Ou avec netfilter

silom iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(note vous pouvez avoir eacutegalement dautres entreacutees)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Cache web transparent utilisant netfilter iproute2 ipchains etsquid 89

Pour plus dinformations sur la configuration du serveur Squid se reacutefeacuterer agrave la page FAQ Squid surhttpsquidnlanrnet)

Soyez sucircr que lip forwarding est actif sur votre serveur et que la passerelle par deacutefaut pour ce serveur estdonmuand (PAS naret)

Naret------ configurer squid et ipchains - deacutesactiver les messages icmp REDIRECT (si besoin)

Marquer les paquets agrave destination du port 80 avec la valeur 2

naret iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 2

1

Configurer iproute2 de sorte quil route les paquets avec la marque 2 vers silom

naret echo 202 wwwout gtgt etciproute2rt_tablesnaret ip rule add fwmark 2 table wwwoutnaret ip route add default via 10002 dev eth0 table wwwoutnaret ip route flush cache

Si donmuang et naret sont sur le mecircme reacuteseau naret ne doit pas envoyer de messages icmpREDIRECT Ceux-ci doivent ecirctre deacutesactiveacutes par

naret echo 0 gt procsysnetipv4confallsend_redirectsnaret echo 0 gt procsysnetipv4confdefaultsend_redirectsnaret echo 0 gt procsysnetipv4confeth0send_redirects

2

La configuration est termineacutee veacuterifions-la

Sur naret

naret iptables -t mangle -LChain PREROUTING (policy ACCEPT)target prot opt source destination MARK tcp -- anywhere anywhere tcp dptwww MARK set 0x2

Chain OUTPUT (policy ACCEPT)target prot opt source destination

naret ip rule ls0 from all lookup local 32765 from all fwmark 2 lookup wwwout 32766 from all lookup main

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

90 Cache web transparent utilisant netfilter iproute2 ipchains etsquid

32767 from all lookup default

naret ip route list table wwwoutdefault via 2031142248 dev eth0

naret ip route 10001 dev eth0 scope link 1000024 dev eth0 proto kernel scope link src 100011270008 dev lo scope link default via 10003 dev eth0

(soyez sucircr que silom appartiens agrave lune des lignes ci-dessus Dans ce cascest la ligne avec 1000024)

|------||-FAIT-||------|

Scheacutema du trafic apregraves limpleacutementation

|---------------------------------------||Scheacutema du trafic apregraves limpleacutementation||---------------------------------------|

INTERNET||-----------------routeur donmuang--------------------- |||| || |||| ||naret silom ||trafic agrave destination du port 80=====gt(cache) || || |||| ===================================kaosarn RAS etc

Noter que le reacuteseau est asymeacutetrique car il y a un saut suppleacutementaire sur le chemin sortant

Voici le cheminement dun paquet traversant le reacuteseau de kaosarn allant etvenant dInternet

Pour le trafic webhttp requecircte http kaosarn-gtnaret-gtsilom-gtdonmuang-gtInternetreacuteponse http de Internet-gtdonmuang-gtsilom-gtkaosarn

Pour les requecirctes non webhttp (par ex telnet) donneacutees sortantes kaosarn-gtnaret-gtdonmuang-gtInternetdonneacutees entrantes dInternet-gtdonmuang-gtkaosarn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Scheacutema du trafic apregraves limpleacutementation 91

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen configurant un MTU par routes

Pour envoyer de grande quantiteacute de donneacutees Internet fonctionne geacuteneacuteralement mieux quand de grandspaquets sont utiliseacutes Chaque paquet implique une deacutecision de routage Le transfert dun fichier de 1Mo peutentraicircner soit lenvoi de 700 paquets en maximisant la taille des paquets soit de 4000 paquets en utilisant laplus petite taille possible

Cependant tous les eacuteleacutements dInternet ne supportent pas une capaciteacute utile (payload) de 1460 octets parpaquet Il est de plus neacutecessaire dessayer de trouver le plus grand paquet qui conviendra le mieux dans lebut doptimiser la connexion

Ce processus est appeleacute Deacutecouverte du MTU de chemin ougrave MTU signifie Maximum Transfert Unit (Uniteacutede transfert maximum)

Quand un routeur rencontre un paquet qui est trop gros pour ecirctre envoyeacute en un seul morceau ET que celui-cia eacuteteacute marqueacute avec le bit Dont Fragment il retourne un message ICMP indiquant quil a eacuteteacute obligeacute de rejeterle paquet Lhocircte eacutemetteur prend acte de cette indication en envoyant des paquets plus petits et par iteacuterationpeut trouver la taille optimum du paquet pour une connexion agrave travers un chemin particulier

Ceci fonctionnait correctement jusquagrave ce que Internet soit deacutecouvert par des vandales qui sefforcent deperturber les communications Ceci a conduit les administrateurs agrave soit bloquer soit mettre en forme le traficICMP lors dessais malencontreux dans le but dameacuteliorer la seacutecuriteacute ou la robustesse de leurs servicesInternet

La conseacutequence maintenant est que la deacutecouverte du MTU de chemin fonctionne de moins en moins bien eteacutechoue pour certaines routes conduisant agrave deacutetranges sessions TCPIP qui tombent peu de temps apregraves

Bien que je naie pas de preuves de ceci deux sites avec qui javais lhabitude davoir des problegravemes faisaientfonctionner agrave la fois Alteon et Acedirectors avant les systegravemes affecteacutes Peut-ecirctre quelquun avec plus deconnaissances peut fournir des indices quant agrave la raison de ce qui se passe

Solution

Quand vous rencontrez des sites qui preacutesentent ce problegraveme vous pouvez deacutesactiver la deacutecouverte du MTUde chemin en le configurant manuellement Koos van den Hout a agrave peu pregraves eacutecrit

Le problegraveme suivant jai configureacute le mtu et mru de ma ligne deacutedieacutee fonctionnant avec ppp agrave296 dans la mesure ougrave le deacutebit est de seulement 33k6 et que je ne peux pas influencer la filedattente de lautre cocircteacute A 296 la reacuteponse agrave lappui dune touche intervient dans un deacutelairaisonnable

Et de mon cocircteacute jai un routeur avec translation dadresse (masquage) fonctionnant (bien sucircr)sous Linux

Reacutecemment jai seacutepareacute le serveur du routeur de sorte que la plupart des applicationsfonctionnent sur une machine diffeacuterente de celle qui reacutealise le routage

Jai alors eu des problegravemes en me connectant sur lirc Grosse panique Je vous assure quecertains essais trouvaient que jeacutetais connecteacute agrave lirc me montrant mecircme comme connecteacute surlirc mais je ne recevais pas le motd (message of the day message du jour) de lirc Jai

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

92Circonvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

veacuterifieacute ce qui pouvait ecirctre erroneacute et ai noteacute que javais deacutejagrave eu des soucis lieacutes au MTU encontactant certains sites web Je navais aucun souci pour les atteindre quand le MTU eacutetait agrave1500 le problegraveme napparaissant que lorsque le MTU eacutetait configureacute agrave 296 Puisque lesserveurs irc bloquent tout le trafic dont il nont pas besoin pour leurs opeacuterations immeacutediatesils bloquent aussi licmp

Jai manoeuvreacute pour convaincre les responsables dun serveur web que ceci eacutetait la cause dunproblegraveme mais les responsables du serveur irc navaient pas lintention de reacuteparer ceci

Donc je devais ecirctre sucircr que le trafic masqueacute sortant partait avec le mtu faible du lien externeMais je voulais que le trafic ethernet local ait le MTU normal (pour des choses comme letrafic nfs)

Solution

ip route add default via 10001 mtu 296

(10001 eacutetant ma passerelle par deacutefaut ladresse interne de mon routeur masquant)

En geacuteneacuteral il est possible doutrepasser la deacutecouverte du MTU de chemin en configurant des routesspeacutecifiques Par exemple si seuls certains reacuteseaux posent problegravemes ceci devrait aider

ip route add 1959696024 via 10001 mtu 1000

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

Comme expliqueacute au-dessus la deacutecouverte du MTU de chemin ne marche pas aussi bien que cela devrait ecirctreSi vous savez quun saut de votre reacuteseau a un MTU limiteacute (lt1500) vous ne pouvez pas compter sur ladeacutecouverte du MTU de chemin pour le deacutecouvrir

Outre le MTU il y a encore un autre moyen de configurer la taille maximum du paquet par ce qui est appeleacutele MSS (Maximum Segment Size Taille Maximum du Segment) Cest un champ dans les options TCP dupaquet SYN

Les noyaux Linux reacutecents et quelques pilotes de peacuteripheacuterique PPPoE (notamment lexcellent RoaringPenguin) impleacutementent la possibiliteacute de fixer le MSS

Le bon cocircteacute de tout ceci est que en positionnant la valeur MSS vous dicirctes agrave lhocircte distant de maniegravereeacutequivoque nessaie pas de menvoyer des paquets plus grands que cette valeur Aucun trafic ICMP nestneacutecessaire pour faire fonctionner cela

Malheureusement cest de la bidouille eacutevidente -- ccedila deacutetruit la proprieacuteteacute laquobout-en-boutraquo de la connexion enmodifiant les paquets Ayant dit cela nous utilisons cette astuce dans beaucoup dendroit et cela fonctionnecomme un charme

Pour que tout ceci fonctionne vous aurez besoin au moins de iptables-121a et de Linux 243 ou plus Laligne de commande basique est

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --clamp-mss-to-pmtu

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Solution 93

Ceci calcule le MSS approprieacute pour votre lien Si vous vous sentez courageux ou que vous pensez ecirctre lemieux placeacute pour juger vous pouvez aussi faire quelque chose comme ceci

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --set-mss 128

Ceci configure le MSS du paquet SYN agrave 128 Utilisez ceci si vous avez de la voix sur IP (VoIP) avec de touspetits paquets et de grands paquets http qui provoquent des coupures dans vos communications vocales

Le Conditionneur de Trafic Ultime Faible temps de latenceTeacuteleacutechargement vers lamont et laval rapide

Note ce script a reacutecemment eacuteteacute mis agrave niveau et il ne marchait avant quavec les clients Linux de votrereacuteseau Vous devriez donc le mettre agrave jour si vous avez des machines Windows ou des Macs dans votrereacuteseau qui neacutetaient pas capables de teacuteleacutecharger plus rapidement pendant que dautres eacutetaient en train deteacuteleacutecharger vers lamont

Jai essayeacute de creacuteer le Saint Graal

Maintenir agrave tout moment un faible temps de latence pour le trafic interactifCeci signifie que la reacutecupeacuteration ou la transmission de fichiers ne doivent pas perturber SSH ou mecircmetelnet Ceci est la chose la plus importante car mecircme un temps de latence de 200ms est importantpour pouvoir travailler confortablement

Autoriser le surf agrave des vitesses raisonnables pendant que lon teacuteleacutecharge vers lamont ou vers lavalMecircme si http est un trafic de masse les autres trafics ne doivent pas trop le noyer

Etre sucircr que le teacuteleacutechargement vers lamont ne va pas faire du tort aux teacuteleacutechargements vers laval et aux autreseacuteleacutements autour

Le principal pheacutenomegravene observeacute est la forte reacuteduction de la vitesse de teacuteleacutechargement vers lavalquand il y a du trafic montant

Il savegravere que tout ceci est possible au prix dune minuscule reacuteduction de la bande passante La preacutesence degrandes files dattente sur les dispositifs daccegraves domestiques comme le cacircble ou les modems DSL expliquepourquoi les teacuteleacutechargements vers lamont vers laval et ssh se peacutenalisent mutuellement

La prochaine partie explique en profondeur ce qui provoque les retards et comment nous pouvons lescorriger Vous pouvez sans danger la passer et aller directement au script si vous vous fichez de la faccedilon dontla magie opegravere

Pourquoi cela ne marche t-il pas bien par deacutefaut

Les FAI savent que leurs performances ne sont seulement jugeacutees que sur la vitesse agrave laquelle les personnespeuvent teacuteleacutecharger vers laval En plus de la bande passante disponible la vitesse de teacuteleacutechargement estlourdement influenceacutee par la perte des paquets qui gecircne seacuterieusement les performances de TCPIP Lesgrandes files dattente peuvent aider agrave preacutevenir la perte des paquets et augmenter les teacuteleacutechargements LesFAI configurent donc de grandes files dattente

Ces grandes files dattente endommagent cependant linteractiviteacute Une frappe doit dabord parcourir la filedattente du flux montant ce qui peut prendre plusieurs secondes et aller jusquagrave lhocircte distant Elle est alors

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

94Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

traiteacutee conduisant agrave un paquet de retour qui doit traverser la file dattente du flux descendant localiseacutee chezvotre FAI avant quelle napparaisse sur leacutecran

Cet HOWTO nous enseigne plusieurs maniegraveres de modifier et traiter la file dattente mais malheureusementtoutes les files dattente ne nous sont pas accessibles Les files dattente du FAI sont sans limites et la filedattente du flux montant reacuteside probablement dans votre modem cacircble ou votre peacuteripheacuterique DSL Il se peutque vous soyez capable ou non de le configurer La plupart du temps ce ne sera pas le cas

Et apregraves Etant donneacute que nous ne pouvons pas controcircler ces files dattente elles doivent disparaicirctre et ecirctretransfeacutereacutees sur notre routeur Linux Heureusement ceci est possible

Limiter la vitesse de teacuteleacutechargement vers lamont (upload)En limitant notre vitesse de teacuteleacutechargement vers lamont agrave une vitesse leacutegegraverement plus faible que lavitesse reacuteelle disponible il ny a pas de files dattente mises en place dans notre modem La filedattente est maintenant transfeacutereacutee vers Linux

Limiter la vitesse de teacuteleacutechargement vers laval (download)Ceci est leacutegegraverement plus ruseacute dans la mesure ougrave nous ne pouvons pas vraiment influencer la vitesse agravelaquelle Internet nous envoie les donneacutees Nous pouvons cependant rejeter les paquets qui arriventtrop vite ce qui provoque le ralentissement de TCPIP jusquau deacutebit deacutesireacute Comme nous ne voulonspas supprimer inutilement du trafic nous configurons une vitesse de rafale (burst) plus grande

Maintenant que nous avons fait ceci nous avons eacutelimineacute totalement la file dattente du flux descendant (saufpour de courtes rafales de donneacutees) et obtenu la possibiliteacute de geacuterer la file dattente du flux montant avectoute la puissance Linux

Il nous reste agrave nous assurer que le trafic interactif se retrouve au deacutebut de la file dattente du flux montantPour ecirctre sucircr que le flux montant ne va pas peacutenaliser le flux descendant nous deacuteplaccedilons eacutegalement les paquetsACK au deacutebut de la file dattente Cest ce qui provoque normalement un eacutenorme ralentissement quand dutrafic de masse est geacuteneacutereacute dans les deux sens Les paquets ACK du trafic descendant rentrent en concurrenceavec le trafic montant et sont donc ralentis

Si nous avons fait tout ceci nous obtenons les mesures suivantes en utilisant lexcellente connexion ADSL dexs4all en Hollande

Temps de latence de base round-trip minavgmax = 144171217 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers laval round-trip minavgmax = 560957365864 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers lamont round-trip minavgmax = 204142332124276 ms

Avec le conditionneur lors dun teacuteleacutechargement vers lamont agrave 220kbits round-trip minavgmax = 157518799 ms

Avec le conditionneur lors dun teacuteleacutechargement vers laval agrave 850kbits round-trip minavgmax = 204469740 ms

Lors dun teacuteleacutechargement vers lamont les teacuteleacutechargements vers laval seffectuent agrave environ80 de la vitesse maximale disponible et 90 pour les teacuteleacutechargements verslamont Le temps de latence augmente alors jusquagrave 850 ms je nai pas encoredeacutetermineacute la raison de ce pheacutenomegravene

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Pourquoi cela ne marche t-il pas bien par deacutefaut 95

Ce que vous pouvez attendre de ce script deacutepend largement de votre vitesse de lien reacuteelle Quand vousteacuteleacutechargez vers lamont agrave pleine vitesse il y aura toujours un paquet devant votre frappe de clavier Ceci estla limite basse de votre temps de latence Pour la calculer divisez votre MTU par la vitesse du flux montantLes valeurs classiques seront un peu plus eacuteleveacutees que ccedila Diminuez votre MTU pour un meilleur effet

Voici deux versions de ce script une avec lexcellent HTB de Devik et lautre avec CBQ qui est preacutesent danschaque noyau Linux contrairement agrave HTB Les deux ont eacuteteacute testeacutes et marchent correctement

Le script (CBQ)

Marche avec tous les noyaux A linteacuterieur du gestionnaire de mise en file dattente CBQ nous placcedilons deuxSFQ pour ecirctre sucircr que de multiples flux de masse ne vont pas mutuellement se peacutenaliser

Le trafic descendant est reacuteglementeacute en utilisant un filtre tc contenant un Token Bucket Filter

Vous pourriez ameacuteliorer ce script en ajoutant bounded aux lignes qui deacutemarrent avec tc class add classid120 Si vous avez diminueacute votre MTU diminuez aussi les nombres allot amp avpkt

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobitsDOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe CBQ agrave la racine

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence Classe principale

tc class add dev $DEV parent 1 classid 11 cbq rate $UPLINKkbit allot 1500 prio 5 bounded isolated

classe de prioriteacute supeacuterieure 110

tc class add dev $DEV parent 11 classid 110 cbq rate $UPLINKkbit allot 1600 prio 1 avpkt 1000

la classe par deacutefaut et pour le trafic de masse 120 Reccediloit leacutegegraverement moins que le trafic et a une prioriteacute plus faible bulk and default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 cbq rate $[9$UPLINK10]kbit allot 1600 prio 2 avpkt 1000

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

96 Le script (CBQ)

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

Deacutemarrage des filtres le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110 ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

tc filter add dev $DEV parent 1 protocol ip prio 13 u32 match ip dst 00000 flowid 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacuteelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Le script (HTB)

Le script suivant nous permet datteindre tous nos buts en utilisant la merveilleuse file dattente HTB Voir lechapitre correspondant Cela vaut la peine de mettre agrave jour votre noyau

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobits

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le script (HTB) 97

DOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe HTB agrave la racine le trafic ira par deacutefaut vers 120

tc qdisc add dev $DEV root handle 1 htb default 20

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence

tc class add dev $DEV parent 1 classid 11 htb rate $UPLINKkbit burst 6k

la classe de haute prioriteacute 110

tc class add dev $DEV parent 11 classid 110 htb rate $UPLINKkbit burst 6k prio 1

bulk amp default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 htb rate $[9$UPLINK10]kbit burst 6k prio 2

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110

ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacutelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

98 Le script (HTB)

attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau

Bien que ceci soit deacutecrit en deacutetail ailleurs et dans nos pages de manuel cette question est souvent poseacuteeHeureusement il y a une reacuteponse simple qui ne neacutecessite pas la compreacutehension complegravete du controcircle de trafic

Ce script de trois lignes met en place la limitation du deacutebit

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1 classid 11 cbq rate 512kbit allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1 protocol ip prio 16 u32 match ip dst 195969697 flowid 11

La premiegravere ligne installe un gestionnaire de mise en file dattente baseacute sur des classes sur votre interface etindique au noyau que pour ses calculs il peut la consideacuterer comme une interface agrave 10 Mbitss Cependant ilny aura pas de grands dommages si vous indiquez une valeur erroneacutee Donner la vraie valeur permettradavoir des choses plus preacutecises

La seconde ligne creacutee une classe de 512kbits avec des valeurs par deacutefaut raisonnables Pour les deacutetails voirles pages de manuel cbq et Chapitre 9gt

La derniegravere ligne indique quel trafic devra passer par la classe reacutealisant la mise en forme Le trafic qui nestseacutelectionneacute par cette regravegle nest PAS mis en forme Pour avoir des seacutelections plus compliqueacutees (sous-reacuteseauxports sources ou de destinations) voir la section intituleacutee Toutes les commandes de filtres dont vous aureznormalement besoin dans Chapitre 9gt

Si vous avez changeacute quelque chose et que vous vouliez recharger le script exeacutecutez la commande tc qdisc deldev $DEV root pour supprimer votre configuration actuelle

Le script peut ecirctre ameacutelioreacute en ajoutant une derniegravere ligne optionnelle tc qdisc add dev $DEV parent 11 sfqperturb 10 Voir la section intituleacutee Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing) dans Chapitre 9gt pour savoir ce que cela fait

Exemple dune solution de translation dadresse avec de la QoS

Je mappelle Pedro Larroy

ltpiotrmemberfsforggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau 99

Je deacutecris ici une configuration dans le cas ougrave de nombreux utilisateurs seraient connecteacutes agrave Internet agrave traversun routeur Linux qui possegravede une adresse publique et qui reacutealise de la translation dadresse (NAT) Jutilisecette configuration QoS pour fournir laccegraves agrave 198 utilisateurs dans une citeacute universitaire dans laquelle je vis etougrave jadministre le reacuteseau Les utilisateurs sont de gros consommateurs de programmes peer to peer et uncontrocircle de trafic correct est neacutecessaire Jespegravere que ceci servira dexemples pratiques agrave tous les lecteursinteacuteresseacutes par le lartc

Dans un premier temps la configuration sera reacutealiseacutee pas agrave pas et agrave la fin jexpliquerai comment rendre ceprocessus automatique au deacutemarrage Le reacuteseau utiliseacute pour cet exemple est un reacuteseau local connecteacute agraveInternet agrave travers un routeur Linux ayant une adresse publique Lajout dun ensemble de regravegles iptablespermettrait facilement lextension agrave plusieurs adresses IP publiques Les eacuteleacutements suivants sont neacutecessaires

Linux 2418 ou une version du noyau supeacuterieure installeacuteeSi vous utilisez le noyau 2418 vous devrez appliquer la mise agrave jour HTB

iprouteSoyez eacutegalement sucircr que le binaire tc est compatible avec HTB Un binaire preacute compileacute estdistribueacute avec HTB

iptables

Commenccedilons loptimisation de cette rare bande passante

Tout dabord nous allons configurer des gestionnaires de mise en file dattente dans lesquels nous allonsclassifier le trafic Nous creacuteons un gestionnaire htb composeacute de 6 classes avec des prioriteacutes croissantes Nousavons alors des classes qui obtiendront le deacutebit alloueacute et qui pourront de plus utiliser la bande passante dontles autres classes nont pas besoin Rappelons que les classes de plus hautes prioriteacutes (correspondant auxnombres prio les plus faibles) obtiendront en premier lexcegraves de bande passante Notre liaison ADSL agrave un fluxdescendant de 2Mbitss et un flux montant de 300 kbitss Jutilise un deacutebit de seuil (ceil rate) de 240 kbitsscar au-delagrave de cette limite les problegravemes de latence commence agrave prendre de lampleur Ceci est ducirc auremplissage dun tampon placeacute quelque part entre nous et les hocirctes distants

Ajuster la variable CEIL agrave 75 de votre bande passante montante maximum et ajuster le nom de linterface(eth0 dans la suite) agrave celle qui a ladresse publique Internet Exeacutecutez ce qui suit dans un shell root

CEIL=240 tc qdisc add dev eth0 root handle 1 htb default 15 tc class add dev eth0 parent 1 classid 11 htb rate $CEILkbit ceil $CEILkbit tc class add dev eth0 parent 11 classid 110 htb rate 80kbit ceil 80kbit prio 0 tc class add dev eth0 parent 11 classid 111 htb rate 80kbit ceil $CEILkbit prio 1 tc class add dev eth0 parent 11 classid 112 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 113 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 114 htb rate 10kbit ceil $CEILkbit prio 3 tc class add dev eth0 parent 11 classid 115 htb rate 30kbit ceil $CEILkbit prio 3 tc qdisc add dev eth0 parent 112 handle 120 sfq perturb 10 tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Nous avons juste creacuteeacute une arborescence htb avec un seul niveau de profondeur Quelque chose comme ceci

+-----------+ | racine 1 | +-----------+ | +---------------------------------------+ | classe 11 | +---------------------------------------+ | | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

100 Exemple dune solution de translation dadresse avec de la QoS

+----+ +----+ +----+ +----+ +----+ +----+ |110| |111| |112| |113| |114| |115| +----+ +----+ +----+ +----+ +----+ +----+

classid 110 htb rate 80kbit ceil 80kbit prio 0Ceci est la classe de prioriteacute la plus eacuteleveacutee Les paquets de cette classe auront le plus faible deacutelai etobtiendront en premier lexcegraves de bande passante Cest donc une bonne ideacutee de limiter le deacutebit deseuil de cette classe Nous enverrons dans cette classe les paquets qui ont un avantage agrave avoir unfaible deacutelai tel que le trafic interactif ssh telnet dns quake3 irc et les paquets avec le bit SYNactiveacute

classid 111 htb rate 80kbit ceil $CEILkbit prio 1Nous avons ici la premiegravere classe dans laquelle nous commenccedilons agrave mettre du trafic de masse Dansmon exemple jai le trafic provenant de mon serveur web local et les requecirctes pour les pages web respectivement le port source 80 et le port destination 80

classid 112 htb rate 20kbit ceil $CEILkbit prio 2Dans cette classe je mettrai le trafic configureacute avec le champ TOS Deacutebit Maximum activeacute ainsique le reste du trafic provenant des processus locaux de mon routeur vers Internet Les classessuivantes ne recevront donc que du trafic routeacute par cette machine

classid 113 htb rate 20kbit ceil $CEILkbit prio 2Cette classe est pour le trafic des autres machines NATeacutees (NdT beacuteneacuteficiant du service detranslation dadresse) qui ont besoin dune prioriteacute plus grande dans leur trafic de masse

classid 114 htb rate 10kbit ceil $CEILkbit prio 3Le trafic mail (SMTP pop3) et les paquets configureacutes avec le champ TOS Coucirct Minimum serontenvoyeacutes dans cette classe

classid 115 htb rate 30kbit ceil $CEILkbit prio 3Finalement nous avons ici le trafic de masse des machines NATeacutees se trouvant derriegravere le routeurLes paquets lieacutes agrave kazaa edonkey et autres iront ici pour ne pas interfeacuterer avec les autres services

Classification des paquets

Nous avons configureacute le gestionnaire de mise en file dattente mais aucune classification de paquets naencore eacuteteacute faite Pour linstant tous les paquets sortants passent par la classe 115 (car nous avons utiliseacute tcqdisc add dev eth0 root handle 1 htb default 15) Nous devons donc maintenant indiquer ougrave doivent aller lespaquets Ceci est la partie la plus importante

Nous allons maintenant configurer les filtres de tel sorte que nous puissions classifier les paquets aveciptables Je preacutefegravere vraiment le faire avec iptables car celui-ci est tregraves souple et que nous avons un compteurde paquets pour chaque regravegle De plus avec la cible RETURN les paquets nont pas besoin de traverser toutesles regravegles Nous exeacutecutons les commandes suivantes

tc filter add dev eth0 parent 10 protocol ip prio 1 handle 1 fw classid 110 tc filter add dev eth0 parent 10 protocol ip prio 2 handle 2 fw classid 111 tc filter add dev eth0 parent 10 protocol ip prio 3 handle 3 fw classid 112 tc filter add dev eth0 parent 10 protocol ip prio 4 handle 4 fw classid 113 tc filter add dev eth0 parent 10 protocol ip prio 5 handle 5 fw classid 114 tc filter add dev eth0 parent 10 protocol ip prio 6 handle 6 fw classid 115

Nous indiquons simplement au noyau que les paquets qui ont une valeur FWMARK speacutecifique (handle x fw)vont dans la classe speacutecifieacutee (classid xx) Voyons maintenant comment marquer les paquets avec iptables

Tout dabord nous devons comprendre comment les paquets traversent les filtres avec iptables

+------------+ +---------+ +-------------+ Paquets-| PREROUTING |--- Deacutecision----| FORWARD |-------+-------| POSTROUTING |- Paquets entrant +------------+ de routage +-minus-------+ | +-------------+ sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Commenccedilons loptimisation de cette rare bande passante 101

| | +-------+ +--------+ | INPUT |-- Processus locaux-| OUTPUT | +-------+ +--------+

Je suppose que toutes vos tables ont leur politique par deacutefaut configureacutee agrave ACCEPT (-P ACCEPT) ce quidevrait ecirctre le cas si vous navez pas encore toucheacute agrave iptables Notre reacuteseau priveacute est une classe B avecladresse 172170016 et notre adresse publique est 21217021172

Nous indiquons au noyau de faire de la translation dadresse NAT les clients du reacuteseau priveacute peuvent alorscommencer agrave dialoguer avec lexteacuterieur

echo 1 gt procsysnetipv4ip_forward iptables -t nat -A POSTROUTING -s 172170025525500 -o eth0 -j SNAT --to-source 21217021172

Veacuterifions maintenant que les paquets transitent bien agrave travers 115

tc -s class show dev eth0

Vous pouvez commencer agrave marquer les paquets en ajoutant les regravegles dans la chaicircne PREROUTING de latable mangle

iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p icmp -j RETURN

Vous devriez maintenant ecirctre capable de voir leacutevolution du compteur de paquets quand vous pinguez des sitessur Internet depuis les machines du reacuteseau priveacute Veacuterifiez que le compteur de paquets augmente dans 110

tc -s class show dev eth0

Nous avons mis -j RETURN de maniegravere agrave ce que les paquets ne traversent pas toutes les regravegles Les paquetsicmp ne scruteront pas les autres regravegles deacutefinies sous RETURN Gardez ceci agrave lesprit Nous commenccedilonsmaintenant agrave ajouter dautres regravegles pour geacuterer les champs TOS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6 iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

Donnons la prioriteacute aux paquets SSH

iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

Une bonne ideacutee est de donner la prioriteacute aux paquets initiant une connexion tcp agrave savoir ceux qui ont le bitSYN activeacute

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j MARK --set-mark 0x1 iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j RETURN

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

102 Classification des paquets

Et ainsi de suite Apregraves la mise en place des regravegles dans la chaicircne PREROUTING de la table mangle nousterminons par

iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

Ainsi le trafic non marqueacute est dirigeacute vers 115 En fait cette derniegravere eacutetape nest pas neacutecessaire puisque laclasse par deacutefaut est 115 Un marquage est quand mecircme reacutealiseacute de maniegravere agrave avoir une coheacuterence pourlensemble de la configuration De plus il est utile davoir une comptabiliteacute pour cette regravegle

Cest une bonne ideacutee de faire de mecircme avec la chaicircne OUTPUT Reacutepeacutetez ces commandes avec -A OUTPUT agravela place de PREROUTING (sPREROUTINGOUTPUT) Le trafic geacuteneacutereacute localement (sur le routeur Linux)sera alors eacutegalement classifieacute Je termine la chaicircne OUTPUT par -j MARK --set-mark 0x3 de tel sorte que letrafic local ait une prioriteacute plus grande

Ameacuteliorer notre configuration

Toute notre configuration est maintenant opeacuterationnelle Prenez du temps pour regarder les graphes etobserver ougrave votre bande passante est la plus utiliseacutee et cela correspond agrave vos souhaits Jai fait ceci pendant denombreuses heures ce qui ma permis davoir une connexion Internet fonctionnant tregraves bien Autrement vousserez confronteacute en permanence agrave des timeout et des allocations de bande passante presque nulles pour lesnouvelles connexions tcp

Si vous repeacuterez des classes qui sont pleines la plupart du temps ce peut ecirctre une bonne ideacutee de leur attacherun autre gestionnaire de mise en file dattente de maniegravere agrave ce que le partage de la bande passante soit pluseacutequitable

tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Rendre tout ceci actif au deacutemarrage

Il est certain que ceci peut ecirctre fait de diffeacuterentes faccedilons Dans mon cas jai un shell scriptetcinitdpacketfilter qui accepte les arguments [start | stop | stop-tables | start-tables |reload-tables] Celui-ci configure les gestionnaires de mise en file dattente et charge les modules du noyauneacutecessaires et se comporte donc comme une deacutemon Le mecircme script charge les regravegles iptables agrave partir deetcnetworkiptables-rules Je vais lembellir un peu et le rendrait disponible sur ma page webici

Chapitre 16 Construire des ponts et des pseudoponts avec du Proxy ARPLes ponts sont des peacuteripheacuteriques qui peuvent ecirctre installeacutes dans un reacuteseau sans aucune reconfiguration Uncommutateur reacuteseau est basiquement un pont multi-ports Un pont est souvent un commutateur avec 2 portsCependant Linux supporte tregraves bien plusieurs interfaces dans un pont le conduisant agrave fonctionner comme unvrai commutateur

Les ponts sont souvent deacuteployeacutes quand on est confronteacute agrave un reacuteseau deacutefaillant qui a besoin decirctre reacutepareacute sansaucune modification Dans la mesure ougrave un pont est un eacutequipement de niveau 2 la couche sous la couche IP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 16 Construire des ponts et des pseudo ponts avec du Proxy ARP 103

les routeurs et serveurs ne sont pas conscients de son existence Ceci signifie que vous pouvez bloquer oumodifier certains paquets de maniegravere transparente ou mettre en forme le trafic

Un autre eacuteleacutement positif est quun pont peut souvent ecirctre remplaceacute par un cacircble croiseacute ou un hub quand iltombe en panne

Laspect neacutegatif est que la mise en place dun pont peut engendrer beaucoup de confusion agrave moins quil ne soittregraves bien configureacute Le pont napparaicirct pas dans les traceroute mais pourtant des paquets disparaissent sansraison ou sont changeacutes en allant dun point A agrave un point B (ce reacuteseau est HANTE ) Vous devriez eacutegalementvous demander si une organisation qui ne veut rien changer fait le bon choix

Le pont Linux 2425 est documenteacute sur cette page

Etat des ponts et iptables

Au moment de Linux 2420 le pont et iptables ne se voient pas lun lautre sans une aide Si vous pontezles paquets de eth0 agrave eth1 ils ne passent pas par iptables Ceci signifie que vous ne pouvez pas faire defiltrage de translation dadresse (NAT) de deacutesossage ou quoique ce soit dautres Ceci a eacuteteacute corrigeacute dans lesversions 2545 et supeacuterieures

Vous devriez eacutegalement regarder ebtables qui est encore un autre projet Il vous permettra de faire deschoses vraiment terribles comme MACNAT et brouting Cest vraiment effroyable

Pont et mise en forme

Ca marche comme dans les reacuteclames Soyez sucircr du cocircteacute attribueacute agrave chaque interface Autrement il se peut quevous mettiez en forme le trafic sortant au niveau de votre interface interne ce qui ne marchera pas Utiliseztcpdump si neacutecessaire

Pseudo-pont avec du Proxy-ARP

Si vous voulez juste impleacutementer un pseudo pont allez jusquagrave la section Impleacutementez-le Cependant il estsage de lire un peu la faccedilon dont il fonctionne en pratique

Un pseudo pont travaille de maniegravere un peu diffeacuterente Par deacutefaut un pont transmet les paquets sans les alteacutererdune interface agrave une autre Il ne regarde que ladresse mateacuterielle des paquets pour deacuteterminer ougrave ils doiventaller Ceci signifie que vous pouvez pontez un trafic que Linux ne comprend pas aussi longtemps quil y aune adresse mateacuterielle

Un pseudo pont travaille diffeacuteremment et ressemble plus agrave un routeur cacheacute quagrave un pont Mais comme unpont il a un impact faible sur larchitecture du reacuteseau

Le fait quil ne soit pas un pont preacutesente lavantage que les paquets traversent reacuteellement le noyau et peuventecirctre filtreacutes modifieacutes redirigeacutes ou rerouteacutes

Un pont reacuteel peut eacutegalement reacutealiser ces tours de force mais il a besoin dun code speacutecial comme le EthernetFrame Diverter ou la mise agrave jour mentionneacutee au-dessus

Un autre avantage dun pseudo pont est quil ne transmet pas les paquets quil ne comprend pas nettoyant ainsivotre reacuteseau de beaucoup de cochonneries Dans le cas ougrave vous auriez besoin de ces cochonneries (comme lespaquets SAP ou Netbeui) utilisez un vrai pont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

104 Etat des ponts et iptables

ARP amp Proxy-ARP

Quand un hocircte veut dialoguer avec un autre hocircte sur le mecircme segment physique il envoie un paquet duProtocole de Reacutesolution dAdresse (ARP) qui en simplifiant quelque peu est lu comme ceci Qui a 10001le dire agrave 10007 En reacuteponse agrave ceci 10001 renvoie un petit paquet ici

10007 envoie alors des paquets agrave ladresse mateacuterielle mentionneacutee dans le paquet ici Il met dans un cachecette adresse mateacuterielle pour un temps relativement long et apregraves lexpiration du cache repose sa question

Quand on construit un pseudo pont on configure le pont pour quil reacuteponde agrave ces paquets ARP les hocirctes dureacuteseau envoyant alors leurs paquets au pont Le pont traite alors ces paquets et les envoie agrave linterface adapteacutee

Donc en reacutesumeacute quand un hocircte dun cocircteacute du pont demande ladresse mateacuterielle dun hocircte se situant de lautrecocircteacute le pont reacutepond avec un paquet qui dit transmets le moi

De cette faccedilon tout le trafic de donneacutees est transmis agrave la bonne place et il traverse toujours le pont

Impleacutementez-le

Les versions anciennes du noyau linux permettait de faire du proxy ARP uniquement agrave une granulariteacute sousreacuteseaux Ainsi pour configurer un pseudo pont il fallait speacutecifier les bonnes routes vers les deux cocircteacutes dupont et eacutegalement creacuteer les regravegles proxy-ARP correspondantes Ceacutetait peacutenible deacutejagrave par la quantiteacute de textequil fallait taper puis parce quil eacutetait facile de se tromper et creacuteer des configurations erroneacutees ougrave le pontreacutepondait agrave des requecirctes pour des reacuteseaux quil ne savait pas router

Avec Linux 24 (et peut-ecirctre bien le 22) cette possibiliteacute a eacuteteacute retireacutee et a eacuteteacute remplaceacutee par une option dansle reacutepertoire proc appeleacutee proxy-arp La proceacutedure pour construire un pseudo pont est maintenant

Assigner une adresse agrave chaque interface la gauche et la droite1 Creacuteer des routes pour que votre machine connaisse quels hocirctes reacutesident agrave gauche et quels hocirctesreacutesident agrave droite

2

Activer le proxy-ARP sur chaque interface echo 1 gt procsysnetipv4confethLproxyamplowbararpecho 1 gt procsysnetipv4confethRproxyamplowbararp ougrave L et R deacutesignent les numeacuteros delinterface du cocircteacute gauche (Left) et de celle du cocircteacute droit (Right)

3

Noubliez pas eacutegalement dactiver loption ipamplowbarforwarding Quand on convertit un vrai pont il se peutque vous trouviez cette option deacutesactiveacutee dans la mesure ougrave il ny en a pas besoin pour un pont

Une autre chose que vous devriez consideacuterer lors de la conversion est que vous aurez besoin deffacer le cachearp des ordinateurs du reacuteseau Le cache arp peut contenir danciennes adresses mateacuterielles du pont qui ne sontplus correctes

Sur un Cisco ceci est reacutealiseacute en utilisant la commande clear arp-cache et sous linux en utilisant arp -dipadresse Vous pouvez aussi attendre lexpiration manuelle du cache ce qui peut ecirctre plutocirct long

Il se peut que vous deacutecouvriez eacutegalement que votre reacuteseau eacutetait mal configureacute si vous avezaviez lhabitude despeacutecifier les routes sans les masques de sous-reacuteseau Dans le passeacute certaines versions de route pouvaientcorrectement deviner le masque ou au contraire se tromper sans pour autant vous le notifier Quand vousfaites du routage chirurgical comme deacutecrit plus haut il est vital que vous veacuterifiez vos masques desous-reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP amp Proxy-ARP 105

Chapitre 17 Routage Dynamique - OSPF et BGPSi votre reacuteseau commence agrave devenir vraiment gros ou si vous commencez agrave consideacuterer Internet comme votrepropre reacuteseau vous avez besoin doutils qui routent dynamiquement vos donneacutees Les sites sont souvent relieacutesentre eux par de multiples liens et de nouveaux liens surgissent en permanence

LInternet utilise la plupart du temps les standards OSPF (RFC 2328) et BGP4 (RFC 1771) Linux supporteles 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 travauxde reacutefeacuterence

Vue densemble

Cisco Systems Cisco Systems Designing large-scale IP Internetworks

Pour OSPF

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

Halabi a aussi eacutecrit un tregraves bon guide sur la conception du routage OSPF mais il semble avoir eacuteteacute effaceacute dusite 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

Bien que les exemples soient speacutecifiques agrave Cisco ils sont remarquablement semblables au langage deconfiguration de Zebra -)

Configurer OSPF avec Zebra

Contactez-moi si les informations qui suivent ne sont pas exactes ou si vous avez des suggestions Zebra estun formidable logiciel de routage dynamique eacutecrit par Kunihiro Ishiguro Toshiaki Takada et Yasuhiro OharaConfigurer OSPF avec zebra est simple et rapide mais en pratique il y a de nombreux paramegravetres dans le casougrave vous auriez des besoins speacutecifiques OSPF est labreacuteviation de Open Shortest Path First et quelques une deses fonctionnaliteacutes sont

hieacuterarchiqueLes reacuteseaux sont regroupeacutes par zones (areas) qui sont interconnecteacutees par une zone eacutepine dorsale quisera appeleacutee zone 0 Tout le trafic passe par la zone 0 et tous les routeurs de cette zone ont lesinformations de routage de toutes les autres zones

convergence rapideLes routes sont propageacutees tregraves rapidement compareacute agrave RIP par exemple

eacuteconomie de bande passanteUtilise la multi-distribution agrave la place de la diffusion ce qui eacutevite de submerger les autres hocirctes avecdes informations de routage sans inteacuterecirct pour eux La multi-distribution reacuteduit ainsi le deacutebit sur le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

106 Chapitre 17 Routage Dynamique - OSPF et BGP

reacuteseau De mecircme les routeurs internes (ceux dont toutes les interfaces sont situeacutees dans la mecircmezone) nobtiennent pas dinformations sur les autres zones Les routeurs avec des interfaces dans plusdune zone sont appeleacutes Area Border Routers Ils possegravedent les informations de topologie sur leszones auxquelles ils sont connecteacutes

Utilisation intensive de CPUOSPF est baseacute sur lalgorithme de Dijkstra Shortest Path First qui est coucircteux en temps de calculcompareacute aux autres algorithmes de routage Ce nest pas forceacutement mauvais dans la mesure ougrave le pluscourt chemin est calculeacute uniquement pour chaque zone Donc pour les reacuteseaux de petite agrave moyennetaille ce ne sera pas un problegraveme vous ne vous en rendrez pas compte

Information deacutetat de lienOSPF prend en compte les caracteacuteristiques speacutecifiques des reacuteseaux et interfaces telles que la bandepassante les deacutefauts de liens et le coucirct moneacutetaire

Protocole ouvert et logiciel sous license GPLOSPF est un protocole ouvert et Zebra est un logiciel sous license GPL ce qui repreacutesente un avantageeacutevident par rapport aux protocoles et logiciels proprieacutetaires

Preacuterequis

Noyau Linux Compileacute avec CONFIG_NETLINK_DEV and CONFIG_IP_MULTICAST (Je ne sais pas si dautreseacuteleacutements sont eacutegalement neacutecessaires)

IprouteZebra

Reacutecupeacuterez-le avec votre gestionnaire de paquet favori ou agrave partir de httpwwwzebraorg

Configurer Zebra

Prenons le reacuteseau suivant comme exemple

---------------------------------------------------- | 1921680024 | | | | Zone 0 100BaseTX Commuteacute | | Epine dorsale Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |1 |2 |253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSLATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172170016 Zone 1 | | 1921681024 wlan Zone 2 | ------------ | Reacuteseau etudiant (dortoir) | | Sans fil de Barcelone | ------------------------------------ -------------------------------

Ne soyez pas effrayeacute par ce diagramme Zebra reacutealise la plus grande partie du travail automatiquement cequi ne demandera aucun travail de saisie des routes avec Zebra Il serait peacutenible de maintenir toutes ces routesagrave la main au quotidien La chose la plus importante agrave maicirctriser clairement cest la topologie du reacuteseau Faitesparticuliegraverement attention agrave la zone 0 puisque cest la plus importante Dans un premier temps configurezZebra en eacuteditant zebraconf et en ladaptant agrave vos besoins

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configurer OSPF avec Zebra 107

hostname omega password xxx enable password xxx Interfaces description interface lo description test of desc interface eth1 multicast Static default route ip route 00000 21217021129 log file varlogzebrazebralog

Debian neacutecessite eacutegalement leacutedition de etczebradaemons pour quils soient lanceacutes au deacutemarrage

zebra=yes ospfd=yes

Nous devons maintenant editer ospfdconf si vous utilisez encore IPV4 ou ospf6dconf si vous travaillez avecIPV6 Mon fichier ospfdconf ressemble agrave ceci

hostname omega password xxx enable password xxx router ospf network 1921680024 area 0 network 172170016 area 1 log stdout log file varlogzebraospfdlog

Ceci indique agrave ospf la topologie de notre reacuteseau

Exeacutecuter Zebra

Nous devons maintenant deacutemarrer Zebra soit agrave la main en tapant zebra -d soit avec un script commeetcinitdzebra start En regardant attentivement les logs de ospdfd on peut voir les eacuteleacutements suivants

20021213 224624 OSPF interface 19216801 join AllSPFRouters Multicast group 20021213 224634 OSPF SMUX_CLOSE with reason 5 20021213 224644 OSPF SMUX_CLOSE with reason 5 20021213 224654 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF DR-Election[1st] Backup 19216801 20021213 224704 OSPF DR-Election[1st] DR 19216801 20021213 224704 OSPF DR-Election[2nd] Backup 0000 20021213 224704 OSPF DR-Election[2nd] DR 19216801 20021213 224704 OSPF interface 19216801 join AllDRouters Multicast group 20021213 224706 OSPF DR-Election[1st] Backup 19216802 20021213 224706 OSPF DR-Election[1st] DR 19216801 20021213 224706 OSPF Packet[DD] Negotiation done (Slave) 20021213 224706 OSPF nsm_change_status() scheduling new router-LSA origination 20021213 224711 OSPF ospf_intra_add_router Start

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

108 Configurer Zebra

Ignorez le message SMUX_CLOSE pour linstant dans la mesure ougrave il concerne SNMP Nous pouvons voirque 19216801 est routeur deacutesigneacute (Designated Router) et que 19216802 est le le routeur deacutesigneacute desauvegarde (Backup Designated Router)

Nous pouvons eacutegalement interagir avec zebra et ospfd en exeacutecutant

$ telnet localhost zebra$ telnet localhost ospfd

Voyons comment les routes se sont propageacutees en se connectant agrave zebra

rootatlantis~ telnet localhost zebra Trying 127001 Connected to atlantis Escape character is ^]

Hello this is zebra (version 092a) Copyright 1996-2001 Kunihiro Ishiguro

User Access Verification

Password atlantisgt show ip route Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Kgt 00000 via 19216801 eth1 Cgt 1270008 is directly connected lo O 172170016 [11010] is directly connected eth0 062153 Cgt 172170016 is directly connected eth0 O 1921680024 [11010] is directly connected eth1 062153 Cgt 1921680024 is directly connected eth1 atlantisgt show ip ospf border-routers ============ OSPF router routing table ============= R 1921680253 [10] area (0000) ABR via 1921680253 eth1 [10] area (0001) ABR via 1721702 eth0

ou directement avec iproute

rootomega~ ip route 2121702112826 dev eth0 proto kernel scope link src 21217021172 1921680024 dev eth1 proto kernel scope link src 19216801 172170016 via 19216802 dev eth1 proto zebra metric 20 default via 21217021129 dev eth0 proto zebra rootomega~

Nous pouvons voir les routes Zebra qui neacutetaient pas preacutesentes auparavant Il est vraiment agreacuteable de voirapparaicirctre les routes quelques secondes apregraves le lancement de zebra et ospfd Vous pouvez veacuterifier laconnectiviteacute avec les autres hocirctes en utilisant ping Les routes zebra sont automatiques Vous pouvez ajouterun autre routeur au reacuteseau configurez Zebra et voilagrave

Astuce vous pouvez utiliser

tcpdump -i eth1 ip[9] == 89

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exeacutecuter Zebra 109

pour analyser les paquets OSPF Le numeacutero du protocole OSPF est 89 et le champ du protocole est le 9iegravemeoctet de len-tecircte ip

OSPF possegravede de nombreux paramegravetres speacutecialement pour les grands reacuteseaux Dans de prochainsdeacuteveloppements du HOWTO nous montrerons des meacutethodes de reacuteglages fins dOSPF

Configurer BGP4 avec Zebra

Le Border Gateway Protocol Version 4 (BGP4) est un protocole de routage dynamique deacutecrit dans la RFC1771 Il permet la distribution des informations de connectiviteacute cest agrave dire les tables de routage vers dautresnoeuds BGP4 actifs Il peut ecirctre utiliseacute comme un EGP ou un IGP Dans le mode EGP chaque noeud doitavoir son propre numeacutero de systegraveme autonome ( utonomous System (AS)) BGP4 supporte etlaggreacutegation de routes (reacuteunir plusieurs routes en une seule) gt The Border Gateway Protocol Version 4(BGP4) is a dynamic routing gt protocol described in RFC 1771 It allows the distribution of gt reachabilityinformation ie routing tables to other BGP4 gt enabled nodes It can either be used as EGP or IGP in EGPmode gt each node must have its own Autonomous System (AS) number gt BGP4 supports Classless InterDomain Routing (CIDR) and route gt aggregation (merge multiple routes into one)

scheacutema reacuteseau (Exemple)

Le scheacutema reacuteseau suivant est utiliseacute pour les exemples agrave suivre AS 1 et 50 ont plusieurs voisins mais nousavons seulement besoin de configurer 1 et 50 comme nos voisins Les noeuds communiquent entre eux pardes tunnels dans cet exemple mais ce nest pas une obligation

Note les numeacuteros AS utiliseacutes dans cet exemple sont reacuteserveacutes Veuillez obtenir vos propres numeacuteros AS duRIPE si vous installez des liens officiels

-------------------- | 192168231224 | | AS 23 | -------------------- ------------------ ------------------ | 1921681124 |-------| 10101116 | | AS 1 | | AS 50 | ------------------ ------------------

Configuration (Exemple)

La configuration suivante est eacutecrite pour le noeud 192168231224 et elle sera facile agrave adapter pour les autresnoeuds

Elle commence par des eacuteleacutements geacuteneacuteraux comme le nom de lhocircte les mots de passe et les options de debug

hostname hostname anakin

login password password xxx

enable password (super user mode) enable password xxx

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

110 Configurer BGP4 avec Zebra

path to logfile log file varlogzebrabgpdlog

debugging be verbose (can be removed afterwards) debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates

La liste de controcircle daccegraves (Access list) est utiliseacutee pour limiter la redistribution aux reacuteseaux priveacutes (RFC1918)

RFC 1918 networks access-list local_nets permit 1921680016 access-list local_nets permit 172160012 access-list local_nets permit 100008 access-list local_nets deny any

Letape suivante consiste agrave configurer chaque AS

Own AS number router bgp 23

IP address of the router bgp router-id 1921682312

announce our own network to other neighbors network 19216823024

advertise all connected routes (= directly attached interfaces) redistribute connected

advertise kernel routes (= manually inserted routes) redistribute kernel

Chaque section router bgp contient une liste de voisins auquels le routeur est connecteacute

neighbor 19216811 remote-as 1 neighbor 19216811 distribute-list local_nets in neighbor 101011 remote-as 50 neighbor 101011 distribute-list local_nets in

Veacuterification de la configuration

Note vtysh est un multiplexeur qui connecte toutes les interfaces utilisateur de zebra ensemble

anakin sh ip bgp summary BGP router identifier 1921682312 local AS number 23 2 BGP AS-PATH entries 0 BGP community entries

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd 101001 4 50 35 40 0 0 0 002840 1 19216811 4 1 27574 27644 0 0 0 032604 14

Total number of neighbors 2 anakin anakin sh ip bgp neighbors 101001 BGP neighbor is 101001 remote AS 50 local AS 23 external link

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration (Exemple) 111

BGP version 4 remote router ID 101001 BGP state = Established up for 002901 anakin

Voyons quelles routes nous avons obtenues de nos voisins

anakin sh ip ro bgp Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Bgt 172160014 [200] via 19216811 tun0 2d10h19m Bgt 172300016 [200] via 19216811 tun0 100924 Bgt 19216851032 [200] via 19216811 tun0 2d10h27m Bgt 19216852632 [200] via 19216811 tun0 100924 Bgt 19216853632 [200] via 19216811 tun0 2d10h19m Bgt 19216817024 [200] via 19216811 tun0 3d05h07m Bgt 19216817132 [200] via 19216811 tun0 3d05h07m Bgt 19216832024 [200] via 19216811 tun0 2d10h27m anakin

Chapitre 18 Autres possibiliteacutesCe chapitre est une liste des projets ayant une relation avec le routage avanceacute et la mise en forme du traficsous Linux Certains de ces liens meacuteriteraient des chapitres speacutecifiques dautres sont tregraves bien documenteacutes etnont pas besoin de HOWTO en plus

Impleacutementation VLAN 8021Q pour Linux (site)VLAN est une faccedilon tregraves sympa de diviser vos reacuteseaux dune maniegravere plus virtuelle que physique Debonnes informations sur les VLAN pourront ecirctre trouveacutees ici Avec cette impleacutementation votre boiteLinux pourra dialoguer VLAN avec des machines comme les Cisco Catalyst 3ComamplcubCorebuilder Netbuilder II SuperStack II switch 630amprcub Extreme Ntwks Summit 48Foundry amplcubServerIronXL FastIronamprcub

Impleacutementation alternative VLAN 8021Q pour Linux(site)Une impleacutementation alternative de VLAN pour Linux Ce projet a deacutemarreacute suite au deacutesaccord aveclarchitecture et le style de codage du projet VLAN eacutetabli avec comme reacutesultat une structure delensemble plus clair Mise agrave jour a eacuteteacute inclus dans le noyau 2414 (peut-ecirctre dans le 2413)

Un bon HOWTO agrave propos des VLAN peut ecirctre trouveacute ici

Mise agrave jour a eacuteteacute inclue dans le noyau agrave partir de la version 2414 (peut-ecirctre 13)Serveur Linux Virtuel (Linux Virtual Server )(site)

Ces personnes sont tregraves talentueuses Le Serveur Virtuel Linux est un serveur agrave haute disponibiliteacutehautement eacutevolutif construit autour dune grappe (cluster) de serveurs avec un eacutequilibreur de chargetournant sur le systegraveme dexploitation Linux Larchitecture du cluster est transparente pour lesutilisateurs finaux qui ne voient quun simple serveur virtuel

En reacutesumeacute que vous ayez besoin deacutequilibrer votre charge ou de controcircler votre trafic LVS aura unemaniegravere de le faire Certaines de leurs techniques sont positivement diaboliques Par exemple ilspermettent agrave plusieurs machines davoir une mecircme adresse IP mais en deacutesactivant lARP dessusSeule la machine LVS qui a elle lARP actif deacutecide de lhocircte qui manipulera le paquet entrantCelui-ci est envoyeacute avec la bonne adresse MAC au serveur choisi Le trafic sortant passe directementpar le routeur et non par la machine LVS qui par conseacutequent na pas besoin de voir vos 5Gbits dedonneacutees allant sur Internet Cette machine LVS ne peut alors pas ecirctre un goulot deacutetranglement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

112 Chapitre 18 Autres possibiliteacutes

Limpleacutementation de LVS neacutecessite une mise agrave jour pour les noyaux 20 et 22 alors quun moduleNetfilter est disponible dans le 24 Il ny a donc pas besoin de mise agrave jour pour cette version dunoyau Le support 24 est encore en deacuteveloppement Battez-vous donc avec et envoyez voscommentaires ou vos mises agrave jour

CBQinit (site)Configurer CBQ peut ecirctre un peu intimidant speacutecialement si votre seul souhait est de mettre en formele trafic dordinateurs placeacutes derriegravere un routeur CBQinit peut vous aider agrave configurer Linux agrave laidedune syntaxe simplifieacutee

Par exemple si vous voulez que tous les ordinateurs de votre reacuteseau 1921681024 (sur eth110 Mbits) aient leur vitesse de teacuteleacutechargement limiteacutee agrave 28 Kbits remplissez le fichier deconfiguration de CBQinit avec ce qui suit

DEVICE=eth110Mbit1MbitRATE=28KbitWEIGHT=2KbitPRIO=5RULE=1921681024

Utiliser simplement ce programme si le comment et pourquoi ne vous inteacuteresse pas Nous utilisonsCBQinit en production et il marche tregraves bien On peut mecircme faire des choses plus avanceacutees commela mise en forme deacutependant du temps La documentation est directement inteacutegreacutee dans le script ce quiexplique labsence dun fichier README

Scripts faciles de mise en forme Chronox(site)Stephan Mueller (smuellerchronoxde) a eacutecrit deux scripts utiles limitconn et shaper Lepremier vous permet de maicirctriser une session de teacuteleacutechargement comme ceci

limitconn -s SERVERIP -p SERVERPORT -l LIMIT

Il fonctionne avec Linux 22 et 24

Le second script est plus compliqueacute et peut ecirctre utiliseacute pour mettre en place des files dattentediffeacuterentes baseacutees sur les regravegles iptables Celles-ci sont utiliseacutees pour marquer les paquets qui sontalors mis en forme

Impleacutementation du Protocole Redondant Routeur Virtuel (site)Ceci est purement pour la redondance Deux machines avec leurs propres adresses IP et MAC creacuteentune troisiegraveme adresse IP et MAC virtuelle Bien que destineacute agrave lorigine uniquement aux routeurs quiont besoin dadresses MAC constantes cela marche eacutegalement pour les autres serveurs

La beauteacute de cette approche est lincroyable faciliteacute de la configuration Pas de compilation de noyauou de neacutecessiteacute de mise agrave jour tout se passe dans lespace utilisateur

Lancer simplement ceci sur toutes les machines participant au service

vrrpd -i eth0 -v 50 100022

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 18 Autres possibiliteacutes 113

Et vous voilagrave opeacuterationnel 100022 est maintenant geacutereacute par lun de vos serveurs probablement lepremier agrave avoir lanceacute le deacutemon vrrp Deacuteconnectez maintenant cet ordinateur du reacuteseau et tregravesrapidement ladresse 100022 et ladresse MAC seront geacutereacutees par lun des autres ordinateurs

Jai essayeacute ceci et il a eacuteteacute actif et opeacuterationnel en 1 minute Pour une raison eacutetrange ma passerelle pardeacutefaut a eacuteteacute supprimeacutee Cependant loption -n permet de preacutevenir cela

Voici une deacutefaillance en direct

64 bytes from 100022 icmp_seq=3 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=4 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=5 ttl=255 time=168 ms64 bytes from 100022 icmp_seq=6 ttl=255 time=18 ms64 bytes from 100022 icmp_seq=7 ttl=255 time=17 ms

Pas un paquet ping na eacuteteacute perdu Apregraves 4 paquets jai deacuteconnecteacute mon P200 du reacuteseau et mon 486a pris le relais ce qui est visible par laugmentation du temps de latence

Chapitre 19 Lectures suppleacutementaireshttpsnafufreedomorglinux22iproute-noteshtml

Contient beaucoup dinformations techniques et de commentaires sur le noyauhttpwwwdavinottawaoncaols

Transparents de Jamal Hadi Salim un des auteurs du controcircleur de trafic de Linuxhttpdefiantcoinetcomiproute2ip-cref

Version HTML de la documentation LaTeX dAlexeys explique une partie diproute2 en deacutetailshttpwwwaciriorgfloydcbqhtml

Sally Floyd a une bonne page sur CBQ incluant ses publications originales Aucune nest speacutecifique agraveLinux mais il y a un travail de discussion sur la theacuteorie et lutilisation de CBQ Contenu tregravestechnique mais une bonne lecture pour ceux qui sont inteacuteresseacutes

Differentiated Services on LinuxThis document par Werner Almesberger Jamal Hadi Salim et Alexey Kuznetsov Deacutecrit les fonctionsDiffServ du noyau Linux entre autres les gestionnaires de mise en file dattente TBF GREDDSMARK et le classificateur tcindex

httpcetipl~ekravietzcbqNET4_tchtmlUn autre HOWTO en polonais Vous pouvez cependant copiercoller les lignes de commandes ellesfonctionnent de la mecircme faccedilon dans toutes les langues Lauteur travaille en collaboration avec nouset sera peut ecirctre bientocirct un auteur de sections de cet HOWTO

IOS Committed Access RateDes gens de Cisco qui ont pris la louable habitude de mettre leur documentation en ligne La syntaxede Cisco est diffeacuterente mais les concepts sont identiques sauf quon fait mieux et sans mateacuterielcoutant le prix dune voiture -)

TCPIP Illustrated volume 1 W Richard Stevens ISBN 0-201-63346-9Sa lecture est indispensable si vous voulez reacuteellement comprendre TCPIP et de plus elle estdivertissante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

114 Chapitre 19 Lectures suppleacutementaires

Chapitre 20 RemerciementsNotre but est de faire la liste de toutes les personnes qui ont contribueacute agrave ce HOWTO ou qui nous ont aideacutes agraveexpliquer le fonctionnement des choses Alors quil nexiste pas actuellement de tableau dhonneur Netfilternous souhaitons saluer les personnes qui apportent leur aide

Junk Alins

ltjuanjomatupcesgt

bull

Joe Van Andelbull Michael T Babcock

ltmbabcockfibrespeednetgt

bull

Christopher Barton

ltcpbartonuiucedugt

bull

Peter Bieringer

ltpbbieringerdegt

bull

Ard van Breemen

ltardkwaaknetgt

bull

Ron Brinker

ltserviceemciscomgt

bull

ukasz Bromirski

ltlbromirskimr0vkaeuorggt

bull

Lennert Buytenhek

ltbuytenhgnuorggt

bull

Esteve Camps

ltestevehadesudgesgt

bull

Ricardo Javier Cardenes

ltricardoconysiscomgt

bull

Stef Coene

ltstefcoenedocumorggt

bull

Don Cohen

ltdon-lartcisiscs3-inccomgt

bull

Jonathan Corbet

ltlwnlwnnetgt

bull

Gerry N5JXS Creager

ltgerrycstamuedugt

bull

Marco Davids

ltmarcosaranlgt

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 115

Jonathan Day

ltjd9812my-dejacomgt

bull

Martin aka devik Devera

ltdevikcdiczgt

bull

Hannes Ebner

lthefli4ldegt

bull

Derek Fawcus

ltdfawcusciscocomgt

bull

David Fries

ltdfriesmailwinorggt

bull

Stephan Kobold Gehring

ltStephanGehringbechtledegt

bull

Jacek Glinkowski

ltjglinkowhnscomgt

bull

Andrea Glorioso

ltsamaperchetopiorggt

bull

Thomas Graaf

lttgrafsuugchgt

bull

Sandy Harris

ltsandystormcagt

bull

Nadeem Hasan

ltnhasanusanetgt

bull

Erik Hensema

lterikhensemaxs4allnlgt

bull

Vik Heyndrickx

ltvikheyndrickxedchqcomgt

bull

Spauldo Da Hippie

ltspauldousanetgt

bull

Koos van den Hout

ltkooskzdoosxs4allnlgt

bull

Stefan Huelbrock ltshuelbrockdatasystemsdegtbull Ayotunde Itayemi

ltaitayemimetrongcomgt

bull

Alexander W Janssen ltyallaynfonaticdegtbull Andreas Jellinghaus ltajdungeoninkadegtbull Gareth John ltgdjohnzeplerorggtbull Dave Johnsonbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

116 Chapitre 20 Remerciements

ltdjwwwuklinuxorggtMartin Josefsson ltgandalfwlugwestbosegtbull Andi Kleen ltaksusedegtbull Andreas J Koenig ltandreaskoeniganimadegtbull Pawel Krawczyk ltkravietzalfacetiplgtbull Amit Kucheria ltamitkittckuedugtbull Edmund Lau ltedlauucficsuciedugtbull Philippe Latu ltphilippelatulinux-franceorggtbull Arthur van Leeuwen ltarthurvlscikunnlgtbull Jose Luis Domingo Lopez

ltjdomingo24x7linuxcomgt

bull

Robert Lowe

ltroberthlowelawrenceedugt

bull

Jason Lunz ltjccgatechedugtbull Stuart Lynne ltslfireplugnetgtbull Alexey Mahotkin ltalexmformulabezrugtbull Predrag Malicevic ltpmalicieeeorggtbull Patrick McHardy ltkabertrashnetgtbull Andreas Mohr ltandilisasdegtbull James Morris ltjmorrisintercodecomaugtbull Andrew Morton ltakpmzipcomaugtbull Wim van der Mostbull Stephan Mueller ltsmuellerchronoxdegtbull Togan Muftuoglu lttoganmyahoocomgtbull Chris Murray ltcmurraystargatecagtbull Patrick Nagelschmidt ltdtogmxnetgtbull Ram Narula ltramprincess1netgtbull Jorge Novo ltjnovoeducanetnetgtbull Patrik ltphkurdnugtbull Pl Osgyny ltoplabwestel900netgtbull Lutz Preszligler ltLutzPresslerSerNetDEgtbull Jason Pyeron ltjasonpyeroncomgtbull Rod Roark ltrodsunsetsystemscomgtbull Pavel Roskin ltproskignuorggtbull Rusty Russell ltrustyrustcorpcomaugtbull Mihai RUSU ltdizzyroedunetgtbull Rob Pitman ltrobpitmancozagtbull Jamal Hadi Salim lthadicyberuscagtbull Ren Serral ltrserralacupcesgtbull David Sauer ltdavidspenguinczgtbull Sheharyar Suleman Shaikh ltsss23drexeledugtbull Stewart Shields ltMourningBladebigfootcomgtbull Nick Silberstein ltnhsilberyahoocomgtbull Konrads Smelkov ltkonradsinterbaltikacomgtbull William Stearns

ltwstearnspoboxcomgt

bull

Andreas Steinmetz ltastdomdvdegtbull Matthew Strait ltstraitmmathcscarletonedugtbull Jason Tackaberry lttacklinuxcomgtbull Charles Tassell ltctassellisnnetgtbull Glen Turner ltglenturneraarneteduaugtbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 117

Tea Sponsor Eric Veldhuyzen ltericterranugtbull Thomas Walpuski ltthomasbenderthinknerddegtbull Song Wang ltwsongeceuciedugtbull Chris Wilson

ltchrisnetserverscoukgt

bull

Lazar Yanackiev

ltLyanackievgmxnetgt

bull

Pedro Larroy

ltpiotrmemberfsforggt

Chaptitre 15 section 10 Exemple dune solution de translation dadresse avec de la QoSdiams Chaptitre 17 section 1 Configurer OSPF avec Zebradiams

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

118 Chapitre 20 Remerciements

  • HOWTO du routage avanceacute et du controcircle de trafic sous Linux
Page 3: HOWTO du routage avanc© et du contr´le de trafic sous Linux

Interopeacuterabiliteacute dIPSEC avec dautres systegravemesWindowsCheck Point VPN-1 NG

8 Routage multidistribution (multicast)9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en file dattenteGestionnaires de mise en file dattente simples sans classes

pfifoamplowbarfastFiltre agrave seau de jetons (Token Bucket Filter)Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

Conseils pour le choix de la file dattenteterminologieGestionnaires de file dattente baseacutes sur les classes

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur des classesLa famille des gestionnaires de mise en file dattente racines descripteurs descendances etparentsLe gestionnaire de mise en file dattente PRIOLe ceacutelegravebre gestionnaire de mise en file dattente CBQSeau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Classifier des paquets avec des filtresQuelques exemples simples de filtrageToutes les commandes de filtres dont vous aurez normalement besoin

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediate queueing device (IMQ))Configuration simple

10 Eacutequilibrage de charge sur plusieurs interfacesAvertissement

11 Netfilter et iproute - marquage de paquets12 Filtres avanceacutes pour la (re-)classification des paquets

Le classificateur u32Le seacutelecteur U32Seacutelecteurs geacuteneacuterauxLes seacutelecteurs speacutecifiques

Le classificateur routeLes filtres de reacuteglementation (Policing filters)

Techniques de reacuteglementationActions de deacutepassement de limite (Overlimit actions)Exemples

Filtres hacheacutes pour un filtrage massif tregraves rapideFiltrer le trafic IPv6

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas Marquer les paquets IPv6 en utilisant ip6tablesUtiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

13 Paramegravetres reacuteseau du noyauFiltrage de Chemin Inverse (Reverse Path Filtering)Configurations obscures

ipv4 geacuteneacuteriqueConfiguration des peacuteripheacuteriquesPolitique de voisinageConfiguration du routage

14 Gestionnaires de mise en file dattente avanceacutes amp moins communsbfifopfifo

Paramegravetres amp usageAlgorithme Clark-Shenker-Zhang (CSZ)DSMARK

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Laurent Foucher 3

IntroductionA quoi DSMARK est-il relieacute Guide des services diffeacuterencieacutesTravailler avec DSMARKComment SCHamplowbarDSMARK travailleLe filtre TCamplowbarINDEX

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)Paramegravetres amp usage

Random Early Detection (RED)Generic Random Early DetectionEmulation VCATMWeighted Round Robin (WRR)

15 Recettes de cuisineFaire tourner plusieurs sites avec diffeacuterentes SLA (autorisations)Proteacuteger votre machine des inondations SYNLimiter le deacutebit ICMP pour empecirccher les deacutenis de serviceDonner la prioriteacute au trafic interactifCache web transparent utilisant netfilter iproute2 ipchains et squid

Scheacutema du trafic apregraves limpleacutementationCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

SolutionCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en imposant le MSS (pour lesutilisateurs de lADSL du cacircble de PPPoE amp PPtP)Le Conditionneur de Trafic Ultime Faible temps de latence Teacuteleacutechargement vers lamont et lavalrapide

Pourquoi cela ne marche t-il pas bien par deacutefaut Le script (CBQ)Le script (HTB)

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseauExemple dune solution de translation dadresse avec de la QoS

Commenccedilons loptimisation de cette rare bande passanteClassification des paquetsAmeacuteliorer notre configurationRendre tout ceci actif au deacutemarrage

16 Construire des ponts et des pseudo ponts avec du Proxy ARPEtat des ponts et iptablesPont et mise en formePseudo-pont avec du Proxy-ARP

ARP amp Proxy-ARPImpleacutementez-le

17 Routage Dynamique - OSPF et BGPConfigurer OSPF avec Zebra

PreacuterequisConfigurer ZebraExeacutecuter Zebra

Configurer BGP4 avec Zebrascheacutema reacuteseau (Exemple)Configuration (Exemple)Veacuterification de la configuration

18 Autres possibiliteacutes19 Lectures suppleacutementaires20 Remerciements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

4 Laurent Foucher

Chapitre 1 DeacutedicaceCe document est deacutedieacute agrave beaucoup de gens dans ma tentative de tous me les rappeler je peux en citerquelques-uns

Rusty Russellbull Alexey N Kuznetsovbull La fine eacutequipe de Googlebull Leacutequipe de Casema Internetbull

Chapitre 2 IntroductionBienvenue cher lecteur

Ce document a pour but de vous eacuteclairer sur la maniegravere de faire du routage avanceacute avec Linux 2224Meacuteconnus par les utilisateurs les outils standard de ces noyaux permettent de faire des choses spectaculairesLes commandes comme route et ifconfig sont des interfaces vraiment pauvres par rapport agrave la grandepuissance potentielle diproute2

Jespegravere que ce HOWTO deviendra aussi lisible que ceux de Rusty Russell tregraves reacuteputeacute (parmi dautres choses)pour son netfilter

Vous pouvez nous contacter en nous eacutecrivant agrave leacutequipe HOWTO Cependant postez sil vous plaicirct vosquestions sur la liste de diffusion (voir la section correspondante) pour celles qui ne sont pas directement lieacuteesagrave ce HOWTO

Avant de vous perdre dans ce HOWTO si la seule chose que vous souhaitez faire est de la simple mise enforme de trafic allez directement au chapitre Autres possibiliteacutesgt et lisez ce qui concerne CBQinit

Conditions de distribution et Mise en garde

Ce document est distribueacute dans lespoir quil sera utile et utiliseacute mais SANS AUCUNE GARANTIE sansmecircme une garantie implicite de qualiteacute leacutegale et marchande ni aptitude agrave un quelconque usage

En un mot si votre dorsale STM-64 est tombeacutee ou distribue de la pornographie agrave vos estimeacutes clients celanest pas de notre faute Deacutesoleacute

Copyright (c) 2001 par Bert Hubert Gregory Maxwell et Martijn van Oosterhout Remco van Mook Paul BSchroeder et autres Ce document ne peut ecirctre distribueacute quen respectant les termes et les conditions exposeacutesdans la Open Publication License v10 ou supeacuterieure (la derniegravere version est actuellement disponible surhttpwwwopencontentorgopenpub)

Copiez et distribuez (vendez ou donnez) librement ce document dans nimporte quel format Les demandes decorrections etou de commentaires sont agrave adresser agrave la personne qui maintient ce document

Il est aussi demandeacute que si vous publiez cet HOWTO sur un support papier vous en envoyiez desexemplaires aux auteurs pour une ltlt relecture critique gtgt -)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 2 Introduction 5

Connaissances preacutealables

Comme le titre limplique ceci est un HOWTO ltlt avanceacute gtgt Bien quil ne soit pas besoin decirctre un expertreacuteseau certains preacute-requis sont neacutecessaires

Voici dautres reacutefeacuterences qui pourront vous aider agrave en apprendre plus

Rusty Russells networking-concepts-HOWTOTregraves bonne introduction expliquant ce quest un reacuteseau et comment on le connecte agrave dautres reacuteseaux

Linux Networking-HOWTO (ex Net-3 HOWTO)Excellent document bien que tregraves bavard Il vous apprendra beaucoup de choses qui sont deacutejagraveconfigureacutees si vous ecirctes capable de vous connecter agrave Internet Il peut eacuteventuellement ecirctre situeacute agraveusrdocHOWTONET-HOWTOtxt mais peut eacutegalement ecirctre trouveacute en ligne

Ce que Linux peut faire pour vous

Une petite liste des choses qui sont possibles

Limiter la bande passante pour certains ordinateursbull Limiter la bande passante VERS certains ordinateursbull Vous aider agrave partager eacutequitablement votre bande passantebull Proteacuteger votre reacuteseau des attaques de type Deacuteni de Servicebull Proteacuteger Internet de vos clientsbull Multiplexer plusieurs serveurs en un seul pour leacutequilibrage de charge ou une disponibiliteacute ameacutelioreacuteebull Restreindre laccegraves agrave vos ordinateursbull Limiter laccegraves de vos utilisateurs vers dautres hocirctesbull Faire du routage baseacute sur lID utilisateur (eh oui ) ladresse MAC ladresse IP source le port le typede service lheure ou le contenu

bull

Peu de personnes utilisent couramment ces fonctionnaliteacutes avanceacutees Il y a plusieurs raisons agrave cela Bien quela documentation soit fournie la prise en main est difficile Les commandes de controcircle du trafic ne sontpratiquement pas documenteacutees

Notes diverses

Il y a plusieurs choses qui doivent ecirctre noteacutees au sujet de ce document Bien que jen ai eacutecrit la majeure partieje ne veux vraiment pas quil reste tel quel Je crois beaucoup agrave lOpen Source je vous encourage donc agraveenvoyer des remarques des mises agrave jour des corrections etc Nheacutesitez pas agrave mavertir des coquilles ouderreurs pures et simples Si mon anglais vous paraicirct parfois peu naturel ayez en tecircte sil vous plaicirct quelanglais nest pas ma langue natale Nheacutesitez pas agrave menvoyer vos suggestions amplsqbNdT en anglais ]

Si vous pensez que vous ecirctes plus qualifieacute que moi pour maintenir une section ou si vous pensez que vouspouvez eacutecrire et maintenir de nouvelles sections vous ecirctes le bienvenu La version SGML de ce HOWTO estdisponible via CVS Jenvisage que dautres personnes puissent travailler dessus

Pour vous aider vous trouverez beaucoup de mentions FIXME (NdT A CORRIGER) Les corrections sonttoujours les bienvenues Si vous trouvez une mention FIXME vous saurez que vous ecirctes en territoire inconnuCela ne veut pas dire quil ny a pas derreurs ailleurs faites donc tregraves attention Si vous avez valideacute quelquechose faites-nous le savoir ce qui nous permettra de retirer la mention FIXME

Je prendrai quelques liberteacutes tout au long de cet HOWTO Par exemple je pars de lhypothegravese duneconnexion Internet agrave 10 Mbits bien que je sache tregraves bien que cela ne soit pas vraiment courant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

6 Connaissances preacutealables

Accegraves CVS et propositions de mises agrave jour

Ladresse canonique de cet HOWTO est Ici

Nous avons maintenant un CVS en accegraves anonyme disponible depuis le monde entier Cela est inteacuteressantpour plusieurs raisons Vous pouvez facilement teacuteleacutecharger les nouvelles versions de ce HOWTO et soumettredes mises agrave jour

En outre cela permet aux auteurs de travailler sur la source de faccedilon indeacutependante ce qui est une bonne choseaussi

$ export CVSROOT=pserveranonoutpostds9anlvarcvsroot$ cvs loginCVS password [enter cvs (sans les caractegraveres )]$ cvs co 24routingcvs server Updating 24routingU 24routinglartcdb

Si vous avez fait des changements et que vous vouliez contribuer au HOWTO exeacutecutez cvs -z3 diff-uBb et envoyez-nous le reacutesultat par courrier eacutelectronique de faccedilon agrave pouvoir facilement inteacutegrer lesmodifications Merci Au fait soyez sucircr que vous avez eacutediteacute le fichier db les autres documents eacutetant geacuteneacutereacutesagrave partir de celui-ci

Un fichier Makefile est fourni pour vous aider agrave creacuteer des fichiers PostScript dvi pdf html et texte Vouspouvez avoir agrave installer les docbook docbook-utils ghostscript et tetex pour obtenir tous les formats de sortie

Faites attention de ne pas eacutediter le fichier 24routingsgml Il contient une ancienne version du HOWTO Lebon fichier est lartcdb

Liste de diffusion

Les auteurs reccediloivent de plus en plus de courriers eacutelectroniques agrave propos de cet HOWTO Vu linteacuterecirct de lacommunauteacute il a eacuteteacute deacutecideacute la mise en place dune liste de diffusion ougrave les personnes pourront discuter duroutage avanceacute et du controcircle de trafic Vous pouvez vous abonner agrave la liste ici

Il devra ecirctre noteacute que les auteurs sont tregraves heacutesitants agrave reacutepondre agrave des questions qui nont pas eacuteteacute poseacutees sur laliste Nous aimerions que la liste devienne une sorte de base de connaissance Si vous avez une questionrecherchez sil vous plaicirct dabord dans larchive et ensuite postez-lagrave dans la liste de diffusion

Plan du document

Nous allons essayer de faire des manipulations inteacuteressantes degraves le deacutebut ce qui veut dire que tout ne sera pasexpliqueacute en deacutetail tout de suite Veuillez passer sur ces deacutetails et accepter de consideacuterer quils deviendrontclairs par la suite

Le routage et le filtrage sont deux choses distinctes Le filtrage est tregraves bien documenteacute dans le HOWTO deRusty disponible ici

Rustys Remarkably Unreliable Guidesbull

Nous nous focaliserons principalement sur ce quil est possible de faire en combinant netfilter et iproute2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Accegraves CVS et propositions de mises agrave jour 7

Chapitre 3 Introduction agrave iproute2

Pourquoi iproute2

La plupart des distributions Linux et des UNIX utilisent couramment les veacuteneacuterables commandes arp ifconfiget route Bien que ces outils fonctionnent ils montrent quelques comportements inattendus avec les noyauxLinux des seacuteries 22 et plus Par exemple les tunnels GRE font partie inteacutegrante du routage de nos jours maisils neacutecessitent des outils complegravetement diffeacuterents

Avec iproute2 les tunnels font partie inteacutegrante des outils

Les noyaux Linux des seacuteries 22 et plus ont un sous-systegraveme reacuteseau complegravetement reacuteeacutecrit Ce nouveau codagede la partie reacuteseau apporte agrave Linux des performances et des fonctionnaliteacutes qui nont pratiquement pasdeacutequivalent parmi les autres systegravemes dexploitation En fait le nouveau logiciel de filtrage routage et declassification possegravede plus de fonctionnaliteacutes que les logiciels fournis sur beaucoup de routeurs deacutedieacutes depare-feu et de produits de mise en forme (shaping) du trafic

Dans les systegravemes dexploitation existants au fur et agrave mesure que de nouveaux concepts reacuteseau apparaissaientles deacuteveloppeurs sont parvenus agrave les greffer sur les structures existantes Ce travail constant dempilage decouches a conduit agrave des codes reacuteseau aux comportements eacutetranges un peu comme les langues humaines Dansle passeacute Linux eacutemulait le mode de fonctionnement de SunOS ce qui neacutetait pas lideacuteal

La nouvelle structure diproute2 a permis de formuler clairement des fonctionnaliteacutes impossibles agraveimpleacutementer dans le sous-systegraveme reacuteseau preacuteceacutedent

Un tour dhorizon diproute2

Linux possegravede un systegraveme sophistiqueacute dallocation de bande passante appeleacute Controcircle de trafic (TrafficControl) Ce systegraveme supporte diffeacuterentes meacutethodes pour classer ranger par ordre de prioriteacute partager etlimiter le trafic entrant et sortant

Nous commencerons par un petit tour dhorizon des possibiliteacutes diproute2

Preacuterequis

Vous devez ecirctre sucircr que vous avez installeacute les outils utilisateur (NdT userland tools par opposition agrave la partieltlt noyau gtgt diproute2) Le paquet concerneacute sappelle iproute sur RedHat et Debian Autrement il peut ecirctretrouveacute agrave ftpftpinracruip-routingiproute2-224-now-sstargz

Vous pouvez aussi essayer iproute2-currenttargz pour la derniegravere version

Certains eacuteleacutements diproute vous imposent lactivation de certaines options du noyau Il devra eacutegalement ecirctrenoteacute que toutes les versions de RedHat jusquagrave la version 62 incluse nont pas les fonctionnaliteacutes du controcirclede trafic activeacutees dans le noyau fourni par deacutefaut

RedHat 72 contient tous les eacuteleacutements par deacutefaut

Soyez eacutegalement sucircr que vous avez le support netlink mecircme si vous devez choisir de compiler votrepropre noyau iproute2 en a besoin

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

8 Chapitre 3 Introduction agrave iproute2

Explorer votre configuration courante

Cela peut vous paraicirctre surprenant mais iproute2 est deacutejagrave configureacute Les commandes courantes ifconfig etroute utilisent deacutejagrave les appels systegraveme avanceacutes diproute2 mais essentiellement avec les options par deacutefaut(cest-agrave-dire ennuyeuses)

Loutil ip est central et nous allons lui demander de nous montrer les interfaces

ip nous montre nos liens

[ahuhome ahu]$ ip link list1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 0000000000002 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff4 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp

La sortie peut varier mais voici ce qui est afficheacute pour mon routeur NAT (NdT translation dadresse) chezmoi Jexpliquerai seulement une partie de la sortie dans la mesure ougrave tout nest pas directement pertinent

La premiegravere interface que nous voyons est linterface loopback Bien que votre ordinateur puissefonctionner sans je vous le deacuteconseille La taille de MTU (uniteacute maximum de transmission) est de 3924octets et loopback nest pas supposeacute ecirctre mis en file dattente ce qui prend tout son sens dans la mesure ougravecette interface est le fruit de limagination de votre noyau

Je vais passer sur linterface dummy pour linstant et il se peut quelle ne soit pas preacutesente sur votre ordinateurIl y a ensuite mes deux interfaces physiques lune du cocircteacute de mon modem cacircble lautre servant mon segmentethernet agrave la maison De plus nous voyons une interface ppp0

Notons labsence dadresses IP Iproute deacuteconnecte les concepts de ltlt liens gtgt et ltlt dadresses IP gtgt AveclIP aliasing le concept de ladresse IP canonique est devenu de toute faccedilon sans signification

ip nous montre bien cependant ladresse MAC lidentifiant mateacuteriel de nos interfaces ethernet

ip nous montre nos adresses IP

[ahuhome ahu]$ ip address show 1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 000000000000 inet 1270018 brd 127255255255 scope host lo2 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff inet 100018 brd 10255255255 scope global eth04 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp inet 2126494251 peer 2126494132 scope global ppp0

Cela contient plus dinformations ip montre toutes nos adresses et agrave quelles cartes elles appartiennent inetsignifie Internet (IPv4) Il y a beaucoup dautres familles dadresses mais elles ne nous concernent pas pour le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explorer votre configuration courante 9

moment

Examinons linterface eth0 de plus pregraves Il est dit quelle est relieacutee agrave ladresse internet 100018Quest-ce que cela signifie Le 8 deacutesigne le nombre de bits reacuteserveacutes agrave ladresse reacuteseau Il y a 32 bits donc ilreste 24 bits pour deacutesigner une partie de notre reacuteseau Les 8 premiers bits de 10001 correspondent agrave10000 notre adresse reacuteseau et notre masque de sous-reacuteseau est 255000

Les autres bits repegraverent des machines directement connecteacutees agrave cette interface Donc 10250313 estdirectement disponible sur eth0 comme lest 10001 dans notre exemple

Avec ppp0 le mecircme concept existe bien que les nombres soient diffeacuterents Son adresse est2126494251 sans masque de sous-reacuteseau Cela signifie que vous avez une liaison point agrave point et quetoutes les adresses agrave lexception de 2126494251 sont distantes Il y a cependant plus dinformationsEn effet on nous dit que de lautre cocircteacute du lien il ny a encore quune seule adresse 21264941 Le 32nous preacutecise quil ny a pas de ltlt bits reacuteseau gtgt

Il est absolument vital que vous compreniez ces concepts Reacutefeacuterez-vous agrave la documentation mentionneacutee audeacutebut de ce HOWTO si vous avez des doutes

Vous pouvez aussi noter qdisc qui deacutesigne la gestion de la mise en file dattente (Queueing Discipline)Cela deviendra vital plus tard

ip nous montre nos routes

Nous savons maintenant comment trouver les adresses 10xyz et nous sommes capables datteindre21264941 Cela nest cependant pas suffisant et nous avons besoin dinstructions pour atteindre lemonde LInternet est disponible via notre connexion PPP et il se trouve que 21264941 est precirct agravepropager nos paquets agrave travers le monde et agrave nous renvoyer le reacutesultat

[ahuhome ahu]$ ip route show21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Cela se comprend de soi-mecircme Les 4 premiegraveres lignes donnent explicitement ce qui eacutetait sous-entendu parip address show la derniegravere ligne nous indiquant que le reste du monde peut ecirctre trouveacute via21264941 notre passerelle par deacutefaut Nous pouvons voir que cest une passerelle agrave cause du motltlt via gtgt qui nous indique que nous avons besoin denvoyer les paquets vers 21264941 et que cestelle qui se chargera de tout

En reacutefeacuterence voici ce que lancien utilitaire route nous propose

[ahuhome ahu]$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref UseIface21264941 0000 255255255255 UH 0 0 0 ppp010000 0000 255000 U 0 0 0 eth0127000 0000 255000 U 0 0 0 lo0000 21264941 0000 UG 0 0 0 ppp0

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

10 ip nous montre nos adresses IP

ARP

ARP est le Protocole de Reacutesolution dAdresse (Address Resolution Protocol) Il est deacutecrit dans le RFC 826ARP est utiliseacute par une machine dun reacuteseau local pour retrouver ladresse mateacuterielle (la localisation) duneautre machine sur le mecircme reacuteseau Les machines sur Internet sont geacuteneacuteralement connues par leur nom auquelcorrespond une adresse IP Cest ainsi quune machine sur le reacuteseau foocom est capable de communiqueravec une autre machine qui est sur le reacuteseau barnet Une adresse IP cependant ne peut pas vous indiquerla localisation physique de la machine Cest ici que le protocole ARP entre en jeu

Prenons un exemple tregraves simple Supposons que jaie un reacuteseau composeacute de plusieurs machines dont lamachine foo dadresse IP 10001 et la machine bar qui a ladresse IP 10002 Maintenant fooveut envoyer un ping vers bar pour voir sil est actif mais foo na aucune indication sur la localisation debar Donc si foo deacutecide denvoyer un ping vers bar il a besoin denvoyer une requecircte ARP Cette requecircteARP est une faccedilon pour foo de crier sur le reacuteseau ltlt Bar (10002) Ougrave es-tu gtgt Par conseacutequent toutesles machines sur le reacuteseau entendront foo crier mais seul bar (10002) reacutepondra Bar enverra unereacuteponse ARP directement agrave foo ce qui revient agrave dire ltlt Foo (10001) je suis ici agrave ladresse006094E0812 gtgt Apregraves cette simple transaction utiliseacutee pour localiser son ami sur le reacuteseau foo estcapable de communiquer avec bar jusquagrave ce quil (le cache ARP de foo) oublie ougrave bar est situeacute(typiquement au bout de 15 minutes sur Unix)

Maintenant voyons comment cela fonctionne Vous pouvez consulter votre cache (table) ARP (neighbor)comme ceci

[rootespa041 homesrciputils] ip neigh show937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Comme vous pouvez le voir ma machine espa041 (937641) sait ougrave trouver espa042 (937642)et espagate (93761) Maintenant ajoutons une autre machine dans le cache ARP

[rootespa041 homepaulschgnome-desktop] ping -c 1 espa043PING espa043austinibmcom (937643) from 937641 56(84) bytes of data64 bytes from 937643 icmp_seq=0 ttl=255 time=09 ms

1 packets transmitted 1 packets received 0 packet lossround-trip minavgmax = 090909 ms

[rootespa041 homesrciputils] ip neigh show937643 dev eth0 lladdr 000629218020 nud reachable937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Par conseacutequent lorsque espa041 a essayeacute de contacter espa043 ladresse mateacuterielle de espa043 (salocalisation) a alors eacuteteacute ajouteacutee dans le cache ARP Donc tant que la dureacutee de vie de lentreacutee correspondant agraveespa043 dans le cache ARP nest pas deacutepasseacutee espa041 sait localiser espa043 et na plus besoindenvoyer de requecircte ARP

Maintenant effaccedilons espa043 de notre cache ARP

[rootespa041 homesrciputils] ip neigh delete 937643 dev eth0[rootespa041 homesrciputils] ip neigh show937643 dev eth0 nud failed937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud stale

Maintenant espa041 a agrave nouveau oublieacute la localisation despa043 et aura besoin denvoyer une autrerequecircte ARP la prochaine fois quil voudra communiquer avec lui Vous pouvez aussi voir ci-dessus que leacutetat

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP 11

despagate (93761) est passeacute en stale Cela signifie que la localisation connue est encore valide maisquelle devra ecirctre confirmeacutee agrave la premiegravere transaction avec cette machine

Chapitre 4 Regravegles - bases de donneacutees des politiquesde routageSi vous avez un routeur important il se peut que vous vouliez satisfaire les besoins de diffeacuterentes personnesqui peuvent ecirctre traiteacutees diffeacuteremment Les bases de donneacutees des politiques de routage vous aident agrave fairecela en geacuterant plusieurs ensembles de tables de routage

Si vous voulez utiliser cette fonctionnaliteacute assurez-vous que le noyau est compileacute avec les options IP Advanced router et IP policy routing

Quand le noyau doit prendre une deacutecision de routage il recherche quelle table consulter Par deacutefaut il y a troistables Lancien outil route modifie les tables principale (main) et locale (local) comme le fait loutil ip (pardeacutefaut)

Les regravegles par deacutefaut

[ahuhome ahu]$ ip rule list0 from all lookup local 32766 from all lookup main 32767 from all lookup default

Ceci liste la prioriteacute de toutes les regravegles Nous voyons que toutes les regravegles sont appliqueacutees agrave tous les paquets(from all) Nous avons vu la table main preacuteceacutedemment sa sortie seffectuant avec ip route ls mais lestables local et default sont nouvelles

Si nous voulons faire des choses fantaisistes nous pouvons creacuteer des regravegles qui pointent vers des tablesdiffeacuterentes et qui nous permettent de redeacutefinir les regravegles de routage du systegraveme

Pour savoir exactement ce que fait le noyau en preacutesence dun assortiment de regravegles plus complet reacutefeacuterez-vousagrave la documentation ip-cref dAlexey amplsqbNdT dans le paquetage iproute2 de votre distribution]

Politique de routage simple par ladresse source

Prenons encore une fois un exemple reacuteel Jai 2 modems cacircble connecteacutes agrave un routeur Linux NAT(masquerading) Les personnes habitant avec moi me paient pour avoir accegraves agrave Internet Supposons quun demes co-locataires consulte seulement hotmail et veuille payer moins Cest daccord pour moi mais il utiliserale modem le plus lent

Le modem cacircble ltlt rapide gtgt est connu sous 2126494251 et est en liaison PPP avec 21264941Le modem cacircble ltlt lent gtgt est connu sous diverses adresses IP 2126478148 dans notre exemple avecun lien vers 1959698253

La table locale

[ahuhome ahu]$ ip route list table localbroadcast 127255255255 dev lo proto kernel scope link src 127001 local 10001 dev eth0 proto kernel scope host src 10001 broadcast 10000 dev eth0 proto kernel scope link src 10001 local 2126494251 dev ppp0 proto kernel scope host src 2126494251 broadcast 10255255255 dev eth0 proto kernel scope link src 10001 broadcast 127000 dev lo proto kernel scope link src 127001

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

12 Chapitre 4 Regravegles - bases de donneacutees des politiques de routage

local 2126478148 dev ppp2 proto kernel scope host src 2126478148 local 127001 dev lo proto kernel scope host src 127001 local 1270008 dev lo proto kernel scope host src 127001

Il y a beaucoup de choses eacutevidentes mais aussi des choses qui ont besoin decirctre preacuteciseacutees quelque peu ce quenous allons faire La table de routage par deacutefaut est vide

Regardons la table principale (main)

[ahuhome ahu]$ ip route list table main 1959698253 dev ppp2 proto kernel scope link src 2126478148 21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Maintenant nous geacuteneacuterons une nouvelle regravegle que nous appellerons John pour notre hypotheacutetiqueco-locataire Bien que nous puissions travailler avec des nombres IP purs il est plus facile dajouter notre tabledans le fichier etciproute2rtamplowbartables

echo 200 John gtgt etciproute2rt_tables ip rule add from 100010 table John ip rule ls0 from all lookup local 32765 from 100010 lookup John32766 from all lookup main 32767 from all lookup default

Maintenant tout ce quil reste agrave faire est de geacuteneacuterer la table John et de vider le cache des routes

ip route add default via 1959698253 dev ppp2 table John ip route flush cache

Et voilagrave qui est fait Il ne reste plus comme exercice laisseacute au lecteur quagrave impleacutementer cela dans ip-up

Routage avec plusieurs accegraves Internetfournisseurs daccegraves

Une configuration classique est la suivante ougrave deux fournisseurs daccegraves permettent la connexion dun reacuteseaulocal (ou mecircme dune simple machine) agrave Internet

________ +--------------+ | | | +-------------+ Fournisseur 1+------- __ | | | ___ _ +------+-------+ +--------------+ | _ __ | if1 | | | || Reacuteseau Local -----+ Routeur Linux| | Internet _ __ | | | __ __ | if2 | ___ +------+-------+ +--------------+ | | | | +-------------+ Fournisseur 2+------- | | | +--------------+ ________

Il y a geacuteneacuteralement deux questions agrave se poser pour cette configuration

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de routage simple par ladresse source 13

Accegraves seacutepareacute

La premiegravere est de savoir comment router les reacuteponses aux paquets entrants par un fournisseur particulierdisons le Fournisseur 1 vers ce mecircme fournisseur

Commenccedilons par deacutefinir quelques symboles $IF1 sera le nom de la premiegravere interface (if1 sur la figureau-dessus) et $IF2 le nom de la deuxiegraveme interface $IP1 sera alors ladresse IP associeacutee agrave $IF1 et $IP2 seraladresse IP associeacutee agrave $IF2 $P1 sera ladresse IP de la passerelle du fournisseur daccegraves 1 et $P2 seraladresse IP de la passerelle du fournisseur daccegraves 2 Enfin $P1_NET sera ladresse reacuteseau agrave linteacuterieur duquelse situe $P1 et $P2_NET sera ladresse reacuteseau agrave linteacuterieur duquel se situe $P2

Deux tables de routage suppleacutementaires sont creacuteeacutees par exemple T1 et T2 Celles-ci sont ajouteacutees dansetciproute2rt_tables La configuration du routage dans ces tables seffectue de la faccedilonsuivante

ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2

Rien de vraiment spectaculaire Une route est simplement positionneacutee vers la passerelle et une route pardeacutefaut via cette passerelle est mise en place comme nous le ferions dans le cas dun seul fournisseur daccegravesIci les routes sont placeacutees dans des tables seacutepareacutees une par fournisseur daccegraves Il est agrave noter que la route versle reacuteseau suffit dans la mesure ougrave elle indique comment trouver nimporte quel hocircte dans ce reacuteseau ce quiinclut la passerelle

La table de routage principale est maintenant configureacutee Cest une bonne ideacutee de router les eacuteleacutements agravedestination dun voisin direct agrave travers linterface connecteacutee agrave ce voisin Notez les arguments src qui assurentque la bonne adresse IP source sera choisie

ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2

Indiquez maintenant votre preacutefeacuterence pour votre route par deacutefaut

ip route add default via $P1

Vous configurez ensuite les regravegles de routage Celles-ci deacutefinissent la table qui sera vraiment choisie pour leroutage Il faut sassurer que le routage seffectue agrave travers une interface donneacutee si vous avez ladresse sourcecorrespondante

ip rule add from $IP1 table T1 ip rule add from $IP2 table T2

Cet ensemble de commandes vous assure que toutes les reacuteponses au trafic entrant sur une interface particuliegravereseront envoyeacutees par cette interface

Avertissement

Notes dun lecteur si $P0_NET est le reacuteseau local et $IF0 est son interface alors les entreacutees suivantes sontdeacutesirables

ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

14 Accegraves seacutepareacute

ip route add 1270008 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 1270008 dev lo table T2

Nous avons maintenant une configuration tregraves basique Elle marchera pour tous les processus exeacutecuteacutes sur lerouteur lui-mecircme ainsi que pour le reacuteseau local si celui-ci est masqueacute Si ce nest pas le cas soit vous avezune plage dadresses IP pour chaque fournisseur daccegraves soit vous masquez vers lun des deux fournisseursdaccegraves Dans les deux cas vous ajouterez des regravegles indiquant en fonction de ladresse IP de la machine dureacuteseau local vers quel fournisseur vous allez router

Balance de charge

La seconde question concerne la balance de charge du trafic sortant vers les deux fournisseurs daccegraves Cecinest pas vraiment tregraves dur si vous avez deacutejagrave configureacute laccegraves seacutepareacute comme deacutecrit ci-dessus

Au lieu de choisir lun des deux fournisseurs daccegraves comme route par deacutefaut celle-ci peut ecirctre une routemulti-chemin Par deacutefaut le noyau reacutepartira les routes vers les deux fournisseurs daccegraves Ceci est reacutealiseacute de lafaccedilon suivante (construit eacutegalement sur lexemple de la section de laccegraves seacutepareacute)

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

Ceci reacutealisera la balance des routes vers les deux fournisseurs Les paramegravetres weight peuvent permettre defavoriser un fournisseur par rapport agrave un autre

Il est agrave noter que la balance de charge ne sera pas parfaite dans la mesure ougrave elle est baseacutee sur les routes et quecelles-ci sont mises dans des caches Ceci signifie que les routes vers les sites les plus souvent utiliseacutespasseront toujours par le mecircme fournisseur daccegraves

De plus si vous voulez vraiment mettre en oeuvre ceci vous devriez eacutegalement aller consulter les mises agrave jourde Julien Anastasov agrave httpwwwssibg~jaroutes Elles rendront le travail plus facile

Chapitre 5 GRE et autres tunnelsIl y a trois sortes de tunnels sous Linux lIP dans un tunnel IP le tunnel GRE et les tunnels qui existent endehors du noyau (comme PPTP par exemple)

Quelques remarques geacuteneacuterales agrave propos des tunnels

Les tunnels peuvent faire des choses tregraves inhabituelles et vraiment sympas Ils peuvent aussi absolument toutdeacutetraquer si vous ne les avez pas configureacutes correctement Ne deacutefinissez pas votre route par deacutefaut sur untunnel agrave moins que vous ne sachiez EXACTEMENT ce que vous faites

De plus le passage par un tunnel augmente le poids des en-tecirctes (overhead) puisquun en-tecircte IPsuppleacutementaire est neacutecessaire Typiquement ce surcoucirct est de 20 octets par paquet Donc si la taillemaximum de votre paquet sur votre reacuteseau (MTU) est de 1500 octets un paquet qui est envoyeacute agrave travers untunnel sera limiteacute agrave une taille de 1480 octets Ce nest pas neacutecessairement un problegraveme mais soyez sucircr davoirbien eacutetudieacute la fragmentation et le reacuteassemblage des paquets IP quand vous preacutevoyez de relier des reacuteseaux degrande taille par des tunnels Et bien sucircr la maniegravere la plus rapide de creuser un tunnel est de creuser des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 5 GRE et autres tunnels 15

cocircteacutes

IP dans un tunnel IP

Ce type de tunnel est disponible dans Linux depuis un long moment Il neacutecessite deux modules ipipo etnewamplowbartunnelo

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsInternet) Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C

et le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quel paquet de A vers B etvice-versa Il est eacutegalement possible dutiliser lInternet pour cela

Voici ce quil faut faire

Premiegraverement assurez-vous que les modules soient installeacutes

insmod ipipoinsmod new_tunnelo

Ensuite sur le routeur du reacuteseau A faites la chose suivante

ifconfig tunl0 10011 pointopoint 172192021route add -net 10020 netmask 2552552550 dev tunl0

et sur le routeur du reacuteseau B

ifconfig tunl0 10021 pointopoint 172161718route add -net 10010 netmask 2552552550 dev tunl0

Et quand vous aurez termineacute avec votre tunnel

ifconfig tunl0 down

Vite fait bien fait Vous ne pouvez pas transmettre les paquets de diffusion (broadcast) ni le trafic IPv6 agravetravers un tunnel IP-IP Vous ne pouvez connecter que deux reacuteseaux IPv4 qui normalement ne seraient pascapables de se ltlt parler gtgt cest tout Dans la mesure ougrave la compatibiliteacute a eacuteteacute conserveacutee ce code tournedepuis un bon moment et il reste compatible depuis les noyaux 13 Le tunnel Linux IP dans IP ne fonctionnepas avec dautres systegravemes dexploitation ou routeurs pour autant que je sache Cest simple ccedila marcheUtilisez-le si vous le pouvez autrement utilisez GRE

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

16 Quelques remarques geacuteneacuterales agrave propos des tunnels

Le tunnel GRE

GRE est un protocole de tunnel qui a eacuteteacute agrave lorigine deacuteveloppeacute par Cisco et qui peut reacutealiser plus de chosesque le tunnel IP dans IP Par exemple vous pouvez aussi transporter du trafic multi-diffusion (multicast) et delIPv6 agrave travers un tunnel GRE

Dans Linux vous aurez besoin du module ipamplowbargreo

Le tunnel IPv4

Dans un premier temps inteacuteressons-nous au tunnel IPv4

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsinternet)

Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C Appelons ce reacuteseau neta

Et pour le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C Appelons ce reacuteseau netb

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quels paquets de A vers B etvice-versa Comment et pourquoi on sen moque

Sur le routeur du reacuteseau A nous faisons la chose suivante

ip tunnel add netb mode gre remote 172192021 local 172161718 ttl 255ip link set netb upip addr add 10011 dev netbip route add 1002024 dev netb

Discutons un peu de cela Sur la ligne 1 nous avons ajouteacute un peacuteripheacuterique tunnel que nous avons appeleacutenetb (ce qui est eacutevident dans la mesure ougrave cest lagrave que nous voulons aller) De plus nous lui avons ditdutiliser le protocole GRE (mode gre) que ladresse distante est 172192021 (le routeur de lautrecocircteacute) que nos paquets ltlt tunneleacutes gtgt devront ecirctre geacuteneacutereacutes agrave partir de 172161718 (ce qui autorise votreserveur agrave avoir plusieurs adresses IP sur le reacuteseau C et ainsi vous permet de choisir laquelle sera utiliseacutee pourvotre tunnel) et que le champ TTL de vos paquets sera fixeacute agrave 255 (ttl 255)

La deuxiegraveme ligne active le peacuteripheacuterique

Sur la troisiegraveme ligne nous avons donneacute agrave cette nouvelle interface ladresse 10011 Cest bon pour depetits reacuteseaux mais quand vous commencez une exploitation miniegravere (BEAUCOUP de tunnels ) vouspouvez utiliser une autre gamme dadresses IP pour vos interfaces ltlt tunnel gtgt (dans cet exemple vouspourriez utiliser 10030)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le tunnel GRE 17

Sur la quatriegraveme ligne nous positionnons une route pour le reacuteseau B Notez la notation diffeacuterente pour lemasque de sous-reacuteseau Si vous necirctes pas familiariseacute avec cette notation voici comment ccedila marche vouseacutecrivez le masque de sous-reacuteseau sous sa forme binaire et vous comptez tous les 1 Si vous ne savez pascomment faire cela rappelez-vous juste que 255000 est 8 25525500 est 16 et2552552550 est 24 Et 2552552540 est 23 au cas ougrave ccedila vous inteacuteresserait

Mais arrecirctons ici et continuons avec le routeur du reacuteseau B

ip tunnel add neta mode gre remote 172161718 local 172192021 ttl 255ip link set neta upip addr add 10021 dev netaip route add 1001024 dev neta

Et quand vous voudrez retirer le tunnel sur le routeur A

ip link set netb downip tunnel del netb

Bien sucircr vous pouvez remplacer netb par neta pour le routeur B

Le tunnel IPv6

Voir la section 6 pour une courte description des adresses IPv6

Agrave propos des tunnels

Supposons que vous ayez le reacuteseau IPv6 suivant et que vous vouliez le connecter agrave une dorsale IPv6 (6bone)ou agrave un ami

Reacuteseau 3ffe406515a2196

Votre adresse IPv4 est 172161718 et le routeur 6bone a une adresse IPv4 172222324

ip tunnel add sixbone mode sit remote 172222324 local 172161718 ttl 255ip link set sixbone upip addr add 3ffe406515a2196 dev sixboneip route add 3ffe15 dev sixbone

Voyons cela de plus pregraves Sur la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique tunnel appeleacute sixboneNous lui avons affecteacute le mode sit (qui est le tunnel IPv6 sur IPv4) et lui avons dit ougrave lon va (remote) etdougrave lon vient (local) TTL est configureacute agrave son maximum 255 Ensuite nous avons rendu le peacuteripheacuteriqueactif (up) Puis nous avons ajouteacute notre propre adresse reacuteseau et configureacute une route pour 3ffe15 agravetravers le tunnel

Les tunnels GRE constituent actuellement le type de tunnel preacutefeacutereacute Cest un standard qui est largementadopteacute mecircme agrave lexteacuterieur de la communauteacute Linux ce qui constitue une bonne raison de lutiliser

Tunnels dans lespace utilisateur

Il y a des dizaines dimpleacutementations de tunnels agrave lexteacuterieur du noyau Les plus connues sont bien sucircr PPP etPPTP mais il y en a bien plus (certaines proprieacutetaires certaines seacutecuriseacutes dautres qui nutilisent pas IP) quideacutepassent le cadre de ce HOWTO

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

18 Le tunnel IPv4

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsaleIPv6 (6bone)Par Marco Davids ltmarcosaranlgt

NOTE au mainteneur

En ce qui me concerne ce tunnel IPv6-IPv4 nest pas par deacutefinition un tunnel GRE Vous pouvez reacutealiser untunnel IPv6 sur IPv4 au moyen des peacuteripheacuteriques tunnels GRE (tunnels GRE NIMPORTE QUOI vers IPv4)mais le peacuteripheacuterique utiliseacute ici (sit) ne permet que des tunnels IPv6 sur IPv4 ce qui est quelque chose dediffeacuterent

Tunnel IPv6

Voici une autre application des possibiliteacutes de tunnels de Linux Celle-ci est populaire parmi les premiersadeptes dIPv6 ou les pionniers si vous preacutefeacuterez Lexemple pratique deacutecrit ci-dessous nest certainement pas laseule maniegravere de reacutealiser un tunnel IPv6 Cependant cest la meacutethode qui est souvent utiliseacutee pour reacutealiser untunnel entre Linux et un routeur Cisco IPv6 et lexpeacuterience ma appris que cest ce type deacutequipement quebeaucoup de personnes ont Dix contre un que ceci sappliquera aussi pour vous -)

De petites choses agrave propos des adresses IPv6

Les adresses IPv6 sont en comparaison avec les adresses IPv4 vraiment grandes 128 bits contre 32 bits Etceci nous fournit la chose dont nous avons besoin beaucoup beaucoup dadresses IP 340282266920938463463374607431768211465 pour ecirctre preacutecis A part ceci IPv6 (ou IPnggeacuteneacuteration suivante (Next Generation)) est supposeacute fournir des tables de routage plus petites sur les routeursdes dorsales Internet une configuration plus simple des eacutequipements une meilleure seacutecuriteacute au niveau IP etun meilleur support pour la Qualiteacute de Service (QoS)

Un exemple 2002836b9820000000000000836b9886

Ecrire les adresses IPv6 peut ecirctre un peu lourd Il existe donc des regravegles qui rendent la vie plus facile

Ne pas utiliser les zeacuteros de tecircte comme dans IPv4 bull Utiliser des double-points de seacuteparation tous les 16 bits ou 2 octets bull Quand vous avez beaucoup de zeacuteros conseacutecutifs vous pouvez eacutecrire Vous ne pouvez cependantfaire cela quune seule fois par adresse et seulement pour une longueur de 16 bits

bull

Ladresse 2002836b9820000000000000836b9886 peut ecirctre eacutecrite2002836b9820836b9886 ce qui est plus amical

Un autre exemple ladresse 3ffe0000000000000000000034A1F32C peut ecirctre eacutecrite3ffe2034A1F32C ce qui est beaucoup plus court

IPv6 a pour but decirctre le successeur de lactuel IPv4 Dans la mesure ougrave cette technologie est relativementreacutecente il ny a pas encore de reacuteseau natif IPv6 agrave leacutechelle mondiale Pour permettre un deacuteveloppement rapidela dorsale IPv6 (6bone) a eacuteteacute introduite

Les reacuteseaux natifs IPv6 sont interconnecteacutes gracircce agrave lencapsulation du protocole IPv6 dans des paquets IPv4qui sont envoyeacutes agrave travers linfrastructure IPv4 existante dun site IPv6 agrave un autre

Cest dans cette situation que lon monte un tunnel

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone) 19

Pour ecirctre capable dutiliser IPv6 vous devrez avoir un noyau qui le supporte Il y a beaucoup de bonsdocuments qui expliquent la maniegravere de reacutealiser cela Mais tout se reacutesume agrave quelques eacutetapes

Reacutecupeacuterer une distribution Linux reacutecente avec une glibc convenablebull Reacutecupeacuterer alors les sources agrave jour du noyaubull

Si tout cela est fait vous pouvez alors poursuivre en compilant un noyau supportant lIPv6

Aller dans usrsrclinux et tapez bull make menuconfigbull Choisir Networking Optionsbull Seacutelectionner The IPv6 protocol IPv6 enable EUI-64 token format IPv6disable provider based addresses

bull

ASTUCE Ne compiler pas ces options en tant que module Ceci ne marchera souvent pas bien

En dautres termes compilez IPv6 directement dans votre noyau Vous pouvez alors sauvegarder votreconfiguration comme dhabitude et entreprendre la compilation de votre noyau

ASTUCE Avant de faire cela modifier votre Makefile comme suit EXTRAVERSION = -x --gt EXTRAVERSION = -x-IPv6

Il y a beaucoup de bonnes documentations sur la compilation et linstallation dun noyau Cependant cedocument ne traite pas de ce sujet Si vous rencontrez des problegravemes agrave ce niveau allez et recherchez dans ladocumentation des renseignements sur la compilation du noyau Linux correspondant agrave vos propresspeacutecifications

Le fichier usrsrclinuxREADME peut constituer un bon deacutepart Apregraves avoir reacutealiseacute tout ceci etredeacutemarreacute avec votre nouveau noyau flambant neuf vous pouvez lancer la commande sbinifconfig -a etnoter un nouveau peacuteripheacuterique sit0 SIT signifie Transition Simple dInternet (Simple Internet Transition)Vous pouvez vous auto complimenter vous avez maintenant franchi une eacutetape importante vers IP laprochaine geacuteneacuteration -)

Passons maintenant agrave leacutetape suivante Vous voulez connecter votre hocircte ou peut-ecirctre mecircme tout votre reacuteseauLAN agrave dautres reacuteseaux IPv6 Cela pourrait ecirctre la dorsale IPv6 ltlt 6bone gtgt qui a eacuteteacute speacutecialement mise enplace dans ce but particulier

Supposons que vous avez le reacuteseau IPv6 suivant 3ffe6046864 et que vous vouliez le connecter agraveune dorsale IPv6 ou agrave un ami Notez sil vous plaicirct que la notation sous-reacuteseau 64 est similaire agrave celle desadresses IPv4

Votre adresse IPv4 est 14510024181 et le routeur 6bone a ladresse IPv4 14510015

ip tunnel add sixbone mode sit remote 14510015 [local 14510024181 ttl 225] ip link set sixbone up ip addr add 3FFE60467296 dev sixbone ip route add 3ffe015 dev sixbone

Discutons de ceci Dans la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique appeleacute sixbone Nous lui avonsdonneacute lattribut sit (mode sit) (qui est le tunnel IPv6 dans IPv4) et nous lui avons dit ougrave aller (remote)et dougrave nous venions (local) TTL est configureacute agrave son maximum 255

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

20 Tunnel IPv6

Ensuite nous avons rendu le peacuteripheacuterique actif (up) Apregraves cela nous avons ajouteacute notre propre adressereacuteseau et configureacute une route pour 3ffe15 (qui est actuellement la totaliteacute du 6bone) agrave travers le tunnelSi la machine sur laquelle vous mettez en place tout ceci est votre passerelle IPv6 ajoutez alors les lignessuivantes

echo 1 gtprocsysnetipv6confallforwarding usrlocalsbinradvd

En derniegravere instruction radvd est un deacutemon dannonce comme zebra qui permet de supporter lesfonctionnaliteacutes dautoconfiguration dIPv6 Recherchez le avec votre moteur de recherche favori Vous pouvezveacuterifier les choses comme ceci

sbinip -f inet6 addr

Si vous arrivez agrave avoir radvd tournant sur votre passerelle IPv6 et que vous deacutemarrez une machine avec IPv6sur votre reacuteseau local vous serez ravi de voir les beacuteneacutefices de lautoconfiguration IPv6

sbinip -f inet6 addr1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue inet6 1128 scope host

3 eth0 ltBROADCASTMULTICASTUPgt mtu 1500 qdisc pfifo_fast qlen 100inet6 3ffe6046850544cfffe01e3d664 scope global dynamicvalid_lft forever preferred_lft 604646sec inet6 fe8050544cfffe01e3d610 scope link

Vous pouvez maintenant configurer votre serveur de noms pour les adresses IPv6 Le type A a un eacutequivalentpour IPv6 AAAA Leacutequivalent de in-addrarpa est ip6int Il y a beaucoup dinformationsdisponibles sur ce sujet

Il y a un nombre croissant dapplications IPv6 disponibles comme le shell seacutecuriseacute telnet inetd le navigateurMozilla le serveur web Apache et beaucoup dautres Mais ceci est en dehors du sujet de ce document deroutage -)

Du cocircteacute Cisco la configuration ressemblera agrave ceci

interface Tunnel1description IPv6 tunnelno ip addressno ip directed-broadcastipv6 address 3FFE60467196tunnel source Serial0tunnel destination 14510024181tunnel mode ipv6ipipv6 route 3FFE6046864 Tunnel1

Si vous navez pas un Cisco agrave votre disposition essayez un des prestataires de tunnel IPv6 disponible surInternet Ils sont precircts agrave configurer leur Cisco avec un tunnel suppleacutementaire pour vous le plus souvent aumoyen dune agreacuteable interface web Cherchez ipv6 tunnel broker avec votre moteur de recherche favori

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers InternetA ce jour deux versions dIPSEC sont disponibles pour Linux FreeSWAN qui fucirct la premiegravereimpleacutementation majeure existe pour les noyaux Linux 22 et 24 Ce projet a un site officiel et eacutegalement unsite non officiel qui est bien maintenu FreeSWAN na jamais eacuteteacute inteacutegreacute dans le noyau pour un certainnombre de raisons Celle qui est la plus souvent mentionneacutee concerne un problegraveme politique avec les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers Internet 21

ameacutericains travaillant sur la cryptographie qui freinent son exportabiliteacute De plus la mise en place deFreeSWAN dans le noyau Linux est deacutelicate ce qui nen fait pas un bon candidat pour une reacuteelle inteacutegration

De plus des personnes se sont inquieacuteteacutees de la qualiteacute du code Pour configurer FreeSWAN de nombreusesdocumentations sont disponibles

Une impleacutementation native dIPSEC est preacutesente dans le noyau agrave partir de la version Linux 2547 Elle a eacuteteacuteeacutecrite par Alexey Kuznetsov et Dave Miller qui se sont inspireacutes des travaux du groupe USAGI IPv6 Aveccette fusion les CryptoAPI de James Morris deviennent eacutegalement une partie du noyau qui fait ainsi vraimentdu cryptage

Ce HOWTO ne documente que la version 25 dIPSEC FreeSWAN est recommandeacute pour linstant pour lesutilisateurs de Linux 24 Faicirctes cependant attention dans la mesure ougrave sa configuration est diffeacuterente delIPSEC natif Il y a maintenant une mise agrave jour qui permet au code FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux

A partir du noyau 2549 IPSEC fonctionne sans lajout de mises agrave jour suppleacutementaires

Note Les outils de lespace utilisateur sont disponibles ici Il y a plusieurs programmesdisponibles celui qui est proposeacute dans le lien est baseacute sur Racoon

Lors de la compilation du noyau soyez sucircr dactiver PF_KEY AH et tous les eacuteleacutements deCryptoAPI

Avertissement

Lauteur de ce chapitre est un complet nigaud en ce qui concerne IPSEC Si vous trouvez les ineacutevitableserreurs envoyez un courrier eacutelectronique agrave Bert Hubert ltahuds9anlgt

Tout dabord nous montrerons comment configurer manuellement une communication seacutecuriseacutee entre deuxhocirctes Une grande partie de ce processus peut ecirctre automatiseacutee mais nous le ferons ici agrave la main afin decomprendre ce qui se passe sous le capot

Passez agrave la section suivante si la seule gestion automatique des cleacutes vous inteacuteresse Soyez cependant conscientque la compreacutehension de la gestion manuelle des cleacutes est utile

Introduction sur la gestion manuelle des cleacutes

IPSEC est un sujet compliqueacute De nombreuses informations sont disponibles en ligne Ce HOWTO seconcentrera sur la mise en place et agrave lexplication des principes de base Tous les exemples sont baseacutes surRacoon dont le lien est donneacute au-dessus

Note Certaines configurations iptables rejettent les paquets IPSEC Pour transmettreIPSEC utilisez iptables -A xxx -p 50 -j ACCEPT et iptables -A xxx -p 51 -j ACCEPT

IPSEC offre une version seacutecuriseacutee de la couche IP (Internet Protocol) La seacutecuriteacute dans ce contexte prend deuxformes lencryptage et lauthentification Une vision naiumlve de la seacutecuriteacute ne propose que le cryptage On peutcependant montrer facilement que cest insuffisant il se peut que vous ayez une communication crypteacutee maisvous navez aucune garantie que lhocircte distant est bien celui auquel vous pensez

IPSEC supporte Encapsulated Security Payload (Encapsulation Seacutecuriseacutee de la Charge utile) (ESP) pour lecryptage et Authentication Header (Entecircte dAuthentification) (AH) pour authentifier le partenaire distantVous pouvez configurer les deux ou deacutecider de ne faire que lun des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

22 Introduction sur la gestion manuelle des cleacutes

ESP et AH sappuient tous les deux sur des Associations de Seacutecuriteacute (Security Associations (SA)) UneAssociation de Seacutecuriteacute (SA) consiste en une source une destination et une instruction Un exemple simpledAssociation de Seacutecuriteacute (SA) pour lauthentification peut ressembler agrave ceci

add 100011 1000216 ah 15700 -A hmac-md5 1234567890123456

Ceci indique que le trafic allant de 100011 vers 1000216 a besoin dun En-tecircte dAuthentification(AH) qui peut ecirctre signeacute en utilisant HMAC-MD et le secret 1234567890123456 Cette instruction estrepeacutereacutee par lidentificateur SPI (Security Parameter Index)15700 dont nous parlerons plus par la suite Lepoint inteacuteressant agrave propos des Associations de Seacutecuriteacute (SA) est quelles sont symeacutetriques Les deux coteacutes dela conversation partagent exactement la mecircme Association de Seacutecuriteacute (SA) qui nest pas recopieacutee sur lhocirctedistant Notez cependant quil ny a pas de regravegles dinversion automatique Cette Association de Seacutecuriteacute(SA) deacutecrit une authentification possible de 100011 vers 1000216 Pour un trafic bidirectionneldeux Associations de Seacutecuriteacute (SA) sont neacutecessaires

Un exemple dAssociation de Seacutecuriteacute (SA) pour le cryptage ESP

add 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012

Ceci signifie que le trafic allant de 100011 vers 1000216 est chiffreacute en utilisant 3des-cbc avec lacleacute 123456789012123456789012 Lidentificateur SPI est 15701

Jusquici nous avons vu que les Associations de Seacutecuriteacute (SA) deacutecrivent les instructions possibles mais pas lapolitique qui indique quand ces SA doivent ecirctre utiliseacutees En fait il pourrait y avoir un nombre arbitraire deSA presques identiques ne se diffeacuterenciant que par les identificateurs SPI Entre parenthegraveses SPI signifieSecurity Parameter Index ou Index du Paramegravetre de Seacutecuriteacute en franccedilais Pour faire vraiment du cryptagenous devons deacutecrire une politique Cette politique peut inclure des choses comme utiliser ipsec sil estdisponible ou rejeter le trafic agrave moins que vous ayez ipsec

Une Politique de Seacutecuriteacute (Security Policy (SP)) typique ressemble agrave ceci

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Si cette configuration est appliqueacutee sur lhocircte 1000216 cela signifie que tout le trafic allant vers100011 doit ecirctre encrypteacute et encapsuleacute dans un en-tecircte dauthentification AH Notez que ceci ne deacutecritpas quelle SA sera utiliseacutee Cette deacutetermination est un exercice laisseacute agrave la charge du noyau

En dautres termes une Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons une Association de Seacutecuriteacutedeacutecrit COMMENT nous le voulons

Les paquets sortants sont eacutetiqueteacutes avec le SPI SA (le comment) que le noyau utilise pour lencryptage etlauthentification et lhocircte distant peut consulter les instructions de veacuterification et de deacutecryptagecorrespondantes

Ce qui suit est une configuration tregraves simple permettant le dialogue de lhocircte 1000216 vers lhocircte100011 en utilisant lencryptage et lauthentification Notez que le trafic de retour de cette premiegravereversion est en clair et que cette configuration ne doit pas ecirctre deacuteployeacutee

Sur lhocircte 1000216

sbinsetkey -f

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Introduction sur la gestion manuelle des cleacutes 23

add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456 add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Sur lhocircte 100011 nous donnons les mecircmes Associations de Seacutecuriteacute (SA) Nous ne donnons pas dePolitique de Seacutecuriteacute

sbinsetkey -fadd 1000216 100011 ah 24500 -A hmac-md5 1234567890123456add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

Avec la mise en place de la configuration ci-dessus (ces fichiers peuvent ecirctre exeacutecuteacutes si setkey est installeacutedans sbin) la commande ping 100011 exeacutecuteacutee sur 1000216 va donner la sortie suivante avec tcpdump

223752 1000216 gt 100011 AH(spi=0x00005fb4seq=0xa) ESP(spi=0x00005fb5seq=0xa) (DF)223752 100011 gt 1000216 icmp echo reply

Notez que le paquet de retour provenant de 100011 est en effet complegravetement visible Le paquet ping eacutemispar 1000216 ne peut eacutevidemment pas ecirctre lu par tcpdump mais celui-ci montre lIndex du Paramegravetre deSeacutecuriteacute (SPI) de lAH ainsi que lESP qui indique agrave 100011 comment veacuterifier lauthenticiteacute de notre paquetet comment le deacutecrypter

Quelques eacuteleacutements doivent ecirctre mentionneacutes La configuration ci-dessus est proposeacutee dans de nombreuxexemples dIPSEC mais elle est tregraves dangereuse Le problegraveme est quelle contient la politique indiquant agrave1000216 comment traiter les paquets allant vers 100011 et comment 100011 doit traiter ces paquetsmais ceci nINDIQUE pas agrave 100011 de rejeter le trafic non authentifieacute et non encrypteacute

Nimporte qui peut maintenant inseacuterer des donneacutees spoofeacutees (NdT usurpeacutees) et entiegraverement non crypteacuteesque 10001 acceptera Pour remeacutedier agrave ceci nous devons avoir sur 100011 une Politique de Seacutecuriteacute pourle trafic entrant

sbinsetkey -f spdadd 1000216 100011 any -P IN ipsec esptransportrequire ahtransportrequire

Ceci indique agrave 100011 que tout le trafic venant de 1000216 neacutecessite davoir un ESP et AH valide

Maintenant pour compleacuteter cette configuration nous devons eacutegalement renvoyer un trafic encrypteacute etauthentifieacute La configuration complegravete sur 1000216 est la suivante

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

24 Introduction sur la gestion manuelle des cleacutes

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire ahtransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 100011 1000216 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire ahtransportrequire

Notez que dans cet exemple nous avons utiliseacute des cleacutes identiques pour les deux directions du trafic Cecinest cependant en aucun cas exigeacute

Pour examiner la configuration que nous venons de creacuteer exeacutecuter setkey -D qui montre les SA ou setkey-DP qui montre les politiques configureacutees

Gestion automatique des cleacutes

Dans la section preacuteceacutedente lencryptage eacutetait configureacute pour utiliser simplement le partage de secrets Endautres termes pour rester seacutecuriseacute nous devons transfeacuterer la configuration de notre encryptage agrave travers untunnel seacutecuriseacute Si nous avons configureacute lhocircte distant par telnet nimporte quel tiers pourrait avoir prisconnaissance de notre secret partageacute et ainsi notre configuration ne serait plus sucircre

De plus puisque le secret est partageacute ce nest pas un secret Lhocircte distant ne peut pas en faire grand chosemais nous devons ecirctre sucircrs dutiliser un secret diffeacuterent pour les communications avec tous nos partenairesCeci neacutecessite un grand nombre de cleacutes Pour 10 partenaires nous devrions avoir au moins 50 secretsdiffeacuterents

En plus du problegraveme des cleacutes symeacutetriques le renouvellement des cleacutes est eacutegalement neacutecessaire Si un tierseacutecoute suffisamment le trafic il peut ecirctre en position de retrouver la cleacute par reacutetro ingeacutenierie On peut senpreacutemunir en modifiant la cleacute de temps en temps mais ce processus a besoin decirctre automatiseacute

Un autre problegraveme est que la gestion manuelle des cleacutes deacutecrite au-dessus impose de deacutefinir preacuteciseacutement lesalgorithmes et les longueurs de cleacutes utiliseacutees ce qui neacutecessite une grande coordination avec lhocircte distant Il

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestion automatique des cleacutes 25

serait preacutefeacuterable davoir la capaciteacute agrave deacutecrire une politique des cleacutes plus large comme par exemple Nouspouvons faire du 3DES et du Blowfish avec les longueurs de cleacutes suivantes

Pour reacutesoudre ces problegravemes IPSEC fournit lEchange de Cleacute sur Internet (Internet Key Echange (IKE))permettant dautomatiser leacutechange de cleacutes geacuteneacutereacutees aleacuteatoirement Ces cleacutes sont transmises en utilisant unetechnologie dencryptage asymeacutetrique neacutegocieacutee

Limpleacutementation IPSEC de Linux 25 fonctionne avec le deacutemon IKE KAME racoon Depuis le 9novembre la version de racoon preacutesente la distribution iptools dAlexey peut ecirctre compileacutee en supprimant aupreacutealable include ltnetroutehgt dans deux fichiers Je fournis une version preacutecompileacutee

Note LEchange de Cleacute sur Internet (IKE) doit avoir accegraves au port UDP 500 Soyez sucircr queiptables ne le bloque pas

Theacuteorie

Comme expliqueacute avant la gestion automatique des cleacutes reacutealise beaucoup dopeacuterations pour nousSpeacutecifiquement il creacutee agrave la voleacutee les Associations de Seacutecuriteacute Il ne configure cependant pas la politique pournous ce qui est le fonctionnement attendu

Donc pour beacuteneacuteficier de IKE configurez une politique mais ne fournissez aucune Association de Seacutecuriteacute Sile noyau deacutecouvre quil y a une politique IPSEC mais pas dAssociation de Seacutecuriteacute il va le notifier au deacutemonIKE qui va chercher agrave en neacutegocier une

De nouveau rappelons que la Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons tandis que lAssociation deSeacutecuriteacute deacutecrit COMMENT nous le voulons Lutilisation de la gestion automatique des cleacutes nous permet dene speacutecifier que ce que nous voulons

Exemple

Kame racoon possegravede un grand nombre doptions dont la plupart des valeurs par deacutefaut sont corrects nousnavons donc pas besoin de les modifier Comme nous lavons dit auparavant lopeacuterateur doit deacutefinir unePolitique de Seacutecuriteacute mais pas dAssociations de Seacutecuriteacute Nous laissons cette neacutegociation au deacutemon IKE

Dans cet exemple 10001 et 1000216 sont encore une fois sur le point deacutetablir des communicationsseacutecuriseacutees mais cette fois avec laide du deacutemon racoon Par soucis de simplification cette configurationutilisera des cleacutes preacute-partageacutees les redouteacutes secrets partageacutes Nous discuterons des certificats X509 dans unesection agrave part Voir la section intituleacutee Gestion automatique des cleacutes en utilisant les certificats X509gt

Nous allons agrave peu pregraves rester fidegravele agrave la configuration par deacutefaut qui est identique sur les deux hocirctes

path pre_shared_key usrlocaletcracoonpsktxt

remote anonymous exchange_mode aggressivemain doi ipsec_doi situation identity_only

my_identifier address

lifetime time 2 min secminhour initial_contact on proposal_check obey obey strict or claim

proposal encryption_algorithm 3des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

26 Theacuteorie

hash_algorithm sha1 authentication_method pre_shared_key dh_group 2

sainfo anonymous pfs_group 1 lifetime time 2 min encryption_algorithm 3des authentication_algorithm hmac_sha1 compression_algorithm deflate

Beaucoup de paramegravetres Je pense que lon peut encore en supprimer pour se rapprocher de la configurationpar deacutefaut Remarquons ici quelques eacuteleacutements notables Nous avons configureacute deux sections anonymous cequi convient pour tous les hocirctes distants Ceci va ainsi faciliter les configurations suppleacutementaires Il nest pasneacutecessaire davoir de sections speacutecifiques agrave une machine particuliegravere agrave moins que vous ne le vouliez vraiment

De plus la configuration preacutecise que nous nous identifions gracircce agrave notre adresse IP (my_identifier address) etque nous pouvons faire du 3des sha1 et que nous utiliserons une cleacute preacute-partageacutee se trouvant dans psktxt

Dans le fichier psktxt nous avons configureacute deux entreacutees qui sont diffeacuterentes suivant les hocirctes Sur100011

1000216 password2

Sur 1000216

100011 password2

Soyez sucircr que ces fichiers sont la proprieacuteteacute de root et quils ont le mode 0600 Dans le cas contraire racoonne pourra faire confiance agrave leur contenu Notez que ces fichiers sont symeacutetriques lun de lautre

Nous sommes maintenant precirct agrave configurer notre politique qui est assez simple Sur lhocircte 1000216

sbinsetkey -fflushspdflush

spdadd 1000216 100011 any -P out ipsec esptransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

spdadd 100011 1000216 any -P out ipsec esptransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire

Noter que ces politiques sont encore une fois symeacutetriques

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exemple 27

Nous sommes maintenant precirct agrave lancer racoon Une fois lanceacute au moment ougrave nous essayons une connexionun telnet depuis 100011 vers 1000216 ou linverse racoon aura deacutemarreacute la neacutegociation

121844 INFO isakmpc1689isakmp_post_acquire() IPsec-SA request for 100011 queued due to no phase1 found121844 INFO isakmpc794isakmp_ph1begin_i() initiate new phase 1 negotiation 1000216[500]lt=gt100011[500]121844 INFO isakmpc799isakmp_ph1begin_i() begin Aggressive mode121844 INFO vendoridc128check_vendorid() received Vendor ID KAMEracoon121844 NOTIFY oakleyc2037oakley_skeyid() couldnt find the proper pskey try to get one by the peers address121844 INFO isakmpc2417log_ph1established() ISAKMP-SA established 1000216[500]-100011[500] spi044d25dede78a4d1ff01e5b4804f0680121845 INFO isakmpc938isakmp_ph2begin_i() initiate new phase 2 negotiation 1000216[0]lt=gt100011[0]121845 INFO pfkeyc1106pk_recvupdate() IPsec-SA established ESPTransport 100011-gt1000216 spi=44556347(0x2a7e03b)121845 INFO pfkeyc1318pk_recvadd() IPsec-SA established ESPTransport 1000216-gt100011 spi=15863890(0xf21052)

Lexeacutecution de la commande setkey -D qui nous montre les Associations de Seacutecuriteacute nous indique quellessont en effet preacutesentes

1000216 100011 esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000) E 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04 A hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99 seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last Nov 11 122912 2002 hard 0(s) soft 0(s) current 304(bytes) hard 0(bytes) soft 0(bytes) allocated 3 hard 0 soft 0 sadb_seq=1 pid=17112 refcnt=0100011 1000216 esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000) E 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a A hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last hard 0(s) soft 0(s) current 231(bytes) hard 0(bytes) soft 0(bytes) allocated 2 hard 0 soft 0 sadb_seq=0 pid=17112 refcnt=0

Nous avons les Politiques de Seacutecuriteacute que nous avons nous-mecircme configureacutees

100011[any] 1000216[any] tcp in ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122912 2002 lifetime0(s) validtime0(s) spid=3616 seq=5 pid=17134 refcnt=31000216[any] 100011[any] tcp out ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122844 2002 lifetime0(s) validtime0(s) spid=3609 seq=4 pid=17134 refcnt=3

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

28 Exemple

Problegravemes et deacutefauts connus

Si cela ne marche pas veacuterifiez que tous les fichiers de configuration sont la proprieacuteteacute de root et quils nepeuvent ecirctre lus que par celui-ci Pour deacutemarrer racoon en avant-plan utilisez -F Pour le forcer agrave lire unfichier de configuration agrave la place de celui preacuteciseacute lors de la compilation utilisez -f Pour obtenir denombreux deacutetails ajouter loption log debug dans le fichier racoonconf

Gestion automatique des cleacutes en utilisant les certificats X509

Comme nous lavons dit avant lutilisation de secrets partageacutes est compliqueacutee car ils ne peuvent pas ecirctrefacilement partageacutes et une fois quils le sont ils ne sont plus secrets Heureusement nous avons latechnologie dencryptage asymmeacutetrique pour nous aider agrave reacutesoudre ce problegraveme

Si chaque participant dune liaison IPSEC creacutee une cleacute publique et priveacutee des communications seacutecuriseacuteespeuvent ecirctre mises en place par les deux parties en publiant leur cleacute publique et en configurant leur politique

Creacuteer une cleacute est relativement facile bien que cela exige un peu de travail Ce qui suit est baseacute sur loutilopenssl

Construire un certificat X509 pour votre hocircte

OpenSSL dispose dune importante infrastructure de gestions des clefs capable de geacuterer des clefs signeacutees ounon par une autoriteacute de certification Pour linstant nous avons besoin de court-circuiter toute cetteinfrastructure et de mettre en place une seacutecuriteacute de charlatan et de travailler sans autoriteacute de certification

Nous allons tout dabord creacuteer une requecircte de certificat (certificate request) pour notre hocircte appeleacute laptop

$ openssl req -new -nodes -newkey rsa1024 -sha1 -keyform PEM -keyout laptopprivate -outform PEM -out requestpem

Des questions nous sont poseacutees

Country Name (2 letter code) [AU]NLState or Province Name (full name) [Some-State]Locality Name (eg city) []DelftOrganization Name (eg company) [Internet Widgits Pty Ltd]Linux AdvancedRouting amp Traffic ControlOrganizational Unit Name (eg section) []laptopCommon Name (eg YOUR name) []bert hubertEmail Address []ahuds9anl

Please enter the following extra attributesto be sent with your certificate requestA challenge password []An optional company name []

Vous avez toute liberteacute quant aux reacuteponses Vous pouvez ou non mettre le nom dhocircte en fonction de vosbesoins de seacutecuriteacute Cest ce que nous avons fait dans cet exemple

Nous allons maintenant auto signer cette requecircte

$ openssl x509 -req -in requestpem -signkey laptopprivate -out laptoppublicSignature oksubject=C=NLL=DelftO=Linux Advanced Routing amp Traffic ControlOU=laptopCN=bert hubertEmail=ahuds9anl

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Problegravemes et deacutefauts connus 29

Getting Private key

Le fichier requestpem peut maintenant ecirctre eacutelimineacute

Reacutepeacutetez cette proceacutedure pour tous les hocirctes qui ont besoin dune cleacute Vous pouvez distribuer le fichier publicen toute impuniteacute mais garder le fichier private priveacute

Configuration et lancement

Une fois que nous avons les cleacutes publiques et priveacutees pour nos hocirctes nous pouvons indiquer agrave racoon de lesutiliser

Reprenons notre configuration preacuteceacutedente et les deux hocirctes 100011 (upstairs) et 1000216 (laptop)

Dans le fichier racoonconf preacutesent sur 100011 nous ajoutons

path certificate usrlocaletcracooncerts

remote 1000216 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

certificate_type x509 upstairspublic upstairsprivate

peers_certfile laptoppublic proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Ceci indique agrave racoon que les certificats se trouvent dans usrlocaletcracooncerts De plusil contient des eacuteleacutements speacutecifiques pour lhocircte distant 1000216

La ligne asn1dn indique agrave racoon que lidentification pour lhocircte local et distant doit ecirctre extraite des cleacutespubliques Ceci correspond agrave la ligne subject=C=NLL=DelftO=Linux Advanced Routing amp TrafficControlOU=laptopCN=bert hubertEmail=ahuds9anl donneacute au-dessus

La ligne certificate_type preacutecise lemplacement des cleacutes publiques et priveacutees locales La deacuteclarationpeers_certfile preacutecise agrave racoon que la cleacute publique de lhocircte distant se trouve dans le fichierlaptoppublic

La section proposal reste inchangeacutee par rapport agrave ce que nous avons vu plus tocirct agrave lexception deauthentification_method qui est maintenant rsasig ce qui indique lutilisation de cleacute RSA publiquepriveacuteepour lauthentification

La configuration ajouteacutee sur 1000216 est presque identique exception faite de lhabituelle symeacutetrie

path certificate usrlocaletcracooncerts

remote 100011 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

30 Construire un certificat X509 pour votre hocircte

certificate_type x509 laptoppublic laptopprivate

peers_certfile upstairspublic

proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Maintenant que nous avons ajouteacute ces eacuteleacutements sur les deux hocirctes la seule chose qui reste agrave faire est de mettreen place les fichiers contenant les cleacutes La machine upstairs doit avoir les fichiers upstairsprivateupstairspublic et laptoppublic placeacutes dans usrlocaletcracooncerts Soyez sucircrque le reacutepertoire est la proprieacuteteacute de root et quil possegravede les droits 0700 Dans le cas contraire racoon pourraitrefuser de lire le contenu de ce reacutepertoire

La machine laptop doit avoir les fichiers upstairsprivate upstairspublic etlaptoppublic placeacutes dans usrlocaletcracooncerts Autrement dit chaque hocircte doitavoir ses propres cleacutes publique et priveacutee et de plus la cleacute publique de lhocircte distant

Veacuterifiez que la Politique de Seacutecuriteacute est en place (exeacutecutez la commande spdadd vue dans la section intituleacuteeExemplegt) Lancez alors racoon et tout devrait fonctionner

Comment configurer des tunnels seacutecuriseacutes

Pour configurer des communications seacutecuriseacutees avec un hocircte distant nous devons eacutechanger des cleacutespubliques Bien quil ne soit pas neacutecessaire que la cleacute publique reste secregravete il est important decirctre sucircr quecette cleacute na pas eacuteteacute modifieacutee En dautres termes vous devez ecirctre certain quil ny a pas de man in the middle[NdT man in the middle est le nom dune attaque qui consiste agrave se placer entre lhocircte eacutemetteur et lhocircte dedestination]

Pour faciliter ceci OpenSSL propose la commande digest

$ openssl dgst upstairspublic MD5(upstairspublic)= 78a3bddafb4d681c1ca8ed4d23da4ff1

La seule chose que nous devons faire est de veacuterifier que notre partenaire distant voit la mecircme empreinte Cecipeut ecirctre effectueacute en se rencontrant physiquement ou par teacuteleacutephone en sassurant que le numeacutero de teacuteleacutephonede lhocircte distant na pas eacuteteacute envoyeacute dans le mecircme courrier eacutelectronique que celui qui contenait la cleacute

Une autre maniegravere de faire ceci est dutiliser un tiers de confiance qui exeacutecute le service dautoriteacute decertification (Certificate Authority) Cette autoriteacute de certification (CA) peut alors signer votre cleacute celle quenous avons nous-mecircme creacuteeacute au-dessus

tunnels IPSEC

Jusquici nous navons seulement consideacutereacute IPSEC dans le mode appeleacute transport ougrave les points terminauxcomprennent directement IPSEC Comme ceci nest pas souvent le cas il peut ecirctre neacutecessaire davoir desrouteurs qui eux seuls comprennent IPSEC et qui reacutealisent le travail pour les hocirctes se trouvant derriegravere euxCeci est appeleacute le mode tunnel

Configurer ceci est tregraves rapide Pour tunneler tout le trafic vers 1301610016 agrave partir de 1000216 via100011 nous eacuteditons ce qui suit sur 1000216

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration et lancement 31

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P out ipsec esptunnel1000216-100011require

Notez que loption -m tunnel est vitale Ceci configure tout dabord une Association de Seacutecuriteacute ESP entreles points terminaux de notre tunnel agrave savoir 1000216 et 100011

Nous allons ensuite reacuteellement configurer le tunnel On doit indiquer au noyau dencrypter tout le trafic de1000024 vers 13016100 De plus ce trafic doit ecirctre envoyeacute vers 100011

100011 a eacutegalement besoin decirctre configureacute

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P in ipsec esptunnel1000216-100011require

Notez que ceci est exactement identique agrave lexception du changement de -P out en -P in Les exemplespreacuteceacutedents nont configureacute le trafic que dans un seul sens Il est laisseacute comme exercice au lecteur le soin decompleacuteter lautre moitieacute du tunnel

Le nom de proxy ESP est eacutegalement donneacute pour cette configuration ce qui est un peu plus clair

Note Le tunnel IPSEC a besoin davoir la transmission IP activeacutee dans le noyau

Autre logiciel IPSEC

Thomas Walpuski preacutecise quil a eacutecrit une mise agrave jour pour que OpenBSD isakpmd puisse fonctionner avecLinux 25 IPSEC De plus la repository principale CVS de isakpmd contient maintenant le code Des notessont disponibles sur cette page

isakpmd est diffeacuterent de racoon mentionneacute au-dessus mais de nombreuses personnes lappreacutecient Il peut ecirctretrouveacute ici Dautres eacuteleacutements de lecture sur le CVS dOpenBSD ici Thomas a eacutegalement creacuteeacute un tarball pourceux qui ne sont pas habitueacutes agrave CVS ou patch

De plus des mises agrave jour sont disponibles pour permettre aux outils FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux 25 Vous pourrez les trouver ici

Interopeacuterabiliteacute dIPSEC avec dautres systegravemes

FIXME Ecrire ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

32 tunnels IPSEC

Windows

Andreas Jellinghaus ltajdungeoninkadegt rapporte win2k cela marche preacute-partage de cleacute et ladresse ippour lauthentification (je ne pense pas que windows supporte fdqn ou userfdqn) Les certificats devraienteacutegalement marcher mais cela na pas eacuteteacute essayeacute

Check Point VPN-1 NG

Peter Bieringer rapporte

Voici des reacutesultats (seul le mode tunnel a eacuteteacute testeacute auth=SHA1) DES ok 3DES ok AES-128 ok AES-192 non supporteacute par CP VPN-1 AES-256 ok CAST non supporteacute par le noyau Linux utiliseacute

Version Testeacutee FP4 aka R54 aka wAI

Plus dinformations ici

Chapitre 8 Routage multidistribution (multicast)FIXME Pas de reacutedacteur

Le Multicast-HOWTO est (relativement) ancien De ce fait il peut ecirctre impreacutecis ou induire en erreur agravecertains endroits

Avant que vous ne puissiez faire du routage multidistribution le noyau Linux a besoin decirctre configureacute poursupporter le type de routage multidistribution que vous voulez faire Ceci agrave son tour exige une deacutecision quantau choix du protocole de routage multidistribution que vous vous preacuteparez agrave utiliser Il y a essentiellementquatre types ltlt communs gtgt de protocoles DVMRP (la version multidistribution du protocole RIP unicast)MOSPF (la mecircme chose mais pour OSPF) PIM-SM (Protocol Independant Multicasting - Sparse Mode) quisuppose que les utilisateurs de nimporte quel groupe de multidistribution sont disperseacutes plutocirct que regroupeacutes)et PIM-DM (le mecircme mais Dense Mode) qui suppose quil y aura un regroupement significatif des utilisateursdun mecircme groupe de multidistribution

On pourra noter que ces options napparaissent pas dans le noyau Linux Ceci sexplique par le fait que leprotocole lui-mecircme est geacutereacute par une application de routage comme Zebra mrouted ou pind Cependant vousdevez avoir une bonne ideacutee de ce que vous allez utiliser de maniegravere agrave seacutelectionner les bonnes options dans lenoyau

Pour tout routage multidistribution vous avez forceacutement besoin de seacutelectionner les options multicastinget multicasting routing Ceci est suffisant pour DVMRP et MOSPF Dans le cas de PIM vous devezeacutegalement valider les options PIMv1 ou PIMv2 suivant que le reacuteseau que vous connectez utilise la version 1ou 2 du protocole PIM

Une fois que tout cela a eacuteteacute reacutealiseacute et que votre nouveau noyau a eacuteteacute compileacute vous verrez au deacutemarrage queIGMP est inclus dans la liste des protocoles IP Celui-ci est un protocole permettant de geacuterer les groupesmultidistribution Au moment de la reacutedaction Linux ne supportait que les versions 1 et 2 de IGMP bien quela version 3 existe et ait eacuteteacute documenteacutee Ceci ne va pas vraiment nous affecter dans la mesure ougrave IGMPv3 estencore trop reacutecent pour que ses fonctionnaliteacutes suppleacutementaires soient largement utiliseacutees Puisque IGMP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 8 Routage multidistribution (multicast) 33

soccupe des groupes seules les fonctionnaliteacutes preacutesentes dans la plus simple version de IGMP geacuterant ungroupe entier seront utiliseacutees IGMPv2 sera utiliseacute dans la plupart des cas bien que IGMPv1 puisse encoreecirctre rencontreacute

Jusque-lagrave cest bon Nous avons activeacute la multidistribution Nous devons dire au noyau de lutiliserconcregravetement Nous allons donc deacutemarrer le routage Ceci signifie que nous ajoutons un reacuteseau virtuel demultidistribution agrave la table du routeur

ip route add 2240004 dev eth0

(En supposant bien sucircr que vous diffusez agrave travers eth0 Remplacez-le par le peacuteripheacuterique de votre choix sineacutecessaire)

Maintenant dire agrave Linux de transmettre les paquets

echo 1 gt procsysnetipv4ipamplowbarforward

Arriveacute ici il se peut que vous vous demandiez si ceci va faire quelque chose Donc pour tester notreconnexion nous pinguons le groupe par deacutefaut 224001 pour voir si des machines sont preacutesentesToutes les machines du reacuteseau local avec la multidistribution activeacutee DEVRAIENT reacutepondre et aucune autreVous remarquerez quaucune des machines qui reacutepondent ne le fait avec ladresse IP 224001 Quellesurprise ) Ceci est une adresse de groupe (une ltlt diffusion gtgt pour les abonneacutes) et tous les membres dugroupe reacutepondront avec leur propre adresse et non celle du groupe

ping -c 2 224001

Maintenant vous ecirctes precirct agrave faire du vrai routage multidistribution Bien en supposant que vous ayez deuxreacuteseaux agrave router lun vers lautre

(A continuer )

Chapitre 9 Gestionnaires de mise en file dattentepour ladministration de la bande passanteQuand je lai deacutecouvert cela ma VRAIMENT souffleacute Linux 22 contient toutes les fonctionnaliteacutes pour lagestion de la bande passante de maniegravere comparable agrave un systegraveme deacutedieacute de haut niveau

Linux deacutepasse mecircme ce que lATM et le Frame peuvent fournir

Afin deacuteviter toute confusion voici les regravegles utiliseacutees par tc pour la speacutecification de la bande passante

mbps = 1024 kbps = 1024 1024 bps =gt bytes (octetss)mbit = 1024 kbit =gt kilo bitsmb = 1024 kb = 1024 1024 b =gt byte (octet)mbit = 1024 kbit =gt kilo bit

En interne les nombres sont stockeacutes en bps (octets) et b (octet)

Mais tc utilise luniteacute suivante lors de laffichage des deacutebits

1Mbit = 1024 Kbit = 1024 1024 bps =gt octetss

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

34 Chapitre 9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en filedattente

Avec la mise en file dattente nous deacuteterminons la maniegravere dont les donneacutees sont ENVOYEES Il est importantde comprendre que nous ne pouvons mettre en forme que les donneacutees que nous transmettons

Avec la maniegravere dont Internet travaille nous navons pas de controcircle direct sur ce que les personnes nousenvoient Cest un peu comme votre boicircte aux lettres (physique ) chez vous Il ny a pas de faccedilon dinfluencerle nombre de lettres que vous recevez agrave moins de contacter tout le monde

Cependant lInternet est principalement baseacute sur TCPIP qui possegravede quelques fonctionnaliteacutes qui vontpouvoir nous aider TCPIP na pas daptitude agrave connaicirctre les performances dun reacuteseau entre deux hocirctes Ilenvoie donc simplement des paquets de plus en plus rapidement (ltlt slow start gtgt) et quand des paquetscommencent agrave se perdre il ralentit car il na plus la possibiliteacute de les envoyer En fait cest un peu plus eacuteleacutegantque cela mais nous en dirons plus par la suite

Cest comme si vous ne lisiez que la moitieacute de votre courrier en espeacuterant que vos correspondants arrecircteront devous en envoyer Agrave la diffeacuterence que ccedila marche sur Internet -)

Si vous avez un routeur et que vous souhaitez eacuteviter que certains hocirctes de votre reacuteseau aient des vitesses deteacuteleacutechargement trop grandes vous aurez besoin de mettre en place de la mise en forme de trafic sur linterfaceINTERNE de votre routeur celle qui envoie les donneacutees vers vos propres ordinateurs

Vous devez eacutegalement ecirctre sucircr que vous controcirclez le goulot deacutetranglement de la liaison Si vous avez unecarte reacuteseau agrave 100Mbit et un routeur avec un lien agrave 256kbit vous devez vous assurer que vous nenvoyez pasplus de donneacutees que ce que le routeur peut manipuler Autrement ce sera le routeur qui controcirclera le lien etqui mettra en forme la bande passante disponible Nous devons pour ainsi dire ltlt ecirctre le proprieacutetaire de la filedattente gtgt et ecirctre le lien le plus lent de la chaicircne Heureusement cest facilement reacutealisable

Gestionnaires de mise en file dattente simples sans classes

Comme nous lavons deacutejagrave dit la gestion de mise en file dattente permet de modifier la faccedilon dont les donneacuteessont envoyeacutees Les gestionnaires de mise en file dattente sans classes sont ceux qui en gros acceptent lesdonneacutees et qui ne font que les reacuteordonner les retarder ou les jeter

Ils peuvent ecirctre utiliseacutes pour mettre en forme le trafic dune interface sans aucune subdivision Il estprimordial que vous compreniez cet aspect de la mise en file dattente avant de continuer sur les gestionnairesde mise en files dattente baseacutes sur des classes contenant dautres gestionnaires de mise en file dattente

Le gestionnaire le plus largement utiliseacute est de loin pfifoamplowbarfast qui est celui par deacutefaut Ceciexplique aussi pourquoi ces fonctionnaliteacutes avanceacutees sont si robustes Elles ne sont rien de plus ltlt quuneautre file dattente gtgt

Chacune de ces files dattente a ses forces et ses faiblesses Toutes nont peut-ecirctre pas eacuteteacute bien testeacutees

pfifoamplowbarfast

Cette file dattente comme son nom lindique premier entreacute premier sorti (First In First Out) signifie queles paquets ne subissent pas de traitements speacuteciaux En fait ce nest pas tout agrave fait vrai Cette file dattente atrois ltlt bandes gtgt A linteacuterieur de chacune de ces bandes des regravegles FIFO sappliquent Cependant tant quily a un paquet en attente dans la bande 0 la bande 1 ne sera pas traiteacutee Il en va de mecircme pour la bande 1 et labande 2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explication sur les files dattente et la gestion de la mise en file dattente 35

Le noyau prend en compte la valeur du champ Type de Service des paquets et prend soin dinseacuterer dans labande 0 les paquets ayant le bit ltlt deacutelai minimum gtgt activeacute

Ne pas confondre ce gestionnaire de mise en file dattente sans classes avec celui baseacute sur des classes PRIO Bien quils aient des comportements similaires pfifoamplowbarfast ne possegravede pas de classes et vous nepourrez pas y ajouter de nouveaux gestionnaires avec la commande tc

Paramegravetres amp usage

Vous ne pouvez pas configurer le gestionnaire pfifoamplowbarfast dans la mesure ougrave cest celui pardeacutefaut Voici sa configuration par deacutefaut

priomapDeacutetermine comment les prioriteacutes des paquets sont relieacutees aux bandes telles que deacutefinies par le noyauLa relation est eacutetablie en se basant sur loctet TOS du paquet qui ressemble agrave ceci

0 1 2 3 4 5 6 7+-----+-----+-----+-----+-----+-----+-----+-----+| | | || PRECEDENCE | TOS | MBZ || | | |+-----+-----+-----+-----+-----+-----+-----+-----+

Les quatre bits TOS (le champ TOS) sont deacutefinis comme suit

Binaire Deacutecimal Signification-----------------------------------------1000 8 Minimise le Deacutelai (Minimize delay) (md)0100 4 Maximalise le Deacutebit (Maximize throughput) (mt)0010 2 Maximalise la Fiabiliteacute (Maximize reliability) (mr)0001 1 Minimalise le Coucirct Moneacutetaire (Minimize monetary cost) (mmc)0000 0 Service Normal

Comme il y a 1 bit sur la droite de ces quatre bits la valeur reacuteelle du champ TOS est le double de lavaleur des bits TOS tcpdump -v -v fournit la valeur de tout le champ TOS et non pas seulementla valeur des quatre bits Cest la valeur que lon peut voir dans la premiegravere colonne du tableausuivant

TOS Bits Signification Prioriteacute Linux Bande------------------------------------------------------------------------0x0 0 Service Normal 0 Best Effort 10x2 1 Minimise le Coucirct Moneacutetaire (mmc) 1 Filler 20x4 2 Maximalise la Fiabiliteacute (mr) 0 Best Effort 10x6 3 mmc+mr 0 Best Effort 10x8 4 Maximalise le Deacutebit (mt) 2 Masse 20xa 5 mmc+mt 2 Masse 20xc 6 mr+mt 2 Masse 20xe 7 mmc+mr+mt 2 Masse 20x10 8 Minimise le Deacutelai (md) 6 Interactive 00x12 9 mmc+md 6 Interactive 00x14 10 mr+md 6 Interactive 00x16 11 mmc+mr+md 6 Interactive 00x18 12 mt+md 4 Int Masse 10x1a 13 mmc+mt+md 4 Int Masse 10x1c 14 mr+mt+md 4 Int Masse 10x1e 15 mmc+mr+mt+md 4 Int Masse 1

amplsqbNdT par flux de masse (bulk flow) il faut entendre ltlt gros flot de donneacutees transmises encontinu gtgt comme un transfert FTP A lopposeacute un flux interactif (interactive flow) correspond agravecelui geacuteneacutereacute par des requecirctes SSH]

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

36 pfifoamplowbarfast

Beaucoup de nombres La seconde colonne contient la valeur correspondante des quatre bits TOSsuivi de leur signification Par exemple 15 repreacutesente un paquet voulant un coucirct moneacutetaire minimalune fiabiliteacute maximum un deacutebit maximum ET un deacutelai minimum Jappellerai ceci un ltlt paquetHollandais gtgt

La quatriegraveme colonne liste la maniegravere dont le noyau Linux interpregravete les bits TOS en indiquant agravequelle prioriteacute ils sont relieacutes

La derniegravere colonne montre la carte des prioriteacutes par deacutefaut Sur la ligne de commande la carte desprioriteacutes ressemble agrave ceci

1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Ceci signifie par exemple que la prioriteacute 4 sera relieacutee agrave la bande numeacutero 1 La carte des prioriteacutesvous permet eacutegalement de lister des prioriteacutes plus grandes (gt 7) qui ne correspondent pas agrave unerelation avec le champ TOS mais qui sont configureacutees par dautres moyens

Le tableau suivant provenant de la RFC 1349 (agrave lire pour plus de deacutetails) indique comment lesapplications devraient configurer leurs bits TOS pour fonctionner correctement

TELNET 1000 (minimise le deacutelai)FTP Controcircle 1000 (minimise le deacutelai) Donneacutees 0100 (maximalise le deacutebit)

TFTP 1000 (minimise le deacutelai)

SMTP phase de commande 1000 (minimise le deacutelai) phase DATA 0100 (maximalise le deacutebit)

Domain Name Service requecircte UDP 1000 (minimise le deacutelai) requecircte TCP 0000 Transfert de Zone 0100 (maximalise le deacutebit)

NNTP 0001 (minimise le coucirct moneacutetaire)

ICMP Erreurs 0000 Requecirctes 0000 (presque) Reacuteponses ltmecircme chose que requecirctegt (presque)

txqueuelenLa longueur de cette file dattente est fournie par la configuration de linterface que vous pouvez voiret configurer avec ifconfig et ip Pour configurer la longueur de la file dattente agrave 10 exeacutecuter ifconfig eth0 txqueuelen 10

Vous ne pouvez pas configurer ce paramegravetre avec tc

Filtre agrave seau de jetons (Token Bucket Filter)

Le Token Bucket Filter (TBF) est un gestionnaire de mise en file dattente simple Il ne fait que laisser passerles paquets entrants avec un deacutebit nexceacutedant pas une limite fixeacutee administrativement Lenvoi de courtesrafales de donneacutees avec un deacutebit deacutepassant cette limite est cependant possible

TBF est tregraves preacutecis et peu gourmand du point de vue reacuteseau et processeur Consideacuterez-le en premier si vousvoulez simplement ralentir une interface

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 37

Limpleacutementation TBF consiste en un tampon (seau) constamment rempli par des eacuteleacutements virtuelsdinformation appeleacutes jetons avec un deacutebit speacutecifique (deacutebit de jeton) Le paramegravetre le plus important dutampon est sa taille qui correspond au nombre de jetons quil peut stocker

Chaque jeton entrant laisse sortir un paquet de donneacutees de la file dattente de donneacutees et ce jeton est alorssupprimeacute du seau Lassociation de cet algorithme avec les deux flux de jetons et de donneacutees nous conduit agravetrois sceacutenarios possibles

Les donneacutees arrivent dans TBF avec un deacutebit EGAL au deacutebit des jetons entrants Dans ce cas chaquepaquet entrant a son jeton correspondant et passe la file dattente sans deacutelai

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS PETIT que le deacutebit des jetons Seule une partiedes jetons est supprimeacutee au moment ougrave les paquets de donneacutees sortent de la file dattente de sorte queles jetons saccumulent jusquagrave atteindre la taille du tampon Les jetons libres peuvent ecirctre utiliseacutespour envoyer des donneacutees avec un deacutebit supeacuterieur au deacutebit des jetons standard si de courtes rafales dedonneacutees arrivent

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS GRAND que le deacutebit des jetons Ceci signifie quele seau sera bientocirct deacutepourvu de jetons ce qui provoque larrecirct de TBF pendant un moment Cecisappelle ltlt une situation de deacutepassement de limite gtgt (overlimit situation) Si les paquets continuentagrave arriver ils commenceront agrave ecirctre eacutelimineacutes

bull

Le dernier sceacutenario est tregraves important car il autorise la mise en forme administrative de la bande passantedisponible pour les donneacutees traversant le filtre

Laccumulation de jetons autorise leacutemission de courtes rafales de donneacutees sans perte en situation dedeacutepassement de limite mais toute surcharge prolongeacutee causera systeacutematiquement le retard des paquets puisleur rejet

Notez que dans limpleacutementation reacuteelle les jetons correspondent agrave des octets et non des paquets

Paramegravetres amp usage

Mecircme si vous naurez probablement pas besoin de les changer TBF a des paramegravetres Dabord ceux toujoursdisponibles sont

limit or latencyLimit est le nombre doctets qui peuvent ecirctre mis en file dattente en attendant la disponibiliteacute dejetons Vous pouvez eacutegalement indiquer ceci dune autre maniegravere en configurant le paramegravetrelatency qui speacutecifie le temps maximal pendant lequel un paquet peut rester dans TBF Ce dernierparamegravetre prend en compte la taille du seau le deacutebit et sil est configureacute le deacutebit de crecircte(peakrate)

burstbuffermaxburstTaille du seau en octets Cest la quantiteacute maximale en octets de jetons dont on disposerasimultaneacutement En geacuteneacuteral plus les deacutebits de mise en forme sont importants plus le tampon doit ecirctregrand Pour 10 Mbits sur plateforme Intel vous avez besoin dun tampon dau moins 10 kilo-octets sivous voulez atteindre la limitation configureacutee

Si votre tampon est trop petit les paquets pourront ecirctre rejeteacutes car il arrive plus de jetons par topdhorloge que ne peut en contenir le tampon

mpuUn paquet de taille nulle nutilise pas une bande passante nulle Pour ethernet la taille minimale dunpaquet est de 64 octets LUniteacute Minimale de Paquet (Minimun Packet Unit) deacutetermine le nombreminimal de jetons agrave utiliser pour un paquet

rateLe paramegravetre de la vitesse Voir les remarques au-dessus agrave propos des limites

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

38 Filtre agrave seau de jetons (Token Bucket Filter)

Si le seau contient des jetons et quil est autoriseacute agrave se vider alors il le fait par deacutefaut avec une vitesse infinieSi ceci vous semble inacceptable utilisez les paramegravetres suivants

peakrateSi des jetons sont disponibles et que des paquets arrivent ils sont immeacutediatement envoyeacutes par deacutefaut et pour ainsi dire agrave ltlt la vitesse de la lumiegravere gtgt Cela peut ne pas vous convenir speacutecialement sivous avez un grand seau

Le deacutebit de crecircte (peak rate) peut ecirctre utiliseacute pour speacutecifier la vitesse agrave laquelle le seau est autoriseacute agravese vider Si tout se passe comme eacutecrit dans les livres ceci est reacutealiseacute en libeacuterant un paquet puis enattendant suffisamment longtemps pour libeacuterer le paquet suivant Le temps dattente est calculeacute demaniegravere agrave obtenir un deacutebit eacutegal au deacutebit de crecircte

Cependant eacutetant donneacute que la reacutesolution du minuteur (timer) dUNIX est de 10 ms et que les paquetsont une taille moyenne de 10 000 bits nous sommes limiteacutes agrave un deacutebit de crecircte de 1mbits

mtuminburstLe deacutebit de crecircte de 1Mbs ne sert pas agrave grand chose si votre deacutebit habituel est supeacuterieur agrave cettevaleur Un deacutebit de crecircte plus eacuteleveacute peut ecirctre atteint en eacutemettant davantage de paquets par top duminuteur ce qui a pour effet de creacuteer un second seau

Ce second bucket ne prend par deacutefaut quun seul paquet et nest donc en aucun cas un seau

Pour calculer le deacutebit de crecircte maximum multipliez le mtu que vous avez configureacute par 100 (ou plusexactement par HZ qui est eacutegal agrave 100 sur Intel et agrave 1024 sur Alpha)

Configuration simple

Voici une configuration simple mais tregraves utile

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Pourquoi est-ce utile Si vous avez un peacuteripheacuterique reacuteseau avec une grande file dattente comme un modemDSL ou un modem cacircble et que le dialogue se fasse agrave travers une interface rapide comme une interfaceethernet vous observerez que teacuteleacutecharger vers lamont (uploading) deacutegrade complegravetement linteractiviteacute

amplsqbNdT uploading deacutesigne une opeacuteration qui consiste agrave transfeacuterer des donneacutees ou des programmesstockeacutes dans un ordinateur local vers un ordinateur distant agrave travers un reacuteseau La traduction officielle pour ceterme est ltlt teacuteleacutechargement vers lamont gtgt On parle alors de voie montante Le downloading deacutesignelopeacuteration inverse (transfert dun hocircte distant vers lordinateur local) et est traduit par ltlt teacuteleacutechargement gtgtou ltlt teacuteleacutechargement vers laval gtgt On parle alors de la voie descendante]

Le teacuteleacutechargement vers lamont va en effet remplir la file dattente du modem Celle-ci est probablementENORME car cela aide vraiment agrave obtenir de bon deacutebit de teacuteleacutechargement vers lamont Cependant ceci nestpas forceacutement ce que voulez Vous ne voulez pas forceacutement avoir une file dattente importante de maniegravere agravegarder linteractiviteacute et pouvoir encore faire des choses pendant que vous envoyez des donneacutees

La ligne de commande au-dessus ralentit lenvoi de donneacutees agrave un deacutebit qui ne conduit pas agrave une mise en filedattente dans le modem La file dattente reacuteside dans le noyau Linux ougrave nous pouvons lui imposer une taillelimite

Modifier la valeur 220kbit avec votre vitesse de lien REELLE moins un petit pourcentage Si vous avez unmodem vraiment rapide augmenter un peu le paramegravetre burst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 39

Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing)

Stochastic Fairness Queueing (SFQ) est une impleacutementation simple de la famille des algorithmes de mise enfile dattente eacutequitable Cette impleacutementation est moins preacutecise que les autres mais elle neacutecessite aussi moinsde calculs tout en eacutetant presque parfaitement eacutequitable

Le mot cleacute dans SFQ est conversation (ou flux) qui correspond principalement agrave une session TCP ou un fluxUDP Le trafic est alors diviseacute en un grand nombre de jolies files dattente FIFO une par conversation Letrafic est alors envoyeacute dans un tourniquet donnant une chance agrave chaque session denvoyer leurs donneacutees touragrave tour

Ceci conduit agrave un comportement tregraves eacutequitable et empecircche quune seule conversation eacutetouffe les autres SFQest appeleacute ltlt Stochastic gtgt car il nalloue pas vraiment une file dattente par session mais a un algorithme quidivise le trafic agrave travers un nombre limiteacute de files dattente en utilisant un algorithme de hachage

A cause de ce hachage plusieurs sessions peuvent finir dans le mecircme seau ce qui peut reacuteduire de moitieacute leschances dune session denvoyer un paquet et donc reacuteduire de moitieacute la vitesse effective disponible Pourempecirccher que cette situation ne devienne importante SFQ change tregraves souvent son algorithme de hachagepour que deux sessions entrantes en collision ne le fassent que pendant un nombre reacuteduit de secondes

Il est important de noter que SFQ nest seulement utile que dans le cas ougrave votre interface de sortie est vraimentsatureacutee Si ce nest pas le cas il ny aura pas de files dattente sur votre machine Linux et donc pas deffetsPlus tard nous deacutecrirons comment combiner SFQ avec dautres gestionnaires de mise en files dattente pourobtenir le meilleur des deux mondes

Configurer speacutecialement SFQ sur linterface ethernet qui est en relation avec votre modem cacircble ou votrerouteur DSL est vain sans dautres mises en forme du trafic

Paramegravetres amp usage

SFQ est presque configureacute de base

perturbReconfigure le hachage une fois toutes les pertub secondes Sil nest pas indiqueacute le hachage se serajamais reconfigureacute Ce nest pas recommandeacute 10 secondes est probablement une bonne valeur

quantumNombre doctets quun flux est autoriseacute agrave retirer de la file dattente avant que la prochaine file dattentene prenne son tour Par deacutefaut eacutegal agrave la taille maximum dun paquet (MTU) Ne le configurez pas endessous du MTU

Configuration simple

Si vous avez un peacuteripheacuterique qui a une vitesse identique agrave celle du lien et un deacutebit reacuteel disponible comme unmodem teacuteleacutephonique cette configuration aidera agrave promouvoir leacutequiteacute

tc qdisc add dev ppp0 root sfq perturb 10 tc -s -d qdisc lsqdisc sfq 800c dev ppp0 quantum 1514b limit 128p flows 1281024 perturb 10sec Sent 4812 bytes 62 pkts (dropped 0 overlimits 0)

Le nombre 800c est un descripteur (handle) automatiquement assigneacute et limit signifie que 128 paquetspeuvent attendre dans la file dattente Il y a 1024 ltlt seaux de hachage gtgt disponibles pour la comptabiliteacute128 pouvant ecirctre actifs agrave la fois (pas plus de paquets ne conviennent dans la file dattente) Le hachage est

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

40 Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

reconfigureacute toutes les 10 secondes

Conseils pour le choix de la file dattente

Pour reacutesumer ces files dattente simples gegraverent le trafic en reacuteordonnant en ralentissant ou en supprimant lespaquets

Les astuces suivantes peuvent vous aider agrave choisir la file dattente agrave utiliser Elles mentionnent certaines filesdattente deacutecrites dans le chapitre Gestionnaires de mise en file dattente avanceacutesgt

Pour simplement ralentir le trafic sortant utilisez le Token Bucket Filter Il convient bien pour leseacutenormes bandes passantes si vous paramegravetrez en conseacutequence le seau

bull

Si votre lien est vraiment satureacute et que vous voulez ecirctre sucircr quaucune session ne va accaparer labande passante vers lexteacuterieur utilisez le Stochastical Fairness Queueing

bull

Si vous avez une grande dorsale et que vous voulez savoir ce que vous faites consideacuterez RandomEarly Drop (voir le chapitre Gestionnaires de mise en file dattente avanceacutesgt)

bull

Pour ltlt mettre en forme gtgt le trafic entrant qui nest pas transmis utilisez la reacuteglementation Ingress(Ingress Policier) La mise en forme du flux entrant est appeleacutee ltlt reacuteglementation gtgt (policing) etnon ltlt mise en forme gtgt (shaping)

bull

Si vous transmettez le trafic utilisez TBF sur linterface vers laquelle vous transmettez les donneacutees Sivous voulez mettre en forme un trafic pouvant sortir par plusieurs interfaces alors le seul facteurcommun est linterface entrante Dans ce cas utilisez la reacuteglementation Ingress

bull

Si vous ne voulez pas mettre en forme le trafic mais que vous vouliez voir si votre interface esttellement chargeacutee quelle a ducirc mettre en file dattente les donneacutees utilisez la file dattente pfifo (paspfifoamplowbarfast) Elle na pas de bandes internes mais assure le comptage de la taille de sonaccumulateur

bull

Finalement vous pouvez aussi faire de la ltlt mise en forme sociale gtgt La technologie nest pastoujours capable de reacutealiser ce que vous voulez Les utilisateurs sont hostiles aux contraintestechniques Un mot aimable peut eacutegalement vous aider agrave avoir votre bande passante correctementdiviseacutee

bull

terminologie

Pour comprendre correctement des configurations plus compliqueacutees il est dabord neacutecessaire dexpliquerquelques concepts A cause de la complexiteacute et de la relative jeunesse du sujet beaucoup de mots diffeacuterentssont utiliseacutes par les personnes mais ils signifient en fait la mecircme chose

Ce qui suit est lacircchement inspireacute du texte draft-ietf-diffserv-model-06txt An InformalManagement Model for Diffserv Routers Il peut ecirctre trouveacute agrave ladressehttpwwwietforginternet-draftsdraft-ietf-diffserv-model-04txt

Lisez-le pour les deacutefinitions strictes des termes utiliseacutes

Gestionnaire de mise en file dattente (qdisc) (Queueing Discipline)Un algorithme qui gegravere la file dattente dun peacuteripheacuterique soit pour les donneacutees entrantes (ingress)soit pour les donneacutees sortantes (egress)

Gestionnaire de mise en file dattente sans classes (Classless qdisc)Un gestionnaire de mise en file dattente qui na pas de subdivisions internes configurables

Gestionnaire de mise en file dattente baseacute sur des classes (Classful qdisc)Un gestionnaire de mise en file dattente baseacute sur des classes contient de multiples classes Certainesde ces classes contiennent un gestionnaire de mise en file dattente suppleacutementaire qui peut encoreecirctre baseacute sur des classes mais ce nest pas obligatoire Si lon sen tient agrave la deacutefinition strictepfifoamplowbarfast EST baseacute sur des classes dans la mesure ougrave il contient trois bandes qui sont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 41

en fait des classes Cependant dun point de vue des perspectives de configuration pour lutilisateur ilest sans classes dans la mesure ougrave ces classes ne peuvent ecirctre modifieacutees avec loutil tc

ClassesUn gestionnaire de mise en file dattente baseacute sur les classes peut avoir beaucoup de classes chacunedelles eacutetant internes au gestionnaire Une classe peut agrave son tour se voir ajouter plusieurs classes Uneclasse peut donc avoir comme parent soit un gestionnaire de mise en file dattente soit une autreclasse Une classe terminale est une classe qui ne possegravede de classes enfants Seul 1 gestionnaire demise en file dattente est attacheacute agrave cette classe Ce gestionnaire est responsable de lenvoi des donneacuteesde cette classe Quand vous creacuteez une classe un gestionnaire de mise en file dattente fifo est creacuteeacuteQuand vous ajoutez une classe enfant ce gestionnaire est supprimeacute Le gestionnaire fifo dune classeterminale peut ecirctre remplaceacute par un autre gestionnaire plus adapteacute Vous pouvez mecircme remplacer cegestionnaire fifo par un gestionnaire de mise en file dattente baseacute sur des classes de sorte que vouspourrez rajouter des classes suppleacutementaires

Classificateur (Classifier)Chaque gestionnaire de mise en file dattente baseacute sur des classes a besoin de deacuteterminer vers quellesclasses il doit envoyer un paquet Ceci est reacutealiseacute en utilisant le classificateur

Filtre (Filter)La classification peut ecirctre reacutealiseacutee en utilisant des filtres Un filtre est composeacute dun certain nombre deconditions qui si elles sont toutes veacuterifieacutees satisfait le filtre

Ordonnancement (Scheduling)Un gestionnaire de mise en file dattente peut avec laide dun classificateur deacutecider que des paquetsdoivent sortir plus tocirct que dautres Ce processus est appeleacute ordonnancement (scheduling) et estreacutealiseacute par exemple par le gestionnaire pfifoamplowbarfast mentionneacute plus tocirctLordonnancement est aussi appeleacute ltlt reclassement gtgt (reordering) ce qui peut precircter agrave confusion

Mise en forme (Shaping)Le processus qui consiste agrave retarder leacutemission des paquets sortants pour avoir un trafic conforme agrave undeacutebit maximum configureacute La mise en forme est reacutealiseacutee sur egress Familiegraverement rejeter despaquets pour ralentir le trafic est eacutegalement souvent appeleacute Mise en forme

Reacuteglementation (Policing)Retarder ou jeter des paquets dans le but davoir un trafic restant en dessous dune bande passanteconfigureacutee Dans Linux la reacuteglementation ne peut que jeter un paquet et non le retarder dans lamesure ougrave il ny a pas de ltlt file dattente dentreacutee gtgt (ingress queue)

Work-ConservingUn gestionnaire de mise en file dattente work-conserving deacutelivre toujours un paquet sil y en a un dedisponible En dautres termes il ne retarde jamais un paquet si ladaptateur reacuteseau est precirct agrave lenvoyer(dans le cas du gestionnaire egress)

non-Work-ConservingQuelques gestionnaire de mise en files dattente comme par exemple le Token Bucket Filter peuventavoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante Cecisignifie quils refusent parfois de libeacuterer un paquet bien quils en aient un de disponible

Maintenant que nous avons deacutefini notre terminologie voyons ougrave tous ces eacuteleacutements sont situeacutes

Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------gt Pile IP | | | | | | | Y | | | Y | | ^ | | | | ----------gt Transmission -gt | | ^ | | | | Y | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

42 terminologie

| ^ Y -qdisc1- | | | Classificateur --qdisc2-- | ---gt-gtGestionnaire de mise de sortie ---qdisc3---- | -gt | en file dattente (Egress) __qdisc4__ | | dentreacutee (Ingress) -qdiscN_ | | | +-----------------------------------------------------------+

Merci agrave Jamal Hadi Salim pour cette repreacutesentation ASCII

Le grand rectangle repreacutesente le noyau La flegraveche la plus agrave gauche repreacutesente le trafic du reacuteseau entrant dansvotre machine Celui-ci alimente alors le gestionnaire de mise en file dattente Ingress qui peut appliquer desfiltres agrave un paquet et deacutecider de le supprimer Ceci est appeleacute ltlt reacuteglementation gtgt (Policing)

Ce processus a lieu tregraves tocirct avant davoir beaucoup parcouru le noyau Cest par conseacutequent un tregraves bonendroit pour rejeter au plus tocirct du trafic sans pour autant consommer beaucoup de ressources CPU

Si le paquet est autoriseacute agrave continuer il peut ecirctre destineacute agrave une application locale et dans ce cas il entre dans lacouche IP pour ecirctre traiteacute et deacutelivreacute agrave un programme utilisateur Le paquet peut eacutegalement ecirctre transmis sansentrer dans une application et dans ce cas ecirctre destineacute agrave egress Les programmes utilisateurs peuventeacutegalement deacutelivrer des donneacutees qui sont alors transmises et examineacutees par le classificateur Egress

Lagrave il est examineacute et mis en file dattente vers un certain nombre de gestionnaire de mise en file dattente Pardeacutefaut il ny a quun seul gestionnaire egress installeacute pfifoamplowbarfast qui reccediloit tous les paquetsCeci correspond agrave ltlt la mise en file dattente gtgt (enqueueing)

Le paquet reacuteside maintenant dans le gestionnaire de mise en file dattente attendant que le noyau le reacuteclamepour le transmettre agrave travers linterface reacuteseau Ceci correspond au ltlt retrait de la file dattente gtgt(dequeueing)

Le scheacutema ne montre que le cas dun seul adaptateur reacuteseau Les flegraveches entrantes et sortantes du noyau nedoivent pas ecirctre trop prises au pied de la lettre Chaque adaptateur reacuteseau a un gestionnaire dentreacutee et desortie

Gestionnaires de file dattente baseacutes sur les classes

Les gestionnaires de mise en file dattente baseacutes sur des classes sont tregraves utiles si vous avez diffeacuterentes sortesde trafic qui doivent ecirctre traiteacutes diffeacuteremment Lun dentre eux est appeleacute CBQ pour Class Based QueueingIl est si souvent mentionneacute que les personnes identifient les gestionnaires de mise en file dattente baseacutes surdes classes uniquement agrave CBQ ce qui nest pas le cas

CBQ est le meacutecanisme le plus ancien ainsi que le plus compliqueacute Il naura pas forceacutement les effets que vousrecherchez Ceci surprendra peut-ecirctre ceux qui sont sous lemprise de ltlt leffet Sendmail gtgt qui nousenseigne quune technologie complexe non documenteacutee est forceacutement meilleure que toute autre

Nous eacutevoquerons bientocirct plus agrave propos CBQ et ses alternatives

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

Quand le trafic entre dans un gestionnaire de mise en file dattente baseacute sur des classes il doit ecirctre envoyeacute verslune de ses classes il doit ecirctre ltlt classifieacute gtgt Pour deacuteterminer que faire dun paquet les eacuteleacutements appeleacutesltlt filtres gtgt sont consulteacutes Il est important de savoir que les filtres sont appeleacutes de linteacuterieur dungestionnaire et pas autrement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestionnaires de file dattente baseacutes sur les classes 43

Les filtres attacheacutes agrave ce gestionnaire renvoient alors une deacutecision que le gestionnaire utilise pour mettre en filedattente le paquet vers lune des classes Chaque sous-classe peut essayer dautres filtres pour voir si denouvelles instructions sappliquent Si ce nest pas le cas la classe met le paquet en file dattente dans legestionnaire de mise en file dattente quelle contient

En plus de contenir dautres gestionnaires la plupart des gestionnaires de mise en file dattente baseacutes sur desclasses reacutealisent eacutegalement de la mise en forme Ceci est utile pour reacutealiser agrave la fois lordonnancement (avecSFQ par exemple) et le controcircle de deacutebit Vous avez besoin de ceci dans les cas ougrave vous avez une interface agravehaut deacutebit (ethernet par exemple) connecteacutee agrave un peacuteripheacuterique plus lent (un modem cacircble)

Si vous nutilisez que SFQ rien ne devait se passer dans la mesure ougrave les paquets entrent et sortent du routeursans deacutelai linterface de sortie est de loin beaucoup plus rapide que la vitesse reacuteelle de votre liaison il ny aalors pas de files dattente agrave reacuteordonnancer

La famille des gestionnaires de mise en file dattente racines descripteursdescendances et parents

Chaque interface agrave ltlt un gestionnaire de mise en file dattente racine gtgt de sortie (egress root qdisc) Pardeacutefaut le gestionnaire de mise en file dattente sans classes mentionneacute plus tocirct pfifoamplowbarfastChaque gestionnaire et classe est repeacutereacute par un descripteur (handle) qui pourra ecirctre utiliseacute par les prochainesdeacuteclarations de configuration pour se reacutefeacuterer agrave ce gestionnaire En plus du gestionnaire de sortie une interfacepeut eacutegalement avoir un gestionnaire dentreacutee (ingress) qui reacuteglemente le trafic entrant

Ces descripteurs sont constitueacutes de deux parties un nombre majeur et un nombre mineur ltmajorgtltminorgtIl est habituel de nommer le gestionnaire racine 1 ce qui est eacutequivalent agrave 10 Le nombre mineur dungestionnaire de mise en file dattente est toujours 0

Les classes doivent avoir le mecircme nombre majeur que leur parent Le nombre majeur doit ecirctre unique agravelinteacuterieur dune configuration egress ou ingress Le nombre mineur doit ecirctre unique agrave linteacuterieur dungestionnaire de mise en file dattente et de ses classes

Comment les filtres sont utiliseacutes pour classifier le trafic

Pour reacutecapituler une hieacuterarchie typique pourrait ressembler agrave ceci

1 Gestionnaire de mise en file dattente racine | 11 classe enfant | | | | 110 111 112 classes enfants | | | | 11 | classe terminale | | 10 12 Gestionnaire de mise en file dattente 101 102 121 122 classes terminales

Mais ne laissez pas cet arbre vous abuser Vous ne devriez pas imaginer le noyau ecirctre au sommet de larbre etle reacuteseau en dessous ce qui nest justement pas le cas Les paquets sont mis et retireacutes de la file dattente agrave laracine du gestionnaire qui est le seul eacuteleacutement avec lequel le noyau dialogue

Un paquet pourrait ecirctre classifieacute agrave travers une chaicircne suivante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

44 Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

1 -gt 11 -gt 12 -gt 122

Le paquet reacuteside maintenant dans la file dattente du gestionnaire attacheacute agrave la classe 122 Dans cet exempleun filtre a eacuteteacute attacheacute agrave chaque noeud de larbre chacun choisissant la prochaine branche agrave prendre Cela estreacutealisable Cependant ceci est eacutegalement possible

1 -gt 122

Dans ce cas un filtre attacheacute agrave la racine a deacutecideacute denvoyer le paquet directement agrave 122

Comment les paquets sont retireacutes de la file dattente et envoyeacutes vers le mateacuteriel

Quand le noyau deacutecide quil doit extraire des paquets pour les envoyer vers linterface le gestionnaire racine1 reccediloit une requecircte dequeue qui est transmise agrave 11 et qui agrave son tour est passeacutee agrave 10 11 et 12chacune interrogeant leurs descendances qui essaient de retirer les paquets de leur file dattente Dans ce casle noyau doit parcourir lensemble de larbre car seul 122 contient un paquet

En reacutesumeacute les classes ltlt emboicircteacutees gtgt parlent uniquement agrave leur gestionnaire de mise en file dattenteparent jamais agrave une interface Seul la file dattente du gestionnaire racine est videacutee par le noyau

Ceci a pour reacutesultat que les classes ne retirent jamais les paquets dune file dattente plus vite que ce que leurparent autorise Et cest exactement ce que nous voulons de cette maniegravere nous pouvons avoir SFQ dans uneclasse interne qui ne fait pas de mise en forme mais seulement de lordonnancement et avoir un gestionnairede mise en file dattente exteacuterieur qui met en forme le trafic

Le gestionnaire de mise en file dattente PRIO

Le gestionnaire de mise en file dattente ne met pas vraiment en forme le trafic il ne fait que le subdiviser ense basant sur la maniegravere dont vous avez configureacute vos filtres Vous pouvez consideacuterer les gestionnaires PRIOcomme une sorte de super pfifoamplowbarfast dopeacute ougrave chaque bande est une classe seacutepareacutee au lieudune simple FIFO

Quand un paquet est mis en file dattente dans le gestionnaire PRIO une classe est choisie en fonction desfiltres que vous avez donneacutes Par deacutefaut trois classes sont creacuteeacutees Ces classes contiennent par deacutefaut de pursgestionnaires de mise en file dattente FIFO sans structure interne mais vous pouvez les remplacer parnimporte quels gestionnaires disponibles

Chaque fois quun paquet doit ecirctre retireacute dune file dattente la classe 1 est dabord testeacutee Les classes pluseacuteleveacutees ne sont utiliseacutees que si aucune des bandes plus faibles na pas fourni de paquets

Cette file dattente est tregraves utile dans le cas ougrave vous voulez donner la prioriteacute agrave certains trafics en utilisant toutela puissance des filtres tc et en ne se limitant pas seulement aux options du champ TOS Vous pouvezeacutegalement ajouter un autre gestionnaire de mise en file dattente aux trois classes preacutedeacutefinies tandis quepfifoamplowbarfast est limiteacute aux simples gestionnaires FIFO

Puisquil ne met pas vraiment en forme on applique le mecircme avertissement que pour SFQ Utilisez PRIOseulement si votre lien physique est vraiment satureacute ou inteacutegrez-le agrave linteacuterieur dun gestionnaire de mise enfile dattente baseacute sur des classes qui reacutealisent la mise en forme Ce dernier cas est valable pour pratiquementtous les modems-cacircbles et les peacuteripheacuteriques DSL

En termes formels le gestionnaire de mise en file dattente PRIO est un ordonnanceur Work-Conserving

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Comment les filtres sont utiliseacutes pour classifier le trafic 45

Paramegravetres PRIO amp usage

Les paramegravetres suivants sont reconnus par tc

bandsNombre de bandes agrave creacuteer Chaque bande est en fait une classe Si vous changez ce nombre vousdevez eacutegalement changer

priomapSi vous ne fournissez pas de filtres tc pour classifier le trafic le gestionnaire PRIO regarde la prioriteacuteTCamplowbarPRIO pour deacutecider comment mettre en file dattente le trafic

Ceci fonctionne comme le gestionnaire de mise en file dattente pfifoamplowbarfast mentionneacuteplus tocirct Voir la section correspondante pour plus de deacutetails

Les bandes sont des classes et sont appeleacutees par deacutefaut majeur1 agrave majeur3 Donc si votre gestionnaire demise en file dattente est appeleacute 12 tc filtre le trafic vers 121 pour lui accorder une plus grande prioriteacute

Par iteacuteration la bande 0 correspond au nombre mineur 1 la bande 1 au nombre mineur 2 etc

Configuration simple

Nous allons creacuteer cet arbre

racine 1 prio 1 Gestionnaire racine | | | 11 12 13 classes | | | 10 20 30 gestionnaire gestionnaire sfq tbf sfqbande 0 1 2

Le trafic de masse ira vers 30 tandis que le trafic interactif ira vers 20 ou 10

Les lignes de commande

tc qdisc add dev eth0 root handle 1 prio Ceci creacutee instantaneacutement les classes 11 12 13

tc qdisc add dev eth0 parent 11 handle 10 sfq tc qdisc add dev eth0 parent 12 handle 20 tbf rate 20kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 13 handle 30 sfq

Regardons maintenant ce que nous avons creacuteeacute

tc -s qdisc ls dev eth0 qdisc sfq 30 quantum 1514b Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 132 bytes 2 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0 overlimits 0)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

46 Paramegravetres PRIO amp usage

Comme vous pouvez le voir la bande 0 a deacutejagrave reccedilu du trafic et un paquet a eacuteteacute envoyeacute pendant lexeacutecution decette commande

Nous allons maintenant geacuteneacuterer du trafic de masse avec un outil qui configure correctement les options TOSet regarder de nouveau

scp tc ahu100011ahu100011s password tc 100 || 353 KB 0000 tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 2230 bytes 31 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0 overlimits 0)

Comme vous pouvez le voir tout le trafic a eacuteteacute envoyeacute comme preacutevu vers le descripteur 30 qui est la bandede plus faible prioriteacute Maintenant pour veacuterifier que le trafic interactif va vers les bandes de plus grandeprioriteacute nous geacuteneacuterons du trafic interactif

tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 14926 bytes 193 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0 overlimits 0)

Ca a marcheacute Tout le trafic suppleacutementaire a eacuteteacute vers 10 qui est notre gestionnaire de plus grande prioriteacuteAucun trafic na eacuteteacute envoyeacute vers les prioriteacutes les plus faibles qui avaient reccedilu au preacutealable tout le trafic venantde notre scp

Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Comme dit avant CBQ est le gestionnaire de mise en file dattente disponible le plus complexe celui qui a eule plus de publiciteacute qui est le moins compris et qui est probablement le plus farceur lors de sa mise au pointCe nest pas parce que les auteurs sont mauvais ou incompeacutetents loin de lagrave mais lalgorithme CBQ nest pasremarquablement preacutecis et il ne correspond pas vraiment agrave la faccedilon dont Linux fonctionne

En plus decirctre baseacute sur des classes CBQ sert eacutegalement agrave la mise en forme de trafic et cest sur cet aspect quilne fonctionne pas tregraves bien Il travaille comme ceci si vous essayez de mettre en forme une connexion de10mbits agrave 1mbitss le lien doit ecirctre inactif 90amppercnt du temps Si ce nest pas le cas nous devons limiter letaux de sorte quil soit inactif 90amppercnt du temps

Ceci est assez dur agrave mesurer et cest pour cette raison que CBQ deacuteduit le temps dinactiviteacute du nombre demicrosecondes qui seacutecoulent entre les requecirctes de la couche mateacuterielle pour avoir plus de donneacutees Cettecombinaison peut ecirctre utiliseacutee pour eacutevaluer si le lien est chargeacute ou non

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 47

Ceci est plutocirct leacuteger et lon arrive pas toujours agrave des reacutesultats convenables Par exemple quen est-il de lavitesse de liaison reacuteelle dune interface qui nest pas capable de transmettre pleinement les donneacutees agrave100mbits peut-ecirctre agrave cause dun mauvais pilote de peacuteripheacuterique Une carte reacuteseau PCMCIA ne pourrajamais atteindre 100mbits agrave cause de la conception du bus De nouveau comment calculons-nous le tempsdinactiviteacute

Cela devient mecircme pire quand on considegravere un peacuteripheacuterique reacuteseau pas-vraiment-reacuteel comme PPP OverEthernet ou PPTP over TCPIP La largeur de bande effective est dans ce cas probablement deacutetermineacutee parlefficaciteacute des tubes vers lespace utilisateur qui est eacutenorme

Les personnes qui ont effectueacute des mesures ont deacutecouvert que CBQ nest pas toujours tregraves exact et parfoismecircme tregraves eacuteloigneacute de la configuration

Cependant il marche bien dans de nombreuses circonstances Avec la documentation fournie ici vous devriezecirctre capable de le configurer pour quil fonctionne bien dans la plupart des cas

Mise en forme CBQ en deacutetail

Comme dit preacuteceacutedemment CBQ fonctionne en sassurant que le lien est inactif juste assez longtemps pourabaisser la bande passante reacuteelle au deacutebit configureacute Pour reacutealiser cela il calcule le temps qui devrait seacutecoulerentre des paquets de taille moyennne

En cours de fonctionnement le temps dinactiviteacute effectif (the effective idletime) est mesureacute en utilisantlalgorithme EWMA (Exponential Weighted Moving Average) qui considegravere que les paquets reacutecents sontexponentiellement plus nombreux que ceux passeacutes La charge moyenne UNIX (UNIX loadaverage) estcalculeacutee de la mecircme maniegravere

Le temps dinactiviteacute calculeacute est soustrait agrave celui mesureacute par EWMA et le nombre reacutesultant est appeleacuteavgidle Un lien parfaitement chargeacute a un avgidle nul un paquet arrive agrave chaque intervalle calculeacute

Une liaison surchargeacutee a un avgidle neacutegatif et sil devient trop neacutegatif CBQ sarrecircte un moment et se placealors en deacutepassement de limite (overlimit)

Inversement un lien inutiliseacute peut accumuler un avgidle eacutenorme qui autoriserait alors des bandespassantes infinies apregraves quelques heures dinactiviteacute Pour eacuteviter cela avgidle est borneacute agrave maxidle

En situation de deacutepassement de limite CBQ peut en theacuteorie bloquer le deacutebit pour une dureacutee eacutequivalente autemps qui doit seacutecouler entre deux paquets moyens puis laisser passer un paquet et bloquer de nouveau ledeacutebit Regardez cependant le paramegravetre minburst ci-dessous

Voici les paramegravetres que vous pouvez speacutecifier pour configurer la mise en forme

avpktTaille moyenne dun paquet mesureacutee en octets Neacutecessaire pour calculer maxidle qui deacuterive demaxburst qui est speacutecifieacute en paquets

bandwidthLa bande passante physique de votre peacuteripheacuterique neacutecessaire pour les calculs du temps de nonutilisation (idle time)

cellLa dureacutee de transmission dun paquet naugmente pas neacutecessairement de maniegravere lineacuteaire en fonctionde sa taille Par exemple un paquet de 800 octets peut ecirctre transmis en exactement autant de tempsquun paquet de 806 octets Ceci deacutetermine la granulariteacute Cette valeur est geacuteneacuteralement positionneacutee agrave8 et doit ecirctre une puissance de deux

maxburst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

48 Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Ce nombre de paquets est utiliseacute pour calculer maxidle de telle sorte que quand avgidle est eacutegalagrave maxidle le nombre de paquets moyens peut ecirctre envoyeacute en rafale avant que avgidle neretombe agrave 0 Augmentez-le pour ecirctre plus toleacuterant vis agrave vis des rafales de donneacutees Vous ne pouvezpas configurer maxidle directement mais seulement via ce paramegravetre

minburstComme nous lavons deacutejagrave indiqueacute CBQ doit bloquer le deacutebit dans le cas dun deacutepassement de limiteLa solution ideacuteale est de le faire pendant exactement le temps dinutilisation calculeacute puis de laisserpasser un paquet Cependant les noyaux UNIX ont geacuteneacuteralement du mal agrave preacutevoir des eacuteveacutenementsplus courts que 10 ms il vaut donc mieux limiter le deacutebit pendant une peacuteriode plus longue puisenvoyer minburst paquets dun seul coup et dormir pendant une dureacutee de minburst

Le temps dattente est appeleacute offtime De plus grandes valeurs de minburst megravenent agrave une mise enforme plus preacutecise dans le long terme mais provoquent de plus grandes rafales de donneacutees pendantdes peacuteriodes de quelques millisecondes

minidleSi avgidle est infeacuterieur agrave 0 nous sommes en deacutepassement de limite et nous devons attendre jusquagravece que avgidle devienne suffisamment important pour envoyer un paquet Pour eacuteviter quunebrusque rafale de donneacutees nempecircche le lien de fonctionner pendant une dureacutee prolongeacutee avgidleest remis agrave minidle sil atteint une valeur trop basse

La valeur minidle est speacutecifieacutee en microsecondes neacutegatives 10 signifie alors que avgidle estborneacute agrave -10micros

mpuTaille minumum dun paquet Neacutecessaire car mecircme un paquet de taille nulle est encapsuleacute par 64octets sur ethernet et il faut donc un certain temps pour le transmettre CBQ doit connaicirctre ceparamegravetre pour calculer preacuteciseacutement le temps dinutilisation

rateDeacutebit du trafic sortant du gestionnaire Ceci est le ltlt paramegravetre de vitesse gtgt

En interne CBQ est finement optimiseacute Par exemple les classes qui sont connues pour ne pas avoir dedonneacutees preacutesentes dans leur file dattente ne sont pas interrogeacutees Les classes en situation de deacutepassement delimite sont peacutenaliseacutees par la diminution de leur prioriteacute effective Tout ceci est tregraves habile et compliqueacute

Le comportement CBQ classful

En plus de la mise en forme en utilisant les approximations idletime mentionneacutees ci-dessus CBQ peuteacutegalement agir comme une file dattente PRIO dans le sens ougrave les classes peuvent avoir diffeacuterentes prioriteacutesLes prioriteacutes de plus faible valeur seront examineacutees avant celles de valeurs plus eacuteleveacutees

Chaque fois quun paquet est demandeacute par la couche mateacuterielle pour ecirctre envoyeacute sur le reacuteseau un processusweighted round robin (WRR) deacutemarre en commenccedilant par les classes de plus faibles numeacuteros

Celles-ci sont regroupeacutees et interrogeacutees si elles ont des donneacutees disponibles Apregraves quune classe ait eacuteteacuteautoriseacutee agrave retirer de la file dattente un nombre doctets la classe de prioriteacute suivante est consulteacutee

Les paramegravetres suivants controcirclent le processus WRR

allotQuand le CBQ racine reccediloit une demande denvoi de paquets sur une interface il va essayer tous lesgestionnaires internes (dans les classes) tour agrave tour suivant lordre du paramegravetre priority Achaque passage une classe ne peut envoyer quune quantiteacute limiteacutee de donneacutees Le paramegravetre allotest luniteacute de base de cette quantiteacute Voir le paramegravetre weight pour plus dinformations

prioCBQ peut eacutegalement agir comme un peacuteripheacuterique PRIO Les classes internes avec les prioriteacutes les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Mise en forme CBQ en deacutetail 49

plus eacuteleveacutees sont consulteacutees en premier et aussi longtemps quelles ont du trafic les autres classes nesont pas examineacutees

weightLe paramegravetre weight assiste le processus Weighted Round Robin Chaque classe a tour agrave tour lapossibiliteacute denvoyer ses donneacutees Si vous avez des classes avec des bandes passantessignificativement plus importantes il est logique de les autoriser agrave envoyer plus de donneacutees agrave chaquetour que les autres

Vous pouvez utiliser des nombres arbitraires dans la mesure ougrave CBQ additionne tous les paramegravetresweight preacutesents sous une classe et les normalise La regravegle empirique qui consiste agrave prendrerate10 semble fonctionner correctement Le paramegravetre weight normaliseacute est multiplieacute par leparamegravetre allot pour deacuteterminer la quantiteacute de donneacutees agrave envoyer agrave chaque tour

Notez sil vous plaicirct que toutes les classes agrave linteacuterieur dune hieacuterarchie CBQ doivent avoir le mecircme nombremajeur

Paramegravetres CBQ qui deacuteterminent le partage amp le precirct du lien

En plus de purement limiter certains trafics il est eacutegalement possible de speacutecifier quelles classes peuventemprunter de la bande passante aux autres classes ou reacuteciproquement precircter sa bande passante

isolated sharingUne classe qui est configureacutee avec isolated ne precirctera pas sa bande passante agrave ses classes enfantsUtilisez ceci si vous avez sur votre lien deux agences concurrentes ou qui ne sappreacutecient pas et qui neveulent pas se precircter gratuitement de la bande passante

Le programme de controcircle tc connait eacutegalement sharing qui agit agrave linverse du paramegravetreisolated

bounded borrowUne classe peut aussi ecirctre borneacutee (bounded) ce qui signifie quelle nessaiera pas demprunter de labande passante agrave ses classes enfants tc connait eacutegalement borrow qui agit agrave linverse de bounded

Une situation typique pourrait ecirctre le cas ougrave vous avez deux agences preacutesentes sur votre lien qui sont agrave la foisisolated et bounded Ceci signifie quelles sont strictement limiteacutees agrave leur deacutebit et quelles ne precircterontpas aux autres leur bande passante

A linteacuterieur de ces classes dagence il pourrait y avoir dautres classes qui sont autoriseacutees agrave eacutechanger leurbande passante

Configuration simple

1 gestionnaire de mise en file dattente racine | 11 classe enfant 13 14 classes terminales | | 30 40 gestionnares de mise en file dattente (sfq) (sfq)

Cette configuration limite le trafic dun serveur web agrave 5 mbit et le trafic SMTP agrave 3 mbit Il est souhaitablequils noccupent pas plus de 6 mbit agrave eux deux Nous avons une carte reacuteseau agrave 100 mbit et les classes peuventsemprunter mutuellement de la bande passante

tc qdisc add dev eth0 root handle 10 cbq bandwidth 100Mbit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

50 Le comportement CBQ classful

avpkt 1000 cell 8 tc class add dev eth0 parent 10 classid 11 cbq bandwidth 100Mbit rate 6Mbit weight 06Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

Cette partie installe la racine et la classe 11 habituelle La classe 11 est borneacutee la bande passante totale nepourra donc pas exceacuteder 6 mbit

Comme dit avant CBQ a besoin de NOMBREUX paramegravetres Tous ces paramegravetres sont cependant expliqueacutesau-dessus La configuration HTB correspondante est beaucoup plus simple

tc class add dev eth0 parent 11 classid 13 cbq bandwidth 100Mbit rate 5Mbit weight 05Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 tc class add dev eth0 parent 11 classid 14 cbq bandwidth 100Mbit rate 3Mbit weight 03Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000

Ce sont nos deux classes Notez comment nous avons configureacute la valeur du paramegravetre weight en fonctiondu paramegravetre rate La bande passante de lensemble des deux classes ne pourra jamais deacutepasser 6 mbit Enfait les identifieurs de classe (classid) doivent avoir le mecircme numeacutero majeur que le gestionnaire de miseen file dattente parent

tc qdisc add dev eth0 parent 13 handle 30 sfq tc qdisc add dev eth0 parent 14 handle 40 sfq

Les deux classes ont par deacutefaut un gestionnaire de mise en file dattente FIFO Nous les remplaccedilons par unefile dattente SFQ de telle sorte que chaque flux de donneacutees soit traiteacute de maniegravere eacutegale

tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 13 tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 14

Ces commandes directement attacheacutees agrave la racine envoient le trafic vers le bon gestionnaire de mise en filedattente

Notez que nous utilisons tc class add pour CREER des classes agrave linteacuterieur dun gestionnaire de mise enfile dattente et que nous utilisons tc qdisc add pour veacuteritablement configurer ces classes

Vous vous demandez peut-ecirctre ce qui arrive au trafic qui nest classifieacute par aucune des deux regravegles Dans cecas les donneacutees seront traiteacutees agrave linteacuterieur de 10 et le deacutebit ne sera pas limiteacute

Si le trafic SMTP+web tente de deacutepasser la limite de 6 mbits la bande passante sera diviseacutee selon leparamegravetre weight donnant 58 du trafic au serveur web et 38 au serveur smtp

Avec cette configuration vous pouvez eacutegalement dire que le trafic du serveur web sera au minimum de 58 6 mbit = 375 mbit

Dautres paramegravetres CBQ split amp defmap

Comme preacuteciseacute avant un gestionnaire de mise en file dattente baseacute sur des classes doit appeler des filtrespour deacuteterminer dans quelle classe un paquet sera mis en file dattente

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 51

En plus dappeler les filtres CBQ offre dautres options defmap amp split Cest plutocirct compliqueacute agravecomprendre et de plus ce nest pas vital Mais eacutetant donneacute que ceci est le seul endroit connu ougrave defmap ampsplit sont correctement expliqueacutes je vais faire de mon mieux

Etant donneacute que nous voulons le plus souvent reacutealiser le filtrage en ne consideacuterant que le champ TOS unesyntaxe speacuteciale est fournie Chaque fois que CBQ doit trouver ougrave le paquet doit ecirctre mis en file dattente ilveacuterifie si le noeud est un noeud daiguillage (split node) Si cest le cas un de ses sous-gestionnaires a indiqueacuteson souhait de recevoir tous les paquets configureacutes avec une certaine prioriteacute Celle ci peut ecirctre deacuteriveacutee duchamp TOS ou des options des sockets positionneacutees par les applications

Les bits de prioriteacutes des paquets subissent un ET logique avec le champ defmap pour voir si unecorrespondance existe En dautres termes cest un moyen pratique de creacuteer un filtre tregraves rapide qui ne seraactif que pour certaines prioriteacutes Un defmap de ff (en hexadeacutecimal) veacuterifiera tout tandis quune valeur de 0ne veacuterifiera rien Une configuration simple aidera peut-ecirctre agrave rendre les choses plus claires

tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 mpu 64

tc class add dev eth1 parent 10 classid 11 cbq bandwidth 10Mbit rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000

Preacuteambule standard de CBQ Je nai jamais pris lhabitude de la quantiteacute de nombres neacutecessaires

Le paramegravetre defmap se reacutefegravere aux bits TCamplowbarPRIO qui sont deacutefinis comme suit

TC_PRIO Num Correspond agrave TOS-------------------------------------------------BESTEFFORT 0 Maximalise la Fiabiliteacute FILLER 1 Minimalise le Coucirct BULK 2 Maximalise le Deacutebit (0x8) INTERACTIVE_BULK 4 INTERACTIVE 6 Minimise le Deacutelai (0x10) CONTROL 7

Les nombres TCamplowbarPRIO correspondent aux bits compteacutes agrave partir de la droite Voir la sectionpfifoamplowbarfast pour plus de deacutetails sur la faccedilon dont les bits TOS sont convertis en prioriteacutes

Maintenant les classes interactive et de masse

tc class add dev eth1 parent 11 classid 12 cbq bandwidth 10Mbit rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 10 defmap c0

tc class add dev eth1 parent 11 classid 13 cbq bandwidth 10Mbit rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 10 defmap 3f

La gestion de mise en file dattente daiguillage (split qdisc) est 10 et cest agrave ce niveau que le choix sera faitC0 correspond au nombre binaire 11000000 et 3F au nombre binaire 00111111 Ces valeurs sont choisiesde telle sorte quagrave elles deux elles veacuterifient tous les bits La premiegravere classe correspond aux bits 6 amp 7 ce quiest eacutequivalent aux trafics ltlt interactif gtgt et de ltlt controcircle gtgt La seconde classe correspond au reste

Le noeud 10 possegravede maintenant la table suivante

prioriteacute envoyer agrave0 131 132 13

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

52 Dautres paramegravetres CBQ split amp defmap

3 134 135 136 127 12

Pour dautres amusements vous pouvez eacutegalement donner un ltlt masque de changement gtgt qui indiqueexactement les prioriteacutes que vous souhaitez changer Nutilisez ceci quavec la commande tc classchange Par exemple pour ajouter le trafic best effort agrave la classe 12 nous devrons exeacutecuter ceci

tc class change dev eth1 classid 12 cbq defmap 0101

La carte des prioriteacutes au niveau de 10 ressemble maintenant agrave ceci

prioriteacute envoyer agrave0 121 132 133 134 135 136 127 12

FIXME tc class change na pas eacuteteacute testeacute mais simplement vu dans les sources

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Martin Devera(ltdevikgt) reacutealisa agrave juste titre que CBQ est complexe et quil ne semble pas optimiseacute pour denombreuses situations classiques Son approche hieacuterarchique est bien adapteacutee dans le cas de configurations ougraveil y a une largeur de bande passante fixeacutee agrave diviser entre diffeacuterents eacuteleacutements Chacun de ces eacuteleacutements aura unebande passante garantie avec la possibiliteacute de speacutecifier la quantiteacute de bande passante qui pourra ecirctreemprunteacutee

HTB travaille juste comme CBQ mais il na pas recourt agrave des calculs de temps dinoccupation pour la mise enforme A la place cest un Token Bucket Filter baseacute sur des classes dougrave son nom Il na que quelquesparamegravetres qui sont bien documenteacutes sur ce site

Au fur et agrave mesure que votre configuration HTB se complexifie votre configuration sadapte bien Avec CBQelle est deacutejagrave complexe mecircme dans les cas simples HTB3 (voir sa page principale pour les deacutetails desversions HTB) fait maintenant parti des sources officielles du noyau (agrave partir des versions 2420-pre1 et2531 et supeacuterieures) Il est encore cependant possible que vous soyez obligeacute de reacutecupeacuterer la version mise agravejour de tc pour HTB3 Les programmes de lespace utilisateur et la partie HTB du noyau doivent avoir lemecircme numeacutero majeur Sans cela tc ne marchera pas avec HTB13

Si vous avez deacutejagrave un noyau reacutecent ou si vous ecirctes sur le point de mettre agrave jour votre noyau consideacuterez HTBcoucircte que coucircte

Configuration simple

Fonctionnellement presque identique agrave la configuration simple CBQ preacutesenteacutee ci-dessus

tc qdisc add dev eth0 root handle 1 htb default 30

tc class add dev eth0 parent 1 classid 11 htb rate 6mbit burst 15k

tc class add dev eth0 parent 11 classid 110 htb rate 5mbit burst 15k tc class add dev eth0 parent 11 classid 120 htb rate 3mbit ceil 6mbit burst 15k

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket) 53

tc class add dev eth0 parent 11 classid 130 htb rate 1kbit ceil 6mbit burst 15k

Lauteur recommande SFQ sous ces classes

tc qdisc add dev eth0 parent 110 handle 10 sfq perturb 10 tc qdisc add dev eth0 parent 120 handle 20 sfq perturb 10 tc qdisc add dev eth0 parent 130 handle 30 sfq perturb 10

Ajouter les filtres qui dirigent le trafic vers les bonnes classes

U32=tc filter add dev eth0 protocol ip parent 10 prio 1 u32 $U32 match ip dport 80 0xffff flowid 110 $U32 match ip sport 25 0xffff flowid 120

Et cest tout Pas de vilains nombres non expliqueacutes pas de paramegravetres non documenteacutes

HTB semble vraiment merveilleux Si 10 et 20 ont atteint tous les deux leur bande passante garantie etquil en reste agrave partager ils lempruntent avec un rapport de 53 comme attendu

Le trafic non classifieacute est achemineacute vers 30 qui a une petite bande passante mais qui peut emprunter tout cequi est laisseacute libre Puisque nous avons choisi SFQ en interne on heacuterite naturellement de leacutequiteacute

Classifier des paquets avec des filtres

Pour deacuteterminer quelle classe traitera un paquet la ltlt chaicircne de classificateurs gtgt est appeleacutee chaque foisquun choix a besoin decirctre fait Cette chaicircne est constitueacutee de tous les filtres attacheacutes aux gestionnaires demise en file dattente baseacutes sur des classes qui doivent prendre une deacutecision

On reprend larbre qui nest pas un arbre

racine 1 | _11_ | | | 10 11 12 101 102 121 122

Quand un paquet est mis en file dattente linstruction approprieacutee de la chaicircne de filtre est consulteacutee agrave chaquebranche Une configuration typique devrait avoir un filtre en 11 qui dirige le paquet vers 12 et un filtre en12 qui lenvoie vers 122

Vous pourriez eacutegalement avoir ce dernier filtre en 11 mais vous pouvez gagner en efficaciteacute en ayant destests plus speacutecifiques plus bas dans la chaicircne

A ce propos vous ne pouvez pas filtrer un paquet ltlt vers le haut gtgt Donc avec HTB vous devrez attachertous les filtres agrave la racine

Encore une fois les paquets ne sont mis en file dattente que vers le bas Quand ils sont retireacutes de la filedattente ils montent de nouveau vers linterface Ils ne tombent PAS vers lextreacutemiteacute de larbre en direction deladaptateur reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

54 Configuration simple

Quelques exemples simples de filtrage

Comme expliqueacute dans le chapitre Filtres avanceacutes pour la classification des paquetsgt vous pouvez vraimentanalyser nimporte quoi en utilisant une syntaxe tregraves compliqueacutee Pour commencer nous allons montrercomment reacutealiser les choses eacutevidentes ce qui heureusement est plutocirct facile

Disons que nous avons un gestionnaire de mise en file dattente PRIO appeleacute 10 qui contient trois classes etque nous voulons assigner agrave la bande de plus haute prioriteacute tout le trafic allant et venant du port 22 Les filtresseraient les suivants

tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip dport 22 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip sport 80 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Quest-ce que cela signifie Cela dit attacher agrave eth0 au noeud 10 un filtre u32 de prioriteacute 1 qui analysele port de destination ip 22 et qui lenvoie vers la bande 101 La mecircme chose est reacutepeacuteteacutee avec le port source80 La derniegravere commande indique que si aucune correspondance nest trouveacutee alors le trafic devra aller versla bande 102 la plus grande prioriteacute suivante

Vous devez ajouter eth0 ou nimporte laquelle de vos interfaces car chaque interface possegravede un espace denommage de ses descripteurs qui lui est propre

Pour seacutelectionner une adresse IP utilisez ceci

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip dst 432132 flowid 101 tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 123432 flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Ceci dirige le trafic allant vers 4321 et venant de 1234 vers la file dattente de plus haute prioriteacutetandis que le reste ira vers la prochaine plus haute prioriteacute

Vous pouvez rassembler ces deux veacuterifications pour reacutecupeacuterer le trafic venant de 1234 avec le portsource 80

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 432132 match ip sport 80 0xffff flowid 101

Toutes les commandes de filtres dont vous aurez normalement besoin

La plupart des commandes preacutesenteacutees ici commencent avec le preacuteambule suivant

tc filter add dev eth0 parent 10 protocol ip prio 1 u32

Ils sont appeleacutes filtres u32 et analysent NIMPORTE QUELLE partie dun paquet

Sur ladresse sourcedestinationMasque pour la source match ip src 123024 et masque pour la destination match ipdst 432024 Pour analyser un hocircte simple employez 32 ou omettez le masque

Sur le port sourcedestination tous les protocoles IPSource match ip sport 80 0xffff et destination match ip dport 0xffff

Sur le protocole ip (tcp udp icmp gre ipsec)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Quelques exemples simples de filtrage 55

Utilisez les nombres deacutefinis dans etcprotocols par exemple 1 pour icmp match ipprotocol 1 0xff

Sur fwmarkVous pouvez marquer les paquets avec ipchains ou iptables et voir cette marque preacuteserveacutee lors duroutage agrave travers les interfaces Ceci est vraiment utile pour mettre uniquement en forme le trafic sureth1 et venant de eth0 par exemple La syntaxe est la suivante

tc filter add dev eth1 protocol ip parent 10 prio 1 handle 6 fw flowid 11

Notez que ce nest pas une correspondance u32

Vous pouvez positionner une marque comme ceci

iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

Le nombre 6 est arbitraire

Si vous ne voulez pas assimiler la syntaxe complegravete de tc filter utilisez juste iptables et apprenezseulement la seacutelection baseacutee sur fwmark

Sur le champ TOSPour seacutelectionner le trafic interactif deacutelai minimum

tc filter add dev ppp0 parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 14

Utilisez 0x08 0xff pour le trafic de masse

Pour plus de commandes de filtrage voir le chapitre Filtres avanceacutes pour la classification des paquetsgt

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediatequeueing device (IMQ))

Le peacuteripheacuterique IMQ nest pas un gestionnaire de mise en file dattente mais son utilisation est fortement lieacutee agraveceux-ci Au coeur de Linux les gestionnaires de mise en file dattente sont attacheacutes aux peacuteripheacuteriques reacuteseauxet tout ce qui est mis en file dattente dans ce peacuteripheacuterique lest dabord dans le gestionnaire Avec ce conceptil existe deux limitations

1 Seule la mise en forme du trafic sortant est possible (un gestionnaire dentreacutee existe mais ses possibiliteacutessont tregraves limiteacutees en comparaison des gestionnaires de mise en file baseacutes sur les classes)

2 Un gestionnaire de mise en file dattente ne voit le trafic que dune interface et des limitations globales nepeuvent pas ecirctre mises en place

IMQ est ici pour aider agrave reacutesoudre ces deux limitations En reacutesumeacute vous pouvez mettre tout ce que vousvoulez dans un gestionnaire de mise en file dattente Les paquets speacutecialement marqueacutes sont intercepteacutes parles points daccroche netfilter NF_IP_PRE_ROUTING et NF_IP_POST_ROUTING et sont transfeacutereacutes vers legestionnaire attacheacute au peacuteripheacuterique imq Une cible iptables est utiliseacutee pour le marquage des paquets

Ceci vous permet de reacutealiser de la mise en forme dentreacutee eacutetant donneacute que vous pouvez marquer les paquetsentrant par un peacuteripheacuterique quelconque etou traiter les interfaces comme des classes pour configurer deslimites globales Vous pouvez eacutegalement reacutealiser de nombreuses autres choses comme simplement mettrevotre trafic http dans un gestionnaire mettre les requecirctes de nouvelles connexions dans un gestionnaire

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

56 Toutes les commandes de filtres dont vous aurez normalement besoin

Configuration simple

La premiegravere chose qui devrait vous venir agrave lesprit est dutiliser la mise en forme du trafic entrant pour vousgarantir une grande passante ) La configuration se fait comme avec nimporte quelle autre interface

tc qdisc add dev imq0 root handle 1 htb default 20

tc class add dev imq0 parent 1 classid 11 htb rate 2mbit burst 15k

tc class add dev imq0 parent 11 classid 110 htb rate 1mbittc class add dev imq0 parent 11 classid 120 htb rate 1mbit

tc qdisc add dev imq0 parent 110 handle 10 pfifotc qdisc add dev imq0 parent 120 handle 20 sfq

tc filter add dev imq0 parent 100 protocol ip prio 1 u32 match ip dst 100023032 flowid 110

Dans cet exemple u32 est utiliseacute pour la classification Les autres classificateurs devraient marcher tout aussibien Le trafic doit ensuite ecirctre seacutelectionneacute et marqueacute pour ecirctre mis en file dattente vers imq0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0

ip link set imq0 up

Les cibles iptables IMQ sont valides dans les chaicircnes PREROUTING et POSTROUTING de la table mangleLa syntaxe est la suivante

IMQ [ --todev n ] n numeacutero du peacuteripheacuterique imq

Il existe aussi une cible ip6tables

Notez que le trafic nest pas mis en file dattente quand la cible est activeacutee mais apregraves La localisation exactede lentreacutee du trafic dans le peacuteripheacuterique imq deacutepend de la direction de ce trafic (entrantsortant) Ces entreacuteessont les points daccroche preacutedeacutefinis de netfilter et utiliseacutes par iptables

enum nf_ip_hook_priorities NF_IP_PRI_FIRST = INT_MIN NF_IP_PRI_CONNTRACK = -200 NF_IP_PRI_MANGLE = -150 NF_IP_PRI_NAT_DST = -100 NF_IP_PRI_FILTER = 0 NF_IP_PRI_NAT_SRC = 100 NF_IP_PRI_LAST = INT_MAX

Pour le trafic entrant imq se deacuteclare avec la prioriteacute NF_IP_PRI_MANGLE + 1 ce qui signifie que lespaquets entrent dans le peacuteripheacuterique imq juste apregraves la chaine PREROUTING de la table mangle

Pour le trafic sortant imq utilise NF_IP_PRI_LAST qui honore le fait que les paquets rejeteacutes par la table filternoccuperont pas de bande passante

Les mises agrave jour et de plus amples informations peuvent ecirctre trouveacutees sur le site imq

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 57

Chapitre 10 Eacutequilibrage de charge sur plusieursinterfacesIl existe plusieurs maniegraveres pour le faire Une des plus faciles et des plus directes est TEQL (True (or Trivial)Link Equalizer Comme la plupart des eacuteleacutements en relation avec la gestion de file dattente leacutequilibrage decharge est bidirectionnel Les deux eacutequipements terminaux du lien ont besoin de participer pour obtenir uneefficaciteacute optimale

Imaginez la situation suivante

+-------+ eth1 +-------+ | |==========| | reacuteseau 1 -----| A | | B |---- reacuteseau 2 | |==========| | +-------+ eth2 +-------+

A et B sont des routeurs dont nous supposerons quils fonctionnent avec Linux pour le moment Si le trafic vadu reacuteseau 1 vers le reacuteseau 2 le routeur A a besoin de distribuer les paquets sur les deux liens allant vers B Lerouteur B a besoin decirctre configureacute pour laccepter On retrouve la mecircme chose dans le sens inverse pour lespaquets allant du reacuteseau 2 vers le reacuteseau 1 Le routeur B a besoin denvoyer les paquets agrave la fois sur eth1 eteth2

La reacutepartition est faite par un peacuteripheacuterique TEQL comme ceci (cela ne pouvait pas ecirctre plus simple)

tc qdisc add dev eth1 root teql0 tc qdisc add dev eth2 root teql0 ip link set dev teql0 up

Noubliez pas la commande ip link set up

Ceci a besoin decirctre fait sur les deux hocirctes Le peacuteripheacuterique teql0 est basiquement un distributeur tourniquetau-dessus de eth1 et eth2 pour lenvoi des paquets Aucune donneacutee narrive jamais agrave travers unpeacuteripheacuterique teql mais les donneacutees apparaissent sur eth1 et eth2

Nous navons pour le moment que les peacuteripheacuteriques et nous avons eacutegalement besoin dun routage correctLune des possibiliteacutes pour reacutealiser cela est dassigner un reacuteseau 31 sur chacun des liens ainsi que sur lepeacuteripheacuterique teql0

FIXME Avons nous besoin de quelque chose comme nobroadcast Un 31 est trop petit pour contenirune adresse reacuteseau et une adresse de diffusion Si cela ne marche pas comme preacutevu essayez un 30 etajustez les adresses IP Vous pouvez mecircme essayer sans attribuer dadresses agrave eth1 et eth2

Sur le routeur A

ip addr add dev eth1 1000031 ip addr add dev eth2 1000231 ip addr add dev teql0 1000431

Sur le routeur B

ip addr add dev eth1 1000131 ip addr add dev eth2 1000331 ip addr add dev teql0 1000531

Le routeur A devrait maintenant ecirctre capable de lancer un ping vers 10001 10003 et 10005 agrave

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

58 Chapitre 10 Eacutequilibrage de charge sur plusieurs interfaces

travers les deux liens physiques et le peacuteripheacuterique ltlt eacutegaliseacute gtgt Le routeur B devrait maintenant ecirctre capablede lancer un ping vers 10000 10002 et 10004 agrave travers les liens

Si cela marche le routeur A peut prendre 10005 comme route vers le reacuteseau 2 et le routeur B10004 comme route vers le reacuteseau 1 Pour le cas particulier ougrave le reacuteseau 1 est votre reacuteseau personnel etougrave le reacuteseau 2 est lInternet le routeur A peut prendre 10005 comme passerelle par deacutefaut

Avertissement

Rien nest aussi simple quil y paraicirct Les interfaces eth1 et eth2 sur les deux routeurs A et B ne doivent pasavoir la fonction de filtrage par chemin inverse activeacutee Dans le cas contraire ils rejetteront les paquetsdestineacutes agrave des adresses autres que les leurs

echo 0 gt procsysnetipv4confeth1rp_filter echo 0 gt procsysnetipv4confeth2rp_filter

Il y a un seacuterieux problegraveme avec le reacuteordonnancement des paquets Supposons que six paquets aient besoindecirctre envoyeacutes de A vers B Par exemple eth1 peut traiter les paquets 1 3 et 5 et eth2 les paquets 2 4 et 6Dans un monde ideacuteal le routeur B devrait recevoir ces paquets dans lordre 1 2 3 4 5 6 Mais il est plusprobable que le noyau les recevra comme ceci 2 1 4 3 6 5 Ce problegraveme va perturber TCPIP Alors quilny a pas de problegravemes pour les liens transportant diffeacuterentes sessions TCPIP vous ne serez pas capable deregrouper plusieurs liens et obtenir par ftp un simple fichier beaucoup plus rapidement agrave moins que lesystegraveme dexploitation envoyant ou recevant ne soit Linux En effet celui-ci nest pas facilement perturbeacute parde simples reacuteordonnancements

Cependant leacutequilibrage de charge est une bonne ideacutee pour de nombreuses applications

Chapitre 11 Netfilter et iproute - marquage depaquetsJusquagrave maintenant nous avons vu comment iproute travaille et netfilter a eacuteteacute mentionneacute plusieurs fois Vousne perdrez pas votre temps agrave consulter Rustys Remarkably Unreliable Guides Le logiciel Netfilter peut ecirctretrouveacute ici

Netfilter nous permet de filtrer les paquets ou de deacutesosser leurs en-tecirctes Une de ses fonctionnaliteacutesparticuliegraveres est de pouvoir marquer un paquet avec un nombre gracircce agrave loption --set-mark

Comme exemple la commande suivante marque tous les paquets destineacutes au port 25 en loccurrence lecourrier 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 chegravere au meacutegaoctet) et une qui est pluslente mais avec un tarif moins eacuteleveacute Nous souhaiterions que le courrier passe par la route la moins chegravere

Nous avons deacutejagrave marqueacute le paquet avec un 1 et nous allons maintenant renseigner la base de donneacutees de lapolitique de routage pour quelle agisse sur ces paquets marqueacutes

echo 201 mailout gtgt etciproute2rt_tables ip rule add fwmark 1 table mailout ip rule ls0 from all lookup local 32764 from all fwmark 1 lookup mailout

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 11 Netfilter et iproute - marquage de paquets 59

32766 from all lookup main 32767 from all lookup default

Nous allons maintenant geacuteneacuterer la table mailout avec une route vers la ligne lente mais peu coucircteuse

sbinip route add default via 1959698253 dev ppp0 table mailout

Voilagrave qui est fait Il se peut que nous voulions mettre en place des exceptions et il existe de nombreuxmoyens pour le faire Nous pouvons modifier la configuration de netfilter pour exclure certains hocirctes ou nouspouvons inseacuterer une regravegle avec une prioriteacute plus faible qui pointe sur la table principale pour nos hocirctes faisantexception

Nous pouvons aussi utiliser cette fonctionnaliteacute pour nous conformer aux bits TOS en marquant les paquetsavec diffeacuterents types de service et les nombres correspondants On creacutee ensuite les regravegles qui agissent sur cestypes de service De cette faccedilon on peut deacutedier une ligne RNIS aux connexions interactives

Inutile de le dire cela marche parfaitement sur un hocircte qui fait de la translation dadresse (NAT) autrementdit du masquerading

IMPORTANT Nous avons reccedilu une information selon laquelle MASQ et SNAT entrent en conflit avec lemarquage de paquets Rusty Russell lexplique dans ce courrier

Deacutesactivez le filtrage de chemin inverse pour que cela fonctionne correctement

Note pour marquer les paquets vous aurez besoin de valider quelques options du noyau

IP advanced router (CONFIG_IP_ADVANCED_ROUTER) [Yn]IP policy routing (CONFIG_IP_MULTIPLE_TABLES) [Yn]IP use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Yn]

Voir aussi la section intituleacutee Cache web transparent utilisant netfilter iproute2 ipchains et squid dansChapitre 15gt dans le chapitre Recettes de cuisinegt

Chapitre 12 Filtres avanceacutes pour la (re-)classificationdes paquetsComme expliqueacute dans la section sur les gestionnaires de mise en file dattente baseacutes sur des classes les filtressont neacutecessaires pour classifier les paquets dans nimporte laquelle des sous-files dattente Ces filtres sontappeleacutes agrave linteacuterieur des gestionnaires de mise en file dattente baseacutes sur des classes

Voici une liste incomplegravete des classificateurs disponibles

fwBase la deacutecision sur la faccedilon dont le pare-feu a marqueacute les paquets Ceci peut ecirctre un passage facile sivous ne voulez pas apprendre la syntaxe tc lieacutee aux filtres Voir le chapitre sur les gestionnaires demise en file dattente pour plus de deacutetails

u32Base la deacutecision sur les champs agrave linteacuterieur du paquet (cest-agrave-dire ladresse IP source etc)

routeBase la deacutecision sur la route que va emprunter le paquet

rsvp rsvp6Route les paquets en se basant sur RSVP Seulement utile sur les reacuteseaux que vous controcirclez Internetne respecte pas RSVP

tcindex

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

60 Chapitre 12 Filtres avanceacutes pour la (re-)classification des paquets

Utiliseacute par le gestionnaire de file dattente DSMARK Voir la section DSMARKgt

Notez quil y a geacuteneacuteralement plusieurs maniegraveres de classifier un paquet Cela deacutepend du systegraveme declassification que vous souhaitez utiliser

Les classificateurs acceptent en geacuteneacuteral quelques arguments communs Ils sont listeacutes ici pour des raisonspratiques

protocolLe protocole que ce classificateur acceptera Geacuteneacuteralement on nacceptera que le trafic IP Exigeacute

parentLe descripteur auquel ce classificateur est attacheacute Ce descripteur doit ecirctre une classe deacutejagrave existanteExigeacute

prioLa prioriteacute de ce classificateur Les plus petits nombres seront testeacutes en premier

handleCette reacutefeacuterence a plusieurs significations suivant les diffeacuterents filtres

Toutes les sections suivantes supposeront que vous essayez de mettre en forme le trafic allant vers HostACes sections supposeront que la classe racine a eacuteteacute configureacutee sur 1 et que la classe vers laquelle vousvoulez envoyer le trafic seacutelectionneacute est 11

Le classificateur u32

Le filtre u32 est le filtre le plus avanceacute dans limpleacutementation courante Il est entiegraverement baseacute sur des tablesde hachage ce qui le rend robuste quand il y a beaucoup de regravegles de filtrage

Dans sa forme la plus simple le filtre u32 est une liste denregistrements chacun consistant en deux champs un seacutelecteur et une action Les seacutelecteurs deacutecrits ci-dessous sont compareacutes avec le paquet IP traiteacute jusquagrave lapremiegravere correspondance et laction associeacutee est reacutealiseacutee Le type daction le plus simple serait de diriger lepaquet vers une classe CBQ deacutefinie

La ligne de commande du programme tc filter utiliseacutee pour configurer le filtre consiste en trois parties laspeacutecification du filtre un seacutelecteur et une action La speacutecification du filtre peut ecirctre deacutefinie comme

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

Le champ protocol deacutecrit le protocole sur lequel le filtre sera appliqueacute Nous ne discuterons que du cas duprotocole ip Le champ preference (priority peut ecirctre utiliseacute comme alternative) fixe la prioriteacute dufiltre que lon deacutefinit Cest important dans la mesure ougrave vous pouvez avoir plusieurs filtres (listes de regravegles)avec des prioriteacutes diffeacuterentes Chaque liste sera scruteacutee dans lordre dajout des regravegles Alors la liste avec laprioriteacute la plus faible (celle qui a le numeacutero de preacutefeacuterence le plus eacuteleveacute) sera traiteacutee Le champ parentdeacutefinit le sommet de larbre CBQ (par ex 10) auquel le filtre doit ecirctre attacheacute

Les options deacutecrites sappliquent agrave tous les filtres pas seulement agrave u32

Le seacutelecteur U32

Le seacutelecteur U32 contient la deacutefinition dun modegravele qui sera compareacute au paquet traiteacute Plus preacuteciseacutement ildeacutefinit quels bits doivent correspondre dans len-tecircte du paquet et rien de plus mais cette meacutethode simple esttregraves puissante Jetons un oeil sur lexemple suivant directement tireacute dun filtre assez complexe reacuteellementexistant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le classificateur u32 61

tc filter parent 1 protocol ip pref 10 u32 fh 800800 order 2048 key ht 800 bkt 0 flowid 13 match 0010000000ff0000 at 0

Pour linstant laissons de cocircteacute la premiegravere ligne tous ces paramegravetres deacutecrivent les tables de hachage du filtreFocalisons-nous sur la ligne de seacutelection contenant le mot-cleacute match Ce seacutelecteur fera correspondre lesen-tecirctes IP dont le second octet sera 0x10 (0010) Comme nous pouvons le deviner le nombre 00ff est lemasque de correspondance disant au filtre quels bits il doit regarder Ici cest 0xff donc loctetcorrespondra si cest exactement 0x10 Le mot-cleacute at signifie que la correspondance doit deacutemarrer audeacutecalage speacutecifieacute (en octets) - dans notre cas cest au deacutebut du paquet Traduisons tout cela en langagehumain le paquet correspondra si son champ Type de Service (TOS) a le bit ltlt faible deacutelai gtgt positionneacuteAnalysons une autre regravegle

tc filter parent 1 protocol ip pref 10 u32 fh 800803 order 2051 key ht 800 bkt 0 flowid 13 match 000000160000ffff at nexthdr+0

Loption nexthdr deacutesigne len-tecircte suivant encapsuleacute dans le paquet IP cest agrave dire celui du protocole de lacouche supeacuterieure La correspondance commencera eacutegalement au deacutebut du prochain en-tecircte Elle devrait avoirlieu dans le deuxiegraveme mot de 32 bits de len-tecircte Dans les protocoles TCP et UDP ce champ contient le portde destination du paquet Le nombre est donneacute dans le format big-endian cest-agrave-dire les bits les plussignificatifs en premier Il faut donc lire 0x0016 comme 22 en deacutecimal qui correspond au service SSH dans lecas de TCP Comme vous le devinez cette correspondance est ambigueuml sans un contexte et nous endiscuterons plus loin

Ayant compris tout cela nous trouverons le seacutelecteur suivant tregraves facile agrave lire matchc0a80100ffffff00 at 16 Ce que nous avons ici cest une correspondance de trois octets au 17egravemeoctet en comptant agrave partir du deacutebut de len-tecircte IP Cela correspond aux paquets qui ont une adresse dedestination quelconque dans le reacuteseau 192168124 Apregraves avoir analyseacute les exemples nous pouvonsreacutesumer ce que nous avons appris

Seacutelecteurs geacuteneacuteraux

Les seacutelecteurs geacuteneacuteraux deacutefinissent le modegravele le masque et le deacutecalage qui seront compareacutes au contenu dupaquet En utilisant les seacutelecteurs geacuteneacuteraux vous pouvez rechercher des correspondances sur nimporte quelbit de len-tecircte IP (ou des couches supeacuterieures) Ils sont quand mecircme plus difficiles agrave eacutecrire et agrave lire que lesseacutelecteurs speacutecifiques deacutecrits ci-dessus La syntaxe geacuteneacuterale des seacutelecteurs est

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

Un des mots-cleacutes u32 u16 ou u8 doit speacutecifier la longueur du modegravele en bits PATTERN et MASK serapporteront agrave la longueur deacutefinie par ce mot-cleacute Le paramegravetre OFFSET est le deacutecalage en octets pour ledeacutemarrage de la recherche de correspondance Si le mot-clef nexthdr+ est preacutesent le deacutecalage sera relatif agravelen-tecircte de la couche reacuteseau supeacuterieure

Quelques exemples

tc filter add dev ppp14 parent 10 prio 10 u32 match u8 64 0xff at 8 flowid 14

Un paquet correspondra agrave cette regravegle si sa ltlt dureacutee de vie gtgt (TTL) est de 64 TTL est le champ deacutemarrantjuste apregraves le 8egraveme octet de len-tecircte IP

Correspond agrave tous les paquets TCP ayant le bit ACK activeacute

tc filter add dev ppp14 parent 10 prio 10 u32 match ip protocol 6 0xff

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

62 Le seacutelecteur U32

match u8 0x10 0xff at nexthdr+13 flowid 13

Utilisez ceci pour deacuteterminer la preacutesence du bit ACK sur les paquets dune longueur infeacuterieure agrave 64 octets

Veacuterifie la preacutesence dun ACK protocol IP 6 longueur de len-tecircte IP 0x5(mots de 32 bits) longueur total IP 0x34 (ACK + 12 octets doptions TCP) TCP ack actif (bit 5 offset 33) tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 13

Seuls les paquets TCP sans charge utile et avec le bit ACK positionneacute veacuterifieront cette regravegle Ici nouspouvons voir un exemple dutilisation de deux seacutelecteurs le reacutesultat final eacutetant un ET logique de leur reacutesultatSi nous jetons un coup doeil sur un scheacutema de len-tecircte TCP nous pouvons voir que le bit ACK est le secondbit (0x10) du 14egraveme octet de len-tecircte TCP (at nexthdr+13) Comme second seacutelecteur si nous voulonsnous compliquer la vie nous pouvons eacutecrire match u8 0x06 0xff at 9 agrave la place du seacutelecteurspeacutecifique protocol tcp puisque 6 est le numeacutero du protocole TCP speacutecifieacute au 10egraveme octet de len-tecircteIP Dun autre cocircteacute dans cet exemple nous ne pourrons pas utiliser de seacutelecteur speacutecifique pour la premiegraverecorrespondance simplement parce quil ny a pas de seacutelecteur speacutecifique pour deacutesigner les bits TCP ACK

Le filtre ci dessous est une version modifieacutee du filtre preacutesenteacute au-dessus La diffeacuterence est quil ne veacuterifie pasla longueur de len-tecircte ip Pourquoi Car le filtre au-dessus ne marche que sur les systegravemes 32 bits

tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 match u16 0x0000 0xffc0 at 2 flowid 13

Les seacutelecteurs speacutecifiques

La table suivante contient la liste de tous les seacutelecteurs speacutecifiques que les auteurs de cette section ont trouveacutesdans le code source du programme tc Ils rendent simplement la vie plus facile en accroissant la lisibiliteacute de laconfiguration du filtre

FIXME emplacement de la table - la table est dans un fichier seacutepareacute selectorhtml

FIXME Cest encore en Polonais -(

FIXME doit ecirctre sgmliseacute

Quelques exemples

tc filter add dev ppp0 parent 10 prio 10 u32 match ip tos 0x10 0xff flowid 14

FIXME tcp dport match ne fonctionne pas comme deacutecrit ci-dessous

La regravegle ci-dessus correspondra agrave des paquets qui ont le champ TOS eacutegal agrave 0x10 Le champ TOS commenceau deuxiegraveme octet du paquet et occupe 1 octet ce qui nous permet deacutecrire un seacutelecteur geacuteneacuteral eacutequivalent match u8 0x10 0xff at 1 Cela nous donne une indication sur limpleacutementation du filtre u32 Les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seacutelecteurs geacuteneacuteraux 63

regravegles speacutecifiques sont toujours traduites en regravegles geacuteneacuterales et cest sous cette forme quelles sont stockeacutees enmeacutemoire par le noyau Cela amegravene agrave une autre conclusion les seacutelecteurs tcp et udp sont exactement lesmecircmes et cest la raison pour laquelle vous ne pouvez pas utiliser un simple seacutelecteur match tcp dport53 0xffff pour deacutesigner un paquet TCP envoyeacute sur un port donneacute Ce seacutelecteur deacutesigne aussi les paquetsUDP envoyeacutes sur ce port Vous devez eacutegalement speacutecifier le protocole avec la regravegle suivante

tc filter add dev ppp0 parent 10 prio 10 u32 match tcp dport 53 0xffff match ip protocol 0x6 0xff flowid 12

Le classificateur route

Ce classificateur filtre en se basant sur les informations des tables de routage Quand un paquet passant agravetravers les classes et en atteint une qui est marqueacutee avec le filtre route il divise le paquet en se basant surlinformation de la table de routage

tc filter add dev eth1 parent 10 protocol ip prio 100 route

Ici nous ajoutons un classificateur route sur le noeud parent 10 avec la prioriteacute 100 Quand un paquetatteint ce noeud (ce qui arrive immeacutediatement puisquil est racine) il consulte la table de routage et si uneentreacutee de la table correspond il envoie le paquet vers la classe donneacutee et lui donne une prioriteacute de 100Ensuite vous ajoutez lentreacutee de routage approprieacutee pour finalement activer les choses

Lastuce ici est de deacutefinir realm en se basant soit sur la destination soit sur la source Voici la faccedilon deproceacuteder

ip route add HostNetwork via Gateway dev Device realm RealmNumber

Par exemple nous pouvons deacutefinir notre reacuteseau de destination 192168100 avec le nombre realm eacutegalagrave 10

ip route add 19216810024 via 192168101 dev eth1 realm 10

Quand on ajoute des filtres route on peut utiliser les nombres realm pour repreacutesenter les reacuteseaux ou leshocirctes et speacutecifier quelle est la correspondance entre les routes et les filtres

tc filter add dev eth1 parent 10 protocol ip prio 100 route to 10 classid 110

La regravegle ci-dessus indique que les paquets allant vers le reacuteseau 192168100 correspondent agrave la classe110

Le filtre route peut aussi ecirctre utiliseacute avec les routes sources Par exemple il y a un sous-reacuteseau attacheacute agravenotre routeur Linux sur eth2

ip route add 1921682024 dev eth2 realm 2 tc filter add dev eth1 parent 10 protocol ip prio 100 route from 2 classid 12

Ici le filtre speacutecifie que les paquets venant du reacuteseau 19216820 (realm 2) correspondront agrave la classe12

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

64 Les seacutelecteurs speacutecifiques

Les filtres de reacuteglementation (Policing filters)

Pour reacutealiser des configurations encore plus compliqueacutees vous pouvez avoir des filtres qui analysent le traficagrave hauteur dune certaine bande passante Vous pouvez configurer un filtre pour quil cesse complegravetementlanalyse de tout le trafic au-dessus dun certain deacutebit ou pour quil nanalyse pas la bande passante deacutepassantun certain deacutebit

Ainsi si vous deacutecidez de reacuteglementer agrave 4mbits mais quun trafic de 5mbits est preacutesent vous pouvez cesserdanalyser lensemble des 5mbits ou seulement cesser danalyser le 1 mbits suppleacutementaire et envoyer 4mbits agrave la classe correspondante

Si la bande passante deacutepasse le deacutebit configureacute vous pouvez rejeter un paquet le reclassifier ou voir si unautre filtre y correspond

Techniques de reacuteglementation

Il y a essentiellement deux faccedilons de reacuteglementer Si vous avez compileacute le noyau avec Estimators celui-cipeut mesurer plus ou moins pour chaque filtre le trafic qui est passeacute Ces estimations ne sont pas coucircteuses entemps CPU eacutetant donneacute quil ne compte que 25 fois par seconde le nombre de donneacutees qui sont passeacutees etquil calcule le deacutebit agrave partir de lagrave

Lautre maniegravere utilise encore le Token Bucket Filter qui reacuteside agrave linteacuterieur du filtre cette fois Le TBF analyseseulement le trafic A HAUTEUR de la bande passante que vous avez configureacutee Si cette bande passante estdeacutepasseacutee seul lexcegraves est traiteacute par laction de deacutepassement de limite configureacutee

Avec lestimateur du noyau

Ceci est tregraves simple et il ny a quun seul paramegravetre avrate Soit le flux demeure sous avrate et le filtreclassifie le trafic vers la classe approprieacutee soit votre deacutebit le deacutepasse et laction indiqueacutee par deacutefaut laltlt reclassification gtgt est reacutealiseacutee dans ce cas

Le noyau utilise lalgorithme EWMA pour votre bande passante ce qui la rend moins sensible aux courtesrafales de donneacutees

Avec le Token Bucket Filter

Utilisez les paramegravetres suivants

buffermaxburstbull mtuminburstbull mpubull ratebull

Ceux-ci se comportent la plupart du temps de maniegravere identique agrave ceux deacutecrits dans la section Filtre agrave seau dejetonsgt Notez cependant que si vous configurez le mtu du filtre de reacuteglementation TBF trop bas aucunpaquet ne passera et le gestionnaire de mise en file dattente de sortie TBF ne fera que les ralentir

Une autre diffeacuterence est que la reacuteglementation ne peut que laisser passer ou jeter un paquet Il ne peut pas leretenir dans le but de le retarder

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Les filtres de reacuteglementation (Policing filters) 65

Actions de deacutepassement de limite (Overlimit actions)

Si votre filtre deacutecide quun deacutepassement de limite est atteint il peut mettre en oeuvre des ltlt actions gtgtActuellement trois actions sont disponibles

continueProvoque larrecirct de lanalyse du filtre bien que dautres filtres aient la possibiliteacute de le faire

dropCeci est une option tregraves feacuteroce qui supprime simplement le trafic exceacutedant un certain deacutebit Elle estsouvent employeacutee dans le Ingress policer et a des utilisations limiteacutees Par exemple si vous avez unserveur de noms qui seacutecroule sil traite plus de 5mbits de paquets alors vous pourrez dans ce casutiliser un filtre dentreacutee pour ecirctre sucircr quil ne traitera jamais plus de 5mbits

PassOKTransmettre le trafic Peut ecirctre utiliseacute pour mettre hors service un filtre compliqueacute tout en le laissanten place

reclassifyPermet le plus souvent une reclassification vers Best Effort Ceci est laction par deacutefaut

Exemples

Le seul vrai exemple connu est mentionneacute dans la section Proteacuteger votre machine des inondations SYNgt

FIXME Si vous avez deacutejagrave utiliseacute ceci partagez sil vous plaicirct votre expeacuterience avec nous

Filtres hacheacutes pour un filtrage massif tregraves rapide

Si vous avez besoin de milliers de regravegles par exemple dans le cas ougrave vous avez beaucoup de clients oudordinateurs tous avec des speacutecifications QoS diffeacuterentes vous pourrez constater que le noyau passebeaucoup de temps agrave analyser toutes ces regravegles

Par deacutefaut tous les filtres reacutesident dans une grande chaicircne qui est analyseacutee par ordre deacutecroissant des prioriteacutesSi vous avez 1000 regravegles 1000 controcircles peuvent ecirctre neacutecessaires pour deacuteterminer ce quil faut faire dunpaquet

La veacuterification irait plus vite sil y avait 256 chaicircnes avec chacune quatre regravegles et si vous pouviez reacutepartir lespaquets sur ces 256 chaicircnes afin que la bonne regravegle soit preacutesente

Ceci est rendu possible par le hachage Imaginons que vous ayez sur votre reacuteseau 1024 clients avec desmodems cacircble avec des adresses IP allant de 1200 agrave 123255 et que chacun doit avoir unclassement particulier par exemple ltlt pauvre gtgt ltlt moyen gtgt et ltlt bourrage gtgt Cela vous ferait alors1024 regravegles dans le genre

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123254 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123255 classid 12

Pour aller plus vite nous pouvons utiliser la derniegravere partie de ladresse IP comme ltlt cleacute de hachage gtgtNous obtenons alors 256 tables la premiegravere ressemblant agrave ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

66 Actions de deacutepassement de limite (Overlimit actions)

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1210 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1220 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1230 classid 12

La suivante commence comme ceci

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11

De cette maniegravere seules quatre recherches au plus sont neacutecessaires et deux en moyenne

La configuration est plutocirct compliqueacutee mais elle en vaut vraiment la peine du fait des nombreuses regraveglesNous creacuteons dabord un filtre racine puis une table avec 256 entreacutees

tc filter add dev eth1 parent 10 prio 5 protocol ip u32 tc filter add dev eth1 parent 10 prio 5 handle 2 u32 divisor 256

Nous ajoutons maintenant des regravegles dans la table preacuteceacutedemment creacuteeacutee

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 120123 flowid 11 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 121123 flowid 12 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 123123 flowid 13 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 124123 flowid 12

Ceci est lentreacutee 123 qui contient les correspondances pour 12013 121123 122123 et123123 qui les envoient respectivement vers 11 12 13 et 12 Notez que nous devons speacutecifiernotre seau de hachage en hexadeacutecimal 0x7b pour 123

Nous creacuteons ensuite un ltlt filtre de hachage gtgtqui dirige le trafic vers la bonne entreacutee de la table de hachage

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 800 match ip src 120016 hashkey mask 0x000000ff at 12 link 2

Ok certains nombres doivent ecirctre expliqueacutes La table de hachage par deacutefaut est appeleacutee 800 et tous lesfiltres deacutemarrent de lagrave Nous seacutelectionnons alors ladresse source qui est en position 12 13 14 et 15 danslen-tecircte IP et indiquons que seule la derniegravere partie nous inteacuteresse Ceci est envoyeacute vers la table de hachage2 qui a eacuteteacute creacuteeacutee plus tocirct

Cest plutocirct compliqueacute mais cela marche en pratique et les performances seront eacutepoustouflantes Notez quecet exemple pourrait ecirctre ameacutelioreacute pour que chaque chaicircne contienne un filtre ce qui repreacutesenterait le casideacuteal

Filtrer le trafic IPv6

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Filtres hacheacutes pour un filtrage massif tregraves rapide 67

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

La base de donneacutees des politiques de routage (RPDB) a remplaceacute le routage IPv4 et la structure dadressage agravelinteacuterieur du noyau Linux ce qui a permis les merveilleuses fonctionnaliteacutes deacutecrites dans ce HOWTOMalheureusement la pile IPv6 agrave linteacuterieur de Linux a eacuteteacute impleacutementeacutee en dehors de cette structure principaleBien quils partagent des fonctionnaliteacutes la structure RPDB de base ne participe pas dans ou avec lesstructures dadressage et de routage de IPv6

Ceci va sucircrement changer nous devons juste attendre un peu plus longtemps

FIXME Des ideacutees sur des personnes travaillant sur ce sujet Planifications

Marquer les paquets IPv6 en utilisant ip6tables

ip6tables est capable de marquer un paquet et de lui assigner un numeacutero

ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Ceci ne va cependant pas nous aider dans la mesure ougrave le paquet ne passera pas par la structure RPDB

Utiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

IPv6 est normalement encapsuleacute dans un tunnel SIT et transporteacute agrave travers les reacuteseaux IPv4 Voir la sectionsur le tunnel IPv6 pour de plus amples informations quant agrave la configuration dun tel tunnel Ceci nous permetde filtrer les paquets IPv4 en consideacuterant les paquets IPv6 comme la charge utile

Le filtre suivant repegravere tous les paquets IPv6 encapsuleacutes dans des paquets IPv4

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff flowid 4242

Continuons Supposons que les paquets IPv6 soient envoyeacutes gracircce agrave des paquets IPv4 et que ces paquets nontpas doptions On pourrait utiliser le filtre suivant pour repeacuterer ICMPv6 dans IPv6 dans IPv4 nayant aucuneoption 0x3a (58) est le type du champ en-tecircte suivant pour ICMPv6

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3a 0xff at 26 flowid 4242

Repeacuterer ladresse de destination IPv6 neacutecessite un peu plus de travail Le filtre suivant repegravere ladresse dedestination 3ffe202cffff322304ffffe08358d

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3f 0xff at 44 match u8 0xfe 0xff at 45 match u8 0x20 0xff at 46 match u8 0x2c 0xff at 47 match u8 0xff 0xff at 48 match u8 0xff 0xff at 49 match u8 0x00 0xff at 50 match u8 0x32 0xff at 51 match u8 0x02 0xff at 52

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

68 Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

match u8 0x30 0xff at 53 match u8 0x4f 0xff at 54 match u8 0xff 0xff at 55 match u8 0xfe 0xff at 56 match u8 0x08 0xff at 57 match u8 0x35 0xff at 58 match u8 0x8d 0xff at 59 flowid 1013

La mecircme technique peut ecirctre utiliseacutee pour repeacuterer les reacuteseaux Par exemple 2001

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x20 0xff at 28 match u8 0x01 0xff at 29 flowid 1013

Chapitre 13 Paramegravetres reacuteseau du noyauLe noyau utilise de nombreux paramegravetres qui peuvent ecirctre ajusteacutes en diffeacuterentes circonstances Bien quecomme dhabitude les paramegravetres par deacutefaut conviennent agrave 99amppercnt des installations nous ne pourrionspas appeler ce document ltlt HOWTO avanceacute gtgt sans en dire un mot

Les eacuteleacutements inteacuteressants sont dans procsysnet jetez-y un oeil Tout ne sera pas documenteacute ici audeacutepart mais nous y travaillons

En attendant vous pouvez jeter un oeil dans les sources du noyau Linux et lire le fichierDocumentationfilesystemsproctxt La plupart des fonctionnaliteacutes y sont expliqueacutees

Filtrage de Chemin Inverse (Reverse Path Filtering)

Par deacutefaut les routeurs routent tout mecircme les paquets qui visiblement nappartiennent pas agrave votre reacuteseau Unexemple courant est lespace des adresses IP priveacutees seacutechappant sur Internet Si vous avez une interface avecune route pour 1959696024 dessus vous ne vous attendrez pas agrave voir arriver des paquets venant de21264941

Beaucoup dutilisateurs veulent deacutesactiver cette fonctionnaliteacute Les deacuteveloppeurs du noyau ont permis de lefaire facilement Il y a des fichiers dans proc ougrave vous pouvez ordonner au noyau de le faire pour vous Lameacutethode est appeleacutee ltlt Filtrage par Chemin Inverse gtgt (Reverse Path Filtering) Pour faire simple si lareacuteponse agrave ce paquet ne sort pas par linterface par laquelle il est entreacute alors cest un paquet ltlt bogueacute gtgt et ilsera ignoreacute

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

for i in procsysnetipv4confrp_filter dogt echo 2 gt $i gt done

En reprenant lexemple du deacutebut si un paquet arrivant sur le routeur Linux par eth1 preacutetend venir du reacuteseauBureau+FAI il sera eacutelimineacute De mecircme si un paquet arrivant du reacuteseau Bureau preacutetend ecirctre de quelque part agravelexteacuterieur du pare-feu il sera eacutegalement eacutelimineacute

Ce qui est preacutesenteacute ci-dessus est le filtrage de chemin inverse complet Le parameacutetrage par deacutefaut filtreseulement sur les adresses IP des reacuteseaux directement connecteacutes Ce parameacutetrage par deacutefaut est utiliseacute parceque le filtrage complet eacutechoue dans le cas dun routage asymeacutetrique (ougrave il y a des paquets arrivant par un

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 13 Paramegravetres reacuteseau du noyau 69

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 reacuteseau Les donneacutees descendent vers la parabole satellite et les reacuteponses repartentpar des lignes terrestres normales)

Si cette exception sapplique dans votre cas (vous devriez ecirctre au courant) vous pouvez simplement deacutesactiverle rpamplowbarfilter sur linterface darriveacutee des donneacutees satellite Si vous voulez voir si des paquetssont eacutelimineacutes le fichier logamplowbarmartians du mecircme reacutepertoire indiquera au noyau de les enregistrerdans votre syslog

echo 1 gtprocsysnetipv4confltinterfacenamegtlog_martians

FIXME Est-ce que la configuration des fichiers dans confamplcubdefaultallamprcub suffit - martijn

Configurations obscures

Bon il y a beaucoup de paramegravetres qui peuvent ecirctre modifieacutes Nous essayons de tous les lister Voir aussi unedocumentation partielle dans Documentationip-sysctltxt

Certaines de ces configurations ont des valeurs par deacutefaut diffeacuterentes suivant que vous reacutepondez Yes ou No agravela question Configure as router and not host lors de la compilation du noyau

Oskar Andreasson a une page sur ces options et il apparaicirct quelle soit meilleure que la notre De ce fait allezeacutegalement voir httpipsysctl-tutorialfrozentuxnet

ipv4 geacuteneacuterique

En remarque geacuteneacuterale les fonctionnaliteacutes de limitation de deacutebit ne fonctionnent pas sur linterfaceloopback Nessayez donc pas de les tester localement Les limites sont exprimeacutees en ltlt tic-tac gtgt (jiffies)et elles utilisent obligatoirement le Token Bucket Filter mentionneacute plus tocirct

amplsqbNdT le terme jiffies deacutesigne un mouvement reacutegulier faisant reacutefeacuterence au ltlt tic-tac gtgt dune horlogeDans le noyau lui-mecircme une variable globale nommeacutee jiffies est increacutementeacutee agrave chaque interruptiondhorloge]

Le noyau a une horloge interne qui tourne agrave HZ impulsions (ou jiffies) par seconde Sur Intel HZ est la plupartdu temps eacutegale agrave 100 Donc configurer un fichier amplowbarrate agrave disons 50 autorise 2 paquets parseconde Le Token Bucket Filter est eacutegalement configureacute pour autoriser une rafale de donneacutees de 6 paquets auplus si suffisamment de jetons ont eacuteteacute gagneacutes

Plusieurs eacuteleacutements de la liste suivante proviennent du fichierusrsrclinuxDocumentationnetworkingip-sysctltxt eacutecrit par Alexey Kuznetsovltkuznetms2inracrugt et Andi Kleen ltakmucdegt

procsysnetipv4icmpamplowbardestunreachamplowbarrateSi le noyau deacutecide quil ne peut pas deacutelivrer un paquet il le rejettera et enverra agrave la source du paquetun ICMP notifiant ce rejet

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarallNagit en aucun cas comme eacutecho pour les paquets Ne configurez pas ceci par deacutefaut Cependant sivous ecirctes utiliseacute comme relais dans une attaque de Deacuteni de Services cela peut ecirctre utile

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarbroadcastsamplsqbUtileamprsqb

Si vous pinguez ladresse de diffusion dun reacuteseau tous les hocirctes sont senseacutes reacutepondre Cela permet decoquettes attaques de deacuteni de service Mettez cette valeur agrave 1 pour ignorer ces messages de diffusion

procsysnetipv4icmpamplowbarechoreplyamplowbarrate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

70 Filtrage de Chemin Inverse (Reverse Path Filtering)

Le deacutebit auquel les reacuteponses echo sont envoyeacutees aux destinatairesprocsysnetipv4icmpamplowbarignoreamplowbarbogusamplowbarerroramplowbarresponses

Configurer ceci pour ignorer les erreurs ICMP dhocirctes du reacuteseau reacuteagissant mal aux trames envoyeacuteesvers ce quils perccediloivent comme ladresse de diffusion

procsysnetipv4icmpamplowbarparamprobamplowbarrateUn message ICMP relativement peu connu qui est envoyeacute en reacuteponse agrave des paquets qui ont desen-tecirctes IP ou TCP erroneacutes Avec ce fichier vous pouvez controcircler le deacutebit auquel il est envoyeacute

procsysnetipv4icmpamplowbartimeexceedamplowbarrateVoici la ceacutelegravebre cause des ltlt eacutetoiles Solaris gtgt dans traceroute Limite le nombre de messages ICMPTime Exceeded envoyeacutes

procsysnetipv4igmpamplowbarmaxamplowbarmembershipsNombre maximal de sockets igmp (multidistribution) en eacutecoute sur lhocircte FIXME Est-ce vrai

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmaxtimeFIXME Ajouter une petite explication sur le stockage des partenaires internet (inet peer) Intervallede temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris en compte lorsdune faible (voire inexistante) utilisation du pool Mesureacute en jiffies amplsqbNdT Le pool deacutesigne icila liste des adresses IP des partenaires internet]

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmintimeIntervalle de temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris encompte lors dune utilisation intensive du pool Mesureacute en jiffies

procsysnetipv4inetamplowbarpeeramplowbarmaxttlDureacutee de conservation maximale des enregistrements Les entreacutees non utiliseacutees expireront au bout decet intervalle de temps (cest-agrave-dire quand le nombre dentreacutees dans le pool est tregraves petit) Mesureacute enjiffies

procsysnetipv4inetamplowbarpeeramplowbarminttlDureacutee de conservation minimale des enregistrements Devrait ecirctre suffisante pour prendre en comptele temps de vie des fragments sur lhocircte qui doit reacuteassembler les paquets Cette dureacutee minimale estgarantie si le nombre deacuteleacutements dans le pool est infeacuterieur au seuil fixeacute parinetamplowbarpeeramplowbarthreshold

procsysnetipv4inetamplowbarpeeramplowbarthresholdTaille approximative de lespace de stockage des partenaires internet A partir de ce seuil les entreacuteessont effaceacutees Ce seuil deacutetermine la dureacutee de vie des entreacutees ainsi que les intervalles de temps entredeux deacuteclenchements du ramasse-miettes Plus il y a dentreacutees plus le temps de vie est faible et pluslintervalle du ramasse-miettes est faible

procsysnetipv4ipamplowbarautoconfigCe fichier contient la valeur 1 si lhocircte a reccedilu sa configuration IP par RARP BOOTP DHCP ou unmeacutecanisme similaire Autrement il contient la valeur zeacutero

procsysnetipv4ipamplowbardefaultamplowbarttlDureacutee de vie (TTL) des paquets Fixer agrave la valeur sucircre de 64 Augmentez-la si vous avez un reacuteseauimmense mais pas ltlt pour samuser gtgt les boucles sans fin dun mauvais routage sont plusdangereuses si le TTL est eacuteleveacute Vous pouvez mecircme envisager de diminuer la valeur dans certainescirconstances

procsysnetipv4ipamplowbardynaddrVous aurez besoin de positionner cela si vous utilisez la connexion agrave la demande avec une adressedinterface dynamique Une fois que votre interface a eacuteteacute configureacutee toutes les sockets TCP locauxqui nont pas eu de paquets de reacuteponse seront retraiteacutees pour avoir la bonne adresse Cela reacutesout leproblegraveme poseacute par une connexion deacutefectueuse ayant configureacute une interface suivie par une deuxiegravemetentative reacuteussie (avec une adresse IP diffeacuterente)

procsysnetipv4ipamplowbarforwardLe noyau doit-il essayer de transmettre les paquets Deacutesactiveacute par deacutefaut

procsysnetipv4ipamplowbarlocalamplowbarportamplowbarrangeIntervalle des ports locaux pour les connexions sortantes En fait assez petit par deacutefaut 1024 agrave 4999

procsysnetipv4ipamplowbarnoamplowbarpmtuamplowbardiscConfigurez ceci si vous voulez deacutesactiver la deacutecouverte du MTU de chemin une technique pour

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 71

deacuteterminer le plus grand MTU possible sur votre chemin Voir aussi la section sur la deacutecouverte duMTU de chemin dans le chapitre Recettes de cuisinegt

procsysnetipv4ipfragamplowbarhighamplowbarthreshMeacutemoire maximum utiliseacutee pour reacuteassembler les fragments IP Quandipfragamplowbarhighamplowbarthresh octets de meacutemoire sont alloueacutes pour cela legestionnaire de fragments rejettera les paquets jusquagrave ce queipfragamplowbarlowamplowbarthresh soit atteint

procsysnetipv4ipamplowbarnonlocalamplowbarbindConfigurez ceci si vous voulez que vos applications soient capables de se lier agrave une adresse quinappartient pas agrave une interface de votre systegraveme Ceci peut ecirctre utile quand votre machine est sur unlien non-permanent (ou mecircme permanent) Vos services sont donc capables de deacutemarrer et de se lier agraveune adresse speacutecifique quand votre lien est inactif

procsysnetipv4ipfragamplowbarlowamplowbarthreshMeacutemoire minimale utiliseacutee pour reacuteassembler les fragments IP

procsysnetipv4ipfragamplowbartimeTemps en secondes du maintien dun fragment IP en meacutemoire

procsysnetipv4tcpamplowbarabortamplowbaronamplowbaroverflowUne option booleacuteenne controcirclant le comportement dans le cas de nombreuses connexions entrantesQuand celle-ci est activeacutee le noyau envoie rapidement des paquets RST quand un service estsurchargeacute

procsysnetipv4tcpamplowbarfinamplowbartimeoutTemps de maintien de leacutetat FIN-WAIT-2 pour un socket dans le cas ougrave il a eacuteteacute fermeacute de notre cocircteacuteLe partenaire peut ecirctre deacutefectueux et ne jamais avoir fermeacute son cocircteacute ou mecircme mourir de maniegravereinattendue La valeur par deacutefaut est de 60 secondes La valeur usuelle utiliseacutee dans le noyau 22 eacutetaitde 180 secondes Vous pouvez la remettre mais rappelez vous que si votre machine a un serveurWEB surchargeacute vous risquez de deacutepasser la meacutemoire avec des kilotonnes de sockets morts Lessockets FIN-WAIT2 sont moins dangereux que les sockets FIN-WAIT1 parce quils consomment aumaximum 15K de meacutemoire mais ils ont tendance agrave vivre plus longtemps Cftcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarkeepaliveamplowbartimeDureacutee entre lenvoi de deux messages keepalive quand loption keepalive est activeacutee Par deacutefaut 2heures

procsysnetipv4tcpamplowbarkeepaliveamplowbarintvlA quelle freacutequence les sondes sont retransmises lorsquil ny a pas eu acquittement de sonde Pardeacutefaut 75 secondes

procsysnetipv4tcpamplowbarkeepaliveamplowbarprobesCombien de sondes TCP keepalive seront envoyeacutees avant de deacutecider que la connexion est briseacutee Pardeacutefaut 9 En multipliant par tcpamplowbarkeepaliveamplowbarintvl cela donne le tempspendant lequel un lien peut ecirctre actif sans donner de reacuteponses apregraves lenvoi dun keepalive

procsysnetipv4tcpamplowbarmaxamplowbarorphansNombre maximum de sockets TCP qui ne sont pas relieacutes agrave un descripteur de fichier utilisateur geacutereacutepar le systegraveme Si ce nombre est deacutepasseacute les connexions orphelines sont immeacutediatement reacuteinitialiseacuteeset un avertissement est envoyeacute Cette limite existe seulement pour preacutevenir des attaques de deacuteni deservices simples Vous ne devez pas compter sur ceci ou diminuer cette limite artificiellement maisplutocirct laugmenter (probablement apregraves avoir augmenteacute la meacutemoire) si les conditions du reacuteseaureacuteclament plus que cette valeur par deacutefaut et reacutegler vos services reacuteseau pour quils deacutetruisent sanstarder ce type deacutetat Laissez-moi vous rappeler encore que chaque orphelin consomme jusquagraveenviron 64K de meacutemoire non swappable

procsysnetipv4tcpamplowbarorphanamplowbarretriesCombien dessais avant de deacutetruire une connexion TCP fermeacutee par notre cocircteacute La valeur par deacutefaut de7 correspond agrave un temps denviron 50s agrave 16 min suivant le RTO Si votre machine supporte un serveurWeb vous pouvez envisager de baisser cette valeur dans la mesure ougrave de tels sockets peuventconsommer des ressources significatives Cf tcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarmaxamplowbarsynamplowbarbacklog

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

72 ipv4 geacuteneacuterique

Nombre maximum de requecirctes dune connexion meacutemoriseacutee qui navait pas encore reccedilu daccuseacute dereacuteception du client connecteacute La valeur par deacutefaut est de 1024 pour des systegravemes avec plus de 128 Mode meacutemoire et 128 pour des machines avec moins de meacutemoire Si un serveur souffre de surchargeessayez daugmenter ce nombre Attention Si vous positionnez une valeur supeacuterieure agrave 1024 il seraitpreacutefeacuterable de changer TCPamplowbarSYNQamplowbarHSIZE dans le fichierincludenettcph pour garder TCPamplowbarSYNQamplowbarHSIZE16 lt=tcpamplowbarmaxamplowbarsynamplowbarbacklog et de recompiler de noyau

procsysnetipv4tcpamplowbarmaxamplowbartwamplowbarbucketsNombre maximum de sockets timewait geacutereacutees par le systegraveme simultaneacutement Si ce nombre estdeacutepasseacute le socket timewait est immeacutediatement deacutetruit et un message davertissement est envoyeacuteCette limite nexiste que pour preacutevenir des attaques de deacuteni de services simples Vous ne devez pasdiminuer cette limite artificiellement mais plutocirct laugmenter (probablement apregraves avoir augmenteacute lameacutemoire) si les conditions du reacuteseau reacuteclament plus que cette valeur par deacutefaut

procsysnetipv4tcpamplowbarretransamplowbarcollapseCompatibiliteacute bug agrave bug avec certaines imprimantes deacutefectueuses Tentative denvoi de plus grospaquets lors de la retransmission pour contourner le bug de certaines piles TCP

procsysnetipv4tcpamplowbarretries1Combien dessais avant de deacutecider que quelque chose est erroneacute et quil est neacutecessaire dinformer decette suspicion la couche reacuteseau La valeur minimale du RFC est de 3 Cest la valeur par deacutefaut ellecorrespond agrave un temps denviron 3 sec agrave 8 min suivant le RTO

procsysnetipv4tcpamplowbarretries2Combien dessais avant de deacutetruire une connexion TCP active Le RFC 1122 preacutecise que la limite nedevrait pas deacutepasser 100 secondes Cest un nombre trop petit La valeur par deacutefaut de 15 correspond agraveun temps de environ 13 agrave 30 minutes suivant le RTO

procsysnetipv4tcpamplowbarrfc1337Ce booleacuteen active un rectificatif pour ltlt lassassinat hasardeux des time-wait dans tcp gtgt deacutecrit dansle RFC 1337 Sil est activeacute le noyau rejette les paquets RST pour les sockets agrave leacutetat de time-waitPar deacutefaut 0

procsysnetipv4tcpamplowbarsackUtilise un ACK seacutelectif qui peut ecirctre utiliseacute pour signifier que des paquets speacutecifiques sont manquantFacilite ainsi une reacutecupeacuteration rapide

procsysnetipv4tcpamplowbarstdurgUtilise linterpreacutetation du RFC Host Requirements du champ TCP pointeur urgent La plupart deshocirctes utilisent la vieille interpreacutetation BSD Donc si vous activez cette option il se peut que Linux necommunique plus correctement avec eux Par deacutefaut FALSE (FAUX)

procsysnetipv4tcpamplowbarsynamplowbarretriesNombre de paquets SYN que le noyau enverra avant de tenter leacutetablissement dune nouvelleconnexion

procsysnetipv4tcpamplowbarsynackamplowbarretriesPour ouvrir lautre cocircteacute de la connexion le noyau envoie un SYN avec un ACK superposeacute(piggyback) pour accuser reacuteception du SYN preacuteceacutedemment envoyeacute Cest la deuxiegraveme partie de lapoigneacutee de main agrave trois voies (threeway handshake) Cette configuration deacutetermine le nombre depaquets SYN+ACK agrave envoyer avant que le noyau nabandonne la connexion

procsysnetipv4tcpamplowbartimestampsLes estampillages horaires sont utiliseacutes entre autres pour se proteacuteger du rebouclage des numeacuteros deseacutequence On peut concevoir quun lien agrave 1 gigabit puisse de nouveau rencontrer un numeacutero deseacutequence preacuteceacutedent avec une valeur hors-ligne parcequil eacutetait dune geacuteneacuteration preacuteceacutedenteLestampillage horaire permet de reconnaicirctre cet ltlt ancien paquet gtgt

procsysnetipv4tcpamplowbartwamplowbarrecycleMise en place du recyclage rapide des sockets TIME-WAIT La valeur par deacutefaut est 1 Celle-ci nedevrait pas ecirctre changeacutee sans le conseildemande dexperts techniques

procsysnetipv4tcpamplowbarwindowamplowbarscalingTCPIP autorise normalement des fenecirctres jusquagrave une taille de 65535 octets Pour des reacuteseauxvraiment rapides cela peut ne pas ecirctre assez Les options windows scaling autorisent des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 73

fenecirctres jusquau gigaoctet ce qui est adapteacute pour les produits agrave grande bande passante

Configuration des peacuteripheacuteriques

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4confDEVacceptamplowbarredirectsSi un routeur deacutecide que vous lutilisez agrave tort (cest-agrave-dire quil a besoin de reacute-envoyer votre paquet surla mecircme interface) il vous enverra un message ICMP Redirect Cela preacutesente cependant un petitrisque pour la seacutecuriteacute et vous pouvez le deacutesactiver ou utiliser les redirections seacutecuriseacutees

procsysnetipv4confDEVacceptamplowbarsourceamplowbarroutePlus vraiment utiliseacute On lutilisait pour ecirctre capable de donner agrave un paquet une liste dadresses IP agravevisiter Linux peut ecirctre configureacute pour satisfaire cette option IP

procsysnetipv4confDEVbootpamplowbarrelayAccepte les paquets avec une adresse source 0bcd et des adresses destinations qui ne correspondentni agrave cet hocircte ni au reacuteseau local On suppose quun deacutemon de relais BOOTP interceptera et transmettrade tels paquets

La valeur par deacutefaut est 0 puisque cette fonctionnaliteacute nest pas encore impleacutementeacutee (noyau 2212)procsysnetipv4confDEVforwarding

Active ou deacutesactive la transmission IP sur cette interfaceprocsysnetipv4confDEVlogamplowbarmartians

Voir la section sur le Filtrage de Chemin Inversegtprocsysnetipv4confDEVmcamplowbarforwarding

Si vous faites de la transmission multidistribution (multicast) sur cette interfaceprocsysnetipv4confDEVproxyamplowbararp

Si vous configurez ceci agrave 1 cet interface reacutepondra aux requecirctes ARP pour les adresses que le noyaudoit router Peut ecirctre tregraves utile si vous mettez en place des ltlt pseudo ponts ip gtgt Prenez bien gardedavoir des masques de sous-reacuteseau corrects avant dactiver cette option Faites eacutegalement attentionque le rp_filter agisse aussi sur le requecirctes ARP

procsysnetipv4confDEVrpamplowbarfilterVoir la section sur le Filtrage de Chemin Inversegt

procsysnetipv4confDEVsecureamplowbarredirectsAccepte les messages de redirection ICMP seulement pour les passerelles indiqueacutees dans la liste despasserelles par deacutefaut Activeacute par deacutefaut

procsysnetipv4confDEVsendamplowbarredirectsActive la possibiliteacute denvoyer les messages de redirections mentionneacutees ci-dessus

procsysnetipv4confDEVsharedamplowbarmediaSi cela nest pas activeacute le noyau ne considegravere pas que diffeacuterents sous-reacuteseaux peuvent communiquerdirectement sur cette interface La configuration par deacutefaut est Yes

procsysnetipv4confDEVtagFIXME agrave remplir

Politique de voisinage

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4neighDEVanycastamplowbardelayValeur maximum du deacutelai aleacuteatoire de reacuteponse exprimeacute en jiffies (1100 sec) aux messages desollicitation des voisins Nest pas encore impleacutementeacute (Linux ne possegravede pas encore le supportanycast)

procsysnetipv4neighDEVappamplowbarsolicit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

74 Configuration des peacuteripheacuteriques

Deacutetermine le nombre de requecirctes agrave envoyer au deacutemon ARP de lespace utilisateur Utilisez 0 pourdeacutesactiver

procsysnetipv4neighDEVbaseamplowbarreachableamplowbartimeUne valeur de base utiliseacutee pour le calcul du temps aleacuteatoire daccegraves comme speacutecifieacute dans leRFC2461

procsysnetipv4neighDEVdelayamplowbarfirstamplowbarprobeamplowbartimeDeacutelai avant de tester pour la premiegravere fois si le voisin peut ecirctre atteint (voirgcamplowbarstaleamplowbartime)

procsysnetipv4neighDEVgcamplowbarstaleamplowbartimeDeacutetermine la freacutequence agrave laquelle on doit veacuterifier les vieilles entreacutees ARP Si une entreacutee est obsolegraveteelle devra de nouveau ecirctre reacutesolue (ce qui est utile quand une adresse IP a eacuteteacute attribueacutee agrave une autremachine) Si ucastamplowbarsolicit est supeacuterieur agrave 0 alors on essaie dabord denvoyer unpaquet ARP directement agrave lhocircte connu Si cela eacutechoue et que mcastamplowbarsolicit estsupeacuterieur agrave 0 alors une requecircte ARP est multidiffuseacutee

procsysnetipv4neighDEVlocktimeUne entreacutee ARP nest remplaceacutee par une nouvelle que si lancienne est au moins preacutesente depuislocktime Cela eacutevite trop deacutecriture dans le cache

procsysnetipv4neighDEVmcastamplowbarsolicitNombre maximum dessais conseacutecutifs pour une sollicitation multicast

procsysnetipv4neighDEVproxyamplowbardelayTemps maximum (le temps reacuteel est aleacuteatoire et compris entre 0 et proxytime) avant de reacutepondre agraveune requecircte ARP pour laquelle nous avons une entreacutee de proxy ARP Peut ecirctre utiliseacute dans certainscas pour se preacutemunir des inondations reacuteseaux

procsysnetipv4neighDEVproxyamplowbarqlenLongueur maximale de la file dattente du temporisateur de cache arp en attente (Voirproxyamplowbardelay)

procsysnetipv4neighDEVretransamplowbartimeLe temps exprimeacute en jiffies (1100 sec) entre deux requecirctes ARP Utiliseacute pour la reacutesolutiondadresses et pour deacuteterminer si un voisin est inaccessible

procsysnetipv4neighDEVucastamplowbarsolicitNombre maximum de requecirctes ARP unicast

procsysnetipv4neighDEVunresamplowbarqlenLongueur maximum de la file dattente pour la requecircte ARP en cours le nombre de paquets qui sontaccepteacutes des autres couches pendant la reacutesolution ARP dune adresse

Internet QoS Architectures and Mechanisms for Quality of Service Zheng Wang ISBN 1-55860-608-4Livre traitant des sujets lieacutes agrave la qualiteacute de service Bien pour comprendre les concepts de base

Configuration du routage

procsysnetipv4routeerroramplowbarburstCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarburst est grand moins il yaura de messages Erroramplowbarburst controcircle le moment ougrave les messages seront supprimeacutesLes configurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeerroramplowbarcostCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarcost est grand moins il yaura de messages erroramplowbarburst controcircle le moment ougrave les messages seront jeteacutes Lesconfigurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeflushLeacutecriture dans ce fichier provoque la vidange du cache du routage

procsysnetipv4routegcamplowbarelasticityValeurs qui controcirclent la freacutequence et le comportement de lalgorithme garbage collection du cachede routage Ceci peut ecirctre important en cas de deacutefaut Au moins gcamplowbartimeout secondes

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de voisinage 75

seacutecouleront avant que le noyau ne passe agrave une autre route si la preacuteceacutedente nest plus opeacuterationnelleConfigureacute par deacutefaut agrave 300 Diminuez cette valeur si vous voulez passer plus rapidement ce type deproblegraveme

Voir aussi ce message par Ard van Breemenprocsysnetipv4routegcamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarminamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarthresh

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbartimeout

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routemaxamplowbardelay

Deacutelai dattente pour la vidange du cache du routageprocsysnetipv4routemaxamplowbarsize

Taille maximum du cache de routage Les vieilles entreacutees seront purgeacutees quand le cache aura atteintcette taille

procsysnetipv4routeminamplowbaradvamplowbarmssFIXME agrave remplir

procsysnetipv4routeminamplowbardelayDeacutelai dattente pour vider le cache de routage

procsysnetipv4routeminamplowbarpmtuFIXME agrave remplir

procsysnetipv4routemtuamplowbarexpiresFIXME agrave remplir

procsysnetipv4routeredirectamplowbarloadFacteurs qui deacuteterminent si plus de redirections ICMP doivent ecirctre envoyeacutees agrave un hocircte speacutecifiqueAucune redirection ne sera envoyeacutee une fois que la limite de charge (load limit) ou que le nombremaximum de redirections aura eacuteteacute atteint

procsysnetipv4routeredirectamplowbarnumberVoir procsysnetipv4routeredirectamplowbarload

procsysnetipv4routeredirectamplowbarsilenceTemporisation pour les redirections Au dela de cette peacuteriode les redirections seront de nouveauenvoyeacutees mecircme si elles ont eacuteteacute stoppeacutees parce que la charge ou le nombre limite a eacuteteacute atteint

Chapitre 14 Gestionnaires de mise en file dattenteavanceacutes amp moins communsSi vous constatez que vous avez des besoins qui ne sont pas geacutereacutes par les files dattente citeacutees preacuteceacutedemmentle noyau contient quelques autres files dattente plus speacutecialiseacutees mentionneacutees ici

bfifopfifo

Ces files dattente sans classes sont plus simples que pfifoamplowbarfast dans la mesure ougrave elles nontpas de bandes internes tout le trafic eacutetant vraiment eacutequivalent Elles ont cependant lavantage important dereacutealiser des statistiques Donc mecircme si vous navez pas besoin de mise en forme ou de donner une prioriteacutevous pouvez employer ce gestionnaire pour deacuteterminer larrieacutereacute (backlog) de votre interface

pfifo mesure en paquets et bfifo en octets

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

76 Chapitre 14 Gestionnaires de mise en file dattente avanceacutes amp moins communs

Paramegravetres amp usage

limitSpeacutecifie la taille de la file dattente Mesureacutee en octets pour bfifo et en paquets pour pfifo Pardeacutefaut correspond agrave des paquets de taille eacutegale au paramegravetre txqueuelen de linterface (voir lechapitre pfifo_fastgt) ou txqueuelenmtu octets pour bfifo

Algorithme Clark-Shenker-Zhang (CSZ)

Ceci est si theacuteorique que mecircme Alexey (lauteur principal de CBQ) preacutetend ne pas le comprendre De sonpropre avis

David D Clark Scott Shenker and Lixia Zhang Supporting Real-Time Applications in anIntegrated Services Packet Network Architecture and Mechanism

Comme je le comprends lideacutee principale est de creacuteer des flux WFQ pour chaque servicegaranti et dallouer le reste de la bande passante au flux factice appeleacute flow-0 Le Flux-0inclut le trafic de service preacutedictif et le trafic best-effort Il est traiteacute par un ordonnanceur deprioriteacute qui alloue la bande passante de plus grande prioriteacute aux services preacutedictifs et le resteaux paquets best-effort

Notez que dans CSZ les flux ne sont PAS limiteacutes agrave leur bande passante On suppose que leflux a passeacute le controcircle dadmission agrave la frontiegravere du reacuteseau QoS et quil na pas besoin demises en forme suppleacutementaires Nimporte quelles autres tentatives pour ameacuteliorer le flux oupour le mettre en forme gracircce agrave un seau de jetons lors deacutetapes intermeacutediaires introduiront desretards non deacutesireacutes et augmenteront la gigue

A lheure actuelle CSZ est le seul ordonnanceur qui fournit un veacuteritable service garanti Lesautres impleacutementations (incluant CBQ) nassurent pas un deacutelai garanti et rendent la giguealeacuteatoire

Ne semble pas actuellement un bon candidat agrave utiliser agrave moins que vous nayez lu et comprislarticle mentionneacute

DSMARK

Esteve Camps

ltmarvingrnesgtltestevehadesudgesgt

Ce texte est un extrait de ma thegravese sur le support QoS dans Linux Septembre 2000

Documents sources

Draft-almesberger-wajhak-diffserv-linux-01txtbull Exemples de la distribution iproute2bull White Paper-QoS protocols and architectures et Foires Aux Questions IP QoS les deux par Qualityof Service Forum

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 77

Introduction

Avant tout il serait preacutefeacuterable de lire les RFC eacutecrits sur ce sujet (RFC2474 RFC2475 RFC2597 et RFC2598)sur le site web du groupe de travail DiffServ IETF et sur le site web de Werner Almesberger (Il a eacutecrit lecode permettant le support des Services Diffeacuterencieacutes sous Linux)

A quoi DSMARK est-il relieacute

DSMARK est un gestionnaire de mise en file dattente qui offre les fonctionnaliteacutes dont ont besoin les servicesdiffeacuterencieacutes (Differentiated Services) (eacutegalement appeleacutes DiffServ ou tout simplement DS) DiffServ est lunedes deux architectures actuelles de la Qualiteacute de Services (QoS Quality of Services) (lautre est appeleacuteeservices inteacutegreacutes (Integrated Services) Elle se base sur la valeur du champ DS contenu dans len-tecircte IP dupaquet

Une des premiegraveres solutions dans IP pour offrir des niveaux de qualiteacute de services eacutetait le champ Type deService (octet TOS) de len-tecircte IP En modifiant la valeur de ce champ nous pouvions choisir un niveaueacuteleveacutefaible du deacutebit du deacutelai ou de la fiabiliteacute Cependant cela ne fournissait pas une flexibiliteacute suffisantepour les besoins de nouveaux services (comme les applications temps reacuteel les applications interactives etautres) Par la suite de nouvelles architectures sont apparues Lune delle a eacuteteacute DiffServ qui a gardeacute les bitsTOS et les a renommeacutes champ DS

Guide des services diffeacuterencieacutes

Les services diffeacuterencieacutes sont orienteacutes groupes Cela signifie que nous ne savons rien des flux (ce sera le butdes services inteacutegreacutes (integrated Services)) Nous connaissons par contre les agreacutegations de flux et nousadopterons des comportements diffeacuterents suivant lagreacutegation agrave laquelle appartient le paquet

Quand un paquet arrive agrave un noeud frontalier (noeud dentreacutee du domaine DiffServ) et entre dans un domaineDiffServ nous devrons avoir une politique une mise en forme etou un marquage de ces paquets (le marquagefait reacutefeacuterence agrave la mise en place dune valeur dans le champ DS Comme on le ferait pour des vaches -)) Cesera cette marquevaleur que les noeuds internes de votre domaine DiffServ regarderons pour deacuteterminer quelcomportement ou niveau de qualiteacute de service appliquer

Comme vous pouvez le deacuteduire les Services Diffeacuterencieacutes impliquent un domaine sur lequel toutes les regraveglesDS devront ecirctre appliqueacutees Vous pouvez raisonner de la faccedilon suivante ltlt Je classifierai tous les paquetsentrant dans mon domaine Une fois quils seront entreacutes dans mon domaine ils seront soumis aux regravegles quema classification impose et chaque noeud traverseacute appliquera son niveau de qualiteacute de service gtgt

En fait vous pouvez appliquer vos propres politiques dans vos domaines locaux mais des autorisations auniveau service devront ecirctre consideacutereacutees lors de la connexion agrave dautres domaines DS

En ce moment vous vous posez peut-ecirctre beaucoup de questions DiffServ est plus vaste que ce que jaiexpliqueacute En fait vous pouvez comprendre que je ne peux pas reacutesumer plus de trois RFC en 50 lignes -)

Travailler avec DSMARK

Comme le speacutecifie la bibliographie concernant DiffServ nous diffeacuterencions les noeuds frontaliers et lesnoeuds inteacuterieurs Ce sont deux eacuteleacutements importants dans le chemin quemprunte le trafic Les deux reacutealisentune classification quand un paquet arrive Le reacutesultat peut ecirctre utiliseacute agrave diffeacuterents endroits lors du processusDS avant que le paquet ne soit libeacutereacute vers le reacuteseau Cela est possible car le nouveau code DiffServ fournit unestructure appeleacutee skamplowbarbuff incluant un nouveau champ appeleacute skb-gttcindex Ce champmeacutemorisera le reacutesultat de la classification initiale et pourra ecirctre utiliseacute agrave plusieurs reprises dans le traitementDS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

78 Introduction

La valeur skb-gttcamplowbarindex sera initialement configureacutee par le gestionnaire de mise en filedattente DSMARK Cette valeur sera extraite du champ DS de len-tecircte IP de tous les paquets reccedilus En outrele classificateur clsamplowbartcindex lira tout ou une partie de la valeur skb-gttcindex et lutiliserapour seacutelectionner les classes

Mais avant tout regardons la commande qdisc DSMARK et ses paramegravetres

dsmark indices INDICES [ default_index DEFAULT_INDEX ] [ set_tc_index ]

Que signifient ces paramegravetres

indices taille de la table des couples (masquevaleur) La valeur maximum est 2ˆn ougrave ngt=0bull defaultamplowbarindex index dentreacutee par deacutefaut de la table si aucune correspondance nesttrouveacutee

bull

setamplowbartcamplowbarindex indique au gestionnaire DSMARK de reacutecupeacuterer le champs DSet de lenregistrer dans skb-gttcamplowbarindex

bull

Regardons DSMARK proceacuteder

Comment SCHamplowbarDSMARK travaille

Ce gestionnaire de mise en file dattente reacutealisera les eacutetapes suivantes

Si vous avez deacuteclareacute loption setamplowbartcamplowbarindex dans la commande qdisc lechamp DS est reacutecupeacutereacute et meacutemoriseacute dans la variable skb-gttcamplowbarindex

bull

Le classificateur est invoqueacute Celui-ci sera exeacutecuteacute et retournera un identificateur de classe (class ID)qui sera enregistreacute dans la variable skb-gttcamplowbarindex Si aucun filtre correspondant nesttrouveacute nous consideacuterons loption defaultamplowbarindex comme eacutetant lidentificateur de classeagrave enregistrer Si ni setamplowbartcamplowbarindex ni defaultamplowbarindex nont eacuteteacutedeacuteclareacutes alors les reacutesultats peuvent ecirctre non preacutedictifs

bull

Apregraves avoir eacuteteacute envoyeacute dans le gestionnaire de file dattente interne ougrave le reacutesultat du filtre peut ecirctrereacuteutiliseacute lidentificateur de classe retourneacute par le gestionnaire est stockeacute dans la variableskb-gttcamplowbarindex Cette valeur sera utiliseacutee plus tard pour indexer la table masque-valeurLe reacutesultat de lopeacuteration suivante sera assigneacute au paquet

Nouveau_champ_DS = ( Ancien_champ_DS amp masque ) | valeur

bull

La nouvelle valeur reacutesultera donc dun ET logique entre les valeurs du champamplowbarDS et dumasque suivi dun OU logique avec le paramegravetre valeur Regardez la figure suivante pourcomprendre tout ce processus

bull

skb-gtihp-gttos- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gt | | ^ | -- Si vous deacuteclarez set_tc_index nous configurons | | lt-----Peut changer | la valeur DS dans la variable skb-gttc_index | |O le champ DS | A| |R +-|-+ +------+ +---+-+ File dattente-+ +---N|-----|----+ | | | |filtre|---gt| | |--gt --gt| | | D| | | | | |-----gt| tc |---gt| | | interne | |----gt| v | | | | | |index |---gt| | | +---------------+ | ----gt(masquevaleur)|--gt| O | +------+ +-|-+--------------^----+ | ( ) | | | | ^ | | | | ( ) | | | +----------|---------|----------------|-------|--+ ( ) | | | sch_dsmark | | | | | +-|------------|---------|----------------|-------|------------------+ | | | lt- tc_index -gt | | | |(lecture)| peut changer | | lt--------------Index de la table

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Travailler avec DSMARK 79

| | | | | des couples v | v v | (masquevaleur)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -gt skb-gttc_index

Comment faire le marquage Il suffit de modifier le masque et la valeur associeacutes agrave la classe que vous voulezmarquer Regardez la ligne de code suivante

tc class change dev eth0 classid 11 dsmark mask 0x3 value 0xb8

Cela modifie le couple (masquevaleur) dans la table de hachage et re-marque les paquets appartenant agrave laclasse 11 Vous devez changer ces valeurs en raison des valeurs par deacutefaut que le couple (masque valeur)obtient initialement (voir le tableau ci-dessous)

Nous allons maintenant expliquer comment le filtre TCamplowbarINDEX travaille et comment il sintegravegredans tout cela En outre le filtre TCamplowbarINDEX peut ecirctre utiliseacute dans des configurations autres que cellesincluant les services DS

Le filtre TCamplowbarINDEX

Voici la commande de base pour deacuteclarer un filtre TCamplowbarINDEX

tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ] [ pass_on | fall_through ] [ classid CLASSID ] [ police POLICE_SPEC ]

Ensuite nous montrons lexemple utiliseacute pour expliquer le mode opeacuteratoire de TCamplowbarINDEX Soyezattentif aux mots en gras tc qdisc add dev eth0 handle 10 root dsmark indices 64setamplowbartcamplowbarindex tc filter add dev eth0 parent 10 protocol ip prio 1 tcindex mask 0xfc shift 2 tcqdisc add dev eth0 parent 10 handle 20 cbq bandwidth 10Mbit cell 8 avpkt 1000 mpu 64 ampnum Classe dutrafic EF tc class add dev eth0 parent 20 classid 21 cbq bandwidth 10Mbit rate 1500Kbit avpkt 1000 prio 1bounded isolated allot 1514 weight 1 maxburst 10 ampnum Gestionnaire de file dattente fifo pour le trafic EFtc qdisc add dev eth0 parent 21 pfifo limit 5 tc filter add dev eth0 parent 20 protocol ip prio 1 handle 0x2etcindex classid 21 passamplowbaron (Ce code nest pas complet Ce nest quun extrait de lexemple EFCBQinclus dans la distribution iproute2)

Avant tout supposons que nous recevons un paquet marqueacute comme EF Si vous lisez le RFC2598 vousverrez que DSCP recommande une valeur de 101110 pour le trafic EF Cela signifie que le champ DS seraeacutegal agrave 10111000 (rappelez- vous que les bits les moins significatifs de loctet TOS ne sont pas utiliseacutes dansDS) ou 0xb8 en notation hexadeacutecimale

FILTRE TC INDEX +---+ +-------+ +---+-+ +------+ +-+ +-------+ | | | | | | | |FILTRE| +-+ +-+ | | | | | |-----gt| MASK | -gt | | | -gt |HANDLE|-gt| | | | -gt | | -gt | | | | | =0xfc | | | | |0x2E | | +----+ | | | | | | | | | | | | +------+ +--------+ | | | | | | | | | | | | | | |--gt| | | SHIFT | | | | | | | |--gt | | | =2 | | | +----------------------------+ | | | | | | | | | CBQ 20 | | | | | +-------+ +---+--------------------------------+ | | | | | | | +-------------------------------------------------------------+ | | DSMARK 10 |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

80 Comment SCHamplowbarDSMARK travaille

+-------------------------------------------------------------------------+

Le paquet arrive alors avec la valeur du champ DS configureacutee agrave 0xb8 Comme je lai expliqueacute auparavant legestionnaire de mise en file dattente dsmark identifieacute par 10 dans cet exemple reacutecupegravere le champ DS etlenregistre dans la variable skb-gttcamplowbarindex Leacutetape suivante consistera agrave associer un filtre agrave cegestionnaire de mise en file dattente (la seconde ligne dans cet exemple) Les opeacuterations suivantes serontreacutealiseacutees

Valeur1 = skb-gttc_index amp MASKCleacute = Valeur1 gtgt SHIFT

Dans cet exemple MASK=0xFC et SHIFT=2

Valeur1 = 10111000 amp 11111100 = 10111000Cleacute = 10111000 gtgt 2 = 00101110 -gt 0x2E en hexadeacutecimal

La valeur retourneacutee correspondra agrave un identificateur de filtre du gestionnaire de file dattente interne (danslexemple identifier par 20) Si un filtre avec cet identificateur (id) existe les conditions de controcircle et deperformance seront veacuterifieacutees (au cas ougrave le filtre inclurait ceci) et lidentificateur de classe sera retourneacute (dansnotre exemple classid 21) et stockeacute dans la variable skb-gttcamplowbarindex

Si aucun filtre avec cet identificateur nest trouveacute le reacutesultat deacutependra de la deacuteclaration de loptionfallamplowbarthrough Si tel est le cas la valeur Cleacute est retourneacutee comme identificateur de classe Si cela nestpas le cas une erreur est retourneacutee et le traitement continue avec les filtres restant Faites attention si vousutilisez loption fallamplowbarthrough ceci ne peut ecirctre fait que si une relation existe entre les valeurs de lavariable skb-gttcamplowbarindex et les identificateurs de classe

Les derniers paramegravetres agrave commenter sont hash et passamplowbaron Le premier est relieacute agrave la taille de la tablede hachage Passamplowbaron sera utiliseacute pour indiquer dessayer le filtre suivant dans le cas ougrave aucunidentificateur de classe eacutegal au reacutesultat du filtre ne serait trouveacute Laction par deacutefaut est fallamplowbarthrough(regarder la table suivante)

Finalement regardons quelles sont les valeurs possibles pour la configuration de tous ces paramegravetresTCINDEX

Nom TC Valeur Deacutefaut-----------------------------------------------------------------Hash 10x10000 Deacutependant de limpleacutementationMask 00xffff 0xffffShift 015 0Fall through Pass_on Flag Fall_throughClassid Majorminor RienPolice Rien

Ce type de filtre est tregraves puissant Il est neacutecessaire dexplorer toutes les possibiliteacutes En outre ce filtre nest passeulement utiliseacute dans les configurations DiffServ Vous pouvez lutiliser comme nimporte quel autre filtre

Je vous recommande de regarder les exemples DiffServ inclus dans la distribution iproute2 Je vous prometsque jessaierai de compleacuteter ce texte degraves que possible Tout ce que jai expliqueacute est le reacutesultat de nombreux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le filtre TCamplowbarINDEX 81

tests Merci de me dire si je me suis trompeacute quelque part

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

Tous les gestionnaires de mise en file dattente dont nous avons discuteacute jusquici sont des gestionnaires desortie Chaque interface peut eacutegalement avoir un gestionnaire de mise en file dattente dentreacutee qui nest pasutiliseacute pour envoyer les paquets agrave lexteacuterieur du peacuteripheacuterique reacuteseau Au lieu de cela il vous autorise agraveappliquer des filtres tc aux paquets entrants par linterface indeacutependamment de sils ont une destination localeou sils sont destineacutes agrave ecirctre transmis

Etant donneacute que les filtres tc contiennent une impleacutementation complegravete du Filtre agrave Seau de Jetons et quilssont eacutegalement capables de sappuyer sur lestimation du flux fourni par le noyau il y a beaucoup defonctionnaliteacutes disponibles Ceci vous permet de reacuteglementer le trafic entrant de faccedilon efficace avant mecircmequil nentre dans la pile IP

Paramegravetres amp usage

Le gestionnaire de mise en file dattente dentreacutee ne neacutecessite pas de paramegravetres Il diffegravere des autresgestionnaires dans le fait quil noccupe pas la racine du peacuteripheacuterique Attachez-le comme ceci

tc qdisc add dev eth0 ingress

Ceci vous autorise agrave avoir dautres gestionnaires de sortie sur votre peacuteripheacuterique en plus du gestionnairedentreacutee

Pour un exemple inventeacute sur la faccedilon dont le gestionnaire dentreacutee peut ecirctre utiliseacute voir le chapitre Recettes decuisine

Random Early Detection (RED)

Ce chapitre est conccedilu comme une introduction au routage de dorsales (backbones) Ces liaisons impliquentsouvent des bandes passantes supeacuterieures agrave 100 meacutegabitss ce qui neacutecessite une approche diffeacuterente de cellede votre modem ADSL agrave la maison

Le comportement normal des files dattente de routeurs est appeleacute tail-drop (NdT eacutelimine le reste) Letail-drop consiste agrave mettre en file dattente un certain volume de trafic et agrave eacuteliminer tout ce qui deacuteborde Cenest pas du tout eacutequitable et cela conduit agrave des retransmissions de synchronisation Quand une retransmissionde synchronisation a lieu la brusque rafale de rejet dun routeur qui a atteint sa limite entraicircnera une rafale deretransmissions retardeacutee qui inondera agrave nouveau le routeur congestionneacute

Dans le but den finir avec les congestions occasionnelles des liens les routeurs de dorsales integravegrent souventdes files dattente de grande taille Malheureusement bien que ces files dattente offrent un bon deacutebit ellespeuvent augmenter sensiblement les temps de latence et entraicircner un comportement tregraves saccadeacute desconnexions TCP pendant la congestion

Ces problegravemes avec le tail-drop deviennent de plus en plus preacuteoccupants avec laugmentation de lutilisationdapplications hostiles au reacuteseau Le noyau Linux nous offre la technique RED abreacuteviation de Random EarlyDetect ou deacutetection preacutecoce directe

RED nest pas la solution miracle agrave tous ces problegravemes Les applications qui nintegravegrent pas correctement latechnique de lexponential backoff obtiennent toujours une part trop grande de bande passante Cependantavec la technique RED elles ne provoquent pas trop de deacutegacircts sur le deacutebit et les temps de latence des autresconnexions

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

82 Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

RED eacutelimine statistiquement des paquets du flux avant quil natteigne sa limite dure (hard) Sur une dorsalecongestionneacutee cela entraicircne un ralentissement en douceur de la liaison et eacutevite les retransmissions desynchronisation La technique RED aide aussi TCP agrave trouver une vitesse eacutequitable plus rapidement enpermettant deacuteliminer des paquets plus tocirct il conserve une file dattente plus courte et des temps de latencemieux controcircleacutes La probabiliteacute quun paquet soit eacutelimineacute dune connexion particuliegravere est proportionnelle agrave labande passante utiliseacutee par cette connexion plutocirct quau nombre de paquets quelle envoie

La technique RED est une bonne gestion de file dattente pour les dorsales ougrave vous ne pouvez pas vouspermettre le coucirct dune meacutemorisation deacutetat par session qui est neacutecessaire pour une mise en file dattentevraiment eacutequitable

Pour utiliser RED vous devez reacutegler trois paramegravetres Min Max et burst Min est la taille minimum de la filedattente en octets avant que les rejets naient lieu Max est le maximum doux (soft) en dessous duquellalgorithme sefforcera de rester et burst est le nombre maximum de paquets envoyeacutes en rafale

Vous devriez configurer Min en calculant le plus grand temps de latence acceptable pour la mise en filedattente multiplieacute par votre bande passante Par exemple sur mon lien ISDN agrave 64 Kbitss je voudrais avoirun temps de latence de base de mise en file dattente de 200 ms Je configure donc Min agrave 1600 octets (= 02 x64000 8) Imposer une valeur Min trop petite va deacutegrader le deacutebit et une valeur Min trop grande va deacutegraderle temps de latence Sur une liaison lente choisir un coefficient Min petit ne peut pas remplacer une reacuteductiondu MTU pour ameacuteliorer les temps de reacuteponse

Vous devriez configurer Max agrave au moins deux fois Min pour eacuteviter les synchronisations Sur des liens lentsavec de petites valeurs de Min il peut ecirctre prudent davoir Max quatre fois plus grand que Min ou plus

Burst controcircle la reacuteponse de lalgorithme RED aux rafales Burst doit ecirctre choisi plus grand que minavpkt(paquet moyen) Expeacuterimentalement jai trouveacute que (min+min+max)(3avpkt) marche bien

De plus vous devez configurer limit et avpkt Limit est une valeur de seacutecuriteacute sil y a plus de Limit octetsdans la file RED reprend la technique tail-drop Je choisis une valeur typique eacutegale agrave 8 fois Max Avpktdevrait ecirctre fixeacute agrave la taille moyenne dun paquet 1000 fonctionne correctement sur des liaisons Internet hautdeacutebit ayant un MTU de 1500 octets

Lire larticle sur la file dattente RED par Sally Floyd et Van Jacobson pour les informations techniques

Generic Random Early Detection

Il ny a pas grand chose de connu sur GRED Il ressemble agrave GRED avec plusieurs files dattente internescelles-ci eacutetant choisies en se basant sur le champ tcindex de Diffserv Selon une diapositive trouveacutee ici ilpossegravede les capaciteacutes Distributed Weighted RED de Cisco ainsi que les capaciteacutes RIO de Clark

Chaque file dattente virtuelle peut avoir ses propres Drop Parameters

FIXME Demandez agrave Jamal or Werner de nous en dire plus

Emulation VCATM

Ceci est leffort principal de Werner Almesberger pour vous autoriser agrave construire des circuits virtuelsau-dessus des sockets TCPIP Le circuit virtuel est un concept venant de la theacuteorie des reacuteseaux ATM

Pour plus dinformations voir la page ATM sur Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Random Early Detection (RED) 83

Weighted Round Robin (WRR)

Ce gestionnaire de mise en file dattente nest pas inclus dans les noyaux standards mais peut ecirctre teacuteleacutechargeacuteeagrave partir de ce lien Ce gestionnaire de mise en file dattente na eacuteteacute testeacute quavec les noyaux 22 mais marcheraprobablement eacutegalement avec les noyaux 2425

La file dattente WRR partage la bande passante entre ses classes en utilisant la technique du tourniquetpondeacutereacute Ceci est similaire agrave la file dattente CBQ qui contient des classes sur lesquelles lon peut associerarbitrairement des files dattente Toutes les classes qui ont suffisamment de demandes obtiendront la bandepassante proportionnellement au poids associeacute des classes Les poids peuvent ecirctre configureacutes manuellement enutilisant le programme tc Ils peuvent eacutegalement ecirctre configureacutes pour deacutecroicirctre automatiquement pour lesclasses transfeacuterant moins de donneacutees

La file dattente a un classificateur inteacutegreacute qui assigne les paquets venant ou allant vers diffeacuterentes machines agravediffeacuterentes classes On peut utiliser soit ladresse MAC soit ladresse IP de ladresse source ou de destinationLadresse MAC ne peut cependant ecirctre utiliseacutee que quand la boite Linux est un pont ethernet Les classes sontautomatiquement assigneacutees aux machines en fonction des paquets vus

Ce gestionnaire de mise en file dattente peut ecirctre tregraves utile au site comme les reacutesidences eacutetudiantes ougrave desindividus sans liens particuliers partagent une connexion Internet Un ensemble de scripts pour configurer untel cas de figure pour ce genre de site est proposeacute dans la distribution WRR

Chapitre 15 Recettes de cuisineCette section contient des ltlt recettes de cuisine gtgt qui peuvent vous aider agrave reacutesoudre vos problegravemes Un livrede cuisine ne remplace cependant pas une reacuteelle compreacutehension essayez donc dassimiler ce qui suit

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations)

Vous pouvez faire cela de plusieurs maniegraveres Apache possegravede un module qui permet de le supporter maisnous montrerons comment Linux peut le faire pour dautres services Les commandes ont eacuteteacute reprises dunepreacutesentation de Jamal Hadi dont la reacutefeacuterence est fournie ci-dessous

Disons que nous avons deux clients avec http ftp et du streaming audio Nous voulons leur vendre unelargeur de bande passante limiteacutee Nous le ferons sur le serveur lui-mecircme

Le client A doit disposer dau moins 2 meacutegabits et le client B a payeacute pour 5 meacutegabits Nous seacuteparons nosclients en creacuteant deux adresses IP virtuelles sur notre serveur

ip address add 1881771661 dev eth0 ip address add 1881771662 dev eth0

Cest agrave vous dassocier les diffeacuterents serveurs agrave la bonne adresse IP Tous les deacutemons courants supportent cela

Nous pouvons tout dabord attacher une mise en file dattente CBQ agrave eth0

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

Nous creacuteons ensuite les classes pour nos clients

tc class add dev eth0 parent 10 classid 11 cbq bandwidth 10Mbit rate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

84 Chapitre 15 Recettes de cuisine

2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 tc class add dev eth0 parent 10 classid 12 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 Quest-ce quundiviseur FIXME Un diviseur est lieacute agrave une table de hachage et au nombre deseaux -ahu tc filter add dev eth0 parent 10 protocol ip prio 5 handle 1 u32 divisor 1 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771661 flowid 11 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771662 flowid 12

Et voilagrave qui est fait

FIXME Pourquoi pas un filtre token bucket Y a t-il un retour par deacutefaut agrave pfifoamplowbarfast quelquepart

Proteacuteger votre machine des inondations SYN

Dapregraves la documentation iproute dAlexey adapteacutee agrave netfilter Si vous utilisez ceci prenez garde dajuster lesnombres avec des valeurs raisonnables pour votre systegraveme

Si vous voulez proteacuteger tout un reacuteseau oubliez ce script qui est plus adapteacute agrave un hocircte seul

Il apparaicirct que la toute derniegravere version de loutil iproute2 est neacutecessaire pour que ceci fonctionne avec lenoyau 240

binsh -x script simple utilisant les capaciteacutes 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 beacuteneacuteficier de puissantes fonctionnaliteacutes sur les SYN chemins vers les divers utilitaires Agrave changer en fonction des vocirctresTC=sbintcIP=sbinipIPTABLES=sbiniptablesINDEV=eth2 marque tous les paquets SYN entrant agrave travers $INDEV avec la valeur 1 $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn -j MARK --set-mark 1 installe la file dattente ingress sur linterface associeacutee $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 agrave 3 par seconde (pas vraiment utile mais sert agrave montrer ce point -JHS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations) 85

$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 $INDEVecho ---- Class parameters Ingress ----------$TC class ls dev $INDEVecho ---- filter parameters Ingress ----------$TC filter ls dev $INDEV parent ffff

supprime la file dattente ingress $TC qdisc del $INDEV ingress

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service

Reacutecemment les attaques distribueacutees de deacuteni de service sont devenues une nuisance importante sur InternetEn filtrant proprement et en limitant le deacutebit de votre reacuteseau vous pouvez agrave la fois eacuteviter de devenir victimeou source de ces attaques

Vous devriez filtrer vos reacuteseaux de telle sorte que vous nautorisiez pas les paquets avec une adresse IP sourcenon locale agrave quitter votre reacuteseau Cela empecircche les utilisateurs denvoyer de maniegravere anonyme descochonneries sur Internet

La limitation de deacutebit peut faire encore mieux comme vu plus haut Pour vous rafraicircchir la meacutemoire revoicinotre diagramme ASCII

[Internet] ---ltE3 T3 nimporte quoigt--- [routeur Linux] --- [Bureau+FAI] eth1 eth0

Nous allons dabord configurer les parties preacute-requises

tc qdisc add dev eth0 root handle 10 cbq bandwidth 10Mbit avpkt 1000 tc class add dev eth0 parent 100 classid 101 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 deacuteterminercombien de trafic ICMP vous voulez autoriser Vous pouvez reacutealiser des mesures avec tcpdump en eacutecrivantles reacutesultats dans un fichier pendant un moment et regarder combien de paquets ICMP passent par votrereacuteseau Ne pas oublier daugmenter la longueur du snapshot Si la mesure nest pas possible vous pouvezconsacrer par exemple 5amppercnt de votre bande passante disponible Configurons notre classe

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

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

86 Proteacuteger votre machine des inondations SYN

Cela limite le deacutebit agrave 100 Kbits sur la classe Maintenant nous avons besoin dun filtre pour assigner le traficICMP agrave cette classe

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

Donner la prioriteacute au trafic interactif

Si beaucoup de donneacutees arrivent agrave votre lien ou en partent et que vous essayez de faire de la maintenance viatelnet ou ssh cela peut poser problegraveme dautres paquets bloquent vos frappes clavier Cela ne serait-il pasmieux si vos paquets interactifs pouvaient se faufiler dans le trafic de masse Linux peut faire cela pour vous

Comme preacuteceacutedemment nous avons besoin de manipuler le trafic dans les deux sens Evidemment celamarche mieux sil y a des machines Linux aux deux extreacutemiteacutes du lien bien que dautres UNIX soientcapables de faire la mecircme chose Consultez votre gourou local SolarisBSD pour cela

Le gestionnaire standard pfifoamplowbarfast a trois bandes diffeacuterentes Le trafic de la bande 0 est transmis enpremier le trafic des bandes 1 et 2 eacutetant traiteacute apregraves Il est vital que votre trafic interactif soit dans la bande 0 Ce qui suit est adapteacute du (bientocirct obsolegravete) Ipchains-HOWTO

Il y a quatre bits rarement utiliseacutes dans len-tecircte IP appeleacutes bits de Type de Service (TOS) Ils affectent lamaniegravere dont les paquets sont traiteacutes Les quatre bits sont Deacutelai Minimum Deacutebit Maximum FiabiliteacuteMaximum et Coucirct Minimum Seul un de ces bits peut ecirctre positionneacute Rob van Nieuwkerk lauteur ducode TOS-mangling dans ipchains le configure comme suit

Le Deacutelai Minimum est particuliegraverement important pour moi Je lepositionne agrave 1 pour les paquets interactifs sur mon routeur (Linux)qui envoie le trafic vers lexteacuterieur Je suis derriegravere un modem agrave336 Kbps Linux reacutepartit les paquets dans trois filesdattente De cette maniegravere jobtiens des performances acceptablespour le trafic interactif tout en teacuteleacutechargeant en mecircme temps

Lutilisation la plus commune est de configurer les connexions telnet et ftp agrave Deacutelai Minimum et les donneacuteesFTP agrave Deacutebit 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 donneacutees venant dun telnet exteacuterieur vers votre ordinateur local Danslautre sens ccedila se fait tout seul telnet ssh et consorts configurent le champ TOS automatiquement pour lespaquets sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service 87

Si vous avez un client incapable de le faire vous pouvez toujours le faire avec netfilter Sur votre machinelocale

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

Cache web transparent utilisant netfilter iproute2 ipchains etsquid

Cette section a eacuteteacute envoyeacutee par le lecteur Ram Narula de Internet for Education (Internet pour leacuteducation)(Thailande)

La technique habituelle pour reacutealiser ceci dans Linux est probablement lutilisation dipchains APRES secirctreassureacute que le trafic sortant du port 80 (web) est routeacute agrave travers le serveur faisant fonctionner squid

Il y a 3 meacutethodes communes pour ecirctre sucircr que le trafic sortant du port 80 est routeacute vers le serveur faisantfonctionner squid et une quatriegraveme est introduite ici

La passerelle le faitSi vous pouvez dire agrave votre passerelle que les paquets sortants agrave destination du port 80 doivent ecirctreenvoyeacutes vers ladresse IP du serveur squid

MAIS

Ceci amegravenerait une charge suppleacutementaire sur le routeur et des routeurs commerciaux peuvent mecircmene pas supporter ceci

Utiliser un commutateur Couche 4Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problegraveme

MAIS

Le coucirct pour un tel eacutequipement est en geacuteneacuteral tregraves eacuteleveacute Typiquement un commutateur couche 4coucircte normalement plus cher quun serveur classique + un bon serveur linux

Utiliser le serveur cache comme passerelle reacuteseauVous pouvez forcer TOUT le trafic agrave travers le serveur cache

MAIS

Ceci est plutocirct risqueacute dans la mesure ougrave Squid utilise beaucoup de ressources CPU ce qui peutconduire agrave une baisse des performances de tout le reacuteseau Le serveur peut eacutegalement ne plusfonctionner et personne sur le reacuteseau ne pourra acceacuteder agrave Internet si cela a lieu

Routeur Linux+NetFilterEn utilisant Netfilter une autre technique peut ecirctre impleacutementeacutee Celle-ci consiste agrave utiliser Netfilterpour marquer les paquets agrave destination du port 80 et agrave utiliser iproute2 pour router les paquetsmarqueacutes vers le serveur Squid

|----------------|

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

88 Donner la prioriteacute au trafic interactif

| Impleacutementation ||----------------|

Adresses utiliseacutees 10001 naret (serveur NetFilter) 10002 silom (serveur Squid) 10003 donmuang (routeur connecteacute agrave Internet) 10004 kaosarn (un autre serveur sur le reacuteseau) 10005 RAS 1000024 reacuteseau principal 1000019 reacuteseau total

|----------------||Scheacutema du reacuteseau||----------------|

Internet|donmuang|------------hubcommutateur----------| | | |naret silom kaosarn RAS etc

Premiegraverement faire en sorte que tout le trafic passe par naret en eacutetant sucircr que cest la passerelle par deacutefaut agravelexception de silom La passerelle par deacutefaut de silom doit ecirctre donmuang (10003) ou ceci creacuteerait uneboucle du trafic web

(Tous les serveurs sur mon reacuteseau avaient 10001 comme passerelle par deacutefaut qui eacutetait lancienne adresse durouteur donmuang Cela ma conduit agrave attribuer 10003 comme adresse IP agrave donmuang et agrave donner 10001comme adresse IP agrave naret)

Silom------configurer squid et ipchains

Pour la configuration du serveur Squid sur silom soyez sucircr que celui-ci supporte le cacheproxy transparent(transparent cachingproxying) Le port par deacutefaut pour squid est en geacuteneacuteral 3128 Tout le trafic pour le port80 doit donc ecirctre redirigeacute localement vers le port 3128 Ceci peut ecirctre fait en utilisant ipchains comme suit

silom ipchains -N allow1silom ipchains -A allow1 -p TCP -s 1000019 -d 00 80 -j REDIRECT 3128silom ipchains -I input -j allow1

Ou avec netfilter

silom iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(note vous pouvez avoir eacutegalement dautres entreacutees)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Cache web transparent utilisant netfilter iproute2 ipchains etsquid 89

Pour plus dinformations sur la configuration du serveur Squid se reacutefeacuterer agrave la page FAQ Squid surhttpsquidnlanrnet)

Soyez sucircr que lip forwarding est actif sur votre serveur et que la passerelle par deacutefaut pour ce serveur estdonmuand (PAS naret)

Naret------ configurer squid et ipchains - deacutesactiver les messages icmp REDIRECT (si besoin)

Marquer les paquets agrave destination du port 80 avec la valeur 2

naret iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 2

1

Configurer iproute2 de sorte quil route les paquets avec la marque 2 vers silom

naret echo 202 wwwout gtgt etciproute2rt_tablesnaret ip rule add fwmark 2 table wwwoutnaret ip route add default via 10002 dev eth0 table wwwoutnaret ip route flush cache

Si donmuang et naret sont sur le mecircme reacuteseau naret ne doit pas envoyer de messages icmpREDIRECT Ceux-ci doivent ecirctre deacutesactiveacutes par

naret echo 0 gt procsysnetipv4confallsend_redirectsnaret echo 0 gt procsysnetipv4confdefaultsend_redirectsnaret echo 0 gt procsysnetipv4confeth0send_redirects

2

La configuration est termineacutee veacuterifions-la

Sur naret

naret iptables -t mangle -LChain PREROUTING (policy ACCEPT)target prot opt source destination MARK tcp -- anywhere anywhere tcp dptwww MARK set 0x2

Chain OUTPUT (policy ACCEPT)target prot opt source destination

naret ip rule ls0 from all lookup local 32765 from all fwmark 2 lookup wwwout 32766 from all lookup main

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

90 Cache web transparent utilisant netfilter iproute2 ipchains etsquid

32767 from all lookup default

naret ip route list table wwwoutdefault via 2031142248 dev eth0

naret ip route 10001 dev eth0 scope link 1000024 dev eth0 proto kernel scope link src 100011270008 dev lo scope link default via 10003 dev eth0

(soyez sucircr que silom appartiens agrave lune des lignes ci-dessus Dans ce cascest la ligne avec 1000024)

|------||-FAIT-||------|

Scheacutema du trafic apregraves limpleacutementation

|---------------------------------------||Scheacutema du trafic apregraves limpleacutementation||---------------------------------------|

INTERNET||-----------------routeur donmuang--------------------- |||| || |||| ||naret silom ||trafic agrave destination du port 80=====gt(cache) || || |||| ===================================kaosarn RAS etc

Noter que le reacuteseau est asymeacutetrique car il y a un saut suppleacutementaire sur le chemin sortant

Voici le cheminement dun paquet traversant le reacuteseau de kaosarn allant etvenant dInternet

Pour le trafic webhttp requecircte http kaosarn-gtnaret-gtsilom-gtdonmuang-gtInternetreacuteponse http de Internet-gtdonmuang-gtsilom-gtkaosarn

Pour les requecirctes non webhttp (par ex telnet) donneacutees sortantes kaosarn-gtnaret-gtdonmuang-gtInternetdonneacutees entrantes dInternet-gtdonmuang-gtkaosarn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Scheacutema du trafic apregraves limpleacutementation 91

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen configurant un MTU par routes

Pour envoyer de grande quantiteacute de donneacutees Internet fonctionne geacuteneacuteralement mieux quand de grandspaquets sont utiliseacutes Chaque paquet implique une deacutecision de routage Le transfert dun fichier de 1Mo peutentraicircner soit lenvoi de 700 paquets en maximisant la taille des paquets soit de 4000 paquets en utilisant laplus petite taille possible

Cependant tous les eacuteleacutements dInternet ne supportent pas une capaciteacute utile (payload) de 1460 octets parpaquet Il est de plus neacutecessaire dessayer de trouver le plus grand paquet qui conviendra le mieux dans lebut doptimiser la connexion

Ce processus est appeleacute Deacutecouverte du MTU de chemin ougrave MTU signifie Maximum Transfert Unit (Uniteacutede transfert maximum)

Quand un routeur rencontre un paquet qui est trop gros pour ecirctre envoyeacute en un seul morceau ET que celui-cia eacuteteacute marqueacute avec le bit Dont Fragment il retourne un message ICMP indiquant quil a eacuteteacute obligeacute de rejeterle paquet Lhocircte eacutemetteur prend acte de cette indication en envoyant des paquets plus petits et par iteacuterationpeut trouver la taille optimum du paquet pour une connexion agrave travers un chemin particulier

Ceci fonctionnait correctement jusquagrave ce que Internet soit deacutecouvert par des vandales qui sefforcent deperturber les communications Ceci a conduit les administrateurs agrave soit bloquer soit mettre en forme le traficICMP lors dessais malencontreux dans le but dameacuteliorer la seacutecuriteacute ou la robustesse de leurs servicesInternet

La conseacutequence maintenant est que la deacutecouverte du MTU de chemin fonctionne de moins en moins bien eteacutechoue pour certaines routes conduisant agrave deacutetranges sessions TCPIP qui tombent peu de temps apregraves

Bien que je naie pas de preuves de ceci deux sites avec qui javais lhabitude davoir des problegravemes faisaientfonctionner agrave la fois Alteon et Acedirectors avant les systegravemes affecteacutes Peut-ecirctre quelquun avec plus deconnaissances peut fournir des indices quant agrave la raison de ce qui se passe

Solution

Quand vous rencontrez des sites qui preacutesentent ce problegraveme vous pouvez deacutesactiver la deacutecouverte du MTUde chemin en le configurant manuellement Koos van den Hout a agrave peu pregraves eacutecrit

Le problegraveme suivant jai configureacute le mtu et mru de ma ligne deacutedieacutee fonctionnant avec ppp agrave296 dans la mesure ougrave le deacutebit est de seulement 33k6 et que je ne peux pas influencer la filedattente de lautre cocircteacute A 296 la reacuteponse agrave lappui dune touche intervient dans un deacutelairaisonnable

Et de mon cocircteacute jai un routeur avec translation dadresse (masquage) fonctionnant (bien sucircr)sous Linux

Reacutecemment jai seacutepareacute le serveur du routeur de sorte que la plupart des applicationsfonctionnent sur une machine diffeacuterente de celle qui reacutealise le routage

Jai alors eu des problegravemes en me connectant sur lirc Grosse panique Je vous assure quecertains essais trouvaient que jeacutetais connecteacute agrave lirc me montrant mecircme comme connecteacute surlirc mais je ne recevais pas le motd (message of the day message du jour) de lirc Jai

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

92Circonvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

veacuterifieacute ce qui pouvait ecirctre erroneacute et ai noteacute que javais deacutejagrave eu des soucis lieacutes au MTU encontactant certains sites web Je navais aucun souci pour les atteindre quand le MTU eacutetait agrave1500 le problegraveme napparaissant que lorsque le MTU eacutetait configureacute agrave 296 Puisque lesserveurs irc bloquent tout le trafic dont il nont pas besoin pour leurs opeacuterations immeacutediatesils bloquent aussi licmp

Jai manoeuvreacute pour convaincre les responsables dun serveur web que ceci eacutetait la cause dunproblegraveme mais les responsables du serveur irc navaient pas lintention de reacuteparer ceci

Donc je devais ecirctre sucircr que le trafic masqueacute sortant partait avec le mtu faible du lien externeMais je voulais que le trafic ethernet local ait le MTU normal (pour des choses comme letrafic nfs)

Solution

ip route add default via 10001 mtu 296

(10001 eacutetant ma passerelle par deacutefaut ladresse interne de mon routeur masquant)

En geacuteneacuteral il est possible doutrepasser la deacutecouverte du MTU de chemin en configurant des routesspeacutecifiques Par exemple si seuls certains reacuteseaux posent problegravemes ceci devrait aider

ip route add 1959696024 via 10001 mtu 1000

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

Comme expliqueacute au-dessus la deacutecouverte du MTU de chemin ne marche pas aussi bien que cela devrait ecirctreSi vous savez quun saut de votre reacuteseau a un MTU limiteacute (lt1500) vous ne pouvez pas compter sur ladeacutecouverte du MTU de chemin pour le deacutecouvrir

Outre le MTU il y a encore un autre moyen de configurer la taille maximum du paquet par ce qui est appeleacutele MSS (Maximum Segment Size Taille Maximum du Segment) Cest un champ dans les options TCP dupaquet SYN

Les noyaux Linux reacutecents et quelques pilotes de peacuteripheacuterique PPPoE (notamment lexcellent RoaringPenguin) impleacutementent la possibiliteacute de fixer le MSS

Le bon cocircteacute de tout ceci est que en positionnant la valeur MSS vous dicirctes agrave lhocircte distant de maniegravereeacutequivoque nessaie pas de menvoyer des paquets plus grands que cette valeur Aucun trafic ICMP nestneacutecessaire pour faire fonctionner cela

Malheureusement cest de la bidouille eacutevidente -- ccedila deacutetruit la proprieacuteteacute laquobout-en-boutraquo de la connexion enmodifiant les paquets Ayant dit cela nous utilisons cette astuce dans beaucoup dendroit et cela fonctionnecomme un charme

Pour que tout ceci fonctionne vous aurez besoin au moins de iptables-121a et de Linux 243 ou plus Laligne de commande basique est

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --clamp-mss-to-pmtu

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Solution 93

Ceci calcule le MSS approprieacute pour votre lien Si vous vous sentez courageux ou que vous pensez ecirctre lemieux placeacute pour juger vous pouvez aussi faire quelque chose comme ceci

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --set-mss 128

Ceci configure le MSS du paquet SYN agrave 128 Utilisez ceci si vous avez de la voix sur IP (VoIP) avec de touspetits paquets et de grands paquets http qui provoquent des coupures dans vos communications vocales

Le Conditionneur de Trafic Ultime Faible temps de latenceTeacuteleacutechargement vers lamont et laval rapide

Note ce script a reacutecemment eacuteteacute mis agrave niveau et il ne marchait avant quavec les clients Linux de votrereacuteseau Vous devriez donc le mettre agrave jour si vous avez des machines Windows ou des Macs dans votrereacuteseau qui neacutetaient pas capables de teacuteleacutecharger plus rapidement pendant que dautres eacutetaient en train deteacuteleacutecharger vers lamont

Jai essayeacute de creacuteer le Saint Graal

Maintenir agrave tout moment un faible temps de latence pour le trafic interactifCeci signifie que la reacutecupeacuteration ou la transmission de fichiers ne doivent pas perturber SSH ou mecircmetelnet Ceci est la chose la plus importante car mecircme un temps de latence de 200ms est importantpour pouvoir travailler confortablement

Autoriser le surf agrave des vitesses raisonnables pendant que lon teacuteleacutecharge vers lamont ou vers lavalMecircme si http est un trafic de masse les autres trafics ne doivent pas trop le noyer

Etre sucircr que le teacuteleacutechargement vers lamont ne va pas faire du tort aux teacuteleacutechargements vers laval et aux autreseacuteleacutements autour

Le principal pheacutenomegravene observeacute est la forte reacuteduction de la vitesse de teacuteleacutechargement vers lavalquand il y a du trafic montant

Il savegravere que tout ceci est possible au prix dune minuscule reacuteduction de la bande passante La preacutesence degrandes files dattente sur les dispositifs daccegraves domestiques comme le cacircble ou les modems DSL expliquepourquoi les teacuteleacutechargements vers lamont vers laval et ssh se peacutenalisent mutuellement

La prochaine partie explique en profondeur ce qui provoque les retards et comment nous pouvons lescorriger Vous pouvez sans danger la passer et aller directement au script si vous vous fichez de la faccedilon dontla magie opegravere

Pourquoi cela ne marche t-il pas bien par deacutefaut

Les FAI savent que leurs performances ne sont seulement jugeacutees que sur la vitesse agrave laquelle les personnespeuvent teacuteleacutecharger vers laval En plus de la bande passante disponible la vitesse de teacuteleacutechargement estlourdement influenceacutee par la perte des paquets qui gecircne seacuterieusement les performances de TCPIP Lesgrandes files dattente peuvent aider agrave preacutevenir la perte des paquets et augmenter les teacuteleacutechargements LesFAI configurent donc de grandes files dattente

Ces grandes files dattente endommagent cependant linteractiviteacute Une frappe doit dabord parcourir la filedattente du flux montant ce qui peut prendre plusieurs secondes et aller jusquagrave lhocircte distant Elle est alors

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

94Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

traiteacutee conduisant agrave un paquet de retour qui doit traverser la file dattente du flux descendant localiseacutee chezvotre FAI avant quelle napparaisse sur leacutecran

Cet HOWTO nous enseigne plusieurs maniegraveres de modifier et traiter la file dattente mais malheureusementtoutes les files dattente ne nous sont pas accessibles Les files dattente du FAI sont sans limites et la filedattente du flux montant reacuteside probablement dans votre modem cacircble ou votre peacuteripheacuterique DSL Il se peutque vous soyez capable ou non de le configurer La plupart du temps ce ne sera pas le cas

Et apregraves Etant donneacute que nous ne pouvons pas controcircler ces files dattente elles doivent disparaicirctre et ecirctretransfeacutereacutees sur notre routeur Linux Heureusement ceci est possible

Limiter la vitesse de teacuteleacutechargement vers lamont (upload)En limitant notre vitesse de teacuteleacutechargement vers lamont agrave une vitesse leacutegegraverement plus faible que lavitesse reacuteelle disponible il ny a pas de files dattente mises en place dans notre modem La filedattente est maintenant transfeacutereacutee vers Linux

Limiter la vitesse de teacuteleacutechargement vers laval (download)Ceci est leacutegegraverement plus ruseacute dans la mesure ougrave nous ne pouvons pas vraiment influencer la vitesse agravelaquelle Internet nous envoie les donneacutees Nous pouvons cependant rejeter les paquets qui arriventtrop vite ce qui provoque le ralentissement de TCPIP jusquau deacutebit deacutesireacute Comme nous ne voulonspas supprimer inutilement du trafic nous configurons une vitesse de rafale (burst) plus grande

Maintenant que nous avons fait ceci nous avons eacutelimineacute totalement la file dattente du flux descendant (saufpour de courtes rafales de donneacutees) et obtenu la possibiliteacute de geacuterer la file dattente du flux montant avectoute la puissance Linux

Il nous reste agrave nous assurer que le trafic interactif se retrouve au deacutebut de la file dattente du flux montantPour ecirctre sucircr que le flux montant ne va pas peacutenaliser le flux descendant nous deacuteplaccedilons eacutegalement les paquetsACK au deacutebut de la file dattente Cest ce qui provoque normalement un eacutenorme ralentissement quand dutrafic de masse est geacuteneacutereacute dans les deux sens Les paquets ACK du trafic descendant rentrent en concurrenceavec le trafic montant et sont donc ralentis

Si nous avons fait tout ceci nous obtenons les mesures suivantes en utilisant lexcellente connexion ADSL dexs4all en Hollande

Temps de latence de base round-trip minavgmax = 144171217 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers laval round-trip minavgmax = 560957365864 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers lamont round-trip minavgmax = 204142332124276 ms

Avec le conditionneur lors dun teacuteleacutechargement vers lamont agrave 220kbits round-trip minavgmax = 157518799 ms

Avec le conditionneur lors dun teacuteleacutechargement vers laval agrave 850kbits round-trip minavgmax = 204469740 ms

Lors dun teacuteleacutechargement vers lamont les teacuteleacutechargements vers laval seffectuent agrave environ80 de la vitesse maximale disponible et 90 pour les teacuteleacutechargements verslamont Le temps de latence augmente alors jusquagrave 850 ms je nai pas encoredeacutetermineacute la raison de ce pheacutenomegravene

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Pourquoi cela ne marche t-il pas bien par deacutefaut 95

Ce que vous pouvez attendre de ce script deacutepend largement de votre vitesse de lien reacuteelle Quand vousteacuteleacutechargez vers lamont agrave pleine vitesse il y aura toujours un paquet devant votre frappe de clavier Ceci estla limite basse de votre temps de latence Pour la calculer divisez votre MTU par la vitesse du flux montantLes valeurs classiques seront un peu plus eacuteleveacutees que ccedila Diminuez votre MTU pour un meilleur effet

Voici deux versions de ce script une avec lexcellent HTB de Devik et lautre avec CBQ qui est preacutesent danschaque noyau Linux contrairement agrave HTB Les deux ont eacuteteacute testeacutes et marchent correctement

Le script (CBQ)

Marche avec tous les noyaux A linteacuterieur du gestionnaire de mise en file dattente CBQ nous placcedilons deuxSFQ pour ecirctre sucircr que de multiples flux de masse ne vont pas mutuellement se peacutenaliser

Le trafic descendant est reacuteglementeacute en utilisant un filtre tc contenant un Token Bucket Filter

Vous pourriez ameacuteliorer ce script en ajoutant bounded aux lignes qui deacutemarrent avec tc class add classid120 Si vous avez diminueacute votre MTU diminuez aussi les nombres allot amp avpkt

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobitsDOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe CBQ agrave la racine

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence Classe principale

tc class add dev $DEV parent 1 classid 11 cbq rate $UPLINKkbit allot 1500 prio 5 bounded isolated

classe de prioriteacute supeacuterieure 110

tc class add dev $DEV parent 11 classid 110 cbq rate $UPLINKkbit allot 1600 prio 1 avpkt 1000

la classe par deacutefaut et pour le trafic de masse 120 Reccediloit leacutegegraverement moins que le trafic et a une prioriteacute plus faible bulk and default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 cbq rate $[9$UPLINK10]kbit allot 1600 prio 2 avpkt 1000

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

96 Le script (CBQ)

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

Deacutemarrage des filtres le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110 ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

tc filter add dev $DEV parent 1 protocol ip prio 13 u32 match ip dst 00000 flowid 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacuteelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Le script (HTB)

Le script suivant nous permet datteindre tous nos buts en utilisant la merveilleuse file dattente HTB Voir lechapitre correspondant Cela vaut la peine de mettre agrave jour votre noyau

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobits

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le script (HTB) 97

DOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe HTB agrave la racine le trafic ira par deacutefaut vers 120

tc qdisc add dev $DEV root handle 1 htb default 20

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence

tc class add dev $DEV parent 1 classid 11 htb rate $UPLINKkbit burst 6k

la classe de haute prioriteacute 110

tc class add dev $DEV parent 11 classid 110 htb rate $UPLINKkbit burst 6k prio 1

bulk amp default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 htb rate $[9$UPLINK10]kbit burst 6k prio 2

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110

ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacutelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

98 Le script (HTB)

attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau

Bien que ceci soit deacutecrit en deacutetail ailleurs et dans nos pages de manuel cette question est souvent poseacuteeHeureusement il y a une reacuteponse simple qui ne neacutecessite pas la compreacutehension complegravete du controcircle de trafic

Ce script de trois lignes met en place la limitation du deacutebit

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1 classid 11 cbq rate 512kbit allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1 protocol ip prio 16 u32 match ip dst 195969697 flowid 11

La premiegravere ligne installe un gestionnaire de mise en file dattente baseacute sur des classes sur votre interface etindique au noyau que pour ses calculs il peut la consideacuterer comme une interface agrave 10 Mbitss Cependant ilny aura pas de grands dommages si vous indiquez une valeur erroneacutee Donner la vraie valeur permettradavoir des choses plus preacutecises

La seconde ligne creacutee une classe de 512kbits avec des valeurs par deacutefaut raisonnables Pour les deacutetails voirles pages de manuel cbq et Chapitre 9gt

La derniegravere ligne indique quel trafic devra passer par la classe reacutealisant la mise en forme Le trafic qui nestseacutelectionneacute par cette regravegle nest PAS mis en forme Pour avoir des seacutelections plus compliqueacutees (sous-reacuteseauxports sources ou de destinations) voir la section intituleacutee Toutes les commandes de filtres dont vous aureznormalement besoin dans Chapitre 9gt

Si vous avez changeacute quelque chose et que vous vouliez recharger le script exeacutecutez la commande tc qdisc deldev $DEV root pour supprimer votre configuration actuelle

Le script peut ecirctre ameacutelioreacute en ajoutant une derniegravere ligne optionnelle tc qdisc add dev $DEV parent 11 sfqperturb 10 Voir la section intituleacutee Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing) dans Chapitre 9gt pour savoir ce que cela fait

Exemple dune solution de translation dadresse avec de la QoS

Je mappelle Pedro Larroy

ltpiotrmemberfsforggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau 99

Je deacutecris ici une configuration dans le cas ougrave de nombreux utilisateurs seraient connecteacutes agrave Internet agrave traversun routeur Linux qui possegravede une adresse publique et qui reacutealise de la translation dadresse (NAT) Jutilisecette configuration QoS pour fournir laccegraves agrave 198 utilisateurs dans une citeacute universitaire dans laquelle je vis etougrave jadministre le reacuteseau Les utilisateurs sont de gros consommateurs de programmes peer to peer et uncontrocircle de trafic correct est neacutecessaire Jespegravere que ceci servira dexemples pratiques agrave tous les lecteursinteacuteresseacutes par le lartc

Dans un premier temps la configuration sera reacutealiseacutee pas agrave pas et agrave la fin jexpliquerai comment rendre ceprocessus automatique au deacutemarrage Le reacuteseau utiliseacute pour cet exemple est un reacuteseau local connecteacute agraveInternet agrave travers un routeur Linux ayant une adresse publique Lajout dun ensemble de regravegles iptablespermettrait facilement lextension agrave plusieurs adresses IP publiques Les eacuteleacutements suivants sont neacutecessaires

Linux 2418 ou une version du noyau supeacuterieure installeacuteeSi vous utilisez le noyau 2418 vous devrez appliquer la mise agrave jour HTB

iprouteSoyez eacutegalement sucircr que le binaire tc est compatible avec HTB Un binaire preacute compileacute estdistribueacute avec HTB

iptables

Commenccedilons loptimisation de cette rare bande passante

Tout dabord nous allons configurer des gestionnaires de mise en file dattente dans lesquels nous allonsclassifier le trafic Nous creacuteons un gestionnaire htb composeacute de 6 classes avec des prioriteacutes croissantes Nousavons alors des classes qui obtiendront le deacutebit alloueacute et qui pourront de plus utiliser la bande passante dontles autres classes nont pas besoin Rappelons que les classes de plus hautes prioriteacutes (correspondant auxnombres prio les plus faibles) obtiendront en premier lexcegraves de bande passante Notre liaison ADSL agrave un fluxdescendant de 2Mbitss et un flux montant de 300 kbitss Jutilise un deacutebit de seuil (ceil rate) de 240 kbitsscar au-delagrave de cette limite les problegravemes de latence commence agrave prendre de lampleur Ceci est ducirc auremplissage dun tampon placeacute quelque part entre nous et les hocirctes distants

Ajuster la variable CEIL agrave 75 de votre bande passante montante maximum et ajuster le nom de linterface(eth0 dans la suite) agrave celle qui a ladresse publique Internet Exeacutecutez ce qui suit dans un shell root

CEIL=240 tc qdisc add dev eth0 root handle 1 htb default 15 tc class add dev eth0 parent 1 classid 11 htb rate $CEILkbit ceil $CEILkbit tc class add dev eth0 parent 11 classid 110 htb rate 80kbit ceil 80kbit prio 0 tc class add dev eth0 parent 11 classid 111 htb rate 80kbit ceil $CEILkbit prio 1 tc class add dev eth0 parent 11 classid 112 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 113 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 114 htb rate 10kbit ceil $CEILkbit prio 3 tc class add dev eth0 parent 11 classid 115 htb rate 30kbit ceil $CEILkbit prio 3 tc qdisc add dev eth0 parent 112 handle 120 sfq perturb 10 tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Nous avons juste creacuteeacute une arborescence htb avec un seul niveau de profondeur Quelque chose comme ceci

+-----------+ | racine 1 | +-----------+ | +---------------------------------------+ | classe 11 | +---------------------------------------+ | | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

100 Exemple dune solution de translation dadresse avec de la QoS

+----+ +----+ +----+ +----+ +----+ +----+ |110| |111| |112| |113| |114| |115| +----+ +----+ +----+ +----+ +----+ +----+

classid 110 htb rate 80kbit ceil 80kbit prio 0Ceci est la classe de prioriteacute la plus eacuteleveacutee Les paquets de cette classe auront le plus faible deacutelai etobtiendront en premier lexcegraves de bande passante Cest donc une bonne ideacutee de limiter le deacutebit deseuil de cette classe Nous enverrons dans cette classe les paquets qui ont un avantage agrave avoir unfaible deacutelai tel que le trafic interactif ssh telnet dns quake3 irc et les paquets avec le bit SYNactiveacute

classid 111 htb rate 80kbit ceil $CEILkbit prio 1Nous avons ici la premiegravere classe dans laquelle nous commenccedilons agrave mettre du trafic de masse Dansmon exemple jai le trafic provenant de mon serveur web local et les requecirctes pour les pages web respectivement le port source 80 et le port destination 80

classid 112 htb rate 20kbit ceil $CEILkbit prio 2Dans cette classe je mettrai le trafic configureacute avec le champ TOS Deacutebit Maximum activeacute ainsique le reste du trafic provenant des processus locaux de mon routeur vers Internet Les classessuivantes ne recevront donc que du trafic routeacute par cette machine

classid 113 htb rate 20kbit ceil $CEILkbit prio 2Cette classe est pour le trafic des autres machines NATeacutees (NdT beacuteneacuteficiant du service detranslation dadresse) qui ont besoin dune prioriteacute plus grande dans leur trafic de masse

classid 114 htb rate 10kbit ceil $CEILkbit prio 3Le trafic mail (SMTP pop3) et les paquets configureacutes avec le champ TOS Coucirct Minimum serontenvoyeacutes dans cette classe

classid 115 htb rate 30kbit ceil $CEILkbit prio 3Finalement nous avons ici le trafic de masse des machines NATeacutees se trouvant derriegravere le routeurLes paquets lieacutes agrave kazaa edonkey et autres iront ici pour ne pas interfeacuterer avec les autres services

Classification des paquets

Nous avons configureacute le gestionnaire de mise en file dattente mais aucune classification de paquets naencore eacuteteacute faite Pour linstant tous les paquets sortants passent par la classe 115 (car nous avons utiliseacute tcqdisc add dev eth0 root handle 1 htb default 15) Nous devons donc maintenant indiquer ougrave doivent aller lespaquets Ceci est la partie la plus importante

Nous allons maintenant configurer les filtres de tel sorte que nous puissions classifier les paquets aveciptables Je preacutefegravere vraiment le faire avec iptables car celui-ci est tregraves souple et que nous avons un compteurde paquets pour chaque regravegle De plus avec la cible RETURN les paquets nont pas besoin de traverser toutesles regravegles Nous exeacutecutons les commandes suivantes

tc filter add dev eth0 parent 10 protocol ip prio 1 handle 1 fw classid 110 tc filter add dev eth0 parent 10 protocol ip prio 2 handle 2 fw classid 111 tc filter add dev eth0 parent 10 protocol ip prio 3 handle 3 fw classid 112 tc filter add dev eth0 parent 10 protocol ip prio 4 handle 4 fw classid 113 tc filter add dev eth0 parent 10 protocol ip prio 5 handle 5 fw classid 114 tc filter add dev eth0 parent 10 protocol ip prio 6 handle 6 fw classid 115

Nous indiquons simplement au noyau que les paquets qui ont une valeur FWMARK speacutecifique (handle x fw)vont dans la classe speacutecifieacutee (classid xx) Voyons maintenant comment marquer les paquets avec iptables

Tout dabord nous devons comprendre comment les paquets traversent les filtres avec iptables

+------------+ +---------+ +-------------+ Paquets-| PREROUTING |--- Deacutecision----| FORWARD |-------+-------| POSTROUTING |- Paquets entrant +------------+ de routage +-minus-------+ | +-------------+ sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Commenccedilons loptimisation de cette rare bande passante 101

| | +-------+ +--------+ | INPUT |-- Processus locaux-| OUTPUT | +-------+ +--------+

Je suppose que toutes vos tables ont leur politique par deacutefaut configureacutee agrave ACCEPT (-P ACCEPT) ce quidevrait ecirctre le cas si vous navez pas encore toucheacute agrave iptables Notre reacuteseau priveacute est une classe B avecladresse 172170016 et notre adresse publique est 21217021172

Nous indiquons au noyau de faire de la translation dadresse NAT les clients du reacuteseau priveacute peuvent alorscommencer agrave dialoguer avec lexteacuterieur

echo 1 gt procsysnetipv4ip_forward iptables -t nat -A POSTROUTING -s 172170025525500 -o eth0 -j SNAT --to-source 21217021172

Veacuterifions maintenant que les paquets transitent bien agrave travers 115

tc -s class show dev eth0

Vous pouvez commencer agrave marquer les paquets en ajoutant les regravegles dans la chaicircne PREROUTING de latable mangle

iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p icmp -j RETURN

Vous devriez maintenant ecirctre capable de voir leacutevolution du compteur de paquets quand vous pinguez des sitessur Internet depuis les machines du reacuteseau priveacute Veacuterifiez que le compteur de paquets augmente dans 110

tc -s class show dev eth0

Nous avons mis -j RETURN de maniegravere agrave ce que les paquets ne traversent pas toutes les regravegles Les paquetsicmp ne scruteront pas les autres regravegles deacutefinies sous RETURN Gardez ceci agrave lesprit Nous commenccedilonsmaintenant agrave ajouter dautres regravegles pour geacuterer les champs TOS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6 iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

Donnons la prioriteacute aux paquets SSH

iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

Une bonne ideacutee est de donner la prioriteacute aux paquets initiant une connexion tcp agrave savoir ceux qui ont le bitSYN activeacute

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j MARK --set-mark 0x1 iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j RETURN

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

102 Classification des paquets

Et ainsi de suite Apregraves la mise en place des regravegles dans la chaicircne PREROUTING de la table mangle nousterminons par

iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

Ainsi le trafic non marqueacute est dirigeacute vers 115 En fait cette derniegravere eacutetape nest pas neacutecessaire puisque laclasse par deacutefaut est 115 Un marquage est quand mecircme reacutealiseacute de maniegravere agrave avoir une coheacuterence pourlensemble de la configuration De plus il est utile davoir une comptabiliteacute pour cette regravegle

Cest une bonne ideacutee de faire de mecircme avec la chaicircne OUTPUT Reacutepeacutetez ces commandes avec -A OUTPUT agravela place de PREROUTING (sPREROUTINGOUTPUT) Le trafic geacuteneacutereacute localement (sur le routeur Linux)sera alors eacutegalement classifieacute Je termine la chaicircne OUTPUT par -j MARK --set-mark 0x3 de tel sorte que letrafic local ait une prioriteacute plus grande

Ameacuteliorer notre configuration

Toute notre configuration est maintenant opeacuterationnelle Prenez du temps pour regarder les graphes etobserver ougrave votre bande passante est la plus utiliseacutee et cela correspond agrave vos souhaits Jai fait ceci pendant denombreuses heures ce qui ma permis davoir une connexion Internet fonctionnant tregraves bien Autrement vousserez confronteacute en permanence agrave des timeout et des allocations de bande passante presque nulles pour lesnouvelles connexions tcp

Si vous repeacuterez des classes qui sont pleines la plupart du temps ce peut ecirctre une bonne ideacutee de leur attacherun autre gestionnaire de mise en file dattente de maniegravere agrave ce que le partage de la bande passante soit pluseacutequitable

tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Rendre tout ceci actif au deacutemarrage

Il est certain que ceci peut ecirctre fait de diffeacuterentes faccedilons Dans mon cas jai un shell scriptetcinitdpacketfilter qui accepte les arguments [start | stop | stop-tables | start-tables |reload-tables] Celui-ci configure les gestionnaires de mise en file dattente et charge les modules du noyauneacutecessaires et se comporte donc comme une deacutemon Le mecircme script charge les regravegles iptables agrave partir deetcnetworkiptables-rules Je vais lembellir un peu et le rendrait disponible sur ma page webici

Chapitre 16 Construire des ponts et des pseudoponts avec du Proxy ARPLes ponts sont des peacuteripheacuteriques qui peuvent ecirctre installeacutes dans un reacuteseau sans aucune reconfiguration Uncommutateur reacuteseau est basiquement un pont multi-ports Un pont est souvent un commutateur avec 2 portsCependant Linux supporte tregraves bien plusieurs interfaces dans un pont le conduisant agrave fonctionner comme unvrai commutateur

Les ponts sont souvent deacuteployeacutes quand on est confronteacute agrave un reacuteseau deacutefaillant qui a besoin decirctre reacutepareacute sansaucune modification Dans la mesure ougrave un pont est un eacutequipement de niveau 2 la couche sous la couche IP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 16 Construire des ponts et des pseudo ponts avec du Proxy ARP 103

les routeurs et serveurs ne sont pas conscients de son existence Ceci signifie que vous pouvez bloquer oumodifier certains paquets de maniegravere transparente ou mettre en forme le trafic

Un autre eacuteleacutement positif est quun pont peut souvent ecirctre remplaceacute par un cacircble croiseacute ou un hub quand iltombe en panne

Laspect neacutegatif est que la mise en place dun pont peut engendrer beaucoup de confusion agrave moins quil ne soittregraves bien configureacute Le pont napparaicirct pas dans les traceroute mais pourtant des paquets disparaissent sansraison ou sont changeacutes en allant dun point A agrave un point B (ce reacuteseau est HANTE ) Vous devriez eacutegalementvous demander si une organisation qui ne veut rien changer fait le bon choix

Le pont Linux 2425 est documenteacute sur cette page

Etat des ponts et iptables

Au moment de Linux 2420 le pont et iptables ne se voient pas lun lautre sans une aide Si vous pontezles paquets de eth0 agrave eth1 ils ne passent pas par iptables Ceci signifie que vous ne pouvez pas faire defiltrage de translation dadresse (NAT) de deacutesossage ou quoique ce soit dautres Ceci a eacuteteacute corrigeacute dans lesversions 2545 et supeacuterieures

Vous devriez eacutegalement regarder ebtables qui est encore un autre projet Il vous permettra de faire deschoses vraiment terribles comme MACNAT et brouting Cest vraiment effroyable

Pont et mise en forme

Ca marche comme dans les reacuteclames Soyez sucircr du cocircteacute attribueacute agrave chaque interface Autrement il se peut quevous mettiez en forme le trafic sortant au niveau de votre interface interne ce qui ne marchera pas Utiliseztcpdump si neacutecessaire

Pseudo-pont avec du Proxy-ARP

Si vous voulez juste impleacutementer un pseudo pont allez jusquagrave la section Impleacutementez-le Cependant il estsage de lire un peu la faccedilon dont il fonctionne en pratique

Un pseudo pont travaille de maniegravere un peu diffeacuterente Par deacutefaut un pont transmet les paquets sans les alteacutererdune interface agrave une autre Il ne regarde que ladresse mateacuterielle des paquets pour deacuteterminer ougrave ils doiventaller Ceci signifie que vous pouvez pontez un trafic que Linux ne comprend pas aussi longtemps quil y aune adresse mateacuterielle

Un pseudo pont travaille diffeacuteremment et ressemble plus agrave un routeur cacheacute quagrave un pont Mais comme unpont il a un impact faible sur larchitecture du reacuteseau

Le fait quil ne soit pas un pont preacutesente lavantage que les paquets traversent reacuteellement le noyau et peuventecirctre filtreacutes modifieacutes redirigeacutes ou rerouteacutes

Un pont reacuteel peut eacutegalement reacutealiser ces tours de force mais il a besoin dun code speacutecial comme le EthernetFrame Diverter ou la mise agrave jour mentionneacutee au-dessus

Un autre avantage dun pseudo pont est quil ne transmet pas les paquets quil ne comprend pas nettoyant ainsivotre reacuteseau de beaucoup de cochonneries Dans le cas ougrave vous auriez besoin de ces cochonneries (comme lespaquets SAP ou Netbeui) utilisez un vrai pont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

104 Etat des ponts et iptables

ARP amp Proxy-ARP

Quand un hocircte veut dialoguer avec un autre hocircte sur le mecircme segment physique il envoie un paquet duProtocole de Reacutesolution dAdresse (ARP) qui en simplifiant quelque peu est lu comme ceci Qui a 10001le dire agrave 10007 En reacuteponse agrave ceci 10001 renvoie un petit paquet ici

10007 envoie alors des paquets agrave ladresse mateacuterielle mentionneacutee dans le paquet ici Il met dans un cachecette adresse mateacuterielle pour un temps relativement long et apregraves lexpiration du cache repose sa question

Quand on construit un pseudo pont on configure le pont pour quil reacuteponde agrave ces paquets ARP les hocirctes dureacuteseau envoyant alors leurs paquets au pont Le pont traite alors ces paquets et les envoie agrave linterface adapteacutee

Donc en reacutesumeacute quand un hocircte dun cocircteacute du pont demande ladresse mateacuterielle dun hocircte se situant de lautrecocircteacute le pont reacutepond avec un paquet qui dit transmets le moi

De cette faccedilon tout le trafic de donneacutees est transmis agrave la bonne place et il traverse toujours le pont

Impleacutementez-le

Les versions anciennes du noyau linux permettait de faire du proxy ARP uniquement agrave une granulariteacute sousreacuteseaux Ainsi pour configurer un pseudo pont il fallait speacutecifier les bonnes routes vers les deux cocircteacutes dupont et eacutegalement creacuteer les regravegles proxy-ARP correspondantes Ceacutetait peacutenible deacutejagrave par la quantiteacute de textequil fallait taper puis parce quil eacutetait facile de se tromper et creacuteer des configurations erroneacutees ougrave le pontreacutepondait agrave des requecirctes pour des reacuteseaux quil ne savait pas router

Avec Linux 24 (et peut-ecirctre bien le 22) cette possibiliteacute a eacuteteacute retireacutee et a eacuteteacute remplaceacutee par une option dansle reacutepertoire proc appeleacutee proxy-arp La proceacutedure pour construire un pseudo pont est maintenant

Assigner une adresse agrave chaque interface la gauche et la droite1 Creacuteer des routes pour que votre machine connaisse quels hocirctes reacutesident agrave gauche et quels hocirctesreacutesident agrave droite

2

Activer le proxy-ARP sur chaque interface echo 1 gt procsysnetipv4confethLproxyamplowbararpecho 1 gt procsysnetipv4confethRproxyamplowbararp ougrave L et R deacutesignent les numeacuteros delinterface du cocircteacute gauche (Left) et de celle du cocircteacute droit (Right)

3

Noubliez pas eacutegalement dactiver loption ipamplowbarforwarding Quand on convertit un vrai pont il se peutque vous trouviez cette option deacutesactiveacutee dans la mesure ougrave il ny en a pas besoin pour un pont

Une autre chose que vous devriez consideacuterer lors de la conversion est que vous aurez besoin deffacer le cachearp des ordinateurs du reacuteseau Le cache arp peut contenir danciennes adresses mateacuterielles du pont qui ne sontplus correctes

Sur un Cisco ceci est reacutealiseacute en utilisant la commande clear arp-cache et sous linux en utilisant arp -dipadresse Vous pouvez aussi attendre lexpiration manuelle du cache ce qui peut ecirctre plutocirct long

Il se peut que vous deacutecouvriez eacutegalement que votre reacuteseau eacutetait mal configureacute si vous avezaviez lhabitude despeacutecifier les routes sans les masques de sous-reacuteseau Dans le passeacute certaines versions de route pouvaientcorrectement deviner le masque ou au contraire se tromper sans pour autant vous le notifier Quand vousfaites du routage chirurgical comme deacutecrit plus haut il est vital que vous veacuterifiez vos masques desous-reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP amp Proxy-ARP 105

Chapitre 17 Routage Dynamique - OSPF et BGPSi votre reacuteseau commence agrave devenir vraiment gros ou si vous commencez agrave consideacuterer Internet comme votrepropre reacuteseau vous avez besoin doutils qui routent dynamiquement vos donneacutees Les sites sont souvent relieacutesentre eux par de multiples liens et de nouveaux liens surgissent en permanence

LInternet utilise la plupart du temps les standards OSPF (RFC 2328) et BGP4 (RFC 1771) Linux supporteles 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 travauxde reacutefeacuterence

Vue densemble

Cisco Systems Cisco Systems Designing large-scale IP Internetworks

Pour OSPF

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

Halabi a aussi eacutecrit un tregraves bon guide sur la conception du routage OSPF mais il semble avoir eacuteteacute effaceacute dusite 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

Bien que les exemples soient speacutecifiques agrave Cisco ils sont remarquablement semblables au langage deconfiguration de Zebra -)

Configurer OSPF avec Zebra

Contactez-moi si les informations qui suivent ne sont pas exactes ou si vous avez des suggestions Zebra estun formidable logiciel de routage dynamique eacutecrit par Kunihiro Ishiguro Toshiaki Takada et Yasuhiro OharaConfigurer OSPF avec zebra est simple et rapide mais en pratique il y a de nombreux paramegravetres dans le casougrave vous auriez des besoins speacutecifiques OSPF est labreacuteviation de Open Shortest Path First et quelques une deses fonctionnaliteacutes sont

hieacuterarchiqueLes reacuteseaux sont regroupeacutes par zones (areas) qui sont interconnecteacutees par une zone eacutepine dorsale quisera appeleacutee zone 0 Tout le trafic passe par la zone 0 et tous les routeurs de cette zone ont lesinformations de routage de toutes les autres zones

convergence rapideLes routes sont propageacutees tregraves rapidement compareacute agrave RIP par exemple

eacuteconomie de bande passanteUtilise la multi-distribution agrave la place de la diffusion ce qui eacutevite de submerger les autres hocirctes avecdes informations de routage sans inteacuterecirct pour eux La multi-distribution reacuteduit ainsi le deacutebit sur le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

106 Chapitre 17 Routage Dynamique - OSPF et BGP

reacuteseau De mecircme les routeurs internes (ceux dont toutes les interfaces sont situeacutees dans la mecircmezone) nobtiennent pas dinformations sur les autres zones Les routeurs avec des interfaces dans plusdune zone sont appeleacutes Area Border Routers Ils possegravedent les informations de topologie sur leszones auxquelles ils sont connecteacutes

Utilisation intensive de CPUOSPF est baseacute sur lalgorithme de Dijkstra Shortest Path First qui est coucircteux en temps de calculcompareacute aux autres algorithmes de routage Ce nest pas forceacutement mauvais dans la mesure ougrave le pluscourt chemin est calculeacute uniquement pour chaque zone Donc pour les reacuteseaux de petite agrave moyennetaille ce ne sera pas un problegraveme vous ne vous en rendrez pas compte

Information deacutetat de lienOSPF prend en compte les caracteacuteristiques speacutecifiques des reacuteseaux et interfaces telles que la bandepassante les deacutefauts de liens et le coucirct moneacutetaire

Protocole ouvert et logiciel sous license GPLOSPF est un protocole ouvert et Zebra est un logiciel sous license GPL ce qui repreacutesente un avantageeacutevident par rapport aux protocoles et logiciels proprieacutetaires

Preacuterequis

Noyau Linux Compileacute avec CONFIG_NETLINK_DEV and CONFIG_IP_MULTICAST (Je ne sais pas si dautreseacuteleacutements sont eacutegalement neacutecessaires)

IprouteZebra

Reacutecupeacuterez-le avec votre gestionnaire de paquet favori ou agrave partir de httpwwwzebraorg

Configurer Zebra

Prenons le reacuteseau suivant comme exemple

---------------------------------------------------- | 1921680024 | | | | Zone 0 100BaseTX Commuteacute | | Epine dorsale Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |1 |2 |253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSLATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172170016 Zone 1 | | 1921681024 wlan Zone 2 | ------------ | Reacuteseau etudiant (dortoir) | | Sans fil de Barcelone | ------------------------------------ -------------------------------

Ne soyez pas effrayeacute par ce diagramme Zebra reacutealise la plus grande partie du travail automatiquement cequi ne demandera aucun travail de saisie des routes avec Zebra Il serait peacutenible de maintenir toutes ces routesagrave la main au quotidien La chose la plus importante agrave maicirctriser clairement cest la topologie du reacuteseau Faitesparticuliegraverement attention agrave la zone 0 puisque cest la plus importante Dans un premier temps configurezZebra en eacuteditant zebraconf et en ladaptant agrave vos besoins

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configurer OSPF avec Zebra 107

hostname omega password xxx enable password xxx Interfaces description interface lo description test of desc interface eth1 multicast Static default route ip route 00000 21217021129 log file varlogzebrazebralog

Debian neacutecessite eacutegalement leacutedition de etczebradaemons pour quils soient lanceacutes au deacutemarrage

zebra=yes ospfd=yes

Nous devons maintenant editer ospfdconf si vous utilisez encore IPV4 ou ospf6dconf si vous travaillez avecIPV6 Mon fichier ospfdconf ressemble agrave ceci

hostname omega password xxx enable password xxx router ospf network 1921680024 area 0 network 172170016 area 1 log stdout log file varlogzebraospfdlog

Ceci indique agrave ospf la topologie de notre reacuteseau

Exeacutecuter Zebra

Nous devons maintenant deacutemarrer Zebra soit agrave la main en tapant zebra -d soit avec un script commeetcinitdzebra start En regardant attentivement les logs de ospdfd on peut voir les eacuteleacutements suivants

20021213 224624 OSPF interface 19216801 join AllSPFRouters Multicast group 20021213 224634 OSPF SMUX_CLOSE with reason 5 20021213 224644 OSPF SMUX_CLOSE with reason 5 20021213 224654 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF DR-Election[1st] Backup 19216801 20021213 224704 OSPF DR-Election[1st] DR 19216801 20021213 224704 OSPF DR-Election[2nd] Backup 0000 20021213 224704 OSPF DR-Election[2nd] DR 19216801 20021213 224704 OSPF interface 19216801 join AllDRouters Multicast group 20021213 224706 OSPF DR-Election[1st] Backup 19216802 20021213 224706 OSPF DR-Election[1st] DR 19216801 20021213 224706 OSPF Packet[DD] Negotiation done (Slave) 20021213 224706 OSPF nsm_change_status() scheduling new router-LSA origination 20021213 224711 OSPF ospf_intra_add_router Start

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

108 Configurer Zebra

Ignorez le message SMUX_CLOSE pour linstant dans la mesure ougrave il concerne SNMP Nous pouvons voirque 19216801 est routeur deacutesigneacute (Designated Router) et que 19216802 est le le routeur deacutesigneacute desauvegarde (Backup Designated Router)

Nous pouvons eacutegalement interagir avec zebra et ospfd en exeacutecutant

$ telnet localhost zebra$ telnet localhost ospfd

Voyons comment les routes se sont propageacutees en se connectant agrave zebra

rootatlantis~ telnet localhost zebra Trying 127001 Connected to atlantis Escape character is ^]

Hello this is zebra (version 092a) Copyright 1996-2001 Kunihiro Ishiguro

User Access Verification

Password atlantisgt show ip route Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Kgt 00000 via 19216801 eth1 Cgt 1270008 is directly connected lo O 172170016 [11010] is directly connected eth0 062153 Cgt 172170016 is directly connected eth0 O 1921680024 [11010] is directly connected eth1 062153 Cgt 1921680024 is directly connected eth1 atlantisgt show ip ospf border-routers ============ OSPF router routing table ============= R 1921680253 [10] area (0000) ABR via 1921680253 eth1 [10] area (0001) ABR via 1721702 eth0

ou directement avec iproute

rootomega~ ip route 2121702112826 dev eth0 proto kernel scope link src 21217021172 1921680024 dev eth1 proto kernel scope link src 19216801 172170016 via 19216802 dev eth1 proto zebra metric 20 default via 21217021129 dev eth0 proto zebra rootomega~

Nous pouvons voir les routes Zebra qui neacutetaient pas preacutesentes auparavant Il est vraiment agreacuteable de voirapparaicirctre les routes quelques secondes apregraves le lancement de zebra et ospfd Vous pouvez veacuterifier laconnectiviteacute avec les autres hocirctes en utilisant ping Les routes zebra sont automatiques Vous pouvez ajouterun autre routeur au reacuteseau configurez Zebra et voilagrave

Astuce vous pouvez utiliser

tcpdump -i eth1 ip[9] == 89

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exeacutecuter Zebra 109

pour analyser les paquets OSPF Le numeacutero du protocole OSPF est 89 et le champ du protocole est le 9iegravemeoctet de len-tecircte ip

OSPF possegravede de nombreux paramegravetres speacutecialement pour les grands reacuteseaux Dans de prochainsdeacuteveloppements du HOWTO nous montrerons des meacutethodes de reacuteglages fins dOSPF

Configurer BGP4 avec Zebra

Le Border Gateway Protocol Version 4 (BGP4) est un protocole de routage dynamique deacutecrit dans la RFC1771 Il permet la distribution des informations de connectiviteacute cest agrave dire les tables de routage vers dautresnoeuds BGP4 actifs Il peut ecirctre utiliseacute comme un EGP ou un IGP Dans le mode EGP chaque noeud doitavoir son propre numeacutero de systegraveme autonome ( utonomous System (AS)) BGP4 supporte etlaggreacutegation de routes (reacuteunir plusieurs routes en une seule) gt The Border Gateway Protocol Version 4(BGP4) is a dynamic routing gt protocol described in RFC 1771 It allows the distribution of gt reachabilityinformation ie routing tables to other BGP4 gt enabled nodes It can either be used as EGP or IGP in EGPmode gt each node must have its own Autonomous System (AS) number gt BGP4 supports Classless InterDomain Routing (CIDR) and route gt aggregation (merge multiple routes into one)

scheacutema reacuteseau (Exemple)

Le scheacutema reacuteseau suivant est utiliseacute pour les exemples agrave suivre AS 1 et 50 ont plusieurs voisins mais nousavons seulement besoin de configurer 1 et 50 comme nos voisins Les noeuds communiquent entre eux pardes tunnels dans cet exemple mais ce nest pas une obligation

Note les numeacuteros AS utiliseacutes dans cet exemple sont reacuteserveacutes Veuillez obtenir vos propres numeacuteros AS duRIPE si vous installez des liens officiels

-------------------- | 192168231224 | | AS 23 | -------------------- ------------------ ------------------ | 1921681124 |-------| 10101116 | | AS 1 | | AS 50 | ------------------ ------------------

Configuration (Exemple)

La configuration suivante est eacutecrite pour le noeud 192168231224 et elle sera facile agrave adapter pour les autresnoeuds

Elle commence par des eacuteleacutements geacuteneacuteraux comme le nom de lhocircte les mots de passe et les options de debug

hostname hostname anakin

login password password xxx

enable password (super user mode) enable password xxx

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

110 Configurer BGP4 avec Zebra

path to logfile log file varlogzebrabgpdlog

debugging be verbose (can be removed afterwards) debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates

La liste de controcircle daccegraves (Access list) est utiliseacutee pour limiter la redistribution aux reacuteseaux priveacutes (RFC1918)

RFC 1918 networks access-list local_nets permit 1921680016 access-list local_nets permit 172160012 access-list local_nets permit 100008 access-list local_nets deny any

Letape suivante consiste agrave configurer chaque AS

Own AS number router bgp 23

IP address of the router bgp router-id 1921682312

announce our own network to other neighbors network 19216823024

advertise all connected routes (= directly attached interfaces) redistribute connected

advertise kernel routes (= manually inserted routes) redistribute kernel

Chaque section router bgp contient une liste de voisins auquels le routeur est connecteacute

neighbor 19216811 remote-as 1 neighbor 19216811 distribute-list local_nets in neighbor 101011 remote-as 50 neighbor 101011 distribute-list local_nets in

Veacuterification de la configuration

Note vtysh est un multiplexeur qui connecte toutes les interfaces utilisateur de zebra ensemble

anakin sh ip bgp summary BGP router identifier 1921682312 local AS number 23 2 BGP AS-PATH entries 0 BGP community entries

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd 101001 4 50 35 40 0 0 0 002840 1 19216811 4 1 27574 27644 0 0 0 032604 14

Total number of neighbors 2 anakin anakin sh ip bgp neighbors 101001 BGP neighbor is 101001 remote AS 50 local AS 23 external link

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration (Exemple) 111

BGP version 4 remote router ID 101001 BGP state = Established up for 002901 anakin

Voyons quelles routes nous avons obtenues de nos voisins

anakin sh ip ro bgp Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Bgt 172160014 [200] via 19216811 tun0 2d10h19m Bgt 172300016 [200] via 19216811 tun0 100924 Bgt 19216851032 [200] via 19216811 tun0 2d10h27m Bgt 19216852632 [200] via 19216811 tun0 100924 Bgt 19216853632 [200] via 19216811 tun0 2d10h19m Bgt 19216817024 [200] via 19216811 tun0 3d05h07m Bgt 19216817132 [200] via 19216811 tun0 3d05h07m Bgt 19216832024 [200] via 19216811 tun0 2d10h27m anakin

Chapitre 18 Autres possibiliteacutesCe chapitre est une liste des projets ayant une relation avec le routage avanceacute et la mise en forme du traficsous Linux Certains de ces liens meacuteriteraient des chapitres speacutecifiques dautres sont tregraves bien documenteacutes etnont pas besoin de HOWTO en plus

Impleacutementation VLAN 8021Q pour Linux (site)VLAN est une faccedilon tregraves sympa de diviser vos reacuteseaux dune maniegravere plus virtuelle que physique Debonnes informations sur les VLAN pourront ecirctre trouveacutees ici Avec cette impleacutementation votre boiteLinux pourra dialoguer VLAN avec des machines comme les Cisco Catalyst 3ComamplcubCorebuilder Netbuilder II SuperStack II switch 630amprcub Extreme Ntwks Summit 48Foundry amplcubServerIronXL FastIronamprcub

Impleacutementation alternative VLAN 8021Q pour Linux(site)Une impleacutementation alternative de VLAN pour Linux Ce projet a deacutemarreacute suite au deacutesaccord aveclarchitecture et le style de codage du projet VLAN eacutetabli avec comme reacutesultat une structure delensemble plus clair Mise agrave jour a eacuteteacute inclus dans le noyau 2414 (peut-ecirctre dans le 2413)

Un bon HOWTO agrave propos des VLAN peut ecirctre trouveacute ici

Mise agrave jour a eacuteteacute inclue dans le noyau agrave partir de la version 2414 (peut-ecirctre 13)Serveur Linux Virtuel (Linux Virtual Server )(site)

Ces personnes sont tregraves talentueuses Le Serveur Virtuel Linux est un serveur agrave haute disponibiliteacutehautement eacutevolutif construit autour dune grappe (cluster) de serveurs avec un eacutequilibreur de chargetournant sur le systegraveme dexploitation Linux Larchitecture du cluster est transparente pour lesutilisateurs finaux qui ne voient quun simple serveur virtuel

En reacutesumeacute que vous ayez besoin deacutequilibrer votre charge ou de controcircler votre trafic LVS aura unemaniegravere de le faire Certaines de leurs techniques sont positivement diaboliques Par exemple ilspermettent agrave plusieurs machines davoir une mecircme adresse IP mais en deacutesactivant lARP dessusSeule la machine LVS qui a elle lARP actif deacutecide de lhocircte qui manipulera le paquet entrantCelui-ci est envoyeacute avec la bonne adresse MAC au serveur choisi Le trafic sortant passe directementpar le routeur et non par la machine LVS qui par conseacutequent na pas besoin de voir vos 5Gbits dedonneacutees allant sur Internet Cette machine LVS ne peut alors pas ecirctre un goulot deacutetranglement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

112 Chapitre 18 Autres possibiliteacutes

Limpleacutementation de LVS neacutecessite une mise agrave jour pour les noyaux 20 et 22 alors quun moduleNetfilter est disponible dans le 24 Il ny a donc pas besoin de mise agrave jour pour cette version dunoyau Le support 24 est encore en deacuteveloppement Battez-vous donc avec et envoyez voscommentaires ou vos mises agrave jour

CBQinit (site)Configurer CBQ peut ecirctre un peu intimidant speacutecialement si votre seul souhait est de mettre en formele trafic dordinateurs placeacutes derriegravere un routeur CBQinit peut vous aider agrave configurer Linux agrave laidedune syntaxe simplifieacutee

Par exemple si vous voulez que tous les ordinateurs de votre reacuteseau 1921681024 (sur eth110 Mbits) aient leur vitesse de teacuteleacutechargement limiteacutee agrave 28 Kbits remplissez le fichier deconfiguration de CBQinit avec ce qui suit

DEVICE=eth110Mbit1MbitRATE=28KbitWEIGHT=2KbitPRIO=5RULE=1921681024

Utiliser simplement ce programme si le comment et pourquoi ne vous inteacuteresse pas Nous utilisonsCBQinit en production et il marche tregraves bien On peut mecircme faire des choses plus avanceacutees commela mise en forme deacutependant du temps La documentation est directement inteacutegreacutee dans le script ce quiexplique labsence dun fichier README

Scripts faciles de mise en forme Chronox(site)Stephan Mueller (smuellerchronoxde) a eacutecrit deux scripts utiles limitconn et shaper Lepremier vous permet de maicirctriser une session de teacuteleacutechargement comme ceci

limitconn -s SERVERIP -p SERVERPORT -l LIMIT

Il fonctionne avec Linux 22 et 24

Le second script est plus compliqueacute et peut ecirctre utiliseacute pour mettre en place des files dattentediffeacuterentes baseacutees sur les regravegles iptables Celles-ci sont utiliseacutees pour marquer les paquets qui sontalors mis en forme

Impleacutementation du Protocole Redondant Routeur Virtuel (site)Ceci est purement pour la redondance Deux machines avec leurs propres adresses IP et MAC creacuteentune troisiegraveme adresse IP et MAC virtuelle Bien que destineacute agrave lorigine uniquement aux routeurs quiont besoin dadresses MAC constantes cela marche eacutegalement pour les autres serveurs

La beauteacute de cette approche est lincroyable faciliteacute de la configuration Pas de compilation de noyauou de neacutecessiteacute de mise agrave jour tout se passe dans lespace utilisateur

Lancer simplement ceci sur toutes les machines participant au service

vrrpd -i eth0 -v 50 100022

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 18 Autres possibiliteacutes 113

Et vous voilagrave opeacuterationnel 100022 est maintenant geacutereacute par lun de vos serveurs probablement lepremier agrave avoir lanceacute le deacutemon vrrp Deacuteconnectez maintenant cet ordinateur du reacuteseau et tregravesrapidement ladresse 100022 et ladresse MAC seront geacutereacutees par lun des autres ordinateurs

Jai essayeacute ceci et il a eacuteteacute actif et opeacuterationnel en 1 minute Pour une raison eacutetrange ma passerelle pardeacutefaut a eacuteteacute supprimeacutee Cependant loption -n permet de preacutevenir cela

Voici une deacutefaillance en direct

64 bytes from 100022 icmp_seq=3 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=4 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=5 ttl=255 time=168 ms64 bytes from 100022 icmp_seq=6 ttl=255 time=18 ms64 bytes from 100022 icmp_seq=7 ttl=255 time=17 ms

Pas un paquet ping na eacuteteacute perdu Apregraves 4 paquets jai deacuteconnecteacute mon P200 du reacuteseau et mon 486a pris le relais ce qui est visible par laugmentation du temps de latence

Chapitre 19 Lectures suppleacutementaireshttpsnafufreedomorglinux22iproute-noteshtml

Contient beaucoup dinformations techniques et de commentaires sur le noyauhttpwwwdavinottawaoncaols

Transparents de Jamal Hadi Salim un des auteurs du controcircleur de trafic de Linuxhttpdefiantcoinetcomiproute2ip-cref

Version HTML de la documentation LaTeX dAlexeys explique une partie diproute2 en deacutetailshttpwwwaciriorgfloydcbqhtml

Sally Floyd a une bonne page sur CBQ incluant ses publications originales Aucune nest speacutecifique agraveLinux mais il y a un travail de discussion sur la theacuteorie et lutilisation de CBQ Contenu tregravestechnique mais une bonne lecture pour ceux qui sont inteacuteresseacutes

Differentiated Services on LinuxThis document par Werner Almesberger Jamal Hadi Salim et Alexey Kuznetsov Deacutecrit les fonctionsDiffServ du noyau Linux entre autres les gestionnaires de mise en file dattente TBF GREDDSMARK et le classificateur tcindex

httpcetipl~ekravietzcbqNET4_tchtmlUn autre HOWTO en polonais Vous pouvez cependant copiercoller les lignes de commandes ellesfonctionnent de la mecircme faccedilon dans toutes les langues Lauteur travaille en collaboration avec nouset sera peut ecirctre bientocirct un auteur de sections de cet HOWTO

IOS Committed Access RateDes gens de Cisco qui ont pris la louable habitude de mettre leur documentation en ligne La syntaxede Cisco est diffeacuterente mais les concepts sont identiques sauf quon fait mieux et sans mateacuterielcoutant le prix dune voiture -)

TCPIP Illustrated volume 1 W Richard Stevens ISBN 0-201-63346-9Sa lecture est indispensable si vous voulez reacuteellement comprendre TCPIP et de plus elle estdivertissante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

114 Chapitre 19 Lectures suppleacutementaires

Chapitre 20 RemerciementsNotre but est de faire la liste de toutes les personnes qui ont contribueacute agrave ce HOWTO ou qui nous ont aideacutes agraveexpliquer le fonctionnement des choses Alors quil nexiste pas actuellement de tableau dhonneur Netfilternous souhaitons saluer les personnes qui apportent leur aide

Junk Alins

ltjuanjomatupcesgt

bull

Joe Van Andelbull Michael T Babcock

ltmbabcockfibrespeednetgt

bull

Christopher Barton

ltcpbartonuiucedugt

bull

Peter Bieringer

ltpbbieringerdegt

bull

Ard van Breemen

ltardkwaaknetgt

bull

Ron Brinker

ltserviceemciscomgt

bull

ukasz Bromirski

ltlbromirskimr0vkaeuorggt

bull

Lennert Buytenhek

ltbuytenhgnuorggt

bull

Esteve Camps

ltestevehadesudgesgt

bull

Ricardo Javier Cardenes

ltricardoconysiscomgt

bull

Stef Coene

ltstefcoenedocumorggt

bull

Don Cohen

ltdon-lartcisiscs3-inccomgt

bull

Jonathan Corbet

ltlwnlwnnetgt

bull

Gerry N5JXS Creager

ltgerrycstamuedugt

bull

Marco Davids

ltmarcosaranlgt

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 115

Jonathan Day

ltjd9812my-dejacomgt

bull

Martin aka devik Devera

ltdevikcdiczgt

bull

Hannes Ebner

lthefli4ldegt

bull

Derek Fawcus

ltdfawcusciscocomgt

bull

David Fries

ltdfriesmailwinorggt

bull

Stephan Kobold Gehring

ltStephanGehringbechtledegt

bull

Jacek Glinkowski

ltjglinkowhnscomgt

bull

Andrea Glorioso

ltsamaperchetopiorggt

bull

Thomas Graaf

lttgrafsuugchgt

bull

Sandy Harris

ltsandystormcagt

bull

Nadeem Hasan

ltnhasanusanetgt

bull

Erik Hensema

lterikhensemaxs4allnlgt

bull

Vik Heyndrickx

ltvikheyndrickxedchqcomgt

bull

Spauldo Da Hippie

ltspauldousanetgt

bull

Koos van den Hout

ltkooskzdoosxs4allnlgt

bull

Stefan Huelbrock ltshuelbrockdatasystemsdegtbull Ayotunde Itayemi

ltaitayemimetrongcomgt

bull

Alexander W Janssen ltyallaynfonaticdegtbull Andreas Jellinghaus ltajdungeoninkadegtbull Gareth John ltgdjohnzeplerorggtbull Dave Johnsonbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

116 Chapitre 20 Remerciements

ltdjwwwuklinuxorggtMartin Josefsson ltgandalfwlugwestbosegtbull Andi Kleen ltaksusedegtbull Andreas J Koenig ltandreaskoeniganimadegtbull Pawel Krawczyk ltkravietzalfacetiplgtbull Amit Kucheria ltamitkittckuedugtbull Edmund Lau ltedlauucficsuciedugtbull Philippe Latu ltphilippelatulinux-franceorggtbull Arthur van Leeuwen ltarthurvlscikunnlgtbull Jose Luis Domingo Lopez

ltjdomingo24x7linuxcomgt

bull

Robert Lowe

ltroberthlowelawrenceedugt

bull

Jason Lunz ltjccgatechedugtbull Stuart Lynne ltslfireplugnetgtbull Alexey Mahotkin ltalexmformulabezrugtbull Predrag Malicevic ltpmalicieeeorggtbull Patrick McHardy ltkabertrashnetgtbull Andreas Mohr ltandilisasdegtbull James Morris ltjmorrisintercodecomaugtbull Andrew Morton ltakpmzipcomaugtbull Wim van der Mostbull Stephan Mueller ltsmuellerchronoxdegtbull Togan Muftuoglu lttoganmyahoocomgtbull Chris Murray ltcmurraystargatecagtbull Patrick Nagelschmidt ltdtogmxnetgtbull Ram Narula ltramprincess1netgtbull Jorge Novo ltjnovoeducanetnetgtbull Patrik ltphkurdnugtbull Pl Osgyny ltoplabwestel900netgtbull Lutz Preszligler ltLutzPresslerSerNetDEgtbull Jason Pyeron ltjasonpyeroncomgtbull Rod Roark ltrodsunsetsystemscomgtbull Pavel Roskin ltproskignuorggtbull Rusty Russell ltrustyrustcorpcomaugtbull Mihai RUSU ltdizzyroedunetgtbull Rob Pitman ltrobpitmancozagtbull Jamal Hadi Salim lthadicyberuscagtbull Ren Serral ltrserralacupcesgtbull David Sauer ltdavidspenguinczgtbull Sheharyar Suleman Shaikh ltsss23drexeledugtbull Stewart Shields ltMourningBladebigfootcomgtbull Nick Silberstein ltnhsilberyahoocomgtbull Konrads Smelkov ltkonradsinterbaltikacomgtbull William Stearns

ltwstearnspoboxcomgt

bull

Andreas Steinmetz ltastdomdvdegtbull Matthew Strait ltstraitmmathcscarletonedugtbull Jason Tackaberry lttacklinuxcomgtbull Charles Tassell ltctassellisnnetgtbull Glen Turner ltglenturneraarneteduaugtbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 117

Tea Sponsor Eric Veldhuyzen ltericterranugtbull Thomas Walpuski ltthomasbenderthinknerddegtbull Song Wang ltwsongeceuciedugtbull Chris Wilson

ltchrisnetserverscoukgt

bull

Lazar Yanackiev

ltLyanackievgmxnetgt

bull

Pedro Larroy

ltpiotrmemberfsforggt

Chaptitre 15 section 10 Exemple dune solution de translation dadresse avec de la QoSdiams Chaptitre 17 section 1 Configurer OSPF avec Zebradiams

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

118 Chapitre 20 Remerciements

  • HOWTO du routage avanceacute et du controcircle de trafic sous Linux
Page 4: HOWTO du routage avanc© et du contr´le de trafic sous Linux

IntroductionA quoi DSMARK est-il relieacute Guide des services diffeacuterencieacutesTravailler avec DSMARKComment SCHamplowbarDSMARK travailleLe filtre TCamplowbarINDEX

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)Paramegravetres amp usage

Random Early Detection (RED)Generic Random Early DetectionEmulation VCATMWeighted Round Robin (WRR)

15 Recettes de cuisineFaire tourner plusieurs sites avec diffeacuterentes SLA (autorisations)Proteacuteger votre machine des inondations SYNLimiter le deacutebit ICMP pour empecirccher les deacutenis de serviceDonner la prioriteacute au trafic interactifCache web transparent utilisant netfilter iproute2 ipchains et squid

Scheacutema du trafic apregraves limpleacutementationCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

SolutionCirconvenir aux problegravemes de la deacutecouverte du MTU de chemin en imposant le MSS (pour lesutilisateurs de lADSL du cacircble de PPPoE amp PPtP)Le Conditionneur de Trafic Ultime Faible temps de latence Teacuteleacutechargement vers lamont et lavalrapide

Pourquoi cela ne marche t-il pas bien par deacutefaut Le script (CBQ)Le script (HTB)

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseauExemple dune solution de translation dadresse avec de la QoS

Commenccedilons loptimisation de cette rare bande passanteClassification des paquetsAmeacuteliorer notre configurationRendre tout ceci actif au deacutemarrage

16 Construire des ponts et des pseudo ponts avec du Proxy ARPEtat des ponts et iptablesPont et mise en formePseudo-pont avec du Proxy-ARP

ARP amp Proxy-ARPImpleacutementez-le

17 Routage Dynamique - OSPF et BGPConfigurer OSPF avec Zebra

PreacuterequisConfigurer ZebraExeacutecuter Zebra

Configurer BGP4 avec Zebrascheacutema reacuteseau (Exemple)Configuration (Exemple)Veacuterification de la configuration

18 Autres possibiliteacutes19 Lectures suppleacutementaires20 Remerciements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

4 Laurent Foucher

Chapitre 1 DeacutedicaceCe document est deacutedieacute agrave beaucoup de gens dans ma tentative de tous me les rappeler je peux en citerquelques-uns

Rusty Russellbull Alexey N Kuznetsovbull La fine eacutequipe de Googlebull Leacutequipe de Casema Internetbull

Chapitre 2 IntroductionBienvenue cher lecteur

Ce document a pour but de vous eacuteclairer sur la maniegravere de faire du routage avanceacute avec Linux 2224Meacuteconnus par les utilisateurs les outils standard de ces noyaux permettent de faire des choses spectaculairesLes commandes comme route et ifconfig sont des interfaces vraiment pauvres par rapport agrave la grandepuissance potentielle diproute2

Jespegravere que ce HOWTO deviendra aussi lisible que ceux de Rusty Russell tregraves reacuteputeacute (parmi dautres choses)pour son netfilter

Vous pouvez nous contacter en nous eacutecrivant agrave leacutequipe HOWTO Cependant postez sil vous plaicirct vosquestions sur la liste de diffusion (voir la section correspondante) pour celles qui ne sont pas directement lieacuteesagrave ce HOWTO

Avant de vous perdre dans ce HOWTO si la seule chose que vous souhaitez faire est de la simple mise enforme de trafic allez directement au chapitre Autres possibiliteacutesgt et lisez ce qui concerne CBQinit

Conditions de distribution et Mise en garde

Ce document est distribueacute dans lespoir quil sera utile et utiliseacute mais SANS AUCUNE GARANTIE sansmecircme une garantie implicite de qualiteacute leacutegale et marchande ni aptitude agrave un quelconque usage

En un mot si votre dorsale STM-64 est tombeacutee ou distribue de la pornographie agrave vos estimeacutes clients celanest pas de notre faute Deacutesoleacute

Copyright (c) 2001 par Bert Hubert Gregory Maxwell et Martijn van Oosterhout Remco van Mook Paul BSchroeder et autres Ce document ne peut ecirctre distribueacute quen respectant les termes et les conditions exposeacutesdans la Open Publication License v10 ou supeacuterieure (la derniegravere version est actuellement disponible surhttpwwwopencontentorgopenpub)

Copiez et distribuez (vendez ou donnez) librement ce document dans nimporte quel format Les demandes decorrections etou de commentaires sont agrave adresser agrave la personne qui maintient ce document

Il est aussi demandeacute que si vous publiez cet HOWTO sur un support papier vous en envoyiez desexemplaires aux auteurs pour une ltlt relecture critique gtgt -)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 2 Introduction 5

Connaissances preacutealables

Comme le titre limplique ceci est un HOWTO ltlt avanceacute gtgt Bien quil ne soit pas besoin decirctre un expertreacuteseau certains preacute-requis sont neacutecessaires

Voici dautres reacutefeacuterences qui pourront vous aider agrave en apprendre plus

Rusty Russells networking-concepts-HOWTOTregraves bonne introduction expliquant ce quest un reacuteseau et comment on le connecte agrave dautres reacuteseaux

Linux Networking-HOWTO (ex Net-3 HOWTO)Excellent document bien que tregraves bavard Il vous apprendra beaucoup de choses qui sont deacutejagraveconfigureacutees si vous ecirctes capable de vous connecter agrave Internet Il peut eacuteventuellement ecirctre situeacute agraveusrdocHOWTONET-HOWTOtxt mais peut eacutegalement ecirctre trouveacute en ligne

Ce que Linux peut faire pour vous

Une petite liste des choses qui sont possibles

Limiter la bande passante pour certains ordinateursbull Limiter la bande passante VERS certains ordinateursbull Vous aider agrave partager eacutequitablement votre bande passantebull Proteacuteger votre reacuteseau des attaques de type Deacuteni de Servicebull Proteacuteger Internet de vos clientsbull Multiplexer plusieurs serveurs en un seul pour leacutequilibrage de charge ou une disponibiliteacute ameacutelioreacuteebull Restreindre laccegraves agrave vos ordinateursbull Limiter laccegraves de vos utilisateurs vers dautres hocirctesbull Faire du routage baseacute sur lID utilisateur (eh oui ) ladresse MAC ladresse IP source le port le typede service lheure ou le contenu

bull

Peu de personnes utilisent couramment ces fonctionnaliteacutes avanceacutees Il y a plusieurs raisons agrave cela Bien quela documentation soit fournie la prise en main est difficile Les commandes de controcircle du trafic ne sontpratiquement pas documenteacutees

Notes diverses

Il y a plusieurs choses qui doivent ecirctre noteacutees au sujet de ce document Bien que jen ai eacutecrit la majeure partieje ne veux vraiment pas quil reste tel quel Je crois beaucoup agrave lOpen Source je vous encourage donc agraveenvoyer des remarques des mises agrave jour des corrections etc Nheacutesitez pas agrave mavertir des coquilles ouderreurs pures et simples Si mon anglais vous paraicirct parfois peu naturel ayez en tecircte sil vous plaicirct quelanglais nest pas ma langue natale Nheacutesitez pas agrave menvoyer vos suggestions amplsqbNdT en anglais ]

Si vous pensez que vous ecirctes plus qualifieacute que moi pour maintenir une section ou si vous pensez que vouspouvez eacutecrire et maintenir de nouvelles sections vous ecirctes le bienvenu La version SGML de ce HOWTO estdisponible via CVS Jenvisage que dautres personnes puissent travailler dessus

Pour vous aider vous trouverez beaucoup de mentions FIXME (NdT A CORRIGER) Les corrections sonttoujours les bienvenues Si vous trouvez une mention FIXME vous saurez que vous ecirctes en territoire inconnuCela ne veut pas dire quil ny a pas derreurs ailleurs faites donc tregraves attention Si vous avez valideacute quelquechose faites-nous le savoir ce qui nous permettra de retirer la mention FIXME

Je prendrai quelques liberteacutes tout au long de cet HOWTO Par exemple je pars de lhypothegravese duneconnexion Internet agrave 10 Mbits bien que je sache tregraves bien que cela ne soit pas vraiment courant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

6 Connaissances preacutealables

Accegraves CVS et propositions de mises agrave jour

Ladresse canonique de cet HOWTO est Ici

Nous avons maintenant un CVS en accegraves anonyme disponible depuis le monde entier Cela est inteacuteressantpour plusieurs raisons Vous pouvez facilement teacuteleacutecharger les nouvelles versions de ce HOWTO et soumettredes mises agrave jour

En outre cela permet aux auteurs de travailler sur la source de faccedilon indeacutependante ce qui est une bonne choseaussi

$ export CVSROOT=pserveranonoutpostds9anlvarcvsroot$ cvs loginCVS password [enter cvs (sans les caractegraveres )]$ cvs co 24routingcvs server Updating 24routingU 24routinglartcdb

Si vous avez fait des changements et que vous vouliez contribuer au HOWTO exeacutecutez cvs -z3 diff-uBb et envoyez-nous le reacutesultat par courrier eacutelectronique de faccedilon agrave pouvoir facilement inteacutegrer lesmodifications Merci Au fait soyez sucircr que vous avez eacutediteacute le fichier db les autres documents eacutetant geacuteneacutereacutesagrave partir de celui-ci

Un fichier Makefile est fourni pour vous aider agrave creacuteer des fichiers PostScript dvi pdf html et texte Vouspouvez avoir agrave installer les docbook docbook-utils ghostscript et tetex pour obtenir tous les formats de sortie

Faites attention de ne pas eacutediter le fichier 24routingsgml Il contient une ancienne version du HOWTO Lebon fichier est lartcdb

Liste de diffusion

Les auteurs reccediloivent de plus en plus de courriers eacutelectroniques agrave propos de cet HOWTO Vu linteacuterecirct de lacommunauteacute il a eacuteteacute deacutecideacute la mise en place dune liste de diffusion ougrave les personnes pourront discuter duroutage avanceacute et du controcircle de trafic Vous pouvez vous abonner agrave la liste ici

Il devra ecirctre noteacute que les auteurs sont tregraves heacutesitants agrave reacutepondre agrave des questions qui nont pas eacuteteacute poseacutees sur laliste Nous aimerions que la liste devienne une sorte de base de connaissance Si vous avez une questionrecherchez sil vous plaicirct dabord dans larchive et ensuite postez-lagrave dans la liste de diffusion

Plan du document

Nous allons essayer de faire des manipulations inteacuteressantes degraves le deacutebut ce qui veut dire que tout ne sera pasexpliqueacute en deacutetail tout de suite Veuillez passer sur ces deacutetails et accepter de consideacuterer quils deviendrontclairs par la suite

Le routage et le filtrage sont deux choses distinctes Le filtrage est tregraves bien documenteacute dans le HOWTO deRusty disponible ici

Rustys Remarkably Unreliable Guidesbull

Nous nous focaliserons principalement sur ce quil est possible de faire en combinant netfilter et iproute2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Accegraves CVS et propositions de mises agrave jour 7

Chapitre 3 Introduction agrave iproute2

Pourquoi iproute2

La plupart des distributions Linux et des UNIX utilisent couramment les veacuteneacuterables commandes arp ifconfiget route Bien que ces outils fonctionnent ils montrent quelques comportements inattendus avec les noyauxLinux des seacuteries 22 et plus Par exemple les tunnels GRE font partie inteacutegrante du routage de nos jours maisils neacutecessitent des outils complegravetement diffeacuterents

Avec iproute2 les tunnels font partie inteacutegrante des outils

Les noyaux Linux des seacuteries 22 et plus ont un sous-systegraveme reacuteseau complegravetement reacuteeacutecrit Ce nouveau codagede la partie reacuteseau apporte agrave Linux des performances et des fonctionnaliteacutes qui nont pratiquement pasdeacutequivalent parmi les autres systegravemes dexploitation En fait le nouveau logiciel de filtrage routage et declassification possegravede plus de fonctionnaliteacutes que les logiciels fournis sur beaucoup de routeurs deacutedieacutes depare-feu et de produits de mise en forme (shaping) du trafic

Dans les systegravemes dexploitation existants au fur et agrave mesure que de nouveaux concepts reacuteseau apparaissaientles deacuteveloppeurs sont parvenus agrave les greffer sur les structures existantes Ce travail constant dempilage decouches a conduit agrave des codes reacuteseau aux comportements eacutetranges un peu comme les langues humaines Dansle passeacute Linux eacutemulait le mode de fonctionnement de SunOS ce qui neacutetait pas lideacuteal

La nouvelle structure diproute2 a permis de formuler clairement des fonctionnaliteacutes impossibles agraveimpleacutementer dans le sous-systegraveme reacuteseau preacuteceacutedent

Un tour dhorizon diproute2

Linux possegravede un systegraveme sophistiqueacute dallocation de bande passante appeleacute Controcircle de trafic (TrafficControl) Ce systegraveme supporte diffeacuterentes meacutethodes pour classer ranger par ordre de prioriteacute partager etlimiter le trafic entrant et sortant

Nous commencerons par un petit tour dhorizon des possibiliteacutes diproute2

Preacuterequis

Vous devez ecirctre sucircr que vous avez installeacute les outils utilisateur (NdT userland tools par opposition agrave la partieltlt noyau gtgt diproute2) Le paquet concerneacute sappelle iproute sur RedHat et Debian Autrement il peut ecirctretrouveacute agrave ftpftpinracruip-routingiproute2-224-now-sstargz

Vous pouvez aussi essayer iproute2-currenttargz pour la derniegravere version

Certains eacuteleacutements diproute vous imposent lactivation de certaines options du noyau Il devra eacutegalement ecirctrenoteacute que toutes les versions de RedHat jusquagrave la version 62 incluse nont pas les fonctionnaliteacutes du controcirclede trafic activeacutees dans le noyau fourni par deacutefaut

RedHat 72 contient tous les eacuteleacutements par deacutefaut

Soyez eacutegalement sucircr que vous avez le support netlink mecircme si vous devez choisir de compiler votrepropre noyau iproute2 en a besoin

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

8 Chapitre 3 Introduction agrave iproute2

Explorer votre configuration courante

Cela peut vous paraicirctre surprenant mais iproute2 est deacutejagrave configureacute Les commandes courantes ifconfig etroute utilisent deacutejagrave les appels systegraveme avanceacutes diproute2 mais essentiellement avec les options par deacutefaut(cest-agrave-dire ennuyeuses)

Loutil ip est central et nous allons lui demander de nous montrer les interfaces

ip nous montre nos liens

[ahuhome ahu]$ ip link list1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 0000000000002 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff4 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp

La sortie peut varier mais voici ce qui est afficheacute pour mon routeur NAT (NdT translation dadresse) chezmoi Jexpliquerai seulement une partie de la sortie dans la mesure ougrave tout nest pas directement pertinent

La premiegravere interface que nous voyons est linterface loopback Bien que votre ordinateur puissefonctionner sans je vous le deacuteconseille La taille de MTU (uniteacute maximum de transmission) est de 3924octets et loopback nest pas supposeacute ecirctre mis en file dattente ce qui prend tout son sens dans la mesure ougravecette interface est le fruit de limagination de votre noyau

Je vais passer sur linterface dummy pour linstant et il se peut quelle ne soit pas preacutesente sur votre ordinateurIl y a ensuite mes deux interfaces physiques lune du cocircteacute de mon modem cacircble lautre servant mon segmentethernet agrave la maison De plus nous voyons une interface ppp0

Notons labsence dadresses IP Iproute deacuteconnecte les concepts de ltlt liens gtgt et ltlt dadresses IP gtgt AveclIP aliasing le concept de ladresse IP canonique est devenu de toute faccedilon sans signification

ip nous montre bien cependant ladresse MAC lidentifiant mateacuteriel de nos interfaces ethernet

ip nous montre nos adresses IP

[ahuhome ahu]$ ip address show 1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 000000000000 inet 1270018 brd 127255255255 scope host lo2 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff inet 100018 brd 10255255255 scope global eth04 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp inet 2126494251 peer 2126494132 scope global ppp0

Cela contient plus dinformations ip montre toutes nos adresses et agrave quelles cartes elles appartiennent inetsignifie Internet (IPv4) Il y a beaucoup dautres familles dadresses mais elles ne nous concernent pas pour le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explorer votre configuration courante 9

moment

Examinons linterface eth0 de plus pregraves Il est dit quelle est relieacutee agrave ladresse internet 100018Quest-ce que cela signifie Le 8 deacutesigne le nombre de bits reacuteserveacutes agrave ladresse reacuteseau Il y a 32 bits donc ilreste 24 bits pour deacutesigner une partie de notre reacuteseau Les 8 premiers bits de 10001 correspondent agrave10000 notre adresse reacuteseau et notre masque de sous-reacuteseau est 255000

Les autres bits repegraverent des machines directement connecteacutees agrave cette interface Donc 10250313 estdirectement disponible sur eth0 comme lest 10001 dans notre exemple

Avec ppp0 le mecircme concept existe bien que les nombres soient diffeacuterents Son adresse est2126494251 sans masque de sous-reacuteseau Cela signifie que vous avez une liaison point agrave point et quetoutes les adresses agrave lexception de 2126494251 sont distantes Il y a cependant plus dinformationsEn effet on nous dit que de lautre cocircteacute du lien il ny a encore quune seule adresse 21264941 Le 32nous preacutecise quil ny a pas de ltlt bits reacuteseau gtgt

Il est absolument vital que vous compreniez ces concepts Reacutefeacuterez-vous agrave la documentation mentionneacutee audeacutebut de ce HOWTO si vous avez des doutes

Vous pouvez aussi noter qdisc qui deacutesigne la gestion de la mise en file dattente (Queueing Discipline)Cela deviendra vital plus tard

ip nous montre nos routes

Nous savons maintenant comment trouver les adresses 10xyz et nous sommes capables datteindre21264941 Cela nest cependant pas suffisant et nous avons besoin dinstructions pour atteindre lemonde LInternet est disponible via notre connexion PPP et il se trouve que 21264941 est precirct agravepropager nos paquets agrave travers le monde et agrave nous renvoyer le reacutesultat

[ahuhome ahu]$ ip route show21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Cela se comprend de soi-mecircme Les 4 premiegraveres lignes donnent explicitement ce qui eacutetait sous-entendu parip address show la derniegravere ligne nous indiquant que le reste du monde peut ecirctre trouveacute via21264941 notre passerelle par deacutefaut Nous pouvons voir que cest une passerelle agrave cause du motltlt via gtgt qui nous indique que nous avons besoin denvoyer les paquets vers 21264941 et que cestelle qui se chargera de tout

En reacutefeacuterence voici ce que lancien utilitaire route nous propose

[ahuhome ahu]$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref UseIface21264941 0000 255255255255 UH 0 0 0 ppp010000 0000 255000 U 0 0 0 eth0127000 0000 255000 U 0 0 0 lo0000 21264941 0000 UG 0 0 0 ppp0

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

10 ip nous montre nos adresses IP

ARP

ARP est le Protocole de Reacutesolution dAdresse (Address Resolution Protocol) Il est deacutecrit dans le RFC 826ARP est utiliseacute par une machine dun reacuteseau local pour retrouver ladresse mateacuterielle (la localisation) duneautre machine sur le mecircme reacuteseau Les machines sur Internet sont geacuteneacuteralement connues par leur nom auquelcorrespond une adresse IP Cest ainsi quune machine sur le reacuteseau foocom est capable de communiqueravec une autre machine qui est sur le reacuteseau barnet Une adresse IP cependant ne peut pas vous indiquerla localisation physique de la machine Cest ici que le protocole ARP entre en jeu

Prenons un exemple tregraves simple Supposons que jaie un reacuteseau composeacute de plusieurs machines dont lamachine foo dadresse IP 10001 et la machine bar qui a ladresse IP 10002 Maintenant fooveut envoyer un ping vers bar pour voir sil est actif mais foo na aucune indication sur la localisation debar Donc si foo deacutecide denvoyer un ping vers bar il a besoin denvoyer une requecircte ARP Cette requecircteARP est une faccedilon pour foo de crier sur le reacuteseau ltlt Bar (10002) Ougrave es-tu gtgt Par conseacutequent toutesles machines sur le reacuteseau entendront foo crier mais seul bar (10002) reacutepondra Bar enverra unereacuteponse ARP directement agrave foo ce qui revient agrave dire ltlt Foo (10001) je suis ici agrave ladresse006094E0812 gtgt Apregraves cette simple transaction utiliseacutee pour localiser son ami sur le reacuteseau foo estcapable de communiquer avec bar jusquagrave ce quil (le cache ARP de foo) oublie ougrave bar est situeacute(typiquement au bout de 15 minutes sur Unix)

Maintenant voyons comment cela fonctionne Vous pouvez consulter votre cache (table) ARP (neighbor)comme ceci

[rootespa041 homesrciputils] ip neigh show937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Comme vous pouvez le voir ma machine espa041 (937641) sait ougrave trouver espa042 (937642)et espagate (93761) Maintenant ajoutons une autre machine dans le cache ARP

[rootespa041 homepaulschgnome-desktop] ping -c 1 espa043PING espa043austinibmcom (937643) from 937641 56(84) bytes of data64 bytes from 937643 icmp_seq=0 ttl=255 time=09 ms

1 packets transmitted 1 packets received 0 packet lossround-trip minavgmax = 090909 ms

[rootespa041 homesrciputils] ip neigh show937643 dev eth0 lladdr 000629218020 nud reachable937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Par conseacutequent lorsque espa041 a essayeacute de contacter espa043 ladresse mateacuterielle de espa043 (salocalisation) a alors eacuteteacute ajouteacutee dans le cache ARP Donc tant que la dureacutee de vie de lentreacutee correspondant agraveespa043 dans le cache ARP nest pas deacutepasseacutee espa041 sait localiser espa043 et na plus besoindenvoyer de requecircte ARP

Maintenant effaccedilons espa043 de notre cache ARP

[rootespa041 homesrciputils] ip neigh delete 937643 dev eth0[rootespa041 homesrciputils] ip neigh show937643 dev eth0 nud failed937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud stale

Maintenant espa041 a agrave nouveau oublieacute la localisation despa043 et aura besoin denvoyer une autrerequecircte ARP la prochaine fois quil voudra communiquer avec lui Vous pouvez aussi voir ci-dessus que leacutetat

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP 11

despagate (93761) est passeacute en stale Cela signifie que la localisation connue est encore valide maisquelle devra ecirctre confirmeacutee agrave la premiegravere transaction avec cette machine

Chapitre 4 Regravegles - bases de donneacutees des politiquesde routageSi vous avez un routeur important il se peut que vous vouliez satisfaire les besoins de diffeacuterentes personnesqui peuvent ecirctre traiteacutees diffeacuteremment Les bases de donneacutees des politiques de routage vous aident agrave fairecela en geacuterant plusieurs ensembles de tables de routage

Si vous voulez utiliser cette fonctionnaliteacute assurez-vous que le noyau est compileacute avec les options IP Advanced router et IP policy routing

Quand le noyau doit prendre une deacutecision de routage il recherche quelle table consulter Par deacutefaut il y a troistables Lancien outil route modifie les tables principale (main) et locale (local) comme le fait loutil ip (pardeacutefaut)

Les regravegles par deacutefaut

[ahuhome ahu]$ ip rule list0 from all lookup local 32766 from all lookup main 32767 from all lookup default

Ceci liste la prioriteacute de toutes les regravegles Nous voyons que toutes les regravegles sont appliqueacutees agrave tous les paquets(from all) Nous avons vu la table main preacuteceacutedemment sa sortie seffectuant avec ip route ls mais lestables local et default sont nouvelles

Si nous voulons faire des choses fantaisistes nous pouvons creacuteer des regravegles qui pointent vers des tablesdiffeacuterentes et qui nous permettent de redeacutefinir les regravegles de routage du systegraveme

Pour savoir exactement ce que fait le noyau en preacutesence dun assortiment de regravegles plus complet reacutefeacuterez-vousagrave la documentation ip-cref dAlexey amplsqbNdT dans le paquetage iproute2 de votre distribution]

Politique de routage simple par ladresse source

Prenons encore une fois un exemple reacuteel Jai 2 modems cacircble connecteacutes agrave un routeur Linux NAT(masquerading) Les personnes habitant avec moi me paient pour avoir accegraves agrave Internet Supposons quun demes co-locataires consulte seulement hotmail et veuille payer moins Cest daccord pour moi mais il utiliserale modem le plus lent

Le modem cacircble ltlt rapide gtgt est connu sous 2126494251 et est en liaison PPP avec 21264941Le modem cacircble ltlt lent gtgt est connu sous diverses adresses IP 2126478148 dans notre exemple avecun lien vers 1959698253

La table locale

[ahuhome ahu]$ ip route list table localbroadcast 127255255255 dev lo proto kernel scope link src 127001 local 10001 dev eth0 proto kernel scope host src 10001 broadcast 10000 dev eth0 proto kernel scope link src 10001 local 2126494251 dev ppp0 proto kernel scope host src 2126494251 broadcast 10255255255 dev eth0 proto kernel scope link src 10001 broadcast 127000 dev lo proto kernel scope link src 127001

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

12 Chapitre 4 Regravegles - bases de donneacutees des politiques de routage

local 2126478148 dev ppp2 proto kernel scope host src 2126478148 local 127001 dev lo proto kernel scope host src 127001 local 1270008 dev lo proto kernel scope host src 127001

Il y a beaucoup de choses eacutevidentes mais aussi des choses qui ont besoin decirctre preacuteciseacutees quelque peu ce quenous allons faire La table de routage par deacutefaut est vide

Regardons la table principale (main)

[ahuhome ahu]$ ip route list table main 1959698253 dev ppp2 proto kernel scope link src 2126478148 21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Maintenant nous geacuteneacuterons une nouvelle regravegle que nous appellerons John pour notre hypotheacutetiqueco-locataire Bien que nous puissions travailler avec des nombres IP purs il est plus facile dajouter notre tabledans le fichier etciproute2rtamplowbartables

echo 200 John gtgt etciproute2rt_tables ip rule add from 100010 table John ip rule ls0 from all lookup local 32765 from 100010 lookup John32766 from all lookup main 32767 from all lookup default

Maintenant tout ce quil reste agrave faire est de geacuteneacuterer la table John et de vider le cache des routes

ip route add default via 1959698253 dev ppp2 table John ip route flush cache

Et voilagrave qui est fait Il ne reste plus comme exercice laisseacute au lecteur quagrave impleacutementer cela dans ip-up

Routage avec plusieurs accegraves Internetfournisseurs daccegraves

Une configuration classique est la suivante ougrave deux fournisseurs daccegraves permettent la connexion dun reacuteseaulocal (ou mecircme dune simple machine) agrave Internet

________ +--------------+ | | | +-------------+ Fournisseur 1+------- __ | | | ___ _ +------+-------+ +--------------+ | _ __ | if1 | | | || Reacuteseau Local -----+ Routeur Linux| | Internet _ __ | | | __ __ | if2 | ___ +------+-------+ +--------------+ | | | | +-------------+ Fournisseur 2+------- | | | +--------------+ ________

Il y a geacuteneacuteralement deux questions agrave se poser pour cette configuration

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de routage simple par ladresse source 13

Accegraves seacutepareacute

La premiegravere est de savoir comment router les reacuteponses aux paquets entrants par un fournisseur particulierdisons le Fournisseur 1 vers ce mecircme fournisseur

Commenccedilons par deacutefinir quelques symboles $IF1 sera le nom de la premiegravere interface (if1 sur la figureau-dessus) et $IF2 le nom de la deuxiegraveme interface $IP1 sera alors ladresse IP associeacutee agrave $IF1 et $IP2 seraladresse IP associeacutee agrave $IF2 $P1 sera ladresse IP de la passerelle du fournisseur daccegraves 1 et $P2 seraladresse IP de la passerelle du fournisseur daccegraves 2 Enfin $P1_NET sera ladresse reacuteseau agrave linteacuterieur duquelse situe $P1 et $P2_NET sera ladresse reacuteseau agrave linteacuterieur duquel se situe $P2

Deux tables de routage suppleacutementaires sont creacuteeacutees par exemple T1 et T2 Celles-ci sont ajouteacutees dansetciproute2rt_tables La configuration du routage dans ces tables seffectue de la faccedilonsuivante

ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2

Rien de vraiment spectaculaire Une route est simplement positionneacutee vers la passerelle et une route pardeacutefaut via cette passerelle est mise en place comme nous le ferions dans le cas dun seul fournisseur daccegravesIci les routes sont placeacutees dans des tables seacutepareacutees une par fournisseur daccegraves Il est agrave noter que la route versle reacuteseau suffit dans la mesure ougrave elle indique comment trouver nimporte quel hocircte dans ce reacuteseau ce quiinclut la passerelle

La table de routage principale est maintenant configureacutee Cest une bonne ideacutee de router les eacuteleacutements agravedestination dun voisin direct agrave travers linterface connecteacutee agrave ce voisin Notez les arguments src qui assurentque la bonne adresse IP source sera choisie

ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2

Indiquez maintenant votre preacutefeacuterence pour votre route par deacutefaut

ip route add default via $P1

Vous configurez ensuite les regravegles de routage Celles-ci deacutefinissent la table qui sera vraiment choisie pour leroutage Il faut sassurer que le routage seffectue agrave travers une interface donneacutee si vous avez ladresse sourcecorrespondante

ip rule add from $IP1 table T1 ip rule add from $IP2 table T2

Cet ensemble de commandes vous assure que toutes les reacuteponses au trafic entrant sur une interface particuliegravereseront envoyeacutees par cette interface

Avertissement

Notes dun lecteur si $P0_NET est le reacuteseau local et $IF0 est son interface alors les entreacutees suivantes sontdeacutesirables

ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

14 Accegraves seacutepareacute

ip route add 1270008 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 1270008 dev lo table T2

Nous avons maintenant une configuration tregraves basique Elle marchera pour tous les processus exeacutecuteacutes sur lerouteur lui-mecircme ainsi que pour le reacuteseau local si celui-ci est masqueacute Si ce nest pas le cas soit vous avezune plage dadresses IP pour chaque fournisseur daccegraves soit vous masquez vers lun des deux fournisseursdaccegraves Dans les deux cas vous ajouterez des regravegles indiquant en fonction de ladresse IP de la machine dureacuteseau local vers quel fournisseur vous allez router

Balance de charge

La seconde question concerne la balance de charge du trafic sortant vers les deux fournisseurs daccegraves Cecinest pas vraiment tregraves dur si vous avez deacutejagrave configureacute laccegraves seacutepareacute comme deacutecrit ci-dessus

Au lieu de choisir lun des deux fournisseurs daccegraves comme route par deacutefaut celle-ci peut ecirctre une routemulti-chemin Par deacutefaut le noyau reacutepartira les routes vers les deux fournisseurs daccegraves Ceci est reacutealiseacute de lafaccedilon suivante (construit eacutegalement sur lexemple de la section de laccegraves seacutepareacute)

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

Ceci reacutealisera la balance des routes vers les deux fournisseurs Les paramegravetres weight peuvent permettre defavoriser un fournisseur par rapport agrave un autre

Il est agrave noter que la balance de charge ne sera pas parfaite dans la mesure ougrave elle est baseacutee sur les routes et quecelles-ci sont mises dans des caches Ceci signifie que les routes vers les sites les plus souvent utiliseacutespasseront toujours par le mecircme fournisseur daccegraves

De plus si vous voulez vraiment mettre en oeuvre ceci vous devriez eacutegalement aller consulter les mises agrave jourde Julien Anastasov agrave httpwwwssibg~jaroutes Elles rendront le travail plus facile

Chapitre 5 GRE et autres tunnelsIl y a trois sortes de tunnels sous Linux lIP dans un tunnel IP le tunnel GRE et les tunnels qui existent endehors du noyau (comme PPTP par exemple)

Quelques remarques geacuteneacuterales agrave propos des tunnels

Les tunnels peuvent faire des choses tregraves inhabituelles et vraiment sympas Ils peuvent aussi absolument toutdeacutetraquer si vous ne les avez pas configureacutes correctement Ne deacutefinissez pas votre route par deacutefaut sur untunnel agrave moins que vous ne sachiez EXACTEMENT ce que vous faites

De plus le passage par un tunnel augmente le poids des en-tecirctes (overhead) puisquun en-tecircte IPsuppleacutementaire est neacutecessaire Typiquement ce surcoucirct est de 20 octets par paquet Donc si la taillemaximum de votre paquet sur votre reacuteseau (MTU) est de 1500 octets un paquet qui est envoyeacute agrave travers untunnel sera limiteacute agrave une taille de 1480 octets Ce nest pas neacutecessairement un problegraveme mais soyez sucircr davoirbien eacutetudieacute la fragmentation et le reacuteassemblage des paquets IP quand vous preacutevoyez de relier des reacuteseaux degrande taille par des tunnels Et bien sucircr la maniegravere la plus rapide de creuser un tunnel est de creuser des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 5 GRE et autres tunnels 15

cocircteacutes

IP dans un tunnel IP

Ce type de tunnel est disponible dans Linux depuis un long moment Il neacutecessite deux modules ipipo etnewamplowbartunnelo

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsInternet) Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C

et le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quel paquet de A vers B etvice-versa Il est eacutegalement possible dutiliser lInternet pour cela

Voici ce quil faut faire

Premiegraverement assurez-vous que les modules soient installeacutes

insmod ipipoinsmod new_tunnelo

Ensuite sur le routeur du reacuteseau A faites la chose suivante

ifconfig tunl0 10011 pointopoint 172192021route add -net 10020 netmask 2552552550 dev tunl0

et sur le routeur du reacuteseau B

ifconfig tunl0 10021 pointopoint 172161718route add -net 10010 netmask 2552552550 dev tunl0

Et quand vous aurez termineacute avec votre tunnel

ifconfig tunl0 down

Vite fait bien fait Vous ne pouvez pas transmettre les paquets de diffusion (broadcast) ni le trafic IPv6 agravetravers un tunnel IP-IP Vous ne pouvez connecter que deux reacuteseaux IPv4 qui normalement ne seraient pascapables de se ltlt parler gtgt cest tout Dans la mesure ougrave la compatibiliteacute a eacuteteacute conserveacutee ce code tournedepuis un bon moment et il reste compatible depuis les noyaux 13 Le tunnel Linux IP dans IP ne fonctionnepas avec dautres systegravemes dexploitation ou routeurs pour autant que je sache Cest simple ccedila marcheUtilisez-le si vous le pouvez autrement utilisez GRE

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

16 Quelques remarques geacuteneacuterales agrave propos des tunnels

Le tunnel GRE

GRE est un protocole de tunnel qui a eacuteteacute agrave lorigine deacuteveloppeacute par Cisco et qui peut reacutealiser plus de chosesque le tunnel IP dans IP Par exemple vous pouvez aussi transporter du trafic multi-diffusion (multicast) et delIPv6 agrave travers un tunnel GRE

Dans Linux vous aurez besoin du module ipamplowbargreo

Le tunnel IPv4

Dans un premier temps inteacuteressons-nous au tunnel IPv4

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsinternet)

Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C Appelons ce reacuteseau neta

Et pour le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C Appelons ce reacuteseau netb

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quels paquets de A vers B etvice-versa Comment et pourquoi on sen moque

Sur le routeur du reacuteseau A nous faisons la chose suivante

ip tunnel add netb mode gre remote 172192021 local 172161718 ttl 255ip link set netb upip addr add 10011 dev netbip route add 1002024 dev netb

Discutons un peu de cela Sur la ligne 1 nous avons ajouteacute un peacuteripheacuterique tunnel que nous avons appeleacutenetb (ce qui est eacutevident dans la mesure ougrave cest lagrave que nous voulons aller) De plus nous lui avons ditdutiliser le protocole GRE (mode gre) que ladresse distante est 172192021 (le routeur de lautrecocircteacute) que nos paquets ltlt tunneleacutes gtgt devront ecirctre geacuteneacutereacutes agrave partir de 172161718 (ce qui autorise votreserveur agrave avoir plusieurs adresses IP sur le reacuteseau C et ainsi vous permet de choisir laquelle sera utiliseacutee pourvotre tunnel) et que le champ TTL de vos paquets sera fixeacute agrave 255 (ttl 255)

La deuxiegraveme ligne active le peacuteripheacuterique

Sur la troisiegraveme ligne nous avons donneacute agrave cette nouvelle interface ladresse 10011 Cest bon pour depetits reacuteseaux mais quand vous commencez une exploitation miniegravere (BEAUCOUP de tunnels ) vouspouvez utiliser une autre gamme dadresses IP pour vos interfaces ltlt tunnel gtgt (dans cet exemple vouspourriez utiliser 10030)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le tunnel GRE 17

Sur la quatriegraveme ligne nous positionnons une route pour le reacuteseau B Notez la notation diffeacuterente pour lemasque de sous-reacuteseau Si vous necirctes pas familiariseacute avec cette notation voici comment ccedila marche vouseacutecrivez le masque de sous-reacuteseau sous sa forme binaire et vous comptez tous les 1 Si vous ne savez pascomment faire cela rappelez-vous juste que 255000 est 8 25525500 est 16 et2552552550 est 24 Et 2552552540 est 23 au cas ougrave ccedila vous inteacuteresserait

Mais arrecirctons ici et continuons avec le routeur du reacuteseau B

ip tunnel add neta mode gre remote 172161718 local 172192021 ttl 255ip link set neta upip addr add 10021 dev netaip route add 1001024 dev neta

Et quand vous voudrez retirer le tunnel sur le routeur A

ip link set netb downip tunnel del netb

Bien sucircr vous pouvez remplacer netb par neta pour le routeur B

Le tunnel IPv6

Voir la section 6 pour une courte description des adresses IPv6

Agrave propos des tunnels

Supposons que vous ayez le reacuteseau IPv6 suivant et que vous vouliez le connecter agrave une dorsale IPv6 (6bone)ou agrave un ami

Reacuteseau 3ffe406515a2196

Votre adresse IPv4 est 172161718 et le routeur 6bone a une adresse IPv4 172222324

ip tunnel add sixbone mode sit remote 172222324 local 172161718 ttl 255ip link set sixbone upip addr add 3ffe406515a2196 dev sixboneip route add 3ffe15 dev sixbone

Voyons cela de plus pregraves Sur la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique tunnel appeleacute sixboneNous lui avons affecteacute le mode sit (qui est le tunnel IPv6 sur IPv4) et lui avons dit ougrave lon va (remote) etdougrave lon vient (local) TTL est configureacute agrave son maximum 255 Ensuite nous avons rendu le peacuteripheacuteriqueactif (up) Puis nous avons ajouteacute notre propre adresse reacuteseau et configureacute une route pour 3ffe15 agravetravers le tunnel

Les tunnels GRE constituent actuellement le type de tunnel preacutefeacutereacute Cest un standard qui est largementadopteacute mecircme agrave lexteacuterieur de la communauteacute Linux ce qui constitue une bonne raison de lutiliser

Tunnels dans lespace utilisateur

Il y a des dizaines dimpleacutementations de tunnels agrave lexteacuterieur du noyau Les plus connues sont bien sucircr PPP etPPTP mais il y en a bien plus (certaines proprieacutetaires certaines seacutecuriseacutes dautres qui nutilisent pas IP) quideacutepassent le cadre de ce HOWTO

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

18 Le tunnel IPv4

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsaleIPv6 (6bone)Par Marco Davids ltmarcosaranlgt

NOTE au mainteneur

En ce qui me concerne ce tunnel IPv6-IPv4 nest pas par deacutefinition un tunnel GRE Vous pouvez reacutealiser untunnel IPv6 sur IPv4 au moyen des peacuteripheacuteriques tunnels GRE (tunnels GRE NIMPORTE QUOI vers IPv4)mais le peacuteripheacuterique utiliseacute ici (sit) ne permet que des tunnels IPv6 sur IPv4 ce qui est quelque chose dediffeacuterent

Tunnel IPv6

Voici une autre application des possibiliteacutes de tunnels de Linux Celle-ci est populaire parmi les premiersadeptes dIPv6 ou les pionniers si vous preacutefeacuterez Lexemple pratique deacutecrit ci-dessous nest certainement pas laseule maniegravere de reacutealiser un tunnel IPv6 Cependant cest la meacutethode qui est souvent utiliseacutee pour reacutealiser untunnel entre Linux et un routeur Cisco IPv6 et lexpeacuterience ma appris que cest ce type deacutequipement quebeaucoup de personnes ont Dix contre un que ceci sappliquera aussi pour vous -)

De petites choses agrave propos des adresses IPv6

Les adresses IPv6 sont en comparaison avec les adresses IPv4 vraiment grandes 128 bits contre 32 bits Etceci nous fournit la chose dont nous avons besoin beaucoup beaucoup dadresses IP 340282266920938463463374607431768211465 pour ecirctre preacutecis A part ceci IPv6 (ou IPnggeacuteneacuteration suivante (Next Generation)) est supposeacute fournir des tables de routage plus petites sur les routeursdes dorsales Internet une configuration plus simple des eacutequipements une meilleure seacutecuriteacute au niveau IP etun meilleur support pour la Qualiteacute de Service (QoS)

Un exemple 2002836b9820000000000000836b9886

Ecrire les adresses IPv6 peut ecirctre un peu lourd Il existe donc des regravegles qui rendent la vie plus facile

Ne pas utiliser les zeacuteros de tecircte comme dans IPv4 bull Utiliser des double-points de seacuteparation tous les 16 bits ou 2 octets bull Quand vous avez beaucoup de zeacuteros conseacutecutifs vous pouvez eacutecrire Vous ne pouvez cependantfaire cela quune seule fois par adresse et seulement pour une longueur de 16 bits

bull

Ladresse 2002836b9820000000000000836b9886 peut ecirctre eacutecrite2002836b9820836b9886 ce qui est plus amical

Un autre exemple ladresse 3ffe0000000000000000000034A1F32C peut ecirctre eacutecrite3ffe2034A1F32C ce qui est beaucoup plus court

IPv6 a pour but decirctre le successeur de lactuel IPv4 Dans la mesure ougrave cette technologie est relativementreacutecente il ny a pas encore de reacuteseau natif IPv6 agrave leacutechelle mondiale Pour permettre un deacuteveloppement rapidela dorsale IPv6 (6bone) a eacuteteacute introduite

Les reacuteseaux natifs IPv6 sont interconnecteacutes gracircce agrave lencapsulation du protocole IPv6 dans des paquets IPv4qui sont envoyeacutes agrave travers linfrastructure IPv4 existante dun site IPv6 agrave un autre

Cest dans cette situation que lon monte un tunnel

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone) 19

Pour ecirctre capable dutiliser IPv6 vous devrez avoir un noyau qui le supporte Il y a beaucoup de bonsdocuments qui expliquent la maniegravere de reacutealiser cela Mais tout se reacutesume agrave quelques eacutetapes

Reacutecupeacuterer une distribution Linux reacutecente avec une glibc convenablebull Reacutecupeacuterer alors les sources agrave jour du noyaubull

Si tout cela est fait vous pouvez alors poursuivre en compilant un noyau supportant lIPv6

Aller dans usrsrclinux et tapez bull make menuconfigbull Choisir Networking Optionsbull Seacutelectionner The IPv6 protocol IPv6 enable EUI-64 token format IPv6disable provider based addresses

bull

ASTUCE Ne compiler pas ces options en tant que module Ceci ne marchera souvent pas bien

En dautres termes compilez IPv6 directement dans votre noyau Vous pouvez alors sauvegarder votreconfiguration comme dhabitude et entreprendre la compilation de votre noyau

ASTUCE Avant de faire cela modifier votre Makefile comme suit EXTRAVERSION = -x --gt EXTRAVERSION = -x-IPv6

Il y a beaucoup de bonnes documentations sur la compilation et linstallation dun noyau Cependant cedocument ne traite pas de ce sujet Si vous rencontrez des problegravemes agrave ce niveau allez et recherchez dans ladocumentation des renseignements sur la compilation du noyau Linux correspondant agrave vos propresspeacutecifications

Le fichier usrsrclinuxREADME peut constituer un bon deacutepart Apregraves avoir reacutealiseacute tout ceci etredeacutemarreacute avec votre nouveau noyau flambant neuf vous pouvez lancer la commande sbinifconfig -a etnoter un nouveau peacuteripheacuterique sit0 SIT signifie Transition Simple dInternet (Simple Internet Transition)Vous pouvez vous auto complimenter vous avez maintenant franchi une eacutetape importante vers IP laprochaine geacuteneacuteration -)

Passons maintenant agrave leacutetape suivante Vous voulez connecter votre hocircte ou peut-ecirctre mecircme tout votre reacuteseauLAN agrave dautres reacuteseaux IPv6 Cela pourrait ecirctre la dorsale IPv6 ltlt 6bone gtgt qui a eacuteteacute speacutecialement mise enplace dans ce but particulier

Supposons que vous avez le reacuteseau IPv6 suivant 3ffe6046864 et que vous vouliez le connecter agraveune dorsale IPv6 ou agrave un ami Notez sil vous plaicirct que la notation sous-reacuteseau 64 est similaire agrave celle desadresses IPv4

Votre adresse IPv4 est 14510024181 et le routeur 6bone a ladresse IPv4 14510015

ip tunnel add sixbone mode sit remote 14510015 [local 14510024181 ttl 225] ip link set sixbone up ip addr add 3FFE60467296 dev sixbone ip route add 3ffe015 dev sixbone

Discutons de ceci Dans la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique appeleacute sixbone Nous lui avonsdonneacute lattribut sit (mode sit) (qui est le tunnel IPv6 dans IPv4) et nous lui avons dit ougrave aller (remote)et dougrave nous venions (local) TTL est configureacute agrave son maximum 255

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

20 Tunnel IPv6

Ensuite nous avons rendu le peacuteripheacuterique actif (up) Apregraves cela nous avons ajouteacute notre propre adressereacuteseau et configureacute une route pour 3ffe15 (qui est actuellement la totaliteacute du 6bone) agrave travers le tunnelSi la machine sur laquelle vous mettez en place tout ceci est votre passerelle IPv6 ajoutez alors les lignessuivantes

echo 1 gtprocsysnetipv6confallforwarding usrlocalsbinradvd

En derniegravere instruction radvd est un deacutemon dannonce comme zebra qui permet de supporter lesfonctionnaliteacutes dautoconfiguration dIPv6 Recherchez le avec votre moteur de recherche favori Vous pouvezveacuterifier les choses comme ceci

sbinip -f inet6 addr

Si vous arrivez agrave avoir radvd tournant sur votre passerelle IPv6 et que vous deacutemarrez une machine avec IPv6sur votre reacuteseau local vous serez ravi de voir les beacuteneacutefices de lautoconfiguration IPv6

sbinip -f inet6 addr1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue inet6 1128 scope host

3 eth0 ltBROADCASTMULTICASTUPgt mtu 1500 qdisc pfifo_fast qlen 100inet6 3ffe6046850544cfffe01e3d664 scope global dynamicvalid_lft forever preferred_lft 604646sec inet6 fe8050544cfffe01e3d610 scope link

Vous pouvez maintenant configurer votre serveur de noms pour les adresses IPv6 Le type A a un eacutequivalentpour IPv6 AAAA Leacutequivalent de in-addrarpa est ip6int Il y a beaucoup dinformationsdisponibles sur ce sujet

Il y a un nombre croissant dapplications IPv6 disponibles comme le shell seacutecuriseacute telnet inetd le navigateurMozilla le serveur web Apache et beaucoup dautres Mais ceci est en dehors du sujet de ce document deroutage -)

Du cocircteacute Cisco la configuration ressemblera agrave ceci

interface Tunnel1description IPv6 tunnelno ip addressno ip directed-broadcastipv6 address 3FFE60467196tunnel source Serial0tunnel destination 14510024181tunnel mode ipv6ipipv6 route 3FFE6046864 Tunnel1

Si vous navez pas un Cisco agrave votre disposition essayez un des prestataires de tunnel IPv6 disponible surInternet Ils sont precircts agrave configurer leur Cisco avec un tunnel suppleacutementaire pour vous le plus souvent aumoyen dune agreacuteable interface web Cherchez ipv6 tunnel broker avec votre moteur de recherche favori

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers InternetA ce jour deux versions dIPSEC sont disponibles pour Linux FreeSWAN qui fucirct la premiegravereimpleacutementation majeure existe pour les noyaux Linux 22 et 24 Ce projet a un site officiel et eacutegalement unsite non officiel qui est bien maintenu FreeSWAN na jamais eacuteteacute inteacutegreacute dans le noyau pour un certainnombre de raisons Celle qui est la plus souvent mentionneacutee concerne un problegraveme politique avec les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers Internet 21

ameacutericains travaillant sur la cryptographie qui freinent son exportabiliteacute De plus la mise en place deFreeSWAN dans le noyau Linux est deacutelicate ce qui nen fait pas un bon candidat pour une reacuteelle inteacutegration

De plus des personnes se sont inquieacuteteacutees de la qualiteacute du code Pour configurer FreeSWAN de nombreusesdocumentations sont disponibles

Une impleacutementation native dIPSEC est preacutesente dans le noyau agrave partir de la version Linux 2547 Elle a eacuteteacuteeacutecrite par Alexey Kuznetsov et Dave Miller qui se sont inspireacutes des travaux du groupe USAGI IPv6 Aveccette fusion les CryptoAPI de James Morris deviennent eacutegalement une partie du noyau qui fait ainsi vraimentdu cryptage

Ce HOWTO ne documente que la version 25 dIPSEC FreeSWAN est recommandeacute pour linstant pour lesutilisateurs de Linux 24 Faicirctes cependant attention dans la mesure ougrave sa configuration est diffeacuterente delIPSEC natif Il y a maintenant une mise agrave jour qui permet au code FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux

A partir du noyau 2549 IPSEC fonctionne sans lajout de mises agrave jour suppleacutementaires

Note Les outils de lespace utilisateur sont disponibles ici Il y a plusieurs programmesdisponibles celui qui est proposeacute dans le lien est baseacute sur Racoon

Lors de la compilation du noyau soyez sucircr dactiver PF_KEY AH et tous les eacuteleacutements deCryptoAPI

Avertissement

Lauteur de ce chapitre est un complet nigaud en ce qui concerne IPSEC Si vous trouvez les ineacutevitableserreurs envoyez un courrier eacutelectronique agrave Bert Hubert ltahuds9anlgt

Tout dabord nous montrerons comment configurer manuellement une communication seacutecuriseacutee entre deuxhocirctes Une grande partie de ce processus peut ecirctre automatiseacutee mais nous le ferons ici agrave la main afin decomprendre ce qui se passe sous le capot

Passez agrave la section suivante si la seule gestion automatique des cleacutes vous inteacuteresse Soyez cependant conscientque la compreacutehension de la gestion manuelle des cleacutes est utile

Introduction sur la gestion manuelle des cleacutes

IPSEC est un sujet compliqueacute De nombreuses informations sont disponibles en ligne Ce HOWTO seconcentrera sur la mise en place et agrave lexplication des principes de base Tous les exemples sont baseacutes surRacoon dont le lien est donneacute au-dessus

Note Certaines configurations iptables rejettent les paquets IPSEC Pour transmettreIPSEC utilisez iptables -A xxx -p 50 -j ACCEPT et iptables -A xxx -p 51 -j ACCEPT

IPSEC offre une version seacutecuriseacutee de la couche IP (Internet Protocol) La seacutecuriteacute dans ce contexte prend deuxformes lencryptage et lauthentification Une vision naiumlve de la seacutecuriteacute ne propose que le cryptage On peutcependant montrer facilement que cest insuffisant il se peut que vous ayez une communication crypteacutee maisvous navez aucune garantie que lhocircte distant est bien celui auquel vous pensez

IPSEC supporte Encapsulated Security Payload (Encapsulation Seacutecuriseacutee de la Charge utile) (ESP) pour lecryptage et Authentication Header (Entecircte dAuthentification) (AH) pour authentifier le partenaire distantVous pouvez configurer les deux ou deacutecider de ne faire que lun des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

22 Introduction sur la gestion manuelle des cleacutes

ESP et AH sappuient tous les deux sur des Associations de Seacutecuriteacute (Security Associations (SA)) UneAssociation de Seacutecuriteacute (SA) consiste en une source une destination et une instruction Un exemple simpledAssociation de Seacutecuriteacute (SA) pour lauthentification peut ressembler agrave ceci

add 100011 1000216 ah 15700 -A hmac-md5 1234567890123456

Ceci indique que le trafic allant de 100011 vers 1000216 a besoin dun En-tecircte dAuthentification(AH) qui peut ecirctre signeacute en utilisant HMAC-MD et le secret 1234567890123456 Cette instruction estrepeacutereacutee par lidentificateur SPI (Security Parameter Index)15700 dont nous parlerons plus par la suite Lepoint inteacuteressant agrave propos des Associations de Seacutecuriteacute (SA) est quelles sont symeacutetriques Les deux coteacutes dela conversation partagent exactement la mecircme Association de Seacutecuriteacute (SA) qui nest pas recopieacutee sur lhocirctedistant Notez cependant quil ny a pas de regravegles dinversion automatique Cette Association de Seacutecuriteacute(SA) deacutecrit une authentification possible de 100011 vers 1000216 Pour un trafic bidirectionneldeux Associations de Seacutecuriteacute (SA) sont neacutecessaires

Un exemple dAssociation de Seacutecuriteacute (SA) pour le cryptage ESP

add 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012

Ceci signifie que le trafic allant de 100011 vers 1000216 est chiffreacute en utilisant 3des-cbc avec lacleacute 123456789012123456789012 Lidentificateur SPI est 15701

Jusquici nous avons vu que les Associations de Seacutecuriteacute (SA) deacutecrivent les instructions possibles mais pas lapolitique qui indique quand ces SA doivent ecirctre utiliseacutees En fait il pourrait y avoir un nombre arbitraire deSA presques identiques ne se diffeacuterenciant que par les identificateurs SPI Entre parenthegraveses SPI signifieSecurity Parameter Index ou Index du Paramegravetre de Seacutecuriteacute en franccedilais Pour faire vraiment du cryptagenous devons deacutecrire une politique Cette politique peut inclure des choses comme utiliser ipsec sil estdisponible ou rejeter le trafic agrave moins que vous ayez ipsec

Une Politique de Seacutecuriteacute (Security Policy (SP)) typique ressemble agrave ceci

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Si cette configuration est appliqueacutee sur lhocircte 1000216 cela signifie que tout le trafic allant vers100011 doit ecirctre encrypteacute et encapsuleacute dans un en-tecircte dauthentification AH Notez que ceci ne deacutecritpas quelle SA sera utiliseacutee Cette deacutetermination est un exercice laisseacute agrave la charge du noyau

En dautres termes une Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons une Association de Seacutecuriteacutedeacutecrit COMMENT nous le voulons

Les paquets sortants sont eacutetiqueteacutes avec le SPI SA (le comment) que le noyau utilise pour lencryptage etlauthentification et lhocircte distant peut consulter les instructions de veacuterification et de deacutecryptagecorrespondantes

Ce qui suit est une configuration tregraves simple permettant le dialogue de lhocircte 1000216 vers lhocircte100011 en utilisant lencryptage et lauthentification Notez que le trafic de retour de cette premiegravereversion est en clair et que cette configuration ne doit pas ecirctre deacuteployeacutee

Sur lhocircte 1000216

sbinsetkey -f

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Introduction sur la gestion manuelle des cleacutes 23

add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456 add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Sur lhocircte 100011 nous donnons les mecircmes Associations de Seacutecuriteacute (SA) Nous ne donnons pas dePolitique de Seacutecuriteacute

sbinsetkey -fadd 1000216 100011 ah 24500 -A hmac-md5 1234567890123456add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

Avec la mise en place de la configuration ci-dessus (ces fichiers peuvent ecirctre exeacutecuteacutes si setkey est installeacutedans sbin) la commande ping 100011 exeacutecuteacutee sur 1000216 va donner la sortie suivante avec tcpdump

223752 1000216 gt 100011 AH(spi=0x00005fb4seq=0xa) ESP(spi=0x00005fb5seq=0xa) (DF)223752 100011 gt 1000216 icmp echo reply

Notez que le paquet de retour provenant de 100011 est en effet complegravetement visible Le paquet ping eacutemispar 1000216 ne peut eacutevidemment pas ecirctre lu par tcpdump mais celui-ci montre lIndex du Paramegravetre deSeacutecuriteacute (SPI) de lAH ainsi que lESP qui indique agrave 100011 comment veacuterifier lauthenticiteacute de notre paquetet comment le deacutecrypter

Quelques eacuteleacutements doivent ecirctre mentionneacutes La configuration ci-dessus est proposeacutee dans de nombreuxexemples dIPSEC mais elle est tregraves dangereuse Le problegraveme est quelle contient la politique indiquant agrave1000216 comment traiter les paquets allant vers 100011 et comment 100011 doit traiter ces paquetsmais ceci nINDIQUE pas agrave 100011 de rejeter le trafic non authentifieacute et non encrypteacute

Nimporte qui peut maintenant inseacuterer des donneacutees spoofeacutees (NdT usurpeacutees) et entiegraverement non crypteacuteesque 10001 acceptera Pour remeacutedier agrave ceci nous devons avoir sur 100011 une Politique de Seacutecuriteacute pourle trafic entrant

sbinsetkey -f spdadd 1000216 100011 any -P IN ipsec esptransportrequire ahtransportrequire

Ceci indique agrave 100011 que tout le trafic venant de 1000216 neacutecessite davoir un ESP et AH valide

Maintenant pour compleacuteter cette configuration nous devons eacutegalement renvoyer un trafic encrypteacute etauthentifieacute La configuration complegravete sur 1000216 est la suivante

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

24 Introduction sur la gestion manuelle des cleacutes

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire ahtransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 100011 1000216 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire ahtransportrequire

Notez que dans cet exemple nous avons utiliseacute des cleacutes identiques pour les deux directions du trafic Cecinest cependant en aucun cas exigeacute

Pour examiner la configuration que nous venons de creacuteer exeacutecuter setkey -D qui montre les SA ou setkey-DP qui montre les politiques configureacutees

Gestion automatique des cleacutes

Dans la section preacuteceacutedente lencryptage eacutetait configureacute pour utiliser simplement le partage de secrets Endautres termes pour rester seacutecuriseacute nous devons transfeacuterer la configuration de notre encryptage agrave travers untunnel seacutecuriseacute Si nous avons configureacute lhocircte distant par telnet nimporte quel tiers pourrait avoir prisconnaissance de notre secret partageacute et ainsi notre configuration ne serait plus sucircre

De plus puisque le secret est partageacute ce nest pas un secret Lhocircte distant ne peut pas en faire grand chosemais nous devons ecirctre sucircrs dutiliser un secret diffeacuterent pour les communications avec tous nos partenairesCeci neacutecessite un grand nombre de cleacutes Pour 10 partenaires nous devrions avoir au moins 50 secretsdiffeacuterents

En plus du problegraveme des cleacutes symeacutetriques le renouvellement des cleacutes est eacutegalement neacutecessaire Si un tierseacutecoute suffisamment le trafic il peut ecirctre en position de retrouver la cleacute par reacutetro ingeacutenierie On peut senpreacutemunir en modifiant la cleacute de temps en temps mais ce processus a besoin decirctre automatiseacute

Un autre problegraveme est que la gestion manuelle des cleacutes deacutecrite au-dessus impose de deacutefinir preacuteciseacutement lesalgorithmes et les longueurs de cleacutes utiliseacutees ce qui neacutecessite une grande coordination avec lhocircte distant Il

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestion automatique des cleacutes 25

serait preacutefeacuterable davoir la capaciteacute agrave deacutecrire une politique des cleacutes plus large comme par exemple Nouspouvons faire du 3DES et du Blowfish avec les longueurs de cleacutes suivantes

Pour reacutesoudre ces problegravemes IPSEC fournit lEchange de Cleacute sur Internet (Internet Key Echange (IKE))permettant dautomatiser leacutechange de cleacutes geacuteneacutereacutees aleacuteatoirement Ces cleacutes sont transmises en utilisant unetechnologie dencryptage asymeacutetrique neacutegocieacutee

Limpleacutementation IPSEC de Linux 25 fonctionne avec le deacutemon IKE KAME racoon Depuis le 9novembre la version de racoon preacutesente la distribution iptools dAlexey peut ecirctre compileacutee en supprimant aupreacutealable include ltnetroutehgt dans deux fichiers Je fournis une version preacutecompileacutee

Note LEchange de Cleacute sur Internet (IKE) doit avoir accegraves au port UDP 500 Soyez sucircr queiptables ne le bloque pas

Theacuteorie

Comme expliqueacute avant la gestion automatique des cleacutes reacutealise beaucoup dopeacuterations pour nousSpeacutecifiquement il creacutee agrave la voleacutee les Associations de Seacutecuriteacute Il ne configure cependant pas la politique pournous ce qui est le fonctionnement attendu

Donc pour beacuteneacuteficier de IKE configurez une politique mais ne fournissez aucune Association de Seacutecuriteacute Sile noyau deacutecouvre quil y a une politique IPSEC mais pas dAssociation de Seacutecuriteacute il va le notifier au deacutemonIKE qui va chercher agrave en neacutegocier une

De nouveau rappelons que la Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons tandis que lAssociation deSeacutecuriteacute deacutecrit COMMENT nous le voulons Lutilisation de la gestion automatique des cleacutes nous permet dene speacutecifier que ce que nous voulons

Exemple

Kame racoon possegravede un grand nombre doptions dont la plupart des valeurs par deacutefaut sont corrects nousnavons donc pas besoin de les modifier Comme nous lavons dit auparavant lopeacuterateur doit deacutefinir unePolitique de Seacutecuriteacute mais pas dAssociations de Seacutecuriteacute Nous laissons cette neacutegociation au deacutemon IKE

Dans cet exemple 10001 et 1000216 sont encore une fois sur le point deacutetablir des communicationsseacutecuriseacutees mais cette fois avec laide du deacutemon racoon Par soucis de simplification cette configurationutilisera des cleacutes preacute-partageacutees les redouteacutes secrets partageacutes Nous discuterons des certificats X509 dans unesection agrave part Voir la section intituleacutee Gestion automatique des cleacutes en utilisant les certificats X509gt

Nous allons agrave peu pregraves rester fidegravele agrave la configuration par deacutefaut qui est identique sur les deux hocirctes

path pre_shared_key usrlocaletcracoonpsktxt

remote anonymous exchange_mode aggressivemain doi ipsec_doi situation identity_only

my_identifier address

lifetime time 2 min secminhour initial_contact on proposal_check obey obey strict or claim

proposal encryption_algorithm 3des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

26 Theacuteorie

hash_algorithm sha1 authentication_method pre_shared_key dh_group 2

sainfo anonymous pfs_group 1 lifetime time 2 min encryption_algorithm 3des authentication_algorithm hmac_sha1 compression_algorithm deflate

Beaucoup de paramegravetres Je pense que lon peut encore en supprimer pour se rapprocher de la configurationpar deacutefaut Remarquons ici quelques eacuteleacutements notables Nous avons configureacute deux sections anonymous cequi convient pour tous les hocirctes distants Ceci va ainsi faciliter les configurations suppleacutementaires Il nest pasneacutecessaire davoir de sections speacutecifiques agrave une machine particuliegravere agrave moins que vous ne le vouliez vraiment

De plus la configuration preacutecise que nous nous identifions gracircce agrave notre adresse IP (my_identifier address) etque nous pouvons faire du 3des sha1 et que nous utiliserons une cleacute preacute-partageacutee se trouvant dans psktxt

Dans le fichier psktxt nous avons configureacute deux entreacutees qui sont diffeacuterentes suivant les hocirctes Sur100011

1000216 password2

Sur 1000216

100011 password2

Soyez sucircr que ces fichiers sont la proprieacuteteacute de root et quils ont le mode 0600 Dans le cas contraire racoonne pourra faire confiance agrave leur contenu Notez que ces fichiers sont symeacutetriques lun de lautre

Nous sommes maintenant precirct agrave configurer notre politique qui est assez simple Sur lhocircte 1000216

sbinsetkey -fflushspdflush

spdadd 1000216 100011 any -P out ipsec esptransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

spdadd 100011 1000216 any -P out ipsec esptransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire

Noter que ces politiques sont encore une fois symeacutetriques

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exemple 27

Nous sommes maintenant precirct agrave lancer racoon Une fois lanceacute au moment ougrave nous essayons une connexionun telnet depuis 100011 vers 1000216 ou linverse racoon aura deacutemarreacute la neacutegociation

121844 INFO isakmpc1689isakmp_post_acquire() IPsec-SA request for 100011 queued due to no phase1 found121844 INFO isakmpc794isakmp_ph1begin_i() initiate new phase 1 negotiation 1000216[500]lt=gt100011[500]121844 INFO isakmpc799isakmp_ph1begin_i() begin Aggressive mode121844 INFO vendoridc128check_vendorid() received Vendor ID KAMEracoon121844 NOTIFY oakleyc2037oakley_skeyid() couldnt find the proper pskey try to get one by the peers address121844 INFO isakmpc2417log_ph1established() ISAKMP-SA established 1000216[500]-100011[500] spi044d25dede78a4d1ff01e5b4804f0680121845 INFO isakmpc938isakmp_ph2begin_i() initiate new phase 2 negotiation 1000216[0]lt=gt100011[0]121845 INFO pfkeyc1106pk_recvupdate() IPsec-SA established ESPTransport 100011-gt1000216 spi=44556347(0x2a7e03b)121845 INFO pfkeyc1318pk_recvadd() IPsec-SA established ESPTransport 1000216-gt100011 spi=15863890(0xf21052)

Lexeacutecution de la commande setkey -D qui nous montre les Associations de Seacutecuriteacute nous indique quellessont en effet preacutesentes

1000216 100011 esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000) E 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04 A hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99 seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last Nov 11 122912 2002 hard 0(s) soft 0(s) current 304(bytes) hard 0(bytes) soft 0(bytes) allocated 3 hard 0 soft 0 sadb_seq=1 pid=17112 refcnt=0100011 1000216 esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000) E 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a A hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last hard 0(s) soft 0(s) current 231(bytes) hard 0(bytes) soft 0(bytes) allocated 2 hard 0 soft 0 sadb_seq=0 pid=17112 refcnt=0

Nous avons les Politiques de Seacutecuriteacute que nous avons nous-mecircme configureacutees

100011[any] 1000216[any] tcp in ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122912 2002 lifetime0(s) validtime0(s) spid=3616 seq=5 pid=17134 refcnt=31000216[any] 100011[any] tcp out ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122844 2002 lifetime0(s) validtime0(s) spid=3609 seq=4 pid=17134 refcnt=3

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

28 Exemple

Problegravemes et deacutefauts connus

Si cela ne marche pas veacuterifiez que tous les fichiers de configuration sont la proprieacuteteacute de root et quils nepeuvent ecirctre lus que par celui-ci Pour deacutemarrer racoon en avant-plan utilisez -F Pour le forcer agrave lire unfichier de configuration agrave la place de celui preacuteciseacute lors de la compilation utilisez -f Pour obtenir denombreux deacutetails ajouter loption log debug dans le fichier racoonconf

Gestion automatique des cleacutes en utilisant les certificats X509

Comme nous lavons dit avant lutilisation de secrets partageacutes est compliqueacutee car ils ne peuvent pas ecirctrefacilement partageacutes et une fois quils le sont ils ne sont plus secrets Heureusement nous avons latechnologie dencryptage asymmeacutetrique pour nous aider agrave reacutesoudre ce problegraveme

Si chaque participant dune liaison IPSEC creacutee une cleacute publique et priveacutee des communications seacutecuriseacuteespeuvent ecirctre mises en place par les deux parties en publiant leur cleacute publique et en configurant leur politique

Creacuteer une cleacute est relativement facile bien que cela exige un peu de travail Ce qui suit est baseacute sur loutilopenssl

Construire un certificat X509 pour votre hocircte

OpenSSL dispose dune importante infrastructure de gestions des clefs capable de geacuterer des clefs signeacutees ounon par une autoriteacute de certification Pour linstant nous avons besoin de court-circuiter toute cetteinfrastructure et de mettre en place une seacutecuriteacute de charlatan et de travailler sans autoriteacute de certification

Nous allons tout dabord creacuteer une requecircte de certificat (certificate request) pour notre hocircte appeleacute laptop

$ openssl req -new -nodes -newkey rsa1024 -sha1 -keyform PEM -keyout laptopprivate -outform PEM -out requestpem

Des questions nous sont poseacutees

Country Name (2 letter code) [AU]NLState or Province Name (full name) [Some-State]Locality Name (eg city) []DelftOrganization Name (eg company) [Internet Widgits Pty Ltd]Linux AdvancedRouting amp Traffic ControlOrganizational Unit Name (eg section) []laptopCommon Name (eg YOUR name) []bert hubertEmail Address []ahuds9anl

Please enter the following extra attributesto be sent with your certificate requestA challenge password []An optional company name []

Vous avez toute liberteacute quant aux reacuteponses Vous pouvez ou non mettre le nom dhocircte en fonction de vosbesoins de seacutecuriteacute Cest ce que nous avons fait dans cet exemple

Nous allons maintenant auto signer cette requecircte

$ openssl x509 -req -in requestpem -signkey laptopprivate -out laptoppublicSignature oksubject=C=NLL=DelftO=Linux Advanced Routing amp Traffic ControlOU=laptopCN=bert hubertEmail=ahuds9anl

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Problegravemes et deacutefauts connus 29

Getting Private key

Le fichier requestpem peut maintenant ecirctre eacutelimineacute

Reacutepeacutetez cette proceacutedure pour tous les hocirctes qui ont besoin dune cleacute Vous pouvez distribuer le fichier publicen toute impuniteacute mais garder le fichier private priveacute

Configuration et lancement

Une fois que nous avons les cleacutes publiques et priveacutees pour nos hocirctes nous pouvons indiquer agrave racoon de lesutiliser

Reprenons notre configuration preacuteceacutedente et les deux hocirctes 100011 (upstairs) et 1000216 (laptop)

Dans le fichier racoonconf preacutesent sur 100011 nous ajoutons

path certificate usrlocaletcracooncerts

remote 1000216 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

certificate_type x509 upstairspublic upstairsprivate

peers_certfile laptoppublic proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Ceci indique agrave racoon que les certificats se trouvent dans usrlocaletcracooncerts De plusil contient des eacuteleacutements speacutecifiques pour lhocircte distant 1000216

La ligne asn1dn indique agrave racoon que lidentification pour lhocircte local et distant doit ecirctre extraite des cleacutespubliques Ceci correspond agrave la ligne subject=C=NLL=DelftO=Linux Advanced Routing amp TrafficControlOU=laptopCN=bert hubertEmail=ahuds9anl donneacute au-dessus

La ligne certificate_type preacutecise lemplacement des cleacutes publiques et priveacutees locales La deacuteclarationpeers_certfile preacutecise agrave racoon que la cleacute publique de lhocircte distant se trouve dans le fichierlaptoppublic

La section proposal reste inchangeacutee par rapport agrave ce que nous avons vu plus tocirct agrave lexception deauthentification_method qui est maintenant rsasig ce qui indique lutilisation de cleacute RSA publiquepriveacuteepour lauthentification

La configuration ajouteacutee sur 1000216 est presque identique exception faite de lhabituelle symeacutetrie

path certificate usrlocaletcracooncerts

remote 100011 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

30 Construire un certificat X509 pour votre hocircte

certificate_type x509 laptoppublic laptopprivate

peers_certfile upstairspublic

proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Maintenant que nous avons ajouteacute ces eacuteleacutements sur les deux hocirctes la seule chose qui reste agrave faire est de mettreen place les fichiers contenant les cleacutes La machine upstairs doit avoir les fichiers upstairsprivateupstairspublic et laptoppublic placeacutes dans usrlocaletcracooncerts Soyez sucircrque le reacutepertoire est la proprieacuteteacute de root et quil possegravede les droits 0700 Dans le cas contraire racoon pourraitrefuser de lire le contenu de ce reacutepertoire

La machine laptop doit avoir les fichiers upstairsprivate upstairspublic etlaptoppublic placeacutes dans usrlocaletcracooncerts Autrement dit chaque hocircte doitavoir ses propres cleacutes publique et priveacutee et de plus la cleacute publique de lhocircte distant

Veacuterifiez que la Politique de Seacutecuriteacute est en place (exeacutecutez la commande spdadd vue dans la section intituleacuteeExemplegt) Lancez alors racoon et tout devrait fonctionner

Comment configurer des tunnels seacutecuriseacutes

Pour configurer des communications seacutecuriseacutees avec un hocircte distant nous devons eacutechanger des cleacutespubliques Bien quil ne soit pas neacutecessaire que la cleacute publique reste secregravete il est important decirctre sucircr quecette cleacute na pas eacuteteacute modifieacutee En dautres termes vous devez ecirctre certain quil ny a pas de man in the middle[NdT man in the middle est le nom dune attaque qui consiste agrave se placer entre lhocircte eacutemetteur et lhocircte dedestination]

Pour faciliter ceci OpenSSL propose la commande digest

$ openssl dgst upstairspublic MD5(upstairspublic)= 78a3bddafb4d681c1ca8ed4d23da4ff1

La seule chose que nous devons faire est de veacuterifier que notre partenaire distant voit la mecircme empreinte Cecipeut ecirctre effectueacute en se rencontrant physiquement ou par teacuteleacutephone en sassurant que le numeacutero de teacuteleacutephonede lhocircte distant na pas eacuteteacute envoyeacute dans le mecircme courrier eacutelectronique que celui qui contenait la cleacute

Une autre maniegravere de faire ceci est dutiliser un tiers de confiance qui exeacutecute le service dautoriteacute decertification (Certificate Authority) Cette autoriteacute de certification (CA) peut alors signer votre cleacute celle quenous avons nous-mecircme creacuteeacute au-dessus

tunnels IPSEC

Jusquici nous navons seulement consideacutereacute IPSEC dans le mode appeleacute transport ougrave les points terminauxcomprennent directement IPSEC Comme ceci nest pas souvent le cas il peut ecirctre neacutecessaire davoir desrouteurs qui eux seuls comprennent IPSEC et qui reacutealisent le travail pour les hocirctes se trouvant derriegravere euxCeci est appeleacute le mode tunnel

Configurer ceci est tregraves rapide Pour tunneler tout le trafic vers 1301610016 agrave partir de 1000216 via100011 nous eacuteditons ce qui suit sur 1000216

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration et lancement 31

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P out ipsec esptunnel1000216-100011require

Notez que loption -m tunnel est vitale Ceci configure tout dabord une Association de Seacutecuriteacute ESP entreles points terminaux de notre tunnel agrave savoir 1000216 et 100011

Nous allons ensuite reacuteellement configurer le tunnel On doit indiquer au noyau dencrypter tout le trafic de1000024 vers 13016100 De plus ce trafic doit ecirctre envoyeacute vers 100011

100011 a eacutegalement besoin decirctre configureacute

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P in ipsec esptunnel1000216-100011require

Notez que ceci est exactement identique agrave lexception du changement de -P out en -P in Les exemplespreacuteceacutedents nont configureacute le trafic que dans un seul sens Il est laisseacute comme exercice au lecteur le soin decompleacuteter lautre moitieacute du tunnel

Le nom de proxy ESP est eacutegalement donneacute pour cette configuration ce qui est un peu plus clair

Note Le tunnel IPSEC a besoin davoir la transmission IP activeacutee dans le noyau

Autre logiciel IPSEC

Thomas Walpuski preacutecise quil a eacutecrit une mise agrave jour pour que OpenBSD isakpmd puisse fonctionner avecLinux 25 IPSEC De plus la repository principale CVS de isakpmd contient maintenant le code Des notessont disponibles sur cette page

isakpmd est diffeacuterent de racoon mentionneacute au-dessus mais de nombreuses personnes lappreacutecient Il peut ecirctretrouveacute ici Dautres eacuteleacutements de lecture sur le CVS dOpenBSD ici Thomas a eacutegalement creacuteeacute un tarball pourceux qui ne sont pas habitueacutes agrave CVS ou patch

De plus des mises agrave jour sont disponibles pour permettre aux outils FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux 25 Vous pourrez les trouver ici

Interopeacuterabiliteacute dIPSEC avec dautres systegravemes

FIXME Ecrire ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

32 tunnels IPSEC

Windows

Andreas Jellinghaus ltajdungeoninkadegt rapporte win2k cela marche preacute-partage de cleacute et ladresse ippour lauthentification (je ne pense pas que windows supporte fdqn ou userfdqn) Les certificats devraienteacutegalement marcher mais cela na pas eacuteteacute essayeacute

Check Point VPN-1 NG

Peter Bieringer rapporte

Voici des reacutesultats (seul le mode tunnel a eacuteteacute testeacute auth=SHA1) DES ok 3DES ok AES-128 ok AES-192 non supporteacute par CP VPN-1 AES-256 ok CAST non supporteacute par le noyau Linux utiliseacute

Version Testeacutee FP4 aka R54 aka wAI

Plus dinformations ici

Chapitre 8 Routage multidistribution (multicast)FIXME Pas de reacutedacteur

Le Multicast-HOWTO est (relativement) ancien De ce fait il peut ecirctre impreacutecis ou induire en erreur agravecertains endroits

Avant que vous ne puissiez faire du routage multidistribution le noyau Linux a besoin decirctre configureacute poursupporter le type de routage multidistribution que vous voulez faire Ceci agrave son tour exige une deacutecision quantau choix du protocole de routage multidistribution que vous vous preacuteparez agrave utiliser Il y a essentiellementquatre types ltlt communs gtgt de protocoles DVMRP (la version multidistribution du protocole RIP unicast)MOSPF (la mecircme chose mais pour OSPF) PIM-SM (Protocol Independant Multicasting - Sparse Mode) quisuppose que les utilisateurs de nimporte quel groupe de multidistribution sont disperseacutes plutocirct que regroupeacutes)et PIM-DM (le mecircme mais Dense Mode) qui suppose quil y aura un regroupement significatif des utilisateursdun mecircme groupe de multidistribution

On pourra noter que ces options napparaissent pas dans le noyau Linux Ceci sexplique par le fait que leprotocole lui-mecircme est geacutereacute par une application de routage comme Zebra mrouted ou pind Cependant vousdevez avoir une bonne ideacutee de ce que vous allez utiliser de maniegravere agrave seacutelectionner les bonnes options dans lenoyau

Pour tout routage multidistribution vous avez forceacutement besoin de seacutelectionner les options multicastinget multicasting routing Ceci est suffisant pour DVMRP et MOSPF Dans le cas de PIM vous devezeacutegalement valider les options PIMv1 ou PIMv2 suivant que le reacuteseau que vous connectez utilise la version 1ou 2 du protocole PIM

Une fois que tout cela a eacuteteacute reacutealiseacute et que votre nouveau noyau a eacuteteacute compileacute vous verrez au deacutemarrage queIGMP est inclus dans la liste des protocoles IP Celui-ci est un protocole permettant de geacuterer les groupesmultidistribution Au moment de la reacutedaction Linux ne supportait que les versions 1 et 2 de IGMP bien quela version 3 existe et ait eacuteteacute documenteacutee Ceci ne va pas vraiment nous affecter dans la mesure ougrave IGMPv3 estencore trop reacutecent pour que ses fonctionnaliteacutes suppleacutementaires soient largement utiliseacutees Puisque IGMP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 8 Routage multidistribution (multicast) 33

soccupe des groupes seules les fonctionnaliteacutes preacutesentes dans la plus simple version de IGMP geacuterant ungroupe entier seront utiliseacutees IGMPv2 sera utiliseacute dans la plupart des cas bien que IGMPv1 puisse encoreecirctre rencontreacute

Jusque-lagrave cest bon Nous avons activeacute la multidistribution Nous devons dire au noyau de lutiliserconcregravetement Nous allons donc deacutemarrer le routage Ceci signifie que nous ajoutons un reacuteseau virtuel demultidistribution agrave la table du routeur

ip route add 2240004 dev eth0

(En supposant bien sucircr que vous diffusez agrave travers eth0 Remplacez-le par le peacuteripheacuterique de votre choix sineacutecessaire)

Maintenant dire agrave Linux de transmettre les paquets

echo 1 gt procsysnetipv4ipamplowbarforward

Arriveacute ici il se peut que vous vous demandiez si ceci va faire quelque chose Donc pour tester notreconnexion nous pinguons le groupe par deacutefaut 224001 pour voir si des machines sont preacutesentesToutes les machines du reacuteseau local avec la multidistribution activeacutee DEVRAIENT reacutepondre et aucune autreVous remarquerez quaucune des machines qui reacutepondent ne le fait avec ladresse IP 224001 Quellesurprise ) Ceci est une adresse de groupe (une ltlt diffusion gtgt pour les abonneacutes) et tous les membres dugroupe reacutepondront avec leur propre adresse et non celle du groupe

ping -c 2 224001

Maintenant vous ecirctes precirct agrave faire du vrai routage multidistribution Bien en supposant que vous ayez deuxreacuteseaux agrave router lun vers lautre

(A continuer )

Chapitre 9 Gestionnaires de mise en file dattentepour ladministration de la bande passanteQuand je lai deacutecouvert cela ma VRAIMENT souffleacute Linux 22 contient toutes les fonctionnaliteacutes pour lagestion de la bande passante de maniegravere comparable agrave un systegraveme deacutedieacute de haut niveau

Linux deacutepasse mecircme ce que lATM et le Frame peuvent fournir

Afin deacuteviter toute confusion voici les regravegles utiliseacutees par tc pour la speacutecification de la bande passante

mbps = 1024 kbps = 1024 1024 bps =gt bytes (octetss)mbit = 1024 kbit =gt kilo bitsmb = 1024 kb = 1024 1024 b =gt byte (octet)mbit = 1024 kbit =gt kilo bit

En interne les nombres sont stockeacutes en bps (octets) et b (octet)

Mais tc utilise luniteacute suivante lors de laffichage des deacutebits

1Mbit = 1024 Kbit = 1024 1024 bps =gt octetss

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

34 Chapitre 9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en filedattente

Avec la mise en file dattente nous deacuteterminons la maniegravere dont les donneacutees sont ENVOYEES Il est importantde comprendre que nous ne pouvons mettre en forme que les donneacutees que nous transmettons

Avec la maniegravere dont Internet travaille nous navons pas de controcircle direct sur ce que les personnes nousenvoient Cest un peu comme votre boicircte aux lettres (physique ) chez vous Il ny a pas de faccedilon dinfluencerle nombre de lettres que vous recevez agrave moins de contacter tout le monde

Cependant lInternet est principalement baseacute sur TCPIP qui possegravede quelques fonctionnaliteacutes qui vontpouvoir nous aider TCPIP na pas daptitude agrave connaicirctre les performances dun reacuteseau entre deux hocirctes Ilenvoie donc simplement des paquets de plus en plus rapidement (ltlt slow start gtgt) et quand des paquetscommencent agrave se perdre il ralentit car il na plus la possibiliteacute de les envoyer En fait cest un peu plus eacuteleacutegantque cela mais nous en dirons plus par la suite

Cest comme si vous ne lisiez que la moitieacute de votre courrier en espeacuterant que vos correspondants arrecircteront devous en envoyer Agrave la diffeacuterence que ccedila marche sur Internet -)

Si vous avez un routeur et que vous souhaitez eacuteviter que certains hocirctes de votre reacuteseau aient des vitesses deteacuteleacutechargement trop grandes vous aurez besoin de mettre en place de la mise en forme de trafic sur linterfaceINTERNE de votre routeur celle qui envoie les donneacutees vers vos propres ordinateurs

Vous devez eacutegalement ecirctre sucircr que vous controcirclez le goulot deacutetranglement de la liaison Si vous avez unecarte reacuteseau agrave 100Mbit et un routeur avec un lien agrave 256kbit vous devez vous assurer que vous nenvoyez pasplus de donneacutees que ce que le routeur peut manipuler Autrement ce sera le routeur qui controcirclera le lien etqui mettra en forme la bande passante disponible Nous devons pour ainsi dire ltlt ecirctre le proprieacutetaire de la filedattente gtgt et ecirctre le lien le plus lent de la chaicircne Heureusement cest facilement reacutealisable

Gestionnaires de mise en file dattente simples sans classes

Comme nous lavons deacutejagrave dit la gestion de mise en file dattente permet de modifier la faccedilon dont les donneacuteessont envoyeacutees Les gestionnaires de mise en file dattente sans classes sont ceux qui en gros acceptent lesdonneacutees et qui ne font que les reacuteordonner les retarder ou les jeter

Ils peuvent ecirctre utiliseacutes pour mettre en forme le trafic dune interface sans aucune subdivision Il estprimordial que vous compreniez cet aspect de la mise en file dattente avant de continuer sur les gestionnairesde mise en files dattente baseacutes sur des classes contenant dautres gestionnaires de mise en file dattente

Le gestionnaire le plus largement utiliseacute est de loin pfifoamplowbarfast qui est celui par deacutefaut Ceciexplique aussi pourquoi ces fonctionnaliteacutes avanceacutees sont si robustes Elles ne sont rien de plus ltlt quuneautre file dattente gtgt

Chacune de ces files dattente a ses forces et ses faiblesses Toutes nont peut-ecirctre pas eacuteteacute bien testeacutees

pfifoamplowbarfast

Cette file dattente comme son nom lindique premier entreacute premier sorti (First In First Out) signifie queles paquets ne subissent pas de traitements speacuteciaux En fait ce nest pas tout agrave fait vrai Cette file dattente atrois ltlt bandes gtgt A linteacuterieur de chacune de ces bandes des regravegles FIFO sappliquent Cependant tant quily a un paquet en attente dans la bande 0 la bande 1 ne sera pas traiteacutee Il en va de mecircme pour la bande 1 et labande 2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explication sur les files dattente et la gestion de la mise en file dattente 35

Le noyau prend en compte la valeur du champ Type de Service des paquets et prend soin dinseacuterer dans labande 0 les paquets ayant le bit ltlt deacutelai minimum gtgt activeacute

Ne pas confondre ce gestionnaire de mise en file dattente sans classes avec celui baseacute sur des classes PRIO Bien quils aient des comportements similaires pfifoamplowbarfast ne possegravede pas de classes et vous nepourrez pas y ajouter de nouveaux gestionnaires avec la commande tc

Paramegravetres amp usage

Vous ne pouvez pas configurer le gestionnaire pfifoamplowbarfast dans la mesure ougrave cest celui pardeacutefaut Voici sa configuration par deacutefaut

priomapDeacutetermine comment les prioriteacutes des paquets sont relieacutees aux bandes telles que deacutefinies par le noyauLa relation est eacutetablie en se basant sur loctet TOS du paquet qui ressemble agrave ceci

0 1 2 3 4 5 6 7+-----+-----+-----+-----+-----+-----+-----+-----+| | | || PRECEDENCE | TOS | MBZ || | | |+-----+-----+-----+-----+-----+-----+-----+-----+

Les quatre bits TOS (le champ TOS) sont deacutefinis comme suit

Binaire Deacutecimal Signification-----------------------------------------1000 8 Minimise le Deacutelai (Minimize delay) (md)0100 4 Maximalise le Deacutebit (Maximize throughput) (mt)0010 2 Maximalise la Fiabiliteacute (Maximize reliability) (mr)0001 1 Minimalise le Coucirct Moneacutetaire (Minimize monetary cost) (mmc)0000 0 Service Normal

Comme il y a 1 bit sur la droite de ces quatre bits la valeur reacuteelle du champ TOS est le double de lavaleur des bits TOS tcpdump -v -v fournit la valeur de tout le champ TOS et non pas seulementla valeur des quatre bits Cest la valeur que lon peut voir dans la premiegravere colonne du tableausuivant

TOS Bits Signification Prioriteacute Linux Bande------------------------------------------------------------------------0x0 0 Service Normal 0 Best Effort 10x2 1 Minimise le Coucirct Moneacutetaire (mmc) 1 Filler 20x4 2 Maximalise la Fiabiliteacute (mr) 0 Best Effort 10x6 3 mmc+mr 0 Best Effort 10x8 4 Maximalise le Deacutebit (mt) 2 Masse 20xa 5 mmc+mt 2 Masse 20xc 6 mr+mt 2 Masse 20xe 7 mmc+mr+mt 2 Masse 20x10 8 Minimise le Deacutelai (md) 6 Interactive 00x12 9 mmc+md 6 Interactive 00x14 10 mr+md 6 Interactive 00x16 11 mmc+mr+md 6 Interactive 00x18 12 mt+md 4 Int Masse 10x1a 13 mmc+mt+md 4 Int Masse 10x1c 14 mr+mt+md 4 Int Masse 10x1e 15 mmc+mr+mt+md 4 Int Masse 1

amplsqbNdT par flux de masse (bulk flow) il faut entendre ltlt gros flot de donneacutees transmises encontinu gtgt comme un transfert FTP A lopposeacute un flux interactif (interactive flow) correspond agravecelui geacuteneacutereacute par des requecirctes SSH]

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

36 pfifoamplowbarfast

Beaucoup de nombres La seconde colonne contient la valeur correspondante des quatre bits TOSsuivi de leur signification Par exemple 15 repreacutesente un paquet voulant un coucirct moneacutetaire minimalune fiabiliteacute maximum un deacutebit maximum ET un deacutelai minimum Jappellerai ceci un ltlt paquetHollandais gtgt

La quatriegraveme colonne liste la maniegravere dont le noyau Linux interpregravete les bits TOS en indiquant agravequelle prioriteacute ils sont relieacutes

La derniegravere colonne montre la carte des prioriteacutes par deacutefaut Sur la ligne de commande la carte desprioriteacutes ressemble agrave ceci

1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Ceci signifie par exemple que la prioriteacute 4 sera relieacutee agrave la bande numeacutero 1 La carte des prioriteacutesvous permet eacutegalement de lister des prioriteacutes plus grandes (gt 7) qui ne correspondent pas agrave unerelation avec le champ TOS mais qui sont configureacutees par dautres moyens

Le tableau suivant provenant de la RFC 1349 (agrave lire pour plus de deacutetails) indique comment lesapplications devraient configurer leurs bits TOS pour fonctionner correctement

TELNET 1000 (minimise le deacutelai)FTP Controcircle 1000 (minimise le deacutelai) Donneacutees 0100 (maximalise le deacutebit)

TFTP 1000 (minimise le deacutelai)

SMTP phase de commande 1000 (minimise le deacutelai) phase DATA 0100 (maximalise le deacutebit)

Domain Name Service requecircte UDP 1000 (minimise le deacutelai) requecircte TCP 0000 Transfert de Zone 0100 (maximalise le deacutebit)

NNTP 0001 (minimise le coucirct moneacutetaire)

ICMP Erreurs 0000 Requecirctes 0000 (presque) Reacuteponses ltmecircme chose que requecirctegt (presque)

txqueuelenLa longueur de cette file dattente est fournie par la configuration de linterface que vous pouvez voiret configurer avec ifconfig et ip Pour configurer la longueur de la file dattente agrave 10 exeacutecuter ifconfig eth0 txqueuelen 10

Vous ne pouvez pas configurer ce paramegravetre avec tc

Filtre agrave seau de jetons (Token Bucket Filter)

Le Token Bucket Filter (TBF) est un gestionnaire de mise en file dattente simple Il ne fait que laisser passerles paquets entrants avec un deacutebit nexceacutedant pas une limite fixeacutee administrativement Lenvoi de courtesrafales de donneacutees avec un deacutebit deacutepassant cette limite est cependant possible

TBF est tregraves preacutecis et peu gourmand du point de vue reacuteseau et processeur Consideacuterez-le en premier si vousvoulez simplement ralentir une interface

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 37

Limpleacutementation TBF consiste en un tampon (seau) constamment rempli par des eacuteleacutements virtuelsdinformation appeleacutes jetons avec un deacutebit speacutecifique (deacutebit de jeton) Le paramegravetre le plus important dutampon est sa taille qui correspond au nombre de jetons quil peut stocker

Chaque jeton entrant laisse sortir un paquet de donneacutees de la file dattente de donneacutees et ce jeton est alorssupprimeacute du seau Lassociation de cet algorithme avec les deux flux de jetons et de donneacutees nous conduit agravetrois sceacutenarios possibles

Les donneacutees arrivent dans TBF avec un deacutebit EGAL au deacutebit des jetons entrants Dans ce cas chaquepaquet entrant a son jeton correspondant et passe la file dattente sans deacutelai

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS PETIT que le deacutebit des jetons Seule une partiedes jetons est supprimeacutee au moment ougrave les paquets de donneacutees sortent de la file dattente de sorte queles jetons saccumulent jusquagrave atteindre la taille du tampon Les jetons libres peuvent ecirctre utiliseacutespour envoyer des donneacutees avec un deacutebit supeacuterieur au deacutebit des jetons standard si de courtes rafales dedonneacutees arrivent

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS GRAND que le deacutebit des jetons Ceci signifie quele seau sera bientocirct deacutepourvu de jetons ce qui provoque larrecirct de TBF pendant un moment Cecisappelle ltlt une situation de deacutepassement de limite gtgt (overlimit situation) Si les paquets continuentagrave arriver ils commenceront agrave ecirctre eacutelimineacutes

bull

Le dernier sceacutenario est tregraves important car il autorise la mise en forme administrative de la bande passantedisponible pour les donneacutees traversant le filtre

Laccumulation de jetons autorise leacutemission de courtes rafales de donneacutees sans perte en situation dedeacutepassement de limite mais toute surcharge prolongeacutee causera systeacutematiquement le retard des paquets puisleur rejet

Notez que dans limpleacutementation reacuteelle les jetons correspondent agrave des octets et non des paquets

Paramegravetres amp usage

Mecircme si vous naurez probablement pas besoin de les changer TBF a des paramegravetres Dabord ceux toujoursdisponibles sont

limit or latencyLimit est le nombre doctets qui peuvent ecirctre mis en file dattente en attendant la disponibiliteacute dejetons Vous pouvez eacutegalement indiquer ceci dune autre maniegravere en configurant le paramegravetrelatency qui speacutecifie le temps maximal pendant lequel un paquet peut rester dans TBF Ce dernierparamegravetre prend en compte la taille du seau le deacutebit et sil est configureacute le deacutebit de crecircte(peakrate)

burstbuffermaxburstTaille du seau en octets Cest la quantiteacute maximale en octets de jetons dont on disposerasimultaneacutement En geacuteneacuteral plus les deacutebits de mise en forme sont importants plus le tampon doit ecirctregrand Pour 10 Mbits sur plateforme Intel vous avez besoin dun tampon dau moins 10 kilo-octets sivous voulez atteindre la limitation configureacutee

Si votre tampon est trop petit les paquets pourront ecirctre rejeteacutes car il arrive plus de jetons par topdhorloge que ne peut en contenir le tampon

mpuUn paquet de taille nulle nutilise pas une bande passante nulle Pour ethernet la taille minimale dunpaquet est de 64 octets LUniteacute Minimale de Paquet (Minimun Packet Unit) deacutetermine le nombreminimal de jetons agrave utiliser pour un paquet

rateLe paramegravetre de la vitesse Voir les remarques au-dessus agrave propos des limites

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

38 Filtre agrave seau de jetons (Token Bucket Filter)

Si le seau contient des jetons et quil est autoriseacute agrave se vider alors il le fait par deacutefaut avec une vitesse infinieSi ceci vous semble inacceptable utilisez les paramegravetres suivants

peakrateSi des jetons sont disponibles et que des paquets arrivent ils sont immeacutediatement envoyeacutes par deacutefaut et pour ainsi dire agrave ltlt la vitesse de la lumiegravere gtgt Cela peut ne pas vous convenir speacutecialement sivous avez un grand seau

Le deacutebit de crecircte (peak rate) peut ecirctre utiliseacute pour speacutecifier la vitesse agrave laquelle le seau est autoriseacute agravese vider Si tout se passe comme eacutecrit dans les livres ceci est reacutealiseacute en libeacuterant un paquet puis enattendant suffisamment longtemps pour libeacuterer le paquet suivant Le temps dattente est calculeacute demaniegravere agrave obtenir un deacutebit eacutegal au deacutebit de crecircte

Cependant eacutetant donneacute que la reacutesolution du minuteur (timer) dUNIX est de 10 ms et que les paquetsont une taille moyenne de 10 000 bits nous sommes limiteacutes agrave un deacutebit de crecircte de 1mbits

mtuminburstLe deacutebit de crecircte de 1Mbs ne sert pas agrave grand chose si votre deacutebit habituel est supeacuterieur agrave cettevaleur Un deacutebit de crecircte plus eacuteleveacute peut ecirctre atteint en eacutemettant davantage de paquets par top duminuteur ce qui a pour effet de creacuteer un second seau

Ce second bucket ne prend par deacutefaut quun seul paquet et nest donc en aucun cas un seau

Pour calculer le deacutebit de crecircte maximum multipliez le mtu que vous avez configureacute par 100 (ou plusexactement par HZ qui est eacutegal agrave 100 sur Intel et agrave 1024 sur Alpha)

Configuration simple

Voici une configuration simple mais tregraves utile

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Pourquoi est-ce utile Si vous avez un peacuteripheacuterique reacuteseau avec une grande file dattente comme un modemDSL ou un modem cacircble et que le dialogue se fasse agrave travers une interface rapide comme une interfaceethernet vous observerez que teacuteleacutecharger vers lamont (uploading) deacutegrade complegravetement linteractiviteacute

amplsqbNdT uploading deacutesigne une opeacuteration qui consiste agrave transfeacuterer des donneacutees ou des programmesstockeacutes dans un ordinateur local vers un ordinateur distant agrave travers un reacuteseau La traduction officielle pour ceterme est ltlt teacuteleacutechargement vers lamont gtgt On parle alors de voie montante Le downloading deacutesignelopeacuteration inverse (transfert dun hocircte distant vers lordinateur local) et est traduit par ltlt teacuteleacutechargement gtgtou ltlt teacuteleacutechargement vers laval gtgt On parle alors de la voie descendante]

Le teacuteleacutechargement vers lamont va en effet remplir la file dattente du modem Celle-ci est probablementENORME car cela aide vraiment agrave obtenir de bon deacutebit de teacuteleacutechargement vers lamont Cependant ceci nestpas forceacutement ce que voulez Vous ne voulez pas forceacutement avoir une file dattente importante de maniegravere agravegarder linteractiviteacute et pouvoir encore faire des choses pendant que vous envoyez des donneacutees

La ligne de commande au-dessus ralentit lenvoi de donneacutees agrave un deacutebit qui ne conduit pas agrave une mise en filedattente dans le modem La file dattente reacuteside dans le noyau Linux ougrave nous pouvons lui imposer une taillelimite

Modifier la valeur 220kbit avec votre vitesse de lien REELLE moins un petit pourcentage Si vous avez unmodem vraiment rapide augmenter un peu le paramegravetre burst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 39

Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing)

Stochastic Fairness Queueing (SFQ) est une impleacutementation simple de la famille des algorithmes de mise enfile dattente eacutequitable Cette impleacutementation est moins preacutecise que les autres mais elle neacutecessite aussi moinsde calculs tout en eacutetant presque parfaitement eacutequitable

Le mot cleacute dans SFQ est conversation (ou flux) qui correspond principalement agrave une session TCP ou un fluxUDP Le trafic est alors diviseacute en un grand nombre de jolies files dattente FIFO une par conversation Letrafic est alors envoyeacute dans un tourniquet donnant une chance agrave chaque session denvoyer leurs donneacutees touragrave tour

Ceci conduit agrave un comportement tregraves eacutequitable et empecircche quune seule conversation eacutetouffe les autres SFQest appeleacute ltlt Stochastic gtgt car il nalloue pas vraiment une file dattente par session mais a un algorithme quidivise le trafic agrave travers un nombre limiteacute de files dattente en utilisant un algorithme de hachage

A cause de ce hachage plusieurs sessions peuvent finir dans le mecircme seau ce qui peut reacuteduire de moitieacute leschances dune session denvoyer un paquet et donc reacuteduire de moitieacute la vitesse effective disponible Pourempecirccher que cette situation ne devienne importante SFQ change tregraves souvent son algorithme de hachagepour que deux sessions entrantes en collision ne le fassent que pendant un nombre reacuteduit de secondes

Il est important de noter que SFQ nest seulement utile que dans le cas ougrave votre interface de sortie est vraimentsatureacutee Si ce nest pas le cas il ny aura pas de files dattente sur votre machine Linux et donc pas deffetsPlus tard nous deacutecrirons comment combiner SFQ avec dautres gestionnaires de mise en files dattente pourobtenir le meilleur des deux mondes

Configurer speacutecialement SFQ sur linterface ethernet qui est en relation avec votre modem cacircble ou votrerouteur DSL est vain sans dautres mises en forme du trafic

Paramegravetres amp usage

SFQ est presque configureacute de base

perturbReconfigure le hachage une fois toutes les pertub secondes Sil nest pas indiqueacute le hachage se serajamais reconfigureacute Ce nest pas recommandeacute 10 secondes est probablement une bonne valeur

quantumNombre doctets quun flux est autoriseacute agrave retirer de la file dattente avant que la prochaine file dattentene prenne son tour Par deacutefaut eacutegal agrave la taille maximum dun paquet (MTU) Ne le configurez pas endessous du MTU

Configuration simple

Si vous avez un peacuteripheacuterique qui a une vitesse identique agrave celle du lien et un deacutebit reacuteel disponible comme unmodem teacuteleacutephonique cette configuration aidera agrave promouvoir leacutequiteacute

tc qdisc add dev ppp0 root sfq perturb 10 tc -s -d qdisc lsqdisc sfq 800c dev ppp0 quantum 1514b limit 128p flows 1281024 perturb 10sec Sent 4812 bytes 62 pkts (dropped 0 overlimits 0)

Le nombre 800c est un descripteur (handle) automatiquement assigneacute et limit signifie que 128 paquetspeuvent attendre dans la file dattente Il y a 1024 ltlt seaux de hachage gtgt disponibles pour la comptabiliteacute128 pouvant ecirctre actifs agrave la fois (pas plus de paquets ne conviennent dans la file dattente) Le hachage est

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

40 Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

reconfigureacute toutes les 10 secondes

Conseils pour le choix de la file dattente

Pour reacutesumer ces files dattente simples gegraverent le trafic en reacuteordonnant en ralentissant ou en supprimant lespaquets

Les astuces suivantes peuvent vous aider agrave choisir la file dattente agrave utiliser Elles mentionnent certaines filesdattente deacutecrites dans le chapitre Gestionnaires de mise en file dattente avanceacutesgt

Pour simplement ralentir le trafic sortant utilisez le Token Bucket Filter Il convient bien pour leseacutenormes bandes passantes si vous paramegravetrez en conseacutequence le seau

bull

Si votre lien est vraiment satureacute et que vous voulez ecirctre sucircr quaucune session ne va accaparer labande passante vers lexteacuterieur utilisez le Stochastical Fairness Queueing

bull

Si vous avez une grande dorsale et que vous voulez savoir ce que vous faites consideacuterez RandomEarly Drop (voir le chapitre Gestionnaires de mise en file dattente avanceacutesgt)

bull

Pour ltlt mettre en forme gtgt le trafic entrant qui nest pas transmis utilisez la reacuteglementation Ingress(Ingress Policier) La mise en forme du flux entrant est appeleacutee ltlt reacuteglementation gtgt (policing) etnon ltlt mise en forme gtgt (shaping)

bull

Si vous transmettez le trafic utilisez TBF sur linterface vers laquelle vous transmettez les donneacutees Sivous voulez mettre en forme un trafic pouvant sortir par plusieurs interfaces alors le seul facteurcommun est linterface entrante Dans ce cas utilisez la reacuteglementation Ingress

bull

Si vous ne voulez pas mettre en forme le trafic mais que vous vouliez voir si votre interface esttellement chargeacutee quelle a ducirc mettre en file dattente les donneacutees utilisez la file dattente pfifo (paspfifoamplowbarfast) Elle na pas de bandes internes mais assure le comptage de la taille de sonaccumulateur

bull

Finalement vous pouvez aussi faire de la ltlt mise en forme sociale gtgt La technologie nest pastoujours capable de reacutealiser ce que vous voulez Les utilisateurs sont hostiles aux contraintestechniques Un mot aimable peut eacutegalement vous aider agrave avoir votre bande passante correctementdiviseacutee

bull

terminologie

Pour comprendre correctement des configurations plus compliqueacutees il est dabord neacutecessaire dexpliquerquelques concepts A cause de la complexiteacute et de la relative jeunesse du sujet beaucoup de mots diffeacuterentssont utiliseacutes par les personnes mais ils signifient en fait la mecircme chose

Ce qui suit est lacircchement inspireacute du texte draft-ietf-diffserv-model-06txt An InformalManagement Model for Diffserv Routers Il peut ecirctre trouveacute agrave ladressehttpwwwietforginternet-draftsdraft-ietf-diffserv-model-04txt

Lisez-le pour les deacutefinitions strictes des termes utiliseacutes

Gestionnaire de mise en file dattente (qdisc) (Queueing Discipline)Un algorithme qui gegravere la file dattente dun peacuteripheacuterique soit pour les donneacutees entrantes (ingress)soit pour les donneacutees sortantes (egress)

Gestionnaire de mise en file dattente sans classes (Classless qdisc)Un gestionnaire de mise en file dattente qui na pas de subdivisions internes configurables

Gestionnaire de mise en file dattente baseacute sur des classes (Classful qdisc)Un gestionnaire de mise en file dattente baseacute sur des classes contient de multiples classes Certainesde ces classes contiennent un gestionnaire de mise en file dattente suppleacutementaire qui peut encoreecirctre baseacute sur des classes mais ce nest pas obligatoire Si lon sen tient agrave la deacutefinition strictepfifoamplowbarfast EST baseacute sur des classes dans la mesure ougrave il contient trois bandes qui sont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 41

en fait des classes Cependant dun point de vue des perspectives de configuration pour lutilisateur ilest sans classes dans la mesure ougrave ces classes ne peuvent ecirctre modifieacutees avec loutil tc

ClassesUn gestionnaire de mise en file dattente baseacute sur les classes peut avoir beaucoup de classes chacunedelles eacutetant internes au gestionnaire Une classe peut agrave son tour se voir ajouter plusieurs classes Uneclasse peut donc avoir comme parent soit un gestionnaire de mise en file dattente soit une autreclasse Une classe terminale est une classe qui ne possegravede de classes enfants Seul 1 gestionnaire demise en file dattente est attacheacute agrave cette classe Ce gestionnaire est responsable de lenvoi des donneacuteesde cette classe Quand vous creacuteez une classe un gestionnaire de mise en file dattente fifo est creacuteeacuteQuand vous ajoutez une classe enfant ce gestionnaire est supprimeacute Le gestionnaire fifo dune classeterminale peut ecirctre remplaceacute par un autre gestionnaire plus adapteacute Vous pouvez mecircme remplacer cegestionnaire fifo par un gestionnaire de mise en file dattente baseacute sur des classes de sorte que vouspourrez rajouter des classes suppleacutementaires

Classificateur (Classifier)Chaque gestionnaire de mise en file dattente baseacute sur des classes a besoin de deacuteterminer vers quellesclasses il doit envoyer un paquet Ceci est reacutealiseacute en utilisant le classificateur

Filtre (Filter)La classification peut ecirctre reacutealiseacutee en utilisant des filtres Un filtre est composeacute dun certain nombre deconditions qui si elles sont toutes veacuterifieacutees satisfait le filtre

Ordonnancement (Scheduling)Un gestionnaire de mise en file dattente peut avec laide dun classificateur deacutecider que des paquetsdoivent sortir plus tocirct que dautres Ce processus est appeleacute ordonnancement (scheduling) et estreacutealiseacute par exemple par le gestionnaire pfifoamplowbarfast mentionneacute plus tocirctLordonnancement est aussi appeleacute ltlt reclassement gtgt (reordering) ce qui peut precircter agrave confusion

Mise en forme (Shaping)Le processus qui consiste agrave retarder leacutemission des paquets sortants pour avoir un trafic conforme agrave undeacutebit maximum configureacute La mise en forme est reacutealiseacutee sur egress Familiegraverement rejeter despaquets pour ralentir le trafic est eacutegalement souvent appeleacute Mise en forme

Reacuteglementation (Policing)Retarder ou jeter des paquets dans le but davoir un trafic restant en dessous dune bande passanteconfigureacutee Dans Linux la reacuteglementation ne peut que jeter un paquet et non le retarder dans lamesure ougrave il ny a pas de ltlt file dattente dentreacutee gtgt (ingress queue)

Work-ConservingUn gestionnaire de mise en file dattente work-conserving deacutelivre toujours un paquet sil y en a un dedisponible En dautres termes il ne retarde jamais un paquet si ladaptateur reacuteseau est precirct agrave lenvoyer(dans le cas du gestionnaire egress)

non-Work-ConservingQuelques gestionnaire de mise en files dattente comme par exemple le Token Bucket Filter peuventavoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante Cecisignifie quils refusent parfois de libeacuterer un paquet bien quils en aient un de disponible

Maintenant que nous avons deacutefini notre terminologie voyons ougrave tous ces eacuteleacutements sont situeacutes

Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------gt Pile IP | | | | | | | Y | | | Y | | ^ | | | | ----------gt Transmission -gt | | ^ | | | | Y | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

42 terminologie

| ^ Y -qdisc1- | | | Classificateur --qdisc2-- | ---gt-gtGestionnaire de mise de sortie ---qdisc3---- | -gt | en file dattente (Egress) __qdisc4__ | | dentreacutee (Ingress) -qdiscN_ | | | +-----------------------------------------------------------+

Merci agrave Jamal Hadi Salim pour cette repreacutesentation ASCII

Le grand rectangle repreacutesente le noyau La flegraveche la plus agrave gauche repreacutesente le trafic du reacuteseau entrant dansvotre machine Celui-ci alimente alors le gestionnaire de mise en file dattente Ingress qui peut appliquer desfiltres agrave un paquet et deacutecider de le supprimer Ceci est appeleacute ltlt reacuteglementation gtgt (Policing)

Ce processus a lieu tregraves tocirct avant davoir beaucoup parcouru le noyau Cest par conseacutequent un tregraves bonendroit pour rejeter au plus tocirct du trafic sans pour autant consommer beaucoup de ressources CPU

Si le paquet est autoriseacute agrave continuer il peut ecirctre destineacute agrave une application locale et dans ce cas il entre dans lacouche IP pour ecirctre traiteacute et deacutelivreacute agrave un programme utilisateur Le paquet peut eacutegalement ecirctre transmis sansentrer dans une application et dans ce cas ecirctre destineacute agrave egress Les programmes utilisateurs peuventeacutegalement deacutelivrer des donneacutees qui sont alors transmises et examineacutees par le classificateur Egress

Lagrave il est examineacute et mis en file dattente vers un certain nombre de gestionnaire de mise en file dattente Pardeacutefaut il ny a quun seul gestionnaire egress installeacute pfifoamplowbarfast qui reccediloit tous les paquetsCeci correspond agrave ltlt la mise en file dattente gtgt (enqueueing)

Le paquet reacuteside maintenant dans le gestionnaire de mise en file dattente attendant que le noyau le reacuteclamepour le transmettre agrave travers linterface reacuteseau Ceci correspond au ltlt retrait de la file dattente gtgt(dequeueing)

Le scheacutema ne montre que le cas dun seul adaptateur reacuteseau Les flegraveches entrantes et sortantes du noyau nedoivent pas ecirctre trop prises au pied de la lettre Chaque adaptateur reacuteseau a un gestionnaire dentreacutee et desortie

Gestionnaires de file dattente baseacutes sur les classes

Les gestionnaires de mise en file dattente baseacutes sur des classes sont tregraves utiles si vous avez diffeacuterentes sortesde trafic qui doivent ecirctre traiteacutes diffeacuteremment Lun dentre eux est appeleacute CBQ pour Class Based QueueingIl est si souvent mentionneacute que les personnes identifient les gestionnaires de mise en file dattente baseacutes surdes classes uniquement agrave CBQ ce qui nest pas le cas

CBQ est le meacutecanisme le plus ancien ainsi que le plus compliqueacute Il naura pas forceacutement les effets que vousrecherchez Ceci surprendra peut-ecirctre ceux qui sont sous lemprise de ltlt leffet Sendmail gtgt qui nousenseigne quune technologie complexe non documenteacutee est forceacutement meilleure que toute autre

Nous eacutevoquerons bientocirct plus agrave propos CBQ et ses alternatives

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

Quand le trafic entre dans un gestionnaire de mise en file dattente baseacute sur des classes il doit ecirctre envoyeacute verslune de ses classes il doit ecirctre ltlt classifieacute gtgt Pour deacuteterminer que faire dun paquet les eacuteleacutements appeleacutesltlt filtres gtgt sont consulteacutes Il est important de savoir que les filtres sont appeleacutes de linteacuterieur dungestionnaire et pas autrement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestionnaires de file dattente baseacutes sur les classes 43

Les filtres attacheacutes agrave ce gestionnaire renvoient alors une deacutecision que le gestionnaire utilise pour mettre en filedattente le paquet vers lune des classes Chaque sous-classe peut essayer dautres filtres pour voir si denouvelles instructions sappliquent Si ce nest pas le cas la classe met le paquet en file dattente dans legestionnaire de mise en file dattente quelle contient

En plus de contenir dautres gestionnaires la plupart des gestionnaires de mise en file dattente baseacutes sur desclasses reacutealisent eacutegalement de la mise en forme Ceci est utile pour reacutealiser agrave la fois lordonnancement (avecSFQ par exemple) et le controcircle de deacutebit Vous avez besoin de ceci dans les cas ougrave vous avez une interface agravehaut deacutebit (ethernet par exemple) connecteacutee agrave un peacuteripheacuterique plus lent (un modem cacircble)

Si vous nutilisez que SFQ rien ne devait se passer dans la mesure ougrave les paquets entrent et sortent du routeursans deacutelai linterface de sortie est de loin beaucoup plus rapide que la vitesse reacuteelle de votre liaison il ny aalors pas de files dattente agrave reacuteordonnancer

La famille des gestionnaires de mise en file dattente racines descripteursdescendances et parents

Chaque interface agrave ltlt un gestionnaire de mise en file dattente racine gtgt de sortie (egress root qdisc) Pardeacutefaut le gestionnaire de mise en file dattente sans classes mentionneacute plus tocirct pfifoamplowbarfastChaque gestionnaire et classe est repeacutereacute par un descripteur (handle) qui pourra ecirctre utiliseacute par les prochainesdeacuteclarations de configuration pour se reacutefeacuterer agrave ce gestionnaire En plus du gestionnaire de sortie une interfacepeut eacutegalement avoir un gestionnaire dentreacutee (ingress) qui reacuteglemente le trafic entrant

Ces descripteurs sont constitueacutes de deux parties un nombre majeur et un nombre mineur ltmajorgtltminorgtIl est habituel de nommer le gestionnaire racine 1 ce qui est eacutequivalent agrave 10 Le nombre mineur dungestionnaire de mise en file dattente est toujours 0

Les classes doivent avoir le mecircme nombre majeur que leur parent Le nombre majeur doit ecirctre unique agravelinteacuterieur dune configuration egress ou ingress Le nombre mineur doit ecirctre unique agrave linteacuterieur dungestionnaire de mise en file dattente et de ses classes

Comment les filtres sont utiliseacutes pour classifier le trafic

Pour reacutecapituler une hieacuterarchie typique pourrait ressembler agrave ceci

1 Gestionnaire de mise en file dattente racine | 11 classe enfant | | | | 110 111 112 classes enfants | | | | 11 | classe terminale | | 10 12 Gestionnaire de mise en file dattente 101 102 121 122 classes terminales

Mais ne laissez pas cet arbre vous abuser Vous ne devriez pas imaginer le noyau ecirctre au sommet de larbre etle reacuteseau en dessous ce qui nest justement pas le cas Les paquets sont mis et retireacutes de la file dattente agrave laracine du gestionnaire qui est le seul eacuteleacutement avec lequel le noyau dialogue

Un paquet pourrait ecirctre classifieacute agrave travers une chaicircne suivante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

44 Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

1 -gt 11 -gt 12 -gt 122

Le paquet reacuteside maintenant dans la file dattente du gestionnaire attacheacute agrave la classe 122 Dans cet exempleun filtre a eacuteteacute attacheacute agrave chaque noeud de larbre chacun choisissant la prochaine branche agrave prendre Cela estreacutealisable Cependant ceci est eacutegalement possible

1 -gt 122

Dans ce cas un filtre attacheacute agrave la racine a deacutecideacute denvoyer le paquet directement agrave 122

Comment les paquets sont retireacutes de la file dattente et envoyeacutes vers le mateacuteriel

Quand le noyau deacutecide quil doit extraire des paquets pour les envoyer vers linterface le gestionnaire racine1 reccediloit une requecircte dequeue qui est transmise agrave 11 et qui agrave son tour est passeacutee agrave 10 11 et 12chacune interrogeant leurs descendances qui essaient de retirer les paquets de leur file dattente Dans ce casle noyau doit parcourir lensemble de larbre car seul 122 contient un paquet

En reacutesumeacute les classes ltlt emboicircteacutees gtgt parlent uniquement agrave leur gestionnaire de mise en file dattenteparent jamais agrave une interface Seul la file dattente du gestionnaire racine est videacutee par le noyau

Ceci a pour reacutesultat que les classes ne retirent jamais les paquets dune file dattente plus vite que ce que leurparent autorise Et cest exactement ce que nous voulons de cette maniegravere nous pouvons avoir SFQ dans uneclasse interne qui ne fait pas de mise en forme mais seulement de lordonnancement et avoir un gestionnairede mise en file dattente exteacuterieur qui met en forme le trafic

Le gestionnaire de mise en file dattente PRIO

Le gestionnaire de mise en file dattente ne met pas vraiment en forme le trafic il ne fait que le subdiviser ense basant sur la maniegravere dont vous avez configureacute vos filtres Vous pouvez consideacuterer les gestionnaires PRIOcomme une sorte de super pfifoamplowbarfast dopeacute ougrave chaque bande est une classe seacutepareacutee au lieudune simple FIFO

Quand un paquet est mis en file dattente dans le gestionnaire PRIO une classe est choisie en fonction desfiltres que vous avez donneacutes Par deacutefaut trois classes sont creacuteeacutees Ces classes contiennent par deacutefaut de pursgestionnaires de mise en file dattente FIFO sans structure interne mais vous pouvez les remplacer parnimporte quels gestionnaires disponibles

Chaque fois quun paquet doit ecirctre retireacute dune file dattente la classe 1 est dabord testeacutee Les classes pluseacuteleveacutees ne sont utiliseacutees que si aucune des bandes plus faibles na pas fourni de paquets

Cette file dattente est tregraves utile dans le cas ougrave vous voulez donner la prioriteacute agrave certains trafics en utilisant toutela puissance des filtres tc et en ne se limitant pas seulement aux options du champ TOS Vous pouvezeacutegalement ajouter un autre gestionnaire de mise en file dattente aux trois classes preacutedeacutefinies tandis quepfifoamplowbarfast est limiteacute aux simples gestionnaires FIFO

Puisquil ne met pas vraiment en forme on applique le mecircme avertissement que pour SFQ Utilisez PRIOseulement si votre lien physique est vraiment satureacute ou inteacutegrez-le agrave linteacuterieur dun gestionnaire de mise enfile dattente baseacute sur des classes qui reacutealisent la mise en forme Ce dernier cas est valable pour pratiquementtous les modems-cacircbles et les peacuteripheacuteriques DSL

En termes formels le gestionnaire de mise en file dattente PRIO est un ordonnanceur Work-Conserving

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Comment les filtres sont utiliseacutes pour classifier le trafic 45

Paramegravetres PRIO amp usage

Les paramegravetres suivants sont reconnus par tc

bandsNombre de bandes agrave creacuteer Chaque bande est en fait une classe Si vous changez ce nombre vousdevez eacutegalement changer

priomapSi vous ne fournissez pas de filtres tc pour classifier le trafic le gestionnaire PRIO regarde la prioriteacuteTCamplowbarPRIO pour deacutecider comment mettre en file dattente le trafic

Ceci fonctionne comme le gestionnaire de mise en file dattente pfifoamplowbarfast mentionneacuteplus tocirct Voir la section correspondante pour plus de deacutetails

Les bandes sont des classes et sont appeleacutees par deacutefaut majeur1 agrave majeur3 Donc si votre gestionnaire demise en file dattente est appeleacute 12 tc filtre le trafic vers 121 pour lui accorder une plus grande prioriteacute

Par iteacuteration la bande 0 correspond au nombre mineur 1 la bande 1 au nombre mineur 2 etc

Configuration simple

Nous allons creacuteer cet arbre

racine 1 prio 1 Gestionnaire racine | | | 11 12 13 classes | | | 10 20 30 gestionnaire gestionnaire sfq tbf sfqbande 0 1 2

Le trafic de masse ira vers 30 tandis que le trafic interactif ira vers 20 ou 10

Les lignes de commande

tc qdisc add dev eth0 root handle 1 prio Ceci creacutee instantaneacutement les classes 11 12 13

tc qdisc add dev eth0 parent 11 handle 10 sfq tc qdisc add dev eth0 parent 12 handle 20 tbf rate 20kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 13 handle 30 sfq

Regardons maintenant ce que nous avons creacuteeacute

tc -s qdisc ls dev eth0 qdisc sfq 30 quantum 1514b Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 132 bytes 2 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0 overlimits 0)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

46 Paramegravetres PRIO amp usage

Comme vous pouvez le voir la bande 0 a deacutejagrave reccedilu du trafic et un paquet a eacuteteacute envoyeacute pendant lexeacutecution decette commande

Nous allons maintenant geacuteneacuterer du trafic de masse avec un outil qui configure correctement les options TOSet regarder de nouveau

scp tc ahu100011ahu100011s password tc 100 || 353 KB 0000 tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 2230 bytes 31 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0 overlimits 0)

Comme vous pouvez le voir tout le trafic a eacuteteacute envoyeacute comme preacutevu vers le descripteur 30 qui est la bandede plus faible prioriteacute Maintenant pour veacuterifier que le trafic interactif va vers les bandes de plus grandeprioriteacute nous geacuteneacuterons du trafic interactif

tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 14926 bytes 193 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0 overlimits 0)

Ca a marcheacute Tout le trafic suppleacutementaire a eacuteteacute vers 10 qui est notre gestionnaire de plus grande prioriteacuteAucun trafic na eacuteteacute envoyeacute vers les prioriteacutes les plus faibles qui avaient reccedilu au preacutealable tout le trafic venantde notre scp

Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Comme dit avant CBQ est le gestionnaire de mise en file dattente disponible le plus complexe celui qui a eule plus de publiciteacute qui est le moins compris et qui est probablement le plus farceur lors de sa mise au pointCe nest pas parce que les auteurs sont mauvais ou incompeacutetents loin de lagrave mais lalgorithme CBQ nest pasremarquablement preacutecis et il ne correspond pas vraiment agrave la faccedilon dont Linux fonctionne

En plus decirctre baseacute sur des classes CBQ sert eacutegalement agrave la mise en forme de trafic et cest sur cet aspect quilne fonctionne pas tregraves bien Il travaille comme ceci si vous essayez de mettre en forme une connexion de10mbits agrave 1mbitss le lien doit ecirctre inactif 90amppercnt du temps Si ce nest pas le cas nous devons limiter letaux de sorte quil soit inactif 90amppercnt du temps

Ceci est assez dur agrave mesurer et cest pour cette raison que CBQ deacuteduit le temps dinactiviteacute du nombre demicrosecondes qui seacutecoulent entre les requecirctes de la couche mateacuterielle pour avoir plus de donneacutees Cettecombinaison peut ecirctre utiliseacutee pour eacutevaluer si le lien est chargeacute ou non

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 47

Ceci est plutocirct leacuteger et lon arrive pas toujours agrave des reacutesultats convenables Par exemple quen est-il de lavitesse de liaison reacuteelle dune interface qui nest pas capable de transmettre pleinement les donneacutees agrave100mbits peut-ecirctre agrave cause dun mauvais pilote de peacuteripheacuterique Une carte reacuteseau PCMCIA ne pourrajamais atteindre 100mbits agrave cause de la conception du bus De nouveau comment calculons-nous le tempsdinactiviteacute

Cela devient mecircme pire quand on considegravere un peacuteripheacuterique reacuteseau pas-vraiment-reacuteel comme PPP OverEthernet ou PPTP over TCPIP La largeur de bande effective est dans ce cas probablement deacutetermineacutee parlefficaciteacute des tubes vers lespace utilisateur qui est eacutenorme

Les personnes qui ont effectueacute des mesures ont deacutecouvert que CBQ nest pas toujours tregraves exact et parfoismecircme tregraves eacuteloigneacute de la configuration

Cependant il marche bien dans de nombreuses circonstances Avec la documentation fournie ici vous devriezecirctre capable de le configurer pour quil fonctionne bien dans la plupart des cas

Mise en forme CBQ en deacutetail

Comme dit preacuteceacutedemment CBQ fonctionne en sassurant que le lien est inactif juste assez longtemps pourabaisser la bande passante reacuteelle au deacutebit configureacute Pour reacutealiser cela il calcule le temps qui devrait seacutecoulerentre des paquets de taille moyennne

En cours de fonctionnement le temps dinactiviteacute effectif (the effective idletime) est mesureacute en utilisantlalgorithme EWMA (Exponential Weighted Moving Average) qui considegravere que les paquets reacutecents sontexponentiellement plus nombreux que ceux passeacutes La charge moyenne UNIX (UNIX loadaverage) estcalculeacutee de la mecircme maniegravere

Le temps dinactiviteacute calculeacute est soustrait agrave celui mesureacute par EWMA et le nombre reacutesultant est appeleacuteavgidle Un lien parfaitement chargeacute a un avgidle nul un paquet arrive agrave chaque intervalle calculeacute

Une liaison surchargeacutee a un avgidle neacutegatif et sil devient trop neacutegatif CBQ sarrecircte un moment et se placealors en deacutepassement de limite (overlimit)

Inversement un lien inutiliseacute peut accumuler un avgidle eacutenorme qui autoriserait alors des bandespassantes infinies apregraves quelques heures dinactiviteacute Pour eacuteviter cela avgidle est borneacute agrave maxidle

En situation de deacutepassement de limite CBQ peut en theacuteorie bloquer le deacutebit pour une dureacutee eacutequivalente autemps qui doit seacutecouler entre deux paquets moyens puis laisser passer un paquet et bloquer de nouveau ledeacutebit Regardez cependant le paramegravetre minburst ci-dessous

Voici les paramegravetres que vous pouvez speacutecifier pour configurer la mise en forme

avpktTaille moyenne dun paquet mesureacutee en octets Neacutecessaire pour calculer maxidle qui deacuterive demaxburst qui est speacutecifieacute en paquets

bandwidthLa bande passante physique de votre peacuteripheacuterique neacutecessaire pour les calculs du temps de nonutilisation (idle time)

cellLa dureacutee de transmission dun paquet naugmente pas neacutecessairement de maniegravere lineacuteaire en fonctionde sa taille Par exemple un paquet de 800 octets peut ecirctre transmis en exactement autant de tempsquun paquet de 806 octets Ceci deacutetermine la granulariteacute Cette valeur est geacuteneacuteralement positionneacutee agrave8 et doit ecirctre une puissance de deux

maxburst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

48 Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Ce nombre de paquets est utiliseacute pour calculer maxidle de telle sorte que quand avgidle est eacutegalagrave maxidle le nombre de paquets moyens peut ecirctre envoyeacute en rafale avant que avgidle neretombe agrave 0 Augmentez-le pour ecirctre plus toleacuterant vis agrave vis des rafales de donneacutees Vous ne pouvezpas configurer maxidle directement mais seulement via ce paramegravetre

minburstComme nous lavons deacutejagrave indiqueacute CBQ doit bloquer le deacutebit dans le cas dun deacutepassement de limiteLa solution ideacuteale est de le faire pendant exactement le temps dinutilisation calculeacute puis de laisserpasser un paquet Cependant les noyaux UNIX ont geacuteneacuteralement du mal agrave preacutevoir des eacuteveacutenementsplus courts que 10 ms il vaut donc mieux limiter le deacutebit pendant une peacuteriode plus longue puisenvoyer minburst paquets dun seul coup et dormir pendant une dureacutee de minburst

Le temps dattente est appeleacute offtime De plus grandes valeurs de minburst megravenent agrave une mise enforme plus preacutecise dans le long terme mais provoquent de plus grandes rafales de donneacutees pendantdes peacuteriodes de quelques millisecondes

minidleSi avgidle est infeacuterieur agrave 0 nous sommes en deacutepassement de limite et nous devons attendre jusquagravece que avgidle devienne suffisamment important pour envoyer un paquet Pour eacuteviter quunebrusque rafale de donneacutees nempecircche le lien de fonctionner pendant une dureacutee prolongeacutee avgidleest remis agrave minidle sil atteint une valeur trop basse

La valeur minidle est speacutecifieacutee en microsecondes neacutegatives 10 signifie alors que avgidle estborneacute agrave -10micros

mpuTaille minumum dun paquet Neacutecessaire car mecircme un paquet de taille nulle est encapsuleacute par 64octets sur ethernet et il faut donc un certain temps pour le transmettre CBQ doit connaicirctre ceparamegravetre pour calculer preacuteciseacutement le temps dinutilisation

rateDeacutebit du trafic sortant du gestionnaire Ceci est le ltlt paramegravetre de vitesse gtgt

En interne CBQ est finement optimiseacute Par exemple les classes qui sont connues pour ne pas avoir dedonneacutees preacutesentes dans leur file dattente ne sont pas interrogeacutees Les classes en situation de deacutepassement delimite sont peacutenaliseacutees par la diminution de leur prioriteacute effective Tout ceci est tregraves habile et compliqueacute

Le comportement CBQ classful

En plus de la mise en forme en utilisant les approximations idletime mentionneacutees ci-dessus CBQ peuteacutegalement agir comme une file dattente PRIO dans le sens ougrave les classes peuvent avoir diffeacuterentes prioriteacutesLes prioriteacutes de plus faible valeur seront examineacutees avant celles de valeurs plus eacuteleveacutees

Chaque fois quun paquet est demandeacute par la couche mateacuterielle pour ecirctre envoyeacute sur le reacuteseau un processusweighted round robin (WRR) deacutemarre en commenccedilant par les classes de plus faibles numeacuteros

Celles-ci sont regroupeacutees et interrogeacutees si elles ont des donneacutees disponibles Apregraves quune classe ait eacuteteacuteautoriseacutee agrave retirer de la file dattente un nombre doctets la classe de prioriteacute suivante est consulteacutee

Les paramegravetres suivants controcirclent le processus WRR

allotQuand le CBQ racine reccediloit une demande denvoi de paquets sur une interface il va essayer tous lesgestionnaires internes (dans les classes) tour agrave tour suivant lordre du paramegravetre priority Achaque passage une classe ne peut envoyer quune quantiteacute limiteacutee de donneacutees Le paramegravetre allotest luniteacute de base de cette quantiteacute Voir le paramegravetre weight pour plus dinformations

prioCBQ peut eacutegalement agir comme un peacuteripheacuterique PRIO Les classes internes avec les prioriteacutes les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Mise en forme CBQ en deacutetail 49

plus eacuteleveacutees sont consulteacutees en premier et aussi longtemps quelles ont du trafic les autres classes nesont pas examineacutees

weightLe paramegravetre weight assiste le processus Weighted Round Robin Chaque classe a tour agrave tour lapossibiliteacute denvoyer ses donneacutees Si vous avez des classes avec des bandes passantessignificativement plus importantes il est logique de les autoriser agrave envoyer plus de donneacutees agrave chaquetour que les autres

Vous pouvez utiliser des nombres arbitraires dans la mesure ougrave CBQ additionne tous les paramegravetresweight preacutesents sous une classe et les normalise La regravegle empirique qui consiste agrave prendrerate10 semble fonctionner correctement Le paramegravetre weight normaliseacute est multiplieacute par leparamegravetre allot pour deacuteterminer la quantiteacute de donneacutees agrave envoyer agrave chaque tour

Notez sil vous plaicirct que toutes les classes agrave linteacuterieur dune hieacuterarchie CBQ doivent avoir le mecircme nombremajeur

Paramegravetres CBQ qui deacuteterminent le partage amp le precirct du lien

En plus de purement limiter certains trafics il est eacutegalement possible de speacutecifier quelles classes peuventemprunter de la bande passante aux autres classes ou reacuteciproquement precircter sa bande passante

isolated sharingUne classe qui est configureacutee avec isolated ne precirctera pas sa bande passante agrave ses classes enfantsUtilisez ceci si vous avez sur votre lien deux agences concurrentes ou qui ne sappreacutecient pas et qui neveulent pas se precircter gratuitement de la bande passante

Le programme de controcircle tc connait eacutegalement sharing qui agit agrave linverse du paramegravetreisolated

bounded borrowUne classe peut aussi ecirctre borneacutee (bounded) ce qui signifie quelle nessaiera pas demprunter de labande passante agrave ses classes enfants tc connait eacutegalement borrow qui agit agrave linverse de bounded

Une situation typique pourrait ecirctre le cas ougrave vous avez deux agences preacutesentes sur votre lien qui sont agrave la foisisolated et bounded Ceci signifie quelles sont strictement limiteacutees agrave leur deacutebit et quelles ne precircterontpas aux autres leur bande passante

A linteacuterieur de ces classes dagence il pourrait y avoir dautres classes qui sont autoriseacutees agrave eacutechanger leurbande passante

Configuration simple

1 gestionnaire de mise en file dattente racine | 11 classe enfant 13 14 classes terminales | | 30 40 gestionnares de mise en file dattente (sfq) (sfq)

Cette configuration limite le trafic dun serveur web agrave 5 mbit et le trafic SMTP agrave 3 mbit Il est souhaitablequils noccupent pas plus de 6 mbit agrave eux deux Nous avons une carte reacuteseau agrave 100 mbit et les classes peuventsemprunter mutuellement de la bande passante

tc qdisc add dev eth0 root handle 10 cbq bandwidth 100Mbit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

50 Le comportement CBQ classful

avpkt 1000 cell 8 tc class add dev eth0 parent 10 classid 11 cbq bandwidth 100Mbit rate 6Mbit weight 06Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

Cette partie installe la racine et la classe 11 habituelle La classe 11 est borneacutee la bande passante totale nepourra donc pas exceacuteder 6 mbit

Comme dit avant CBQ a besoin de NOMBREUX paramegravetres Tous ces paramegravetres sont cependant expliqueacutesau-dessus La configuration HTB correspondante est beaucoup plus simple

tc class add dev eth0 parent 11 classid 13 cbq bandwidth 100Mbit rate 5Mbit weight 05Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 tc class add dev eth0 parent 11 classid 14 cbq bandwidth 100Mbit rate 3Mbit weight 03Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000

Ce sont nos deux classes Notez comment nous avons configureacute la valeur du paramegravetre weight en fonctiondu paramegravetre rate La bande passante de lensemble des deux classes ne pourra jamais deacutepasser 6 mbit Enfait les identifieurs de classe (classid) doivent avoir le mecircme numeacutero majeur que le gestionnaire de miseen file dattente parent

tc qdisc add dev eth0 parent 13 handle 30 sfq tc qdisc add dev eth0 parent 14 handle 40 sfq

Les deux classes ont par deacutefaut un gestionnaire de mise en file dattente FIFO Nous les remplaccedilons par unefile dattente SFQ de telle sorte que chaque flux de donneacutees soit traiteacute de maniegravere eacutegale

tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 13 tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 14

Ces commandes directement attacheacutees agrave la racine envoient le trafic vers le bon gestionnaire de mise en filedattente

Notez que nous utilisons tc class add pour CREER des classes agrave linteacuterieur dun gestionnaire de mise enfile dattente et que nous utilisons tc qdisc add pour veacuteritablement configurer ces classes

Vous vous demandez peut-ecirctre ce qui arrive au trafic qui nest classifieacute par aucune des deux regravegles Dans cecas les donneacutees seront traiteacutees agrave linteacuterieur de 10 et le deacutebit ne sera pas limiteacute

Si le trafic SMTP+web tente de deacutepasser la limite de 6 mbits la bande passante sera diviseacutee selon leparamegravetre weight donnant 58 du trafic au serveur web et 38 au serveur smtp

Avec cette configuration vous pouvez eacutegalement dire que le trafic du serveur web sera au minimum de 58 6 mbit = 375 mbit

Dautres paramegravetres CBQ split amp defmap

Comme preacuteciseacute avant un gestionnaire de mise en file dattente baseacute sur des classes doit appeler des filtrespour deacuteterminer dans quelle classe un paquet sera mis en file dattente

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 51

En plus dappeler les filtres CBQ offre dautres options defmap amp split Cest plutocirct compliqueacute agravecomprendre et de plus ce nest pas vital Mais eacutetant donneacute que ceci est le seul endroit connu ougrave defmap ampsplit sont correctement expliqueacutes je vais faire de mon mieux

Etant donneacute que nous voulons le plus souvent reacutealiser le filtrage en ne consideacuterant que le champ TOS unesyntaxe speacuteciale est fournie Chaque fois que CBQ doit trouver ougrave le paquet doit ecirctre mis en file dattente ilveacuterifie si le noeud est un noeud daiguillage (split node) Si cest le cas un de ses sous-gestionnaires a indiqueacuteson souhait de recevoir tous les paquets configureacutes avec une certaine prioriteacute Celle ci peut ecirctre deacuteriveacutee duchamp TOS ou des options des sockets positionneacutees par les applications

Les bits de prioriteacutes des paquets subissent un ET logique avec le champ defmap pour voir si unecorrespondance existe En dautres termes cest un moyen pratique de creacuteer un filtre tregraves rapide qui ne seraactif que pour certaines prioriteacutes Un defmap de ff (en hexadeacutecimal) veacuterifiera tout tandis quune valeur de 0ne veacuterifiera rien Une configuration simple aidera peut-ecirctre agrave rendre les choses plus claires

tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 mpu 64

tc class add dev eth1 parent 10 classid 11 cbq bandwidth 10Mbit rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000

Preacuteambule standard de CBQ Je nai jamais pris lhabitude de la quantiteacute de nombres neacutecessaires

Le paramegravetre defmap se reacutefegravere aux bits TCamplowbarPRIO qui sont deacutefinis comme suit

TC_PRIO Num Correspond agrave TOS-------------------------------------------------BESTEFFORT 0 Maximalise la Fiabiliteacute FILLER 1 Minimalise le Coucirct BULK 2 Maximalise le Deacutebit (0x8) INTERACTIVE_BULK 4 INTERACTIVE 6 Minimise le Deacutelai (0x10) CONTROL 7

Les nombres TCamplowbarPRIO correspondent aux bits compteacutes agrave partir de la droite Voir la sectionpfifoamplowbarfast pour plus de deacutetails sur la faccedilon dont les bits TOS sont convertis en prioriteacutes

Maintenant les classes interactive et de masse

tc class add dev eth1 parent 11 classid 12 cbq bandwidth 10Mbit rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 10 defmap c0

tc class add dev eth1 parent 11 classid 13 cbq bandwidth 10Mbit rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 10 defmap 3f

La gestion de mise en file dattente daiguillage (split qdisc) est 10 et cest agrave ce niveau que le choix sera faitC0 correspond au nombre binaire 11000000 et 3F au nombre binaire 00111111 Ces valeurs sont choisiesde telle sorte quagrave elles deux elles veacuterifient tous les bits La premiegravere classe correspond aux bits 6 amp 7 ce quiest eacutequivalent aux trafics ltlt interactif gtgt et de ltlt controcircle gtgt La seconde classe correspond au reste

Le noeud 10 possegravede maintenant la table suivante

prioriteacute envoyer agrave0 131 132 13

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

52 Dautres paramegravetres CBQ split amp defmap

3 134 135 136 127 12

Pour dautres amusements vous pouvez eacutegalement donner un ltlt masque de changement gtgt qui indiqueexactement les prioriteacutes que vous souhaitez changer Nutilisez ceci quavec la commande tc classchange Par exemple pour ajouter le trafic best effort agrave la classe 12 nous devrons exeacutecuter ceci

tc class change dev eth1 classid 12 cbq defmap 0101

La carte des prioriteacutes au niveau de 10 ressemble maintenant agrave ceci

prioriteacute envoyer agrave0 121 132 133 134 135 136 127 12

FIXME tc class change na pas eacuteteacute testeacute mais simplement vu dans les sources

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Martin Devera(ltdevikgt) reacutealisa agrave juste titre que CBQ est complexe et quil ne semble pas optimiseacute pour denombreuses situations classiques Son approche hieacuterarchique est bien adapteacutee dans le cas de configurations ougraveil y a une largeur de bande passante fixeacutee agrave diviser entre diffeacuterents eacuteleacutements Chacun de ces eacuteleacutements aura unebande passante garantie avec la possibiliteacute de speacutecifier la quantiteacute de bande passante qui pourra ecirctreemprunteacutee

HTB travaille juste comme CBQ mais il na pas recourt agrave des calculs de temps dinoccupation pour la mise enforme A la place cest un Token Bucket Filter baseacute sur des classes dougrave son nom Il na que quelquesparamegravetres qui sont bien documenteacutes sur ce site

Au fur et agrave mesure que votre configuration HTB se complexifie votre configuration sadapte bien Avec CBQelle est deacutejagrave complexe mecircme dans les cas simples HTB3 (voir sa page principale pour les deacutetails desversions HTB) fait maintenant parti des sources officielles du noyau (agrave partir des versions 2420-pre1 et2531 et supeacuterieures) Il est encore cependant possible que vous soyez obligeacute de reacutecupeacuterer la version mise agravejour de tc pour HTB3 Les programmes de lespace utilisateur et la partie HTB du noyau doivent avoir lemecircme numeacutero majeur Sans cela tc ne marchera pas avec HTB13

Si vous avez deacutejagrave un noyau reacutecent ou si vous ecirctes sur le point de mettre agrave jour votre noyau consideacuterez HTBcoucircte que coucircte

Configuration simple

Fonctionnellement presque identique agrave la configuration simple CBQ preacutesenteacutee ci-dessus

tc qdisc add dev eth0 root handle 1 htb default 30

tc class add dev eth0 parent 1 classid 11 htb rate 6mbit burst 15k

tc class add dev eth0 parent 11 classid 110 htb rate 5mbit burst 15k tc class add dev eth0 parent 11 classid 120 htb rate 3mbit ceil 6mbit burst 15k

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket) 53

tc class add dev eth0 parent 11 classid 130 htb rate 1kbit ceil 6mbit burst 15k

Lauteur recommande SFQ sous ces classes

tc qdisc add dev eth0 parent 110 handle 10 sfq perturb 10 tc qdisc add dev eth0 parent 120 handle 20 sfq perturb 10 tc qdisc add dev eth0 parent 130 handle 30 sfq perturb 10

Ajouter les filtres qui dirigent le trafic vers les bonnes classes

U32=tc filter add dev eth0 protocol ip parent 10 prio 1 u32 $U32 match ip dport 80 0xffff flowid 110 $U32 match ip sport 25 0xffff flowid 120

Et cest tout Pas de vilains nombres non expliqueacutes pas de paramegravetres non documenteacutes

HTB semble vraiment merveilleux Si 10 et 20 ont atteint tous les deux leur bande passante garantie etquil en reste agrave partager ils lempruntent avec un rapport de 53 comme attendu

Le trafic non classifieacute est achemineacute vers 30 qui a une petite bande passante mais qui peut emprunter tout cequi est laisseacute libre Puisque nous avons choisi SFQ en interne on heacuterite naturellement de leacutequiteacute

Classifier des paquets avec des filtres

Pour deacuteterminer quelle classe traitera un paquet la ltlt chaicircne de classificateurs gtgt est appeleacutee chaque foisquun choix a besoin decirctre fait Cette chaicircne est constitueacutee de tous les filtres attacheacutes aux gestionnaires demise en file dattente baseacutes sur des classes qui doivent prendre une deacutecision

On reprend larbre qui nest pas un arbre

racine 1 | _11_ | | | 10 11 12 101 102 121 122

Quand un paquet est mis en file dattente linstruction approprieacutee de la chaicircne de filtre est consulteacutee agrave chaquebranche Une configuration typique devrait avoir un filtre en 11 qui dirige le paquet vers 12 et un filtre en12 qui lenvoie vers 122

Vous pourriez eacutegalement avoir ce dernier filtre en 11 mais vous pouvez gagner en efficaciteacute en ayant destests plus speacutecifiques plus bas dans la chaicircne

A ce propos vous ne pouvez pas filtrer un paquet ltlt vers le haut gtgt Donc avec HTB vous devrez attachertous les filtres agrave la racine

Encore une fois les paquets ne sont mis en file dattente que vers le bas Quand ils sont retireacutes de la filedattente ils montent de nouveau vers linterface Ils ne tombent PAS vers lextreacutemiteacute de larbre en direction deladaptateur reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

54 Configuration simple

Quelques exemples simples de filtrage

Comme expliqueacute dans le chapitre Filtres avanceacutes pour la classification des paquetsgt vous pouvez vraimentanalyser nimporte quoi en utilisant une syntaxe tregraves compliqueacutee Pour commencer nous allons montrercomment reacutealiser les choses eacutevidentes ce qui heureusement est plutocirct facile

Disons que nous avons un gestionnaire de mise en file dattente PRIO appeleacute 10 qui contient trois classes etque nous voulons assigner agrave la bande de plus haute prioriteacute tout le trafic allant et venant du port 22 Les filtresseraient les suivants

tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip dport 22 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip sport 80 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Quest-ce que cela signifie Cela dit attacher agrave eth0 au noeud 10 un filtre u32 de prioriteacute 1 qui analysele port de destination ip 22 et qui lenvoie vers la bande 101 La mecircme chose est reacutepeacuteteacutee avec le port source80 La derniegravere commande indique que si aucune correspondance nest trouveacutee alors le trafic devra aller versla bande 102 la plus grande prioriteacute suivante

Vous devez ajouter eth0 ou nimporte laquelle de vos interfaces car chaque interface possegravede un espace denommage de ses descripteurs qui lui est propre

Pour seacutelectionner une adresse IP utilisez ceci

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip dst 432132 flowid 101 tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 123432 flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Ceci dirige le trafic allant vers 4321 et venant de 1234 vers la file dattente de plus haute prioriteacutetandis que le reste ira vers la prochaine plus haute prioriteacute

Vous pouvez rassembler ces deux veacuterifications pour reacutecupeacuterer le trafic venant de 1234 avec le portsource 80

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 432132 match ip sport 80 0xffff flowid 101

Toutes les commandes de filtres dont vous aurez normalement besoin

La plupart des commandes preacutesenteacutees ici commencent avec le preacuteambule suivant

tc filter add dev eth0 parent 10 protocol ip prio 1 u32

Ils sont appeleacutes filtres u32 et analysent NIMPORTE QUELLE partie dun paquet

Sur ladresse sourcedestinationMasque pour la source match ip src 123024 et masque pour la destination match ipdst 432024 Pour analyser un hocircte simple employez 32 ou omettez le masque

Sur le port sourcedestination tous les protocoles IPSource match ip sport 80 0xffff et destination match ip dport 0xffff

Sur le protocole ip (tcp udp icmp gre ipsec)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Quelques exemples simples de filtrage 55

Utilisez les nombres deacutefinis dans etcprotocols par exemple 1 pour icmp match ipprotocol 1 0xff

Sur fwmarkVous pouvez marquer les paquets avec ipchains ou iptables et voir cette marque preacuteserveacutee lors duroutage agrave travers les interfaces Ceci est vraiment utile pour mettre uniquement en forme le trafic sureth1 et venant de eth0 par exemple La syntaxe est la suivante

tc filter add dev eth1 protocol ip parent 10 prio 1 handle 6 fw flowid 11

Notez que ce nest pas une correspondance u32

Vous pouvez positionner une marque comme ceci

iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

Le nombre 6 est arbitraire

Si vous ne voulez pas assimiler la syntaxe complegravete de tc filter utilisez juste iptables et apprenezseulement la seacutelection baseacutee sur fwmark

Sur le champ TOSPour seacutelectionner le trafic interactif deacutelai minimum

tc filter add dev ppp0 parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 14

Utilisez 0x08 0xff pour le trafic de masse

Pour plus de commandes de filtrage voir le chapitre Filtres avanceacutes pour la classification des paquetsgt

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediatequeueing device (IMQ))

Le peacuteripheacuterique IMQ nest pas un gestionnaire de mise en file dattente mais son utilisation est fortement lieacutee agraveceux-ci Au coeur de Linux les gestionnaires de mise en file dattente sont attacheacutes aux peacuteripheacuteriques reacuteseauxet tout ce qui est mis en file dattente dans ce peacuteripheacuterique lest dabord dans le gestionnaire Avec ce conceptil existe deux limitations

1 Seule la mise en forme du trafic sortant est possible (un gestionnaire dentreacutee existe mais ses possibiliteacutessont tregraves limiteacutees en comparaison des gestionnaires de mise en file baseacutes sur les classes)

2 Un gestionnaire de mise en file dattente ne voit le trafic que dune interface et des limitations globales nepeuvent pas ecirctre mises en place

IMQ est ici pour aider agrave reacutesoudre ces deux limitations En reacutesumeacute vous pouvez mettre tout ce que vousvoulez dans un gestionnaire de mise en file dattente Les paquets speacutecialement marqueacutes sont intercepteacutes parles points daccroche netfilter NF_IP_PRE_ROUTING et NF_IP_POST_ROUTING et sont transfeacutereacutes vers legestionnaire attacheacute au peacuteripheacuterique imq Une cible iptables est utiliseacutee pour le marquage des paquets

Ceci vous permet de reacutealiser de la mise en forme dentreacutee eacutetant donneacute que vous pouvez marquer les paquetsentrant par un peacuteripheacuterique quelconque etou traiter les interfaces comme des classes pour configurer deslimites globales Vous pouvez eacutegalement reacutealiser de nombreuses autres choses comme simplement mettrevotre trafic http dans un gestionnaire mettre les requecirctes de nouvelles connexions dans un gestionnaire

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

56 Toutes les commandes de filtres dont vous aurez normalement besoin

Configuration simple

La premiegravere chose qui devrait vous venir agrave lesprit est dutiliser la mise en forme du trafic entrant pour vousgarantir une grande passante ) La configuration se fait comme avec nimporte quelle autre interface

tc qdisc add dev imq0 root handle 1 htb default 20

tc class add dev imq0 parent 1 classid 11 htb rate 2mbit burst 15k

tc class add dev imq0 parent 11 classid 110 htb rate 1mbittc class add dev imq0 parent 11 classid 120 htb rate 1mbit

tc qdisc add dev imq0 parent 110 handle 10 pfifotc qdisc add dev imq0 parent 120 handle 20 sfq

tc filter add dev imq0 parent 100 protocol ip prio 1 u32 match ip dst 100023032 flowid 110

Dans cet exemple u32 est utiliseacute pour la classification Les autres classificateurs devraient marcher tout aussibien Le trafic doit ensuite ecirctre seacutelectionneacute et marqueacute pour ecirctre mis en file dattente vers imq0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0

ip link set imq0 up

Les cibles iptables IMQ sont valides dans les chaicircnes PREROUTING et POSTROUTING de la table mangleLa syntaxe est la suivante

IMQ [ --todev n ] n numeacutero du peacuteripheacuterique imq

Il existe aussi une cible ip6tables

Notez que le trafic nest pas mis en file dattente quand la cible est activeacutee mais apregraves La localisation exactede lentreacutee du trafic dans le peacuteripheacuterique imq deacutepend de la direction de ce trafic (entrantsortant) Ces entreacuteessont les points daccroche preacutedeacutefinis de netfilter et utiliseacutes par iptables

enum nf_ip_hook_priorities NF_IP_PRI_FIRST = INT_MIN NF_IP_PRI_CONNTRACK = -200 NF_IP_PRI_MANGLE = -150 NF_IP_PRI_NAT_DST = -100 NF_IP_PRI_FILTER = 0 NF_IP_PRI_NAT_SRC = 100 NF_IP_PRI_LAST = INT_MAX

Pour le trafic entrant imq se deacuteclare avec la prioriteacute NF_IP_PRI_MANGLE + 1 ce qui signifie que lespaquets entrent dans le peacuteripheacuterique imq juste apregraves la chaine PREROUTING de la table mangle

Pour le trafic sortant imq utilise NF_IP_PRI_LAST qui honore le fait que les paquets rejeteacutes par la table filternoccuperont pas de bande passante

Les mises agrave jour et de plus amples informations peuvent ecirctre trouveacutees sur le site imq

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 57

Chapitre 10 Eacutequilibrage de charge sur plusieursinterfacesIl existe plusieurs maniegraveres pour le faire Une des plus faciles et des plus directes est TEQL (True (or Trivial)Link Equalizer Comme la plupart des eacuteleacutements en relation avec la gestion de file dattente leacutequilibrage decharge est bidirectionnel Les deux eacutequipements terminaux du lien ont besoin de participer pour obtenir uneefficaciteacute optimale

Imaginez la situation suivante

+-------+ eth1 +-------+ | |==========| | reacuteseau 1 -----| A | | B |---- reacuteseau 2 | |==========| | +-------+ eth2 +-------+

A et B sont des routeurs dont nous supposerons quils fonctionnent avec Linux pour le moment Si le trafic vadu reacuteseau 1 vers le reacuteseau 2 le routeur A a besoin de distribuer les paquets sur les deux liens allant vers B Lerouteur B a besoin decirctre configureacute pour laccepter On retrouve la mecircme chose dans le sens inverse pour lespaquets allant du reacuteseau 2 vers le reacuteseau 1 Le routeur B a besoin denvoyer les paquets agrave la fois sur eth1 eteth2

La reacutepartition est faite par un peacuteripheacuterique TEQL comme ceci (cela ne pouvait pas ecirctre plus simple)

tc qdisc add dev eth1 root teql0 tc qdisc add dev eth2 root teql0 ip link set dev teql0 up

Noubliez pas la commande ip link set up

Ceci a besoin decirctre fait sur les deux hocirctes Le peacuteripheacuterique teql0 est basiquement un distributeur tourniquetau-dessus de eth1 et eth2 pour lenvoi des paquets Aucune donneacutee narrive jamais agrave travers unpeacuteripheacuterique teql mais les donneacutees apparaissent sur eth1 et eth2

Nous navons pour le moment que les peacuteripheacuteriques et nous avons eacutegalement besoin dun routage correctLune des possibiliteacutes pour reacutealiser cela est dassigner un reacuteseau 31 sur chacun des liens ainsi que sur lepeacuteripheacuterique teql0

FIXME Avons nous besoin de quelque chose comme nobroadcast Un 31 est trop petit pour contenirune adresse reacuteseau et une adresse de diffusion Si cela ne marche pas comme preacutevu essayez un 30 etajustez les adresses IP Vous pouvez mecircme essayer sans attribuer dadresses agrave eth1 et eth2

Sur le routeur A

ip addr add dev eth1 1000031 ip addr add dev eth2 1000231 ip addr add dev teql0 1000431

Sur le routeur B

ip addr add dev eth1 1000131 ip addr add dev eth2 1000331 ip addr add dev teql0 1000531

Le routeur A devrait maintenant ecirctre capable de lancer un ping vers 10001 10003 et 10005 agrave

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

58 Chapitre 10 Eacutequilibrage de charge sur plusieurs interfaces

travers les deux liens physiques et le peacuteripheacuterique ltlt eacutegaliseacute gtgt Le routeur B devrait maintenant ecirctre capablede lancer un ping vers 10000 10002 et 10004 agrave travers les liens

Si cela marche le routeur A peut prendre 10005 comme route vers le reacuteseau 2 et le routeur B10004 comme route vers le reacuteseau 1 Pour le cas particulier ougrave le reacuteseau 1 est votre reacuteseau personnel etougrave le reacuteseau 2 est lInternet le routeur A peut prendre 10005 comme passerelle par deacutefaut

Avertissement

Rien nest aussi simple quil y paraicirct Les interfaces eth1 et eth2 sur les deux routeurs A et B ne doivent pasavoir la fonction de filtrage par chemin inverse activeacutee Dans le cas contraire ils rejetteront les paquetsdestineacutes agrave des adresses autres que les leurs

echo 0 gt procsysnetipv4confeth1rp_filter echo 0 gt procsysnetipv4confeth2rp_filter

Il y a un seacuterieux problegraveme avec le reacuteordonnancement des paquets Supposons que six paquets aient besoindecirctre envoyeacutes de A vers B Par exemple eth1 peut traiter les paquets 1 3 et 5 et eth2 les paquets 2 4 et 6Dans un monde ideacuteal le routeur B devrait recevoir ces paquets dans lordre 1 2 3 4 5 6 Mais il est plusprobable que le noyau les recevra comme ceci 2 1 4 3 6 5 Ce problegraveme va perturber TCPIP Alors quilny a pas de problegravemes pour les liens transportant diffeacuterentes sessions TCPIP vous ne serez pas capable deregrouper plusieurs liens et obtenir par ftp un simple fichier beaucoup plus rapidement agrave moins que lesystegraveme dexploitation envoyant ou recevant ne soit Linux En effet celui-ci nest pas facilement perturbeacute parde simples reacuteordonnancements

Cependant leacutequilibrage de charge est une bonne ideacutee pour de nombreuses applications

Chapitre 11 Netfilter et iproute - marquage depaquetsJusquagrave maintenant nous avons vu comment iproute travaille et netfilter a eacuteteacute mentionneacute plusieurs fois Vousne perdrez pas votre temps agrave consulter Rustys Remarkably Unreliable Guides Le logiciel Netfilter peut ecirctretrouveacute ici

Netfilter nous permet de filtrer les paquets ou de deacutesosser leurs en-tecirctes Une de ses fonctionnaliteacutesparticuliegraveres est de pouvoir marquer un paquet avec un nombre gracircce agrave loption --set-mark

Comme exemple la commande suivante marque tous les paquets destineacutes au port 25 en loccurrence lecourrier 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 chegravere au meacutegaoctet) et une qui est pluslente mais avec un tarif moins eacuteleveacute Nous souhaiterions que le courrier passe par la route la moins chegravere

Nous avons deacutejagrave marqueacute le paquet avec un 1 et nous allons maintenant renseigner la base de donneacutees de lapolitique de routage pour quelle agisse sur ces paquets marqueacutes

echo 201 mailout gtgt etciproute2rt_tables ip rule add fwmark 1 table mailout ip rule ls0 from all lookup local 32764 from all fwmark 1 lookup mailout

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 11 Netfilter et iproute - marquage de paquets 59

32766 from all lookup main 32767 from all lookup default

Nous allons maintenant geacuteneacuterer la table mailout avec une route vers la ligne lente mais peu coucircteuse

sbinip route add default via 1959698253 dev ppp0 table mailout

Voilagrave qui est fait Il se peut que nous voulions mettre en place des exceptions et il existe de nombreuxmoyens pour le faire Nous pouvons modifier la configuration de netfilter pour exclure certains hocirctes ou nouspouvons inseacuterer une regravegle avec une prioriteacute plus faible qui pointe sur la table principale pour nos hocirctes faisantexception

Nous pouvons aussi utiliser cette fonctionnaliteacute pour nous conformer aux bits TOS en marquant les paquetsavec diffeacuterents types de service et les nombres correspondants On creacutee ensuite les regravegles qui agissent sur cestypes de service De cette faccedilon on peut deacutedier une ligne RNIS aux connexions interactives

Inutile de le dire cela marche parfaitement sur un hocircte qui fait de la translation dadresse (NAT) autrementdit du masquerading

IMPORTANT Nous avons reccedilu une information selon laquelle MASQ et SNAT entrent en conflit avec lemarquage de paquets Rusty Russell lexplique dans ce courrier

Deacutesactivez le filtrage de chemin inverse pour que cela fonctionne correctement

Note pour marquer les paquets vous aurez besoin de valider quelques options du noyau

IP advanced router (CONFIG_IP_ADVANCED_ROUTER) [Yn]IP policy routing (CONFIG_IP_MULTIPLE_TABLES) [Yn]IP use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Yn]

Voir aussi la section intituleacutee Cache web transparent utilisant netfilter iproute2 ipchains et squid dansChapitre 15gt dans le chapitre Recettes de cuisinegt

Chapitre 12 Filtres avanceacutes pour la (re-)classificationdes paquetsComme expliqueacute dans la section sur les gestionnaires de mise en file dattente baseacutes sur des classes les filtressont neacutecessaires pour classifier les paquets dans nimporte laquelle des sous-files dattente Ces filtres sontappeleacutes agrave linteacuterieur des gestionnaires de mise en file dattente baseacutes sur des classes

Voici une liste incomplegravete des classificateurs disponibles

fwBase la deacutecision sur la faccedilon dont le pare-feu a marqueacute les paquets Ceci peut ecirctre un passage facile sivous ne voulez pas apprendre la syntaxe tc lieacutee aux filtres Voir le chapitre sur les gestionnaires demise en file dattente pour plus de deacutetails

u32Base la deacutecision sur les champs agrave linteacuterieur du paquet (cest-agrave-dire ladresse IP source etc)

routeBase la deacutecision sur la route que va emprunter le paquet

rsvp rsvp6Route les paquets en se basant sur RSVP Seulement utile sur les reacuteseaux que vous controcirclez Internetne respecte pas RSVP

tcindex

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

60 Chapitre 12 Filtres avanceacutes pour la (re-)classification des paquets

Utiliseacute par le gestionnaire de file dattente DSMARK Voir la section DSMARKgt

Notez quil y a geacuteneacuteralement plusieurs maniegraveres de classifier un paquet Cela deacutepend du systegraveme declassification que vous souhaitez utiliser

Les classificateurs acceptent en geacuteneacuteral quelques arguments communs Ils sont listeacutes ici pour des raisonspratiques

protocolLe protocole que ce classificateur acceptera Geacuteneacuteralement on nacceptera que le trafic IP Exigeacute

parentLe descripteur auquel ce classificateur est attacheacute Ce descripteur doit ecirctre une classe deacutejagrave existanteExigeacute

prioLa prioriteacute de ce classificateur Les plus petits nombres seront testeacutes en premier

handleCette reacutefeacuterence a plusieurs significations suivant les diffeacuterents filtres

Toutes les sections suivantes supposeront que vous essayez de mettre en forme le trafic allant vers HostACes sections supposeront que la classe racine a eacuteteacute configureacutee sur 1 et que la classe vers laquelle vousvoulez envoyer le trafic seacutelectionneacute est 11

Le classificateur u32

Le filtre u32 est le filtre le plus avanceacute dans limpleacutementation courante Il est entiegraverement baseacute sur des tablesde hachage ce qui le rend robuste quand il y a beaucoup de regravegles de filtrage

Dans sa forme la plus simple le filtre u32 est une liste denregistrements chacun consistant en deux champs un seacutelecteur et une action Les seacutelecteurs deacutecrits ci-dessous sont compareacutes avec le paquet IP traiteacute jusquagrave lapremiegravere correspondance et laction associeacutee est reacutealiseacutee Le type daction le plus simple serait de diriger lepaquet vers une classe CBQ deacutefinie

La ligne de commande du programme tc filter utiliseacutee pour configurer le filtre consiste en trois parties laspeacutecification du filtre un seacutelecteur et une action La speacutecification du filtre peut ecirctre deacutefinie comme

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

Le champ protocol deacutecrit le protocole sur lequel le filtre sera appliqueacute Nous ne discuterons que du cas duprotocole ip Le champ preference (priority peut ecirctre utiliseacute comme alternative) fixe la prioriteacute dufiltre que lon deacutefinit Cest important dans la mesure ougrave vous pouvez avoir plusieurs filtres (listes de regravegles)avec des prioriteacutes diffeacuterentes Chaque liste sera scruteacutee dans lordre dajout des regravegles Alors la liste avec laprioriteacute la plus faible (celle qui a le numeacutero de preacutefeacuterence le plus eacuteleveacute) sera traiteacutee Le champ parentdeacutefinit le sommet de larbre CBQ (par ex 10) auquel le filtre doit ecirctre attacheacute

Les options deacutecrites sappliquent agrave tous les filtres pas seulement agrave u32

Le seacutelecteur U32

Le seacutelecteur U32 contient la deacutefinition dun modegravele qui sera compareacute au paquet traiteacute Plus preacuteciseacutement ildeacutefinit quels bits doivent correspondre dans len-tecircte du paquet et rien de plus mais cette meacutethode simple esttregraves puissante Jetons un oeil sur lexemple suivant directement tireacute dun filtre assez complexe reacuteellementexistant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le classificateur u32 61

tc filter parent 1 protocol ip pref 10 u32 fh 800800 order 2048 key ht 800 bkt 0 flowid 13 match 0010000000ff0000 at 0

Pour linstant laissons de cocircteacute la premiegravere ligne tous ces paramegravetres deacutecrivent les tables de hachage du filtreFocalisons-nous sur la ligne de seacutelection contenant le mot-cleacute match Ce seacutelecteur fera correspondre lesen-tecirctes IP dont le second octet sera 0x10 (0010) Comme nous pouvons le deviner le nombre 00ff est lemasque de correspondance disant au filtre quels bits il doit regarder Ici cest 0xff donc loctetcorrespondra si cest exactement 0x10 Le mot-cleacute at signifie que la correspondance doit deacutemarrer audeacutecalage speacutecifieacute (en octets) - dans notre cas cest au deacutebut du paquet Traduisons tout cela en langagehumain le paquet correspondra si son champ Type de Service (TOS) a le bit ltlt faible deacutelai gtgt positionneacuteAnalysons une autre regravegle

tc filter parent 1 protocol ip pref 10 u32 fh 800803 order 2051 key ht 800 bkt 0 flowid 13 match 000000160000ffff at nexthdr+0

Loption nexthdr deacutesigne len-tecircte suivant encapsuleacute dans le paquet IP cest agrave dire celui du protocole de lacouche supeacuterieure La correspondance commencera eacutegalement au deacutebut du prochain en-tecircte Elle devrait avoirlieu dans le deuxiegraveme mot de 32 bits de len-tecircte Dans les protocoles TCP et UDP ce champ contient le portde destination du paquet Le nombre est donneacute dans le format big-endian cest-agrave-dire les bits les plussignificatifs en premier Il faut donc lire 0x0016 comme 22 en deacutecimal qui correspond au service SSH dans lecas de TCP Comme vous le devinez cette correspondance est ambigueuml sans un contexte et nous endiscuterons plus loin

Ayant compris tout cela nous trouverons le seacutelecteur suivant tregraves facile agrave lire matchc0a80100ffffff00 at 16 Ce que nous avons ici cest une correspondance de trois octets au 17egravemeoctet en comptant agrave partir du deacutebut de len-tecircte IP Cela correspond aux paquets qui ont une adresse dedestination quelconque dans le reacuteseau 192168124 Apregraves avoir analyseacute les exemples nous pouvonsreacutesumer ce que nous avons appris

Seacutelecteurs geacuteneacuteraux

Les seacutelecteurs geacuteneacuteraux deacutefinissent le modegravele le masque et le deacutecalage qui seront compareacutes au contenu dupaquet En utilisant les seacutelecteurs geacuteneacuteraux vous pouvez rechercher des correspondances sur nimporte quelbit de len-tecircte IP (ou des couches supeacuterieures) Ils sont quand mecircme plus difficiles agrave eacutecrire et agrave lire que lesseacutelecteurs speacutecifiques deacutecrits ci-dessus La syntaxe geacuteneacuterale des seacutelecteurs est

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

Un des mots-cleacutes u32 u16 ou u8 doit speacutecifier la longueur du modegravele en bits PATTERN et MASK serapporteront agrave la longueur deacutefinie par ce mot-cleacute Le paramegravetre OFFSET est le deacutecalage en octets pour ledeacutemarrage de la recherche de correspondance Si le mot-clef nexthdr+ est preacutesent le deacutecalage sera relatif agravelen-tecircte de la couche reacuteseau supeacuterieure

Quelques exemples

tc filter add dev ppp14 parent 10 prio 10 u32 match u8 64 0xff at 8 flowid 14

Un paquet correspondra agrave cette regravegle si sa ltlt dureacutee de vie gtgt (TTL) est de 64 TTL est le champ deacutemarrantjuste apregraves le 8egraveme octet de len-tecircte IP

Correspond agrave tous les paquets TCP ayant le bit ACK activeacute

tc filter add dev ppp14 parent 10 prio 10 u32 match ip protocol 6 0xff

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

62 Le seacutelecteur U32

match u8 0x10 0xff at nexthdr+13 flowid 13

Utilisez ceci pour deacuteterminer la preacutesence du bit ACK sur les paquets dune longueur infeacuterieure agrave 64 octets

Veacuterifie la preacutesence dun ACK protocol IP 6 longueur de len-tecircte IP 0x5(mots de 32 bits) longueur total IP 0x34 (ACK + 12 octets doptions TCP) TCP ack actif (bit 5 offset 33) tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 13

Seuls les paquets TCP sans charge utile et avec le bit ACK positionneacute veacuterifieront cette regravegle Ici nouspouvons voir un exemple dutilisation de deux seacutelecteurs le reacutesultat final eacutetant un ET logique de leur reacutesultatSi nous jetons un coup doeil sur un scheacutema de len-tecircte TCP nous pouvons voir que le bit ACK est le secondbit (0x10) du 14egraveme octet de len-tecircte TCP (at nexthdr+13) Comme second seacutelecteur si nous voulonsnous compliquer la vie nous pouvons eacutecrire match u8 0x06 0xff at 9 agrave la place du seacutelecteurspeacutecifique protocol tcp puisque 6 est le numeacutero du protocole TCP speacutecifieacute au 10egraveme octet de len-tecircteIP Dun autre cocircteacute dans cet exemple nous ne pourrons pas utiliser de seacutelecteur speacutecifique pour la premiegraverecorrespondance simplement parce quil ny a pas de seacutelecteur speacutecifique pour deacutesigner les bits TCP ACK

Le filtre ci dessous est une version modifieacutee du filtre preacutesenteacute au-dessus La diffeacuterence est quil ne veacuterifie pasla longueur de len-tecircte ip Pourquoi Car le filtre au-dessus ne marche que sur les systegravemes 32 bits

tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 match u16 0x0000 0xffc0 at 2 flowid 13

Les seacutelecteurs speacutecifiques

La table suivante contient la liste de tous les seacutelecteurs speacutecifiques que les auteurs de cette section ont trouveacutesdans le code source du programme tc Ils rendent simplement la vie plus facile en accroissant la lisibiliteacute de laconfiguration du filtre

FIXME emplacement de la table - la table est dans un fichier seacutepareacute selectorhtml

FIXME Cest encore en Polonais -(

FIXME doit ecirctre sgmliseacute

Quelques exemples

tc filter add dev ppp0 parent 10 prio 10 u32 match ip tos 0x10 0xff flowid 14

FIXME tcp dport match ne fonctionne pas comme deacutecrit ci-dessous

La regravegle ci-dessus correspondra agrave des paquets qui ont le champ TOS eacutegal agrave 0x10 Le champ TOS commenceau deuxiegraveme octet du paquet et occupe 1 octet ce qui nous permet deacutecrire un seacutelecteur geacuteneacuteral eacutequivalent match u8 0x10 0xff at 1 Cela nous donne une indication sur limpleacutementation du filtre u32 Les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seacutelecteurs geacuteneacuteraux 63

regravegles speacutecifiques sont toujours traduites en regravegles geacuteneacuterales et cest sous cette forme quelles sont stockeacutees enmeacutemoire par le noyau Cela amegravene agrave une autre conclusion les seacutelecteurs tcp et udp sont exactement lesmecircmes et cest la raison pour laquelle vous ne pouvez pas utiliser un simple seacutelecteur match tcp dport53 0xffff pour deacutesigner un paquet TCP envoyeacute sur un port donneacute Ce seacutelecteur deacutesigne aussi les paquetsUDP envoyeacutes sur ce port Vous devez eacutegalement speacutecifier le protocole avec la regravegle suivante

tc filter add dev ppp0 parent 10 prio 10 u32 match tcp dport 53 0xffff match ip protocol 0x6 0xff flowid 12

Le classificateur route

Ce classificateur filtre en se basant sur les informations des tables de routage Quand un paquet passant agravetravers les classes et en atteint une qui est marqueacutee avec le filtre route il divise le paquet en se basant surlinformation de la table de routage

tc filter add dev eth1 parent 10 protocol ip prio 100 route

Ici nous ajoutons un classificateur route sur le noeud parent 10 avec la prioriteacute 100 Quand un paquetatteint ce noeud (ce qui arrive immeacutediatement puisquil est racine) il consulte la table de routage et si uneentreacutee de la table correspond il envoie le paquet vers la classe donneacutee et lui donne une prioriteacute de 100Ensuite vous ajoutez lentreacutee de routage approprieacutee pour finalement activer les choses

Lastuce ici est de deacutefinir realm en se basant soit sur la destination soit sur la source Voici la faccedilon deproceacuteder

ip route add HostNetwork via Gateway dev Device realm RealmNumber

Par exemple nous pouvons deacutefinir notre reacuteseau de destination 192168100 avec le nombre realm eacutegalagrave 10

ip route add 19216810024 via 192168101 dev eth1 realm 10

Quand on ajoute des filtres route on peut utiliser les nombres realm pour repreacutesenter les reacuteseaux ou leshocirctes et speacutecifier quelle est la correspondance entre les routes et les filtres

tc filter add dev eth1 parent 10 protocol ip prio 100 route to 10 classid 110

La regravegle ci-dessus indique que les paquets allant vers le reacuteseau 192168100 correspondent agrave la classe110

Le filtre route peut aussi ecirctre utiliseacute avec les routes sources Par exemple il y a un sous-reacuteseau attacheacute agravenotre routeur Linux sur eth2

ip route add 1921682024 dev eth2 realm 2 tc filter add dev eth1 parent 10 protocol ip prio 100 route from 2 classid 12

Ici le filtre speacutecifie que les paquets venant du reacuteseau 19216820 (realm 2) correspondront agrave la classe12

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

64 Les seacutelecteurs speacutecifiques

Les filtres de reacuteglementation (Policing filters)

Pour reacutealiser des configurations encore plus compliqueacutees vous pouvez avoir des filtres qui analysent le traficagrave hauteur dune certaine bande passante Vous pouvez configurer un filtre pour quil cesse complegravetementlanalyse de tout le trafic au-dessus dun certain deacutebit ou pour quil nanalyse pas la bande passante deacutepassantun certain deacutebit

Ainsi si vous deacutecidez de reacuteglementer agrave 4mbits mais quun trafic de 5mbits est preacutesent vous pouvez cesserdanalyser lensemble des 5mbits ou seulement cesser danalyser le 1 mbits suppleacutementaire et envoyer 4mbits agrave la classe correspondante

Si la bande passante deacutepasse le deacutebit configureacute vous pouvez rejeter un paquet le reclassifier ou voir si unautre filtre y correspond

Techniques de reacuteglementation

Il y a essentiellement deux faccedilons de reacuteglementer Si vous avez compileacute le noyau avec Estimators celui-cipeut mesurer plus ou moins pour chaque filtre le trafic qui est passeacute Ces estimations ne sont pas coucircteuses entemps CPU eacutetant donneacute quil ne compte que 25 fois par seconde le nombre de donneacutees qui sont passeacutees etquil calcule le deacutebit agrave partir de lagrave

Lautre maniegravere utilise encore le Token Bucket Filter qui reacuteside agrave linteacuterieur du filtre cette fois Le TBF analyseseulement le trafic A HAUTEUR de la bande passante que vous avez configureacutee Si cette bande passante estdeacutepasseacutee seul lexcegraves est traiteacute par laction de deacutepassement de limite configureacutee

Avec lestimateur du noyau

Ceci est tregraves simple et il ny a quun seul paramegravetre avrate Soit le flux demeure sous avrate et le filtreclassifie le trafic vers la classe approprieacutee soit votre deacutebit le deacutepasse et laction indiqueacutee par deacutefaut laltlt reclassification gtgt est reacutealiseacutee dans ce cas

Le noyau utilise lalgorithme EWMA pour votre bande passante ce qui la rend moins sensible aux courtesrafales de donneacutees

Avec le Token Bucket Filter

Utilisez les paramegravetres suivants

buffermaxburstbull mtuminburstbull mpubull ratebull

Ceux-ci se comportent la plupart du temps de maniegravere identique agrave ceux deacutecrits dans la section Filtre agrave seau dejetonsgt Notez cependant que si vous configurez le mtu du filtre de reacuteglementation TBF trop bas aucunpaquet ne passera et le gestionnaire de mise en file dattente de sortie TBF ne fera que les ralentir

Une autre diffeacuterence est que la reacuteglementation ne peut que laisser passer ou jeter un paquet Il ne peut pas leretenir dans le but de le retarder

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Les filtres de reacuteglementation (Policing filters) 65

Actions de deacutepassement de limite (Overlimit actions)

Si votre filtre deacutecide quun deacutepassement de limite est atteint il peut mettre en oeuvre des ltlt actions gtgtActuellement trois actions sont disponibles

continueProvoque larrecirct de lanalyse du filtre bien que dautres filtres aient la possibiliteacute de le faire

dropCeci est une option tregraves feacuteroce qui supprime simplement le trafic exceacutedant un certain deacutebit Elle estsouvent employeacutee dans le Ingress policer et a des utilisations limiteacutees Par exemple si vous avez unserveur de noms qui seacutecroule sil traite plus de 5mbits de paquets alors vous pourrez dans ce casutiliser un filtre dentreacutee pour ecirctre sucircr quil ne traitera jamais plus de 5mbits

PassOKTransmettre le trafic Peut ecirctre utiliseacute pour mettre hors service un filtre compliqueacute tout en le laissanten place

reclassifyPermet le plus souvent une reclassification vers Best Effort Ceci est laction par deacutefaut

Exemples

Le seul vrai exemple connu est mentionneacute dans la section Proteacuteger votre machine des inondations SYNgt

FIXME Si vous avez deacutejagrave utiliseacute ceci partagez sil vous plaicirct votre expeacuterience avec nous

Filtres hacheacutes pour un filtrage massif tregraves rapide

Si vous avez besoin de milliers de regravegles par exemple dans le cas ougrave vous avez beaucoup de clients oudordinateurs tous avec des speacutecifications QoS diffeacuterentes vous pourrez constater que le noyau passebeaucoup de temps agrave analyser toutes ces regravegles

Par deacutefaut tous les filtres reacutesident dans une grande chaicircne qui est analyseacutee par ordre deacutecroissant des prioriteacutesSi vous avez 1000 regravegles 1000 controcircles peuvent ecirctre neacutecessaires pour deacuteterminer ce quil faut faire dunpaquet

La veacuterification irait plus vite sil y avait 256 chaicircnes avec chacune quatre regravegles et si vous pouviez reacutepartir lespaquets sur ces 256 chaicircnes afin que la bonne regravegle soit preacutesente

Ceci est rendu possible par le hachage Imaginons que vous ayez sur votre reacuteseau 1024 clients avec desmodems cacircble avec des adresses IP allant de 1200 agrave 123255 et que chacun doit avoir unclassement particulier par exemple ltlt pauvre gtgt ltlt moyen gtgt et ltlt bourrage gtgt Cela vous ferait alors1024 regravegles dans le genre

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123254 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123255 classid 12

Pour aller plus vite nous pouvons utiliser la derniegravere partie de ladresse IP comme ltlt cleacute de hachage gtgtNous obtenons alors 256 tables la premiegravere ressemblant agrave ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

66 Actions de deacutepassement de limite (Overlimit actions)

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1210 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1220 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1230 classid 12

La suivante commence comme ceci

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11

De cette maniegravere seules quatre recherches au plus sont neacutecessaires et deux en moyenne

La configuration est plutocirct compliqueacutee mais elle en vaut vraiment la peine du fait des nombreuses regraveglesNous creacuteons dabord un filtre racine puis une table avec 256 entreacutees

tc filter add dev eth1 parent 10 prio 5 protocol ip u32 tc filter add dev eth1 parent 10 prio 5 handle 2 u32 divisor 256

Nous ajoutons maintenant des regravegles dans la table preacuteceacutedemment creacuteeacutee

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 120123 flowid 11 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 121123 flowid 12 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 123123 flowid 13 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 124123 flowid 12

Ceci est lentreacutee 123 qui contient les correspondances pour 12013 121123 122123 et123123 qui les envoient respectivement vers 11 12 13 et 12 Notez que nous devons speacutecifiernotre seau de hachage en hexadeacutecimal 0x7b pour 123

Nous creacuteons ensuite un ltlt filtre de hachage gtgtqui dirige le trafic vers la bonne entreacutee de la table de hachage

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 800 match ip src 120016 hashkey mask 0x000000ff at 12 link 2

Ok certains nombres doivent ecirctre expliqueacutes La table de hachage par deacutefaut est appeleacutee 800 et tous lesfiltres deacutemarrent de lagrave Nous seacutelectionnons alors ladresse source qui est en position 12 13 14 et 15 danslen-tecircte IP et indiquons que seule la derniegravere partie nous inteacuteresse Ceci est envoyeacute vers la table de hachage2 qui a eacuteteacute creacuteeacutee plus tocirct

Cest plutocirct compliqueacute mais cela marche en pratique et les performances seront eacutepoustouflantes Notez quecet exemple pourrait ecirctre ameacutelioreacute pour que chaque chaicircne contienne un filtre ce qui repreacutesenterait le casideacuteal

Filtrer le trafic IPv6

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Filtres hacheacutes pour un filtrage massif tregraves rapide 67

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

La base de donneacutees des politiques de routage (RPDB) a remplaceacute le routage IPv4 et la structure dadressage agravelinteacuterieur du noyau Linux ce qui a permis les merveilleuses fonctionnaliteacutes deacutecrites dans ce HOWTOMalheureusement la pile IPv6 agrave linteacuterieur de Linux a eacuteteacute impleacutementeacutee en dehors de cette structure principaleBien quils partagent des fonctionnaliteacutes la structure RPDB de base ne participe pas dans ou avec lesstructures dadressage et de routage de IPv6

Ceci va sucircrement changer nous devons juste attendre un peu plus longtemps

FIXME Des ideacutees sur des personnes travaillant sur ce sujet Planifications

Marquer les paquets IPv6 en utilisant ip6tables

ip6tables est capable de marquer un paquet et de lui assigner un numeacutero

ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Ceci ne va cependant pas nous aider dans la mesure ougrave le paquet ne passera pas par la structure RPDB

Utiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

IPv6 est normalement encapsuleacute dans un tunnel SIT et transporteacute agrave travers les reacuteseaux IPv4 Voir la sectionsur le tunnel IPv6 pour de plus amples informations quant agrave la configuration dun tel tunnel Ceci nous permetde filtrer les paquets IPv4 en consideacuterant les paquets IPv6 comme la charge utile

Le filtre suivant repegravere tous les paquets IPv6 encapsuleacutes dans des paquets IPv4

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff flowid 4242

Continuons Supposons que les paquets IPv6 soient envoyeacutes gracircce agrave des paquets IPv4 et que ces paquets nontpas doptions On pourrait utiliser le filtre suivant pour repeacuterer ICMPv6 dans IPv6 dans IPv4 nayant aucuneoption 0x3a (58) est le type du champ en-tecircte suivant pour ICMPv6

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3a 0xff at 26 flowid 4242

Repeacuterer ladresse de destination IPv6 neacutecessite un peu plus de travail Le filtre suivant repegravere ladresse dedestination 3ffe202cffff322304ffffe08358d

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3f 0xff at 44 match u8 0xfe 0xff at 45 match u8 0x20 0xff at 46 match u8 0x2c 0xff at 47 match u8 0xff 0xff at 48 match u8 0xff 0xff at 49 match u8 0x00 0xff at 50 match u8 0x32 0xff at 51 match u8 0x02 0xff at 52

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

68 Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

match u8 0x30 0xff at 53 match u8 0x4f 0xff at 54 match u8 0xff 0xff at 55 match u8 0xfe 0xff at 56 match u8 0x08 0xff at 57 match u8 0x35 0xff at 58 match u8 0x8d 0xff at 59 flowid 1013

La mecircme technique peut ecirctre utiliseacutee pour repeacuterer les reacuteseaux Par exemple 2001

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x20 0xff at 28 match u8 0x01 0xff at 29 flowid 1013

Chapitre 13 Paramegravetres reacuteseau du noyauLe noyau utilise de nombreux paramegravetres qui peuvent ecirctre ajusteacutes en diffeacuterentes circonstances Bien quecomme dhabitude les paramegravetres par deacutefaut conviennent agrave 99amppercnt des installations nous ne pourrionspas appeler ce document ltlt HOWTO avanceacute gtgt sans en dire un mot

Les eacuteleacutements inteacuteressants sont dans procsysnet jetez-y un oeil Tout ne sera pas documenteacute ici audeacutepart mais nous y travaillons

En attendant vous pouvez jeter un oeil dans les sources du noyau Linux et lire le fichierDocumentationfilesystemsproctxt La plupart des fonctionnaliteacutes y sont expliqueacutees

Filtrage de Chemin Inverse (Reverse Path Filtering)

Par deacutefaut les routeurs routent tout mecircme les paquets qui visiblement nappartiennent pas agrave votre reacuteseau Unexemple courant est lespace des adresses IP priveacutees seacutechappant sur Internet Si vous avez une interface avecune route pour 1959696024 dessus vous ne vous attendrez pas agrave voir arriver des paquets venant de21264941

Beaucoup dutilisateurs veulent deacutesactiver cette fonctionnaliteacute Les deacuteveloppeurs du noyau ont permis de lefaire facilement Il y a des fichiers dans proc ougrave vous pouvez ordonner au noyau de le faire pour vous Lameacutethode est appeleacutee ltlt Filtrage par Chemin Inverse gtgt (Reverse Path Filtering) Pour faire simple si lareacuteponse agrave ce paquet ne sort pas par linterface par laquelle il est entreacute alors cest un paquet ltlt bogueacute gtgt et ilsera ignoreacute

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

for i in procsysnetipv4confrp_filter dogt echo 2 gt $i gt done

En reprenant lexemple du deacutebut si un paquet arrivant sur le routeur Linux par eth1 preacutetend venir du reacuteseauBureau+FAI il sera eacutelimineacute De mecircme si un paquet arrivant du reacuteseau Bureau preacutetend ecirctre de quelque part agravelexteacuterieur du pare-feu il sera eacutegalement eacutelimineacute

Ce qui est preacutesenteacute ci-dessus est le filtrage de chemin inverse complet Le parameacutetrage par deacutefaut filtreseulement sur les adresses IP des reacuteseaux directement connecteacutes Ce parameacutetrage par deacutefaut est utiliseacute parceque le filtrage complet eacutechoue dans le cas dun routage asymeacutetrique (ougrave il y a des paquets arrivant par un

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 13 Paramegravetres reacuteseau du noyau 69

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 reacuteseau Les donneacutees descendent vers la parabole satellite et les reacuteponses repartentpar des lignes terrestres normales)

Si cette exception sapplique dans votre cas (vous devriez ecirctre au courant) vous pouvez simplement deacutesactiverle rpamplowbarfilter sur linterface darriveacutee des donneacutees satellite Si vous voulez voir si des paquetssont eacutelimineacutes le fichier logamplowbarmartians du mecircme reacutepertoire indiquera au noyau de les enregistrerdans votre syslog

echo 1 gtprocsysnetipv4confltinterfacenamegtlog_martians

FIXME Est-ce que la configuration des fichiers dans confamplcubdefaultallamprcub suffit - martijn

Configurations obscures

Bon il y a beaucoup de paramegravetres qui peuvent ecirctre modifieacutes Nous essayons de tous les lister Voir aussi unedocumentation partielle dans Documentationip-sysctltxt

Certaines de ces configurations ont des valeurs par deacutefaut diffeacuterentes suivant que vous reacutepondez Yes ou No agravela question Configure as router and not host lors de la compilation du noyau

Oskar Andreasson a une page sur ces options et il apparaicirct quelle soit meilleure que la notre De ce fait allezeacutegalement voir httpipsysctl-tutorialfrozentuxnet

ipv4 geacuteneacuterique

En remarque geacuteneacuterale les fonctionnaliteacutes de limitation de deacutebit ne fonctionnent pas sur linterfaceloopback Nessayez donc pas de les tester localement Les limites sont exprimeacutees en ltlt tic-tac gtgt (jiffies)et elles utilisent obligatoirement le Token Bucket Filter mentionneacute plus tocirct

amplsqbNdT le terme jiffies deacutesigne un mouvement reacutegulier faisant reacutefeacuterence au ltlt tic-tac gtgt dune horlogeDans le noyau lui-mecircme une variable globale nommeacutee jiffies est increacutementeacutee agrave chaque interruptiondhorloge]

Le noyau a une horloge interne qui tourne agrave HZ impulsions (ou jiffies) par seconde Sur Intel HZ est la plupartdu temps eacutegale agrave 100 Donc configurer un fichier amplowbarrate agrave disons 50 autorise 2 paquets parseconde Le Token Bucket Filter est eacutegalement configureacute pour autoriser une rafale de donneacutees de 6 paquets auplus si suffisamment de jetons ont eacuteteacute gagneacutes

Plusieurs eacuteleacutements de la liste suivante proviennent du fichierusrsrclinuxDocumentationnetworkingip-sysctltxt eacutecrit par Alexey Kuznetsovltkuznetms2inracrugt et Andi Kleen ltakmucdegt

procsysnetipv4icmpamplowbardestunreachamplowbarrateSi le noyau deacutecide quil ne peut pas deacutelivrer un paquet il le rejettera et enverra agrave la source du paquetun ICMP notifiant ce rejet

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarallNagit en aucun cas comme eacutecho pour les paquets Ne configurez pas ceci par deacutefaut Cependant sivous ecirctes utiliseacute comme relais dans une attaque de Deacuteni de Services cela peut ecirctre utile

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarbroadcastsamplsqbUtileamprsqb

Si vous pinguez ladresse de diffusion dun reacuteseau tous les hocirctes sont senseacutes reacutepondre Cela permet decoquettes attaques de deacuteni de service Mettez cette valeur agrave 1 pour ignorer ces messages de diffusion

procsysnetipv4icmpamplowbarechoreplyamplowbarrate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

70 Filtrage de Chemin Inverse (Reverse Path Filtering)

Le deacutebit auquel les reacuteponses echo sont envoyeacutees aux destinatairesprocsysnetipv4icmpamplowbarignoreamplowbarbogusamplowbarerroramplowbarresponses

Configurer ceci pour ignorer les erreurs ICMP dhocirctes du reacuteseau reacuteagissant mal aux trames envoyeacuteesvers ce quils perccediloivent comme ladresse de diffusion

procsysnetipv4icmpamplowbarparamprobamplowbarrateUn message ICMP relativement peu connu qui est envoyeacute en reacuteponse agrave des paquets qui ont desen-tecirctes IP ou TCP erroneacutes Avec ce fichier vous pouvez controcircler le deacutebit auquel il est envoyeacute

procsysnetipv4icmpamplowbartimeexceedamplowbarrateVoici la ceacutelegravebre cause des ltlt eacutetoiles Solaris gtgt dans traceroute Limite le nombre de messages ICMPTime Exceeded envoyeacutes

procsysnetipv4igmpamplowbarmaxamplowbarmembershipsNombre maximal de sockets igmp (multidistribution) en eacutecoute sur lhocircte FIXME Est-ce vrai

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmaxtimeFIXME Ajouter une petite explication sur le stockage des partenaires internet (inet peer) Intervallede temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris en compte lorsdune faible (voire inexistante) utilisation du pool Mesureacute en jiffies amplsqbNdT Le pool deacutesigne icila liste des adresses IP des partenaires internet]

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmintimeIntervalle de temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris encompte lors dune utilisation intensive du pool Mesureacute en jiffies

procsysnetipv4inetamplowbarpeeramplowbarmaxttlDureacutee de conservation maximale des enregistrements Les entreacutees non utiliseacutees expireront au bout decet intervalle de temps (cest-agrave-dire quand le nombre dentreacutees dans le pool est tregraves petit) Mesureacute enjiffies

procsysnetipv4inetamplowbarpeeramplowbarminttlDureacutee de conservation minimale des enregistrements Devrait ecirctre suffisante pour prendre en comptele temps de vie des fragments sur lhocircte qui doit reacuteassembler les paquets Cette dureacutee minimale estgarantie si le nombre deacuteleacutements dans le pool est infeacuterieur au seuil fixeacute parinetamplowbarpeeramplowbarthreshold

procsysnetipv4inetamplowbarpeeramplowbarthresholdTaille approximative de lespace de stockage des partenaires internet A partir de ce seuil les entreacuteessont effaceacutees Ce seuil deacutetermine la dureacutee de vie des entreacutees ainsi que les intervalles de temps entredeux deacuteclenchements du ramasse-miettes Plus il y a dentreacutees plus le temps de vie est faible et pluslintervalle du ramasse-miettes est faible

procsysnetipv4ipamplowbarautoconfigCe fichier contient la valeur 1 si lhocircte a reccedilu sa configuration IP par RARP BOOTP DHCP ou unmeacutecanisme similaire Autrement il contient la valeur zeacutero

procsysnetipv4ipamplowbardefaultamplowbarttlDureacutee de vie (TTL) des paquets Fixer agrave la valeur sucircre de 64 Augmentez-la si vous avez un reacuteseauimmense mais pas ltlt pour samuser gtgt les boucles sans fin dun mauvais routage sont plusdangereuses si le TTL est eacuteleveacute Vous pouvez mecircme envisager de diminuer la valeur dans certainescirconstances

procsysnetipv4ipamplowbardynaddrVous aurez besoin de positionner cela si vous utilisez la connexion agrave la demande avec une adressedinterface dynamique Une fois que votre interface a eacuteteacute configureacutee toutes les sockets TCP locauxqui nont pas eu de paquets de reacuteponse seront retraiteacutees pour avoir la bonne adresse Cela reacutesout leproblegraveme poseacute par une connexion deacutefectueuse ayant configureacute une interface suivie par une deuxiegravemetentative reacuteussie (avec une adresse IP diffeacuterente)

procsysnetipv4ipamplowbarforwardLe noyau doit-il essayer de transmettre les paquets Deacutesactiveacute par deacutefaut

procsysnetipv4ipamplowbarlocalamplowbarportamplowbarrangeIntervalle des ports locaux pour les connexions sortantes En fait assez petit par deacutefaut 1024 agrave 4999

procsysnetipv4ipamplowbarnoamplowbarpmtuamplowbardiscConfigurez ceci si vous voulez deacutesactiver la deacutecouverte du MTU de chemin une technique pour

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 71

deacuteterminer le plus grand MTU possible sur votre chemin Voir aussi la section sur la deacutecouverte duMTU de chemin dans le chapitre Recettes de cuisinegt

procsysnetipv4ipfragamplowbarhighamplowbarthreshMeacutemoire maximum utiliseacutee pour reacuteassembler les fragments IP Quandipfragamplowbarhighamplowbarthresh octets de meacutemoire sont alloueacutes pour cela legestionnaire de fragments rejettera les paquets jusquagrave ce queipfragamplowbarlowamplowbarthresh soit atteint

procsysnetipv4ipamplowbarnonlocalamplowbarbindConfigurez ceci si vous voulez que vos applications soient capables de se lier agrave une adresse quinappartient pas agrave une interface de votre systegraveme Ceci peut ecirctre utile quand votre machine est sur unlien non-permanent (ou mecircme permanent) Vos services sont donc capables de deacutemarrer et de se lier agraveune adresse speacutecifique quand votre lien est inactif

procsysnetipv4ipfragamplowbarlowamplowbarthreshMeacutemoire minimale utiliseacutee pour reacuteassembler les fragments IP

procsysnetipv4ipfragamplowbartimeTemps en secondes du maintien dun fragment IP en meacutemoire

procsysnetipv4tcpamplowbarabortamplowbaronamplowbaroverflowUne option booleacuteenne controcirclant le comportement dans le cas de nombreuses connexions entrantesQuand celle-ci est activeacutee le noyau envoie rapidement des paquets RST quand un service estsurchargeacute

procsysnetipv4tcpamplowbarfinamplowbartimeoutTemps de maintien de leacutetat FIN-WAIT-2 pour un socket dans le cas ougrave il a eacuteteacute fermeacute de notre cocircteacuteLe partenaire peut ecirctre deacutefectueux et ne jamais avoir fermeacute son cocircteacute ou mecircme mourir de maniegravereinattendue La valeur par deacutefaut est de 60 secondes La valeur usuelle utiliseacutee dans le noyau 22 eacutetaitde 180 secondes Vous pouvez la remettre mais rappelez vous que si votre machine a un serveurWEB surchargeacute vous risquez de deacutepasser la meacutemoire avec des kilotonnes de sockets morts Lessockets FIN-WAIT2 sont moins dangereux que les sockets FIN-WAIT1 parce quils consomment aumaximum 15K de meacutemoire mais ils ont tendance agrave vivre plus longtemps Cftcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarkeepaliveamplowbartimeDureacutee entre lenvoi de deux messages keepalive quand loption keepalive est activeacutee Par deacutefaut 2heures

procsysnetipv4tcpamplowbarkeepaliveamplowbarintvlA quelle freacutequence les sondes sont retransmises lorsquil ny a pas eu acquittement de sonde Pardeacutefaut 75 secondes

procsysnetipv4tcpamplowbarkeepaliveamplowbarprobesCombien de sondes TCP keepalive seront envoyeacutees avant de deacutecider que la connexion est briseacutee Pardeacutefaut 9 En multipliant par tcpamplowbarkeepaliveamplowbarintvl cela donne le tempspendant lequel un lien peut ecirctre actif sans donner de reacuteponses apregraves lenvoi dun keepalive

procsysnetipv4tcpamplowbarmaxamplowbarorphansNombre maximum de sockets TCP qui ne sont pas relieacutes agrave un descripteur de fichier utilisateur geacutereacutepar le systegraveme Si ce nombre est deacutepasseacute les connexions orphelines sont immeacutediatement reacuteinitialiseacuteeset un avertissement est envoyeacute Cette limite existe seulement pour preacutevenir des attaques de deacuteni deservices simples Vous ne devez pas compter sur ceci ou diminuer cette limite artificiellement maisplutocirct laugmenter (probablement apregraves avoir augmenteacute la meacutemoire) si les conditions du reacuteseaureacuteclament plus que cette valeur par deacutefaut et reacutegler vos services reacuteseau pour quils deacutetruisent sanstarder ce type deacutetat Laissez-moi vous rappeler encore que chaque orphelin consomme jusquagraveenviron 64K de meacutemoire non swappable

procsysnetipv4tcpamplowbarorphanamplowbarretriesCombien dessais avant de deacutetruire une connexion TCP fermeacutee par notre cocircteacute La valeur par deacutefaut de7 correspond agrave un temps denviron 50s agrave 16 min suivant le RTO Si votre machine supporte un serveurWeb vous pouvez envisager de baisser cette valeur dans la mesure ougrave de tels sockets peuventconsommer des ressources significatives Cf tcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarmaxamplowbarsynamplowbarbacklog

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

72 ipv4 geacuteneacuterique

Nombre maximum de requecirctes dune connexion meacutemoriseacutee qui navait pas encore reccedilu daccuseacute dereacuteception du client connecteacute La valeur par deacutefaut est de 1024 pour des systegravemes avec plus de 128 Mode meacutemoire et 128 pour des machines avec moins de meacutemoire Si un serveur souffre de surchargeessayez daugmenter ce nombre Attention Si vous positionnez une valeur supeacuterieure agrave 1024 il seraitpreacutefeacuterable de changer TCPamplowbarSYNQamplowbarHSIZE dans le fichierincludenettcph pour garder TCPamplowbarSYNQamplowbarHSIZE16 lt=tcpamplowbarmaxamplowbarsynamplowbarbacklog et de recompiler de noyau

procsysnetipv4tcpamplowbarmaxamplowbartwamplowbarbucketsNombre maximum de sockets timewait geacutereacutees par le systegraveme simultaneacutement Si ce nombre estdeacutepasseacute le socket timewait est immeacutediatement deacutetruit et un message davertissement est envoyeacuteCette limite nexiste que pour preacutevenir des attaques de deacuteni de services simples Vous ne devez pasdiminuer cette limite artificiellement mais plutocirct laugmenter (probablement apregraves avoir augmenteacute lameacutemoire) si les conditions du reacuteseau reacuteclament plus que cette valeur par deacutefaut

procsysnetipv4tcpamplowbarretransamplowbarcollapseCompatibiliteacute bug agrave bug avec certaines imprimantes deacutefectueuses Tentative denvoi de plus grospaquets lors de la retransmission pour contourner le bug de certaines piles TCP

procsysnetipv4tcpamplowbarretries1Combien dessais avant de deacutecider que quelque chose est erroneacute et quil est neacutecessaire dinformer decette suspicion la couche reacuteseau La valeur minimale du RFC est de 3 Cest la valeur par deacutefaut ellecorrespond agrave un temps denviron 3 sec agrave 8 min suivant le RTO

procsysnetipv4tcpamplowbarretries2Combien dessais avant de deacutetruire une connexion TCP active Le RFC 1122 preacutecise que la limite nedevrait pas deacutepasser 100 secondes Cest un nombre trop petit La valeur par deacutefaut de 15 correspond agraveun temps de environ 13 agrave 30 minutes suivant le RTO

procsysnetipv4tcpamplowbarrfc1337Ce booleacuteen active un rectificatif pour ltlt lassassinat hasardeux des time-wait dans tcp gtgt deacutecrit dansle RFC 1337 Sil est activeacute le noyau rejette les paquets RST pour les sockets agrave leacutetat de time-waitPar deacutefaut 0

procsysnetipv4tcpamplowbarsackUtilise un ACK seacutelectif qui peut ecirctre utiliseacute pour signifier que des paquets speacutecifiques sont manquantFacilite ainsi une reacutecupeacuteration rapide

procsysnetipv4tcpamplowbarstdurgUtilise linterpreacutetation du RFC Host Requirements du champ TCP pointeur urgent La plupart deshocirctes utilisent la vieille interpreacutetation BSD Donc si vous activez cette option il se peut que Linux necommunique plus correctement avec eux Par deacutefaut FALSE (FAUX)

procsysnetipv4tcpamplowbarsynamplowbarretriesNombre de paquets SYN que le noyau enverra avant de tenter leacutetablissement dune nouvelleconnexion

procsysnetipv4tcpamplowbarsynackamplowbarretriesPour ouvrir lautre cocircteacute de la connexion le noyau envoie un SYN avec un ACK superposeacute(piggyback) pour accuser reacuteception du SYN preacuteceacutedemment envoyeacute Cest la deuxiegraveme partie de lapoigneacutee de main agrave trois voies (threeway handshake) Cette configuration deacutetermine le nombre depaquets SYN+ACK agrave envoyer avant que le noyau nabandonne la connexion

procsysnetipv4tcpamplowbartimestampsLes estampillages horaires sont utiliseacutes entre autres pour se proteacuteger du rebouclage des numeacuteros deseacutequence On peut concevoir quun lien agrave 1 gigabit puisse de nouveau rencontrer un numeacutero deseacutequence preacuteceacutedent avec une valeur hors-ligne parcequil eacutetait dune geacuteneacuteration preacuteceacutedenteLestampillage horaire permet de reconnaicirctre cet ltlt ancien paquet gtgt

procsysnetipv4tcpamplowbartwamplowbarrecycleMise en place du recyclage rapide des sockets TIME-WAIT La valeur par deacutefaut est 1 Celle-ci nedevrait pas ecirctre changeacutee sans le conseildemande dexperts techniques

procsysnetipv4tcpamplowbarwindowamplowbarscalingTCPIP autorise normalement des fenecirctres jusquagrave une taille de 65535 octets Pour des reacuteseauxvraiment rapides cela peut ne pas ecirctre assez Les options windows scaling autorisent des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 73

fenecirctres jusquau gigaoctet ce qui est adapteacute pour les produits agrave grande bande passante

Configuration des peacuteripheacuteriques

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4confDEVacceptamplowbarredirectsSi un routeur deacutecide que vous lutilisez agrave tort (cest-agrave-dire quil a besoin de reacute-envoyer votre paquet surla mecircme interface) il vous enverra un message ICMP Redirect Cela preacutesente cependant un petitrisque pour la seacutecuriteacute et vous pouvez le deacutesactiver ou utiliser les redirections seacutecuriseacutees

procsysnetipv4confDEVacceptamplowbarsourceamplowbarroutePlus vraiment utiliseacute On lutilisait pour ecirctre capable de donner agrave un paquet une liste dadresses IP agravevisiter Linux peut ecirctre configureacute pour satisfaire cette option IP

procsysnetipv4confDEVbootpamplowbarrelayAccepte les paquets avec une adresse source 0bcd et des adresses destinations qui ne correspondentni agrave cet hocircte ni au reacuteseau local On suppose quun deacutemon de relais BOOTP interceptera et transmettrade tels paquets

La valeur par deacutefaut est 0 puisque cette fonctionnaliteacute nest pas encore impleacutementeacutee (noyau 2212)procsysnetipv4confDEVforwarding

Active ou deacutesactive la transmission IP sur cette interfaceprocsysnetipv4confDEVlogamplowbarmartians

Voir la section sur le Filtrage de Chemin Inversegtprocsysnetipv4confDEVmcamplowbarforwarding

Si vous faites de la transmission multidistribution (multicast) sur cette interfaceprocsysnetipv4confDEVproxyamplowbararp

Si vous configurez ceci agrave 1 cet interface reacutepondra aux requecirctes ARP pour les adresses que le noyaudoit router Peut ecirctre tregraves utile si vous mettez en place des ltlt pseudo ponts ip gtgt Prenez bien gardedavoir des masques de sous-reacuteseau corrects avant dactiver cette option Faites eacutegalement attentionque le rp_filter agisse aussi sur le requecirctes ARP

procsysnetipv4confDEVrpamplowbarfilterVoir la section sur le Filtrage de Chemin Inversegt

procsysnetipv4confDEVsecureamplowbarredirectsAccepte les messages de redirection ICMP seulement pour les passerelles indiqueacutees dans la liste despasserelles par deacutefaut Activeacute par deacutefaut

procsysnetipv4confDEVsendamplowbarredirectsActive la possibiliteacute denvoyer les messages de redirections mentionneacutees ci-dessus

procsysnetipv4confDEVsharedamplowbarmediaSi cela nest pas activeacute le noyau ne considegravere pas que diffeacuterents sous-reacuteseaux peuvent communiquerdirectement sur cette interface La configuration par deacutefaut est Yes

procsysnetipv4confDEVtagFIXME agrave remplir

Politique de voisinage

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4neighDEVanycastamplowbardelayValeur maximum du deacutelai aleacuteatoire de reacuteponse exprimeacute en jiffies (1100 sec) aux messages desollicitation des voisins Nest pas encore impleacutementeacute (Linux ne possegravede pas encore le supportanycast)

procsysnetipv4neighDEVappamplowbarsolicit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

74 Configuration des peacuteripheacuteriques

Deacutetermine le nombre de requecirctes agrave envoyer au deacutemon ARP de lespace utilisateur Utilisez 0 pourdeacutesactiver

procsysnetipv4neighDEVbaseamplowbarreachableamplowbartimeUne valeur de base utiliseacutee pour le calcul du temps aleacuteatoire daccegraves comme speacutecifieacute dans leRFC2461

procsysnetipv4neighDEVdelayamplowbarfirstamplowbarprobeamplowbartimeDeacutelai avant de tester pour la premiegravere fois si le voisin peut ecirctre atteint (voirgcamplowbarstaleamplowbartime)

procsysnetipv4neighDEVgcamplowbarstaleamplowbartimeDeacutetermine la freacutequence agrave laquelle on doit veacuterifier les vieilles entreacutees ARP Si une entreacutee est obsolegraveteelle devra de nouveau ecirctre reacutesolue (ce qui est utile quand une adresse IP a eacuteteacute attribueacutee agrave une autremachine) Si ucastamplowbarsolicit est supeacuterieur agrave 0 alors on essaie dabord denvoyer unpaquet ARP directement agrave lhocircte connu Si cela eacutechoue et que mcastamplowbarsolicit estsupeacuterieur agrave 0 alors une requecircte ARP est multidiffuseacutee

procsysnetipv4neighDEVlocktimeUne entreacutee ARP nest remplaceacutee par une nouvelle que si lancienne est au moins preacutesente depuislocktime Cela eacutevite trop deacutecriture dans le cache

procsysnetipv4neighDEVmcastamplowbarsolicitNombre maximum dessais conseacutecutifs pour une sollicitation multicast

procsysnetipv4neighDEVproxyamplowbardelayTemps maximum (le temps reacuteel est aleacuteatoire et compris entre 0 et proxytime) avant de reacutepondre agraveune requecircte ARP pour laquelle nous avons une entreacutee de proxy ARP Peut ecirctre utiliseacute dans certainscas pour se preacutemunir des inondations reacuteseaux

procsysnetipv4neighDEVproxyamplowbarqlenLongueur maximale de la file dattente du temporisateur de cache arp en attente (Voirproxyamplowbardelay)

procsysnetipv4neighDEVretransamplowbartimeLe temps exprimeacute en jiffies (1100 sec) entre deux requecirctes ARP Utiliseacute pour la reacutesolutiondadresses et pour deacuteterminer si un voisin est inaccessible

procsysnetipv4neighDEVucastamplowbarsolicitNombre maximum de requecirctes ARP unicast

procsysnetipv4neighDEVunresamplowbarqlenLongueur maximum de la file dattente pour la requecircte ARP en cours le nombre de paquets qui sontaccepteacutes des autres couches pendant la reacutesolution ARP dune adresse

Internet QoS Architectures and Mechanisms for Quality of Service Zheng Wang ISBN 1-55860-608-4Livre traitant des sujets lieacutes agrave la qualiteacute de service Bien pour comprendre les concepts de base

Configuration du routage

procsysnetipv4routeerroramplowbarburstCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarburst est grand moins il yaura de messages Erroramplowbarburst controcircle le moment ougrave les messages seront supprimeacutesLes configurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeerroramplowbarcostCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarcost est grand moins il yaura de messages erroramplowbarburst controcircle le moment ougrave les messages seront jeteacutes Lesconfigurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeflushLeacutecriture dans ce fichier provoque la vidange du cache du routage

procsysnetipv4routegcamplowbarelasticityValeurs qui controcirclent la freacutequence et le comportement de lalgorithme garbage collection du cachede routage Ceci peut ecirctre important en cas de deacutefaut Au moins gcamplowbartimeout secondes

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de voisinage 75

seacutecouleront avant que le noyau ne passe agrave une autre route si la preacuteceacutedente nest plus opeacuterationnelleConfigureacute par deacutefaut agrave 300 Diminuez cette valeur si vous voulez passer plus rapidement ce type deproblegraveme

Voir aussi ce message par Ard van Breemenprocsysnetipv4routegcamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarminamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarthresh

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbartimeout

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routemaxamplowbardelay

Deacutelai dattente pour la vidange du cache du routageprocsysnetipv4routemaxamplowbarsize

Taille maximum du cache de routage Les vieilles entreacutees seront purgeacutees quand le cache aura atteintcette taille

procsysnetipv4routeminamplowbaradvamplowbarmssFIXME agrave remplir

procsysnetipv4routeminamplowbardelayDeacutelai dattente pour vider le cache de routage

procsysnetipv4routeminamplowbarpmtuFIXME agrave remplir

procsysnetipv4routemtuamplowbarexpiresFIXME agrave remplir

procsysnetipv4routeredirectamplowbarloadFacteurs qui deacuteterminent si plus de redirections ICMP doivent ecirctre envoyeacutees agrave un hocircte speacutecifiqueAucune redirection ne sera envoyeacutee une fois que la limite de charge (load limit) ou que le nombremaximum de redirections aura eacuteteacute atteint

procsysnetipv4routeredirectamplowbarnumberVoir procsysnetipv4routeredirectamplowbarload

procsysnetipv4routeredirectamplowbarsilenceTemporisation pour les redirections Au dela de cette peacuteriode les redirections seront de nouveauenvoyeacutees mecircme si elles ont eacuteteacute stoppeacutees parce que la charge ou le nombre limite a eacuteteacute atteint

Chapitre 14 Gestionnaires de mise en file dattenteavanceacutes amp moins communsSi vous constatez que vous avez des besoins qui ne sont pas geacutereacutes par les files dattente citeacutees preacuteceacutedemmentle noyau contient quelques autres files dattente plus speacutecialiseacutees mentionneacutees ici

bfifopfifo

Ces files dattente sans classes sont plus simples que pfifoamplowbarfast dans la mesure ougrave elles nontpas de bandes internes tout le trafic eacutetant vraiment eacutequivalent Elles ont cependant lavantage important dereacutealiser des statistiques Donc mecircme si vous navez pas besoin de mise en forme ou de donner une prioriteacutevous pouvez employer ce gestionnaire pour deacuteterminer larrieacutereacute (backlog) de votre interface

pfifo mesure en paquets et bfifo en octets

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

76 Chapitre 14 Gestionnaires de mise en file dattente avanceacutes amp moins communs

Paramegravetres amp usage

limitSpeacutecifie la taille de la file dattente Mesureacutee en octets pour bfifo et en paquets pour pfifo Pardeacutefaut correspond agrave des paquets de taille eacutegale au paramegravetre txqueuelen de linterface (voir lechapitre pfifo_fastgt) ou txqueuelenmtu octets pour bfifo

Algorithme Clark-Shenker-Zhang (CSZ)

Ceci est si theacuteorique que mecircme Alexey (lauteur principal de CBQ) preacutetend ne pas le comprendre De sonpropre avis

David D Clark Scott Shenker and Lixia Zhang Supporting Real-Time Applications in anIntegrated Services Packet Network Architecture and Mechanism

Comme je le comprends lideacutee principale est de creacuteer des flux WFQ pour chaque servicegaranti et dallouer le reste de la bande passante au flux factice appeleacute flow-0 Le Flux-0inclut le trafic de service preacutedictif et le trafic best-effort Il est traiteacute par un ordonnanceur deprioriteacute qui alloue la bande passante de plus grande prioriteacute aux services preacutedictifs et le resteaux paquets best-effort

Notez que dans CSZ les flux ne sont PAS limiteacutes agrave leur bande passante On suppose que leflux a passeacute le controcircle dadmission agrave la frontiegravere du reacuteseau QoS et quil na pas besoin demises en forme suppleacutementaires Nimporte quelles autres tentatives pour ameacuteliorer le flux oupour le mettre en forme gracircce agrave un seau de jetons lors deacutetapes intermeacutediaires introduiront desretards non deacutesireacutes et augmenteront la gigue

A lheure actuelle CSZ est le seul ordonnanceur qui fournit un veacuteritable service garanti Lesautres impleacutementations (incluant CBQ) nassurent pas un deacutelai garanti et rendent la giguealeacuteatoire

Ne semble pas actuellement un bon candidat agrave utiliser agrave moins que vous nayez lu et comprislarticle mentionneacute

DSMARK

Esteve Camps

ltmarvingrnesgtltestevehadesudgesgt

Ce texte est un extrait de ma thegravese sur le support QoS dans Linux Septembre 2000

Documents sources

Draft-almesberger-wajhak-diffserv-linux-01txtbull Exemples de la distribution iproute2bull White Paper-QoS protocols and architectures et Foires Aux Questions IP QoS les deux par Qualityof Service Forum

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 77

Introduction

Avant tout il serait preacutefeacuterable de lire les RFC eacutecrits sur ce sujet (RFC2474 RFC2475 RFC2597 et RFC2598)sur le site web du groupe de travail DiffServ IETF et sur le site web de Werner Almesberger (Il a eacutecrit lecode permettant le support des Services Diffeacuterencieacutes sous Linux)

A quoi DSMARK est-il relieacute

DSMARK est un gestionnaire de mise en file dattente qui offre les fonctionnaliteacutes dont ont besoin les servicesdiffeacuterencieacutes (Differentiated Services) (eacutegalement appeleacutes DiffServ ou tout simplement DS) DiffServ est lunedes deux architectures actuelles de la Qualiteacute de Services (QoS Quality of Services) (lautre est appeleacuteeservices inteacutegreacutes (Integrated Services) Elle se base sur la valeur du champ DS contenu dans len-tecircte IP dupaquet

Une des premiegraveres solutions dans IP pour offrir des niveaux de qualiteacute de services eacutetait le champ Type deService (octet TOS) de len-tecircte IP En modifiant la valeur de ce champ nous pouvions choisir un niveaueacuteleveacutefaible du deacutebit du deacutelai ou de la fiabiliteacute Cependant cela ne fournissait pas une flexibiliteacute suffisantepour les besoins de nouveaux services (comme les applications temps reacuteel les applications interactives etautres) Par la suite de nouvelles architectures sont apparues Lune delle a eacuteteacute DiffServ qui a gardeacute les bitsTOS et les a renommeacutes champ DS

Guide des services diffeacuterencieacutes

Les services diffeacuterencieacutes sont orienteacutes groupes Cela signifie que nous ne savons rien des flux (ce sera le butdes services inteacutegreacutes (integrated Services)) Nous connaissons par contre les agreacutegations de flux et nousadopterons des comportements diffeacuterents suivant lagreacutegation agrave laquelle appartient le paquet

Quand un paquet arrive agrave un noeud frontalier (noeud dentreacutee du domaine DiffServ) et entre dans un domaineDiffServ nous devrons avoir une politique une mise en forme etou un marquage de ces paquets (le marquagefait reacutefeacuterence agrave la mise en place dune valeur dans le champ DS Comme on le ferait pour des vaches -)) Cesera cette marquevaleur que les noeuds internes de votre domaine DiffServ regarderons pour deacuteterminer quelcomportement ou niveau de qualiteacute de service appliquer

Comme vous pouvez le deacuteduire les Services Diffeacuterencieacutes impliquent un domaine sur lequel toutes les regraveglesDS devront ecirctre appliqueacutees Vous pouvez raisonner de la faccedilon suivante ltlt Je classifierai tous les paquetsentrant dans mon domaine Une fois quils seront entreacutes dans mon domaine ils seront soumis aux regravegles quema classification impose et chaque noeud traverseacute appliquera son niveau de qualiteacute de service gtgt

En fait vous pouvez appliquer vos propres politiques dans vos domaines locaux mais des autorisations auniveau service devront ecirctre consideacutereacutees lors de la connexion agrave dautres domaines DS

En ce moment vous vous posez peut-ecirctre beaucoup de questions DiffServ est plus vaste que ce que jaiexpliqueacute En fait vous pouvez comprendre que je ne peux pas reacutesumer plus de trois RFC en 50 lignes -)

Travailler avec DSMARK

Comme le speacutecifie la bibliographie concernant DiffServ nous diffeacuterencions les noeuds frontaliers et lesnoeuds inteacuterieurs Ce sont deux eacuteleacutements importants dans le chemin quemprunte le trafic Les deux reacutealisentune classification quand un paquet arrive Le reacutesultat peut ecirctre utiliseacute agrave diffeacuterents endroits lors du processusDS avant que le paquet ne soit libeacutereacute vers le reacuteseau Cela est possible car le nouveau code DiffServ fournit unestructure appeleacutee skamplowbarbuff incluant un nouveau champ appeleacute skb-gttcindex Ce champmeacutemorisera le reacutesultat de la classification initiale et pourra ecirctre utiliseacute agrave plusieurs reprises dans le traitementDS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

78 Introduction

La valeur skb-gttcamplowbarindex sera initialement configureacutee par le gestionnaire de mise en filedattente DSMARK Cette valeur sera extraite du champ DS de len-tecircte IP de tous les paquets reccedilus En outrele classificateur clsamplowbartcindex lira tout ou une partie de la valeur skb-gttcindex et lutiliserapour seacutelectionner les classes

Mais avant tout regardons la commande qdisc DSMARK et ses paramegravetres

dsmark indices INDICES [ default_index DEFAULT_INDEX ] [ set_tc_index ]

Que signifient ces paramegravetres

indices taille de la table des couples (masquevaleur) La valeur maximum est 2ˆn ougrave ngt=0bull defaultamplowbarindex index dentreacutee par deacutefaut de la table si aucune correspondance nesttrouveacutee

bull

setamplowbartcamplowbarindex indique au gestionnaire DSMARK de reacutecupeacuterer le champs DSet de lenregistrer dans skb-gttcamplowbarindex

bull

Regardons DSMARK proceacuteder

Comment SCHamplowbarDSMARK travaille

Ce gestionnaire de mise en file dattente reacutealisera les eacutetapes suivantes

Si vous avez deacuteclareacute loption setamplowbartcamplowbarindex dans la commande qdisc lechamp DS est reacutecupeacutereacute et meacutemoriseacute dans la variable skb-gttcamplowbarindex

bull

Le classificateur est invoqueacute Celui-ci sera exeacutecuteacute et retournera un identificateur de classe (class ID)qui sera enregistreacute dans la variable skb-gttcamplowbarindex Si aucun filtre correspondant nesttrouveacute nous consideacuterons loption defaultamplowbarindex comme eacutetant lidentificateur de classeagrave enregistrer Si ni setamplowbartcamplowbarindex ni defaultamplowbarindex nont eacuteteacutedeacuteclareacutes alors les reacutesultats peuvent ecirctre non preacutedictifs

bull

Apregraves avoir eacuteteacute envoyeacute dans le gestionnaire de file dattente interne ougrave le reacutesultat du filtre peut ecirctrereacuteutiliseacute lidentificateur de classe retourneacute par le gestionnaire est stockeacute dans la variableskb-gttcamplowbarindex Cette valeur sera utiliseacutee plus tard pour indexer la table masque-valeurLe reacutesultat de lopeacuteration suivante sera assigneacute au paquet

Nouveau_champ_DS = ( Ancien_champ_DS amp masque ) | valeur

bull

La nouvelle valeur reacutesultera donc dun ET logique entre les valeurs du champamplowbarDS et dumasque suivi dun OU logique avec le paramegravetre valeur Regardez la figure suivante pourcomprendre tout ce processus

bull

skb-gtihp-gttos- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gt | | ^ | -- Si vous deacuteclarez set_tc_index nous configurons | | lt-----Peut changer | la valeur DS dans la variable skb-gttc_index | |O le champ DS | A| |R +-|-+ +------+ +---+-+ File dattente-+ +---N|-----|----+ | | | |filtre|---gt| | |--gt --gt| | | D| | | | | |-----gt| tc |---gt| | | interne | |----gt| v | | | | | |index |---gt| | | +---------------+ | ----gt(masquevaleur)|--gt| O | +------+ +-|-+--------------^----+ | ( ) | | | | ^ | | | | ( ) | | | +----------|---------|----------------|-------|--+ ( ) | | | sch_dsmark | | | | | +-|------------|---------|----------------|-------|------------------+ | | | lt- tc_index -gt | | | |(lecture)| peut changer | | lt--------------Index de la table

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Travailler avec DSMARK 79

| | | | | des couples v | v v | (masquevaleur)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -gt skb-gttc_index

Comment faire le marquage Il suffit de modifier le masque et la valeur associeacutes agrave la classe que vous voulezmarquer Regardez la ligne de code suivante

tc class change dev eth0 classid 11 dsmark mask 0x3 value 0xb8

Cela modifie le couple (masquevaleur) dans la table de hachage et re-marque les paquets appartenant agrave laclasse 11 Vous devez changer ces valeurs en raison des valeurs par deacutefaut que le couple (masque valeur)obtient initialement (voir le tableau ci-dessous)

Nous allons maintenant expliquer comment le filtre TCamplowbarINDEX travaille et comment il sintegravegredans tout cela En outre le filtre TCamplowbarINDEX peut ecirctre utiliseacute dans des configurations autres que cellesincluant les services DS

Le filtre TCamplowbarINDEX

Voici la commande de base pour deacuteclarer un filtre TCamplowbarINDEX

tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ] [ pass_on | fall_through ] [ classid CLASSID ] [ police POLICE_SPEC ]

Ensuite nous montrons lexemple utiliseacute pour expliquer le mode opeacuteratoire de TCamplowbarINDEX Soyezattentif aux mots en gras tc qdisc add dev eth0 handle 10 root dsmark indices 64setamplowbartcamplowbarindex tc filter add dev eth0 parent 10 protocol ip prio 1 tcindex mask 0xfc shift 2 tcqdisc add dev eth0 parent 10 handle 20 cbq bandwidth 10Mbit cell 8 avpkt 1000 mpu 64 ampnum Classe dutrafic EF tc class add dev eth0 parent 20 classid 21 cbq bandwidth 10Mbit rate 1500Kbit avpkt 1000 prio 1bounded isolated allot 1514 weight 1 maxburst 10 ampnum Gestionnaire de file dattente fifo pour le trafic EFtc qdisc add dev eth0 parent 21 pfifo limit 5 tc filter add dev eth0 parent 20 protocol ip prio 1 handle 0x2etcindex classid 21 passamplowbaron (Ce code nest pas complet Ce nest quun extrait de lexemple EFCBQinclus dans la distribution iproute2)

Avant tout supposons que nous recevons un paquet marqueacute comme EF Si vous lisez le RFC2598 vousverrez que DSCP recommande une valeur de 101110 pour le trafic EF Cela signifie que le champ DS seraeacutegal agrave 10111000 (rappelez- vous que les bits les moins significatifs de loctet TOS ne sont pas utiliseacutes dansDS) ou 0xb8 en notation hexadeacutecimale

FILTRE TC INDEX +---+ +-------+ +---+-+ +------+ +-+ +-------+ | | | | | | | |FILTRE| +-+ +-+ | | | | | |-----gt| MASK | -gt | | | -gt |HANDLE|-gt| | | | -gt | | -gt | | | | | =0xfc | | | | |0x2E | | +----+ | | | | | | | | | | | | +------+ +--------+ | | | | | | | | | | | | | | |--gt| | | SHIFT | | | | | | | |--gt | | | =2 | | | +----------------------------+ | | | | | | | | | CBQ 20 | | | | | +-------+ +---+--------------------------------+ | | | | | | | +-------------------------------------------------------------+ | | DSMARK 10 |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

80 Comment SCHamplowbarDSMARK travaille

+-------------------------------------------------------------------------+

Le paquet arrive alors avec la valeur du champ DS configureacutee agrave 0xb8 Comme je lai expliqueacute auparavant legestionnaire de mise en file dattente dsmark identifieacute par 10 dans cet exemple reacutecupegravere le champ DS etlenregistre dans la variable skb-gttcamplowbarindex Leacutetape suivante consistera agrave associer un filtre agrave cegestionnaire de mise en file dattente (la seconde ligne dans cet exemple) Les opeacuterations suivantes serontreacutealiseacutees

Valeur1 = skb-gttc_index amp MASKCleacute = Valeur1 gtgt SHIFT

Dans cet exemple MASK=0xFC et SHIFT=2

Valeur1 = 10111000 amp 11111100 = 10111000Cleacute = 10111000 gtgt 2 = 00101110 -gt 0x2E en hexadeacutecimal

La valeur retourneacutee correspondra agrave un identificateur de filtre du gestionnaire de file dattente interne (danslexemple identifier par 20) Si un filtre avec cet identificateur (id) existe les conditions de controcircle et deperformance seront veacuterifieacutees (au cas ougrave le filtre inclurait ceci) et lidentificateur de classe sera retourneacute (dansnotre exemple classid 21) et stockeacute dans la variable skb-gttcamplowbarindex

Si aucun filtre avec cet identificateur nest trouveacute le reacutesultat deacutependra de la deacuteclaration de loptionfallamplowbarthrough Si tel est le cas la valeur Cleacute est retourneacutee comme identificateur de classe Si cela nestpas le cas une erreur est retourneacutee et le traitement continue avec les filtres restant Faites attention si vousutilisez loption fallamplowbarthrough ceci ne peut ecirctre fait que si une relation existe entre les valeurs de lavariable skb-gttcamplowbarindex et les identificateurs de classe

Les derniers paramegravetres agrave commenter sont hash et passamplowbaron Le premier est relieacute agrave la taille de la tablede hachage Passamplowbaron sera utiliseacute pour indiquer dessayer le filtre suivant dans le cas ougrave aucunidentificateur de classe eacutegal au reacutesultat du filtre ne serait trouveacute Laction par deacutefaut est fallamplowbarthrough(regarder la table suivante)

Finalement regardons quelles sont les valeurs possibles pour la configuration de tous ces paramegravetresTCINDEX

Nom TC Valeur Deacutefaut-----------------------------------------------------------------Hash 10x10000 Deacutependant de limpleacutementationMask 00xffff 0xffffShift 015 0Fall through Pass_on Flag Fall_throughClassid Majorminor RienPolice Rien

Ce type de filtre est tregraves puissant Il est neacutecessaire dexplorer toutes les possibiliteacutes En outre ce filtre nest passeulement utiliseacute dans les configurations DiffServ Vous pouvez lutiliser comme nimporte quel autre filtre

Je vous recommande de regarder les exemples DiffServ inclus dans la distribution iproute2 Je vous prometsque jessaierai de compleacuteter ce texte degraves que possible Tout ce que jai expliqueacute est le reacutesultat de nombreux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le filtre TCamplowbarINDEX 81

tests Merci de me dire si je me suis trompeacute quelque part

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

Tous les gestionnaires de mise en file dattente dont nous avons discuteacute jusquici sont des gestionnaires desortie Chaque interface peut eacutegalement avoir un gestionnaire de mise en file dattente dentreacutee qui nest pasutiliseacute pour envoyer les paquets agrave lexteacuterieur du peacuteripheacuterique reacuteseau Au lieu de cela il vous autorise agraveappliquer des filtres tc aux paquets entrants par linterface indeacutependamment de sils ont une destination localeou sils sont destineacutes agrave ecirctre transmis

Etant donneacute que les filtres tc contiennent une impleacutementation complegravete du Filtre agrave Seau de Jetons et quilssont eacutegalement capables de sappuyer sur lestimation du flux fourni par le noyau il y a beaucoup defonctionnaliteacutes disponibles Ceci vous permet de reacuteglementer le trafic entrant de faccedilon efficace avant mecircmequil nentre dans la pile IP

Paramegravetres amp usage

Le gestionnaire de mise en file dattente dentreacutee ne neacutecessite pas de paramegravetres Il diffegravere des autresgestionnaires dans le fait quil noccupe pas la racine du peacuteripheacuterique Attachez-le comme ceci

tc qdisc add dev eth0 ingress

Ceci vous autorise agrave avoir dautres gestionnaires de sortie sur votre peacuteripheacuterique en plus du gestionnairedentreacutee

Pour un exemple inventeacute sur la faccedilon dont le gestionnaire dentreacutee peut ecirctre utiliseacute voir le chapitre Recettes decuisine

Random Early Detection (RED)

Ce chapitre est conccedilu comme une introduction au routage de dorsales (backbones) Ces liaisons impliquentsouvent des bandes passantes supeacuterieures agrave 100 meacutegabitss ce qui neacutecessite une approche diffeacuterente de cellede votre modem ADSL agrave la maison

Le comportement normal des files dattente de routeurs est appeleacute tail-drop (NdT eacutelimine le reste) Letail-drop consiste agrave mettre en file dattente un certain volume de trafic et agrave eacuteliminer tout ce qui deacuteborde Cenest pas du tout eacutequitable et cela conduit agrave des retransmissions de synchronisation Quand une retransmissionde synchronisation a lieu la brusque rafale de rejet dun routeur qui a atteint sa limite entraicircnera une rafale deretransmissions retardeacutee qui inondera agrave nouveau le routeur congestionneacute

Dans le but den finir avec les congestions occasionnelles des liens les routeurs de dorsales integravegrent souventdes files dattente de grande taille Malheureusement bien que ces files dattente offrent un bon deacutebit ellespeuvent augmenter sensiblement les temps de latence et entraicircner un comportement tregraves saccadeacute desconnexions TCP pendant la congestion

Ces problegravemes avec le tail-drop deviennent de plus en plus preacuteoccupants avec laugmentation de lutilisationdapplications hostiles au reacuteseau Le noyau Linux nous offre la technique RED abreacuteviation de Random EarlyDetect ou deacutetection preacutecoce directe

RED nest pas la solution miracle agrave tous ces problegravemes Les applications qui nintegravegrent pas correctement latechnique de lexponential backoff obtiennent toujours une part trop grande de bande passante Cependantavec la technique RED elles ne provoquent pas trop de deacutegacircts sur le deacutebit et les temps de latence des autresconnexions

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

82 Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

RED eacutelimine statistiquement des paquets du flux avant quil natteigne sa limite dure (hard) Sur une dorsalecongestionneacutee cela entraicircne un ralentissement en douceur de la liaison et eacutevite les retransmissions desynchronisation La technique RED aide aussi TCP agrave trouver une vitesse eacutequitable plus rapidement enpermettant deacuteliminer des paquets plus tocirct il conserve une file dattente plus courte et des temps de latencemieux controcircleacutes La probabiliteacute quun paquet soit eacutelimineacute dune connexion particuliegravere est proportionnelle agrave labande passante utiliseacutee par cette connexion plutocirct quau nombre de paquets quelle envoie

La technique RED est une bonne gestion de file dattente pour les dorsales ougrave vous ne pouvez pas vouspermettre le coucirct dune meacutemorisation deacutetat par session qui est neacutecessaire pour une mise en file dattentevraiment eacutequitable

Pour utiliser RED vous devez reacutegler trois paramegravetres Min Max et burst Min est la taille minimum de la filedattente en octets avant que les rejets naient lieu Max est le maximum doux (soft) en dessous duquellalgorithme sefforcera de rester et burst est le nombre maximum de paquets envoyeacutes en rafale

Vous devriez configurer Min en calculant le plus grand temps de latence acceptable pour la mise en filedattente multiplieacute par votre bande passante Par exemple sur mon lien ISDN agrave 64 Kbitss je voudrais avoirun temps de latence de base de mise en file dattente de 200 ms Je configure donc Min agrave 1600 octets (= 02 x64000 8) Imposer une valeur Min trop petite va deacutegrader le deacutebit et une valeur Min trop grande va deacutegraderle temps de latence Sur une liaison lente choisir un coefficient Min petit ne peut pas remplacer une reacuteductiondu MTU pour ameacuteliorer les temps de reacuteponse

Vous devriez configurer Max agrave au moins deux fois Min pour eacuteviter les synchronisations Sur des liens lentsavec de petites valeurs de Min il peut ecirctre prudent davoir Max quatre fois plus grand que Min ou plus

Burst controcircle la reacuteponse de lalgorithme RED aux rafales Burst doit ecirctre choisi plus grand que minavpkt(paquet moyen) Expeacuterimentalement jai trouveacute que (min+min+max)(3avpkt) marche bien

De plus vous devez configurer limit et avpkt Limit est une valeur de seacutecuriteacute sil y a plus de Limit octetsdans la file RED reprend la technique tail-drop Je choisis une valeur typique eacutegale agrave 8 fois Max Avpktdevrait ecirctre fixeacute agrave la taille moyenne dun paquet 1000 fonctionne correctement sur des liaisons Internet hautdeacutebit ayant un MTU de 1500 octets

Lire larticle sur la file dattente RED par Sally Floyd et Van Jacobson pour les informations techniques

Generic Random Early Detection

Il ny a pas grand chose de connu sur GRED Il ressemble agrave GRED avec plusieurs files dattente internescelles-ci eacutetant choisies en se basant sur le champ tcindex de Diffserv Selon une diapositive trouveacutee ici ilpossegravede les capaciteacutes Distributed Weighted RED de Cisco ainsi que les capaciteacutes RIO de Clark

Chaque file dattente virtuelle peut avoir ses propres Drop Parameters

FIXME Demandez agrave Jamal or Werner de nous en dire plus

Emulation VCATM

Ceci est leffort principal de Werner Almesberger pour vous autoriser agrave construire des circuits virtuelsau-dessus des sockets TCPIP Le circuit virtuel est un concept venant de la theacuteorie des reacuteseaux ATM

Pour plus dinformations voir la page ATM sur Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Random Early Detection (RED) 83

Weighted Round Robin (WRR)

Ce gestionnaire de mise en file dattente nest pas inclus dans les noyaux standards mais peut ecirctre teacuteleacutechargeacuteeagrave partir de ce lien Ce gestionnaire de mise en file dattente na eacuteteacute testeacute quavec les noyaux 22 mais marcheraprobablement eacutegalement avec les noyaux 2425

La file dattente WRR partage la bande passante entre ses classes en utilisant la technique du tourniquetpondeacutereacute Ceci est similaire agrave la file dattente CBQ qui contient des classes sur lesquelles lon peut associerarbitrairement des files dattente Toutes les classes qui ont suffisamment de demandes obtiendront la bandepassante proportionnellement au poids associeacute des classes Les poids peuvent ecirctre configureacutes manuellement enutilisant le programme tc Ils peuvent eacutegalement ecirctre configureacutes pour deacutecroicirctre automatiquement pour lesclasses transfeacuterant moins de donneacutees

La file dattente a un classificateur inteacutegreacute qui assigne les paquets venant ou allant vers diffeacuterentes machines agravediffeacuterentes classes On peut utiliser soit ladresse MAC soit ladresse IP de ladresse source ou de destinationLadresse MAC ne peut cependant ecirctre utiliseacutee que quand la boite Linux est un pont ethernet Les classes sontautomatiquement assigneacutees aux machines en fonction des paquets vus

Ce gestionnaire de mise en file dattente peut ecirctre tregraves utile au site comme les reacutesidences eacutetudiantes ougrave desindividus sans liens particuliers partagent une connexion Internet Un ensemble de scripts pour configurer untel cas de figure pour ce genre de site est proposeacute dans la distribution WRR

Chapitre 15 Recettes de cuisineCette section contient des ltlt recettes de cuisine gtgt qui peuvent vous aider agrave reacutesoudre vos problegravemes Un livrede cuisine ne remplace cependant pas une reacuteelle compreacutehension essayez donc dassimiler ce qui suit

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations)

Vous pouvez faire cela de plusieurs maniegraveres Apache possegravede un module qui permet de le supporter maisnous montrerons comment Linux peut le faire pour dautres services Les commandes ont eacuteteacute reprises dunepreacutesentation de Jamal Hadi dont la reacutefeacuterence est fournie ci-dessous

Disons que nous avons deux clients avec http ftp et du streaming audio Nous voulons leur vendre unelargeur de bande passante limiteacutee Nous le ferons sur le serveur lui-mecircme

Le client A doit disposer dau moins 2 meacutegabits et le client B a payeacute pour 5 meacutegabits Nous seacuteparons nosclients en creacuteant deux adresses IP virtuelles sur notre serveur

ip address add 1881771661 dev eth0 ip address add 1881771662 dev eth0

Cest agrave vous dassocier les diffeacuterents serveurs agrave la bonne adresse IP Tous les deacutemons courants supportent cela

Nous pouvons tout dabord attacher une mise en file dattente CBQ agrave eth0

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

Nous creacuteons ensuite les classes pour nos clients

tc class add dev eth0 parent 10 classid 11 cbq bandwidth 10Mbit rate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

84 Chapitre 15 Recettes de cuisine

2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 tc class add dev eth0 parent 10 classid 12 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 Quest-ce quundiviseur FIXME Un diviseur est lieacute agrave une table de hachage et au nombre deseaux -ahu tc filter add dev eth0 parent 10 protocol ip prio 5 handle 1 u32 divisor 1 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771661 flowid 11 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771662 flowid 12

Et voilagrave qui est fait

FIXME Pourquoi pas un filtre token bucket Y a t-il un retour par deacutefaut agrave pfifoamplowbarfast quelquepart

Proteacuteger votre machine des inondations SYN

Dapregraves la documentation iproute dAlexey adapteacutee agrave netfilter Si vous utilisez ceci prenez garde dajuster lesnombres avec des valeurs raisonnables pour votre systegraveme

Si vous voulez proteacuteger tout un reacuteseau oubliez ce script qui est plus adapteacute agrave un hocircte seul

Il apparaicirct que la toute derniegravere version de loutil iproute2 est neacutecessaire pour que ceci fonctionne avec lenoyau 240

binsh -x script simple utilisant les capaciteacutes 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 beacuteneacuteficier de puissantes fonctionnaliteacutes sur les SYN chemins vers les divers utilitaires Agrave changer en fonction des vocirctresTC=sbintcIP=sbinipIPTABLES=sbiniptablesINDEV=eth2 marque tous les paquets SYN entrant agrave travers $INDEV avec la valeur 1 $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn -j MARK --set-mark 1 installe la file dattente ingress sur linterface associeacutee $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 agrave 3 par seconde (pas vraiment utile mais sert agrave montrer ce point -JHS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations) 85

$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 $INDEVecho ---- Class parameters Ingress ----------$TC class ls dev $INDEVecho ---- filter parameters Ingress ----------$TC filter ls dev $INDEV parent ffff

supprime la file dattente ingress $TC qdisc del $INDEV ingress

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service

Reacutecemment les attaques distribueacutees de deacuteni de service sont devenues une nuisance importante sur InternetEn filtrant proprement et en limitant le deacutebit de votre reacuteseau vous pouvez agrave la fois eacuteviter de devenir victimeou source de ces attaques

Vous devriez filtrer vos reacuteseaux de telle sorte que vous nautorisiez pas les paquets avec une adresse IP sourcenon locale agrave quitter votre reacuteseau Cela empecircche les utilisateurs denvoyer de maniegravere anonyme descochonneries sur Internet

La limitation de deacutebit peut faire encore mieux comme vu plus haut Pour vous rafraicircchir la meacutemoire revoicinotre diagramme ASCII

[Internet] ---ltE3 T3 nimporte quoigt--- [routeur Linux] --- [Bureau+FAI] eth1 eth0

Nous allons dabord configurer les parties preacute-requises

tc qdisc add dev eth0 root handle 10 cbq bandwidth 10Mbit avpkt 1000 tc class add dev eth0 parent 100 classid 101 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 deacuteterminercombien de trafic ICMP vous voulez autoriser Vous pouvez reacutealiser des mesures avec tcpdump en eacutecrivantles reacutesultats dans un fichier pendant un moment et regarder combien de paquets ICMP passent par votrereacuteseau Ne pas oublier daugmenter la longueur du snapshot Si la mesure nest pas possible vous pouvezconsacrer par exemple 5amppercnt de votre bande passante disponible Configurons notre classe

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

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

86 Proteacuteger votre machine des inondations SYN

Cela limite le deacutebit agrave 100 Kbits sur la classe Maintenant nous avons besoin dun filtre pour assigner le traficICMP agrave cette classe

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

Donner la prioriteacute au trafic interactif

Si beaucoup de donneacutees arrivent agrave votre lien ou en partent et que vous essayez de faire de la maintenance viatelnet ou ssh cela peut poser problegraveme dautres paquets bloquent vos frappes clavier Cela ne serait-il pasmieux si vos paquets interactifs pouvaient se faufiler dans le trafic de masse Linux peut faire cela pour vous

Comme preacuteceacutedemment nous avons besoin de manipuler le trafic dans les deux sens Evidemment celamarche mieux sil y a des machines Linux aux deux extreacutemiteacutes du lien bien que dautres UNIX soientcapables de faire la mecircme chose Consultez votre gourou local SolarisBSD pour cela

Le gestionnaire standard pfifoamplowbarfast a trois bandes diffeacuterentes Le trafic de la bande 0 est transmis enpremier le trafic des bandes 1 et 2 eacutetant traiteacute apregraves Il est vital que votre trafic interactif soit dans la bande 0 Ce qui suit est adapteacute du (bientocirct obsolegravete) Ipchains-HOWTO

Il y a quatre bits rarement utiliseacutes dans len-tecircte IP appeleacutes bits de Type de Service (TOS) Ils affectent lamaniegravere dont les paquets sont traiteacutes Les quatre bits sont Deacutelai Minimum Deacutebit Maximum FiabiliteacuteMaximum et Coucirct Minimum Seul un de ces bits peut ecirctre positionneacute Rob van Nieuwkerk lauteur ducode TOS-mangling dans ipchains le configure comme suit

Le Deacutelai Minimum est particuliegraverement important pour moi Je lepositionne agrave 1 pour les paquets interactifs sur mon routeur (Linux)qui envoie le trafic vers lexteacuterieur Je suis derriegravere un modem agrave336 Kbps Linux reacutepartit les paquets dans trois filesdattente De cette maniegravere jobtiens des performances acceptablespour le trafic interactif tout en teacuteleacutechargeant en mecircme temps

Lutilisation la plus commune est de configurer les connexions telnet et ftp agrave Deacutelai Minimum et les donneacuteesFTP agrave Deacutebit 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 donneacutees venant dun telnet exteacuterieur vers votre ordinateur local Danslautre sens ccedila se fait tout seul telnet ssh et consorts configurent le champ TOS automatiquement pour lespaquets sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service 87

Si vous avez un client incapable de le faire vous pouvez toujours le faire avec netfilter Sur votre machinelocale

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

Cache web transparent utilisant netfilter iproute2 ipchains etsquid

Cette section a eacuteteacute envoyeacutee par le lecteur Ram Narula de Internet for Education (Internet pour leacuteducation)(Thailande)

La technique habituelle pour reacutealiser ceci dans Linux est probablement lutilisation dipchains APRES secirctreassureacute que le trafic sortant du port 80 (web) est routeacute agrave travers le serveur faisant fonctionner squid

Il y a 3 meacutethodes communes pour ecirctre sucircr que le trafic sortant du port 80 est routeacute vers le serveur faisantfonctionner squid et une quatriegraveme est introduite ici

La passerelle le faitSi vous pouvez dire agrave votre passerelle que les paquets sortants agrave destination du port 80 doivent ecirctreenvoyeacutes vers ladresse IP du serveur squid

MAIS

Ceci amegravenerait une charge suppleacutementaire sur le routeur et des routeurs commerciaux peuvent mecircmene pas supporter ceci

Utiliser un commutateur Couche 4Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problegraveme

MAIS

Le coucirct pour un tel eacutequipement est en geacuteneacuteral tregraves eacuteleveacute Typiquement un commutateur couche 4coucircte normalement plus cher quun serveur classique + un bon serveur linux

Utiliser le serveur cache comme passerelle reacuteseauVous pouvez forcer TOUT le trafic agrave travers le serveur cache

MAIS

Ceci est plutocirct risqueacute dans la mesure ougrave Squid utilise beaucoup de ressources CPU ce qui peutconduire agrave une baisse des performances de tout le reacuteseau Le serveur peut eacutegalement ne plusfonctionner et personne sur le reacuteseau ne pourra acceacuteder agrave Internet si cela a lieu

Routeur Linux+NetFilterEn utilisant Netfilter une autre technique peut ecirctre impleacutementeacutee Celle-ci consiste agrave utiliser Netfilterpour marquer les paquets agrave destination du port 80 et agrave utiliser iproute2 pour router les paquetsmarqueacutes vers le serveur Squid

|----------------|

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

88 Donner la prioriteacute au trafic interactif

| Impleacutementation ||----------------|

Adresses utiliseacutees 10001 naret (serveur NetFilter) 10002 silom (serveur Squid) 10003 donmuang (routeur connecteacute agrave Internet) 10004 kaosarn (un autre serveur sur le reacuteseau) 10005 RAS 1000024 reacuteseau principal 1000019 reacuteseau total

|----------------||Scheacutema du reacuteseau||----------------|

Internet|donmuang|------------hubcommutateur----------| | | |naret silom kaosarn RAS etc

Premiegraverement faire en sorte que tout le trafic passe par naret en eacutetant sucircr que cest la passerelle par deacutefaut agravelexception de silom La passerelle par deacutefaut de silom doit ecirctre donmuang (10003) ou ceci creacuteerait uneboucle du trafic web

(Tous les serveurs sur mon reacuteseau avaient 10001 comme passerelle par deacutefaut qui eacutetait lancienne adresse durouteur donmuang Cela ma conduit agrave attribuer 10003 comme adresse IP agrave donmuang et agrave donner 10001comme adresse IP agrave naret)

Silom------configurer squid et ipchains

Pour la configuration du serveur Squid sur silom soyez sucircr que celui-ci supporte le cacheproxy transparent(transparent cachingproxying) Le port par deacutefaut pour squid est en geacuteneacuteral 3128 Tout le trafic pour le port80 doit donc ecirctre redirigeacute localement vers le port 3128 Ceci peut ecirctre fait en utilisant ipchains comme suit

silom ipchains -N allow1silom ipchains -A allow1 -p TCP -s 1000019 -d 00 80 -j REDIRECT 3128silom ipchains -I input -j allow1

Ou avec netfilter

silom iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(note vous pouvez avoir eacutegalement dautres entreacutees)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Cache web transparent utilisant netfilter iproute2 ipchains etsquid 89

Pour plus dinformations sur la configuration du serveur Squid se reacutefeacuterer agrave la page FAQ Squid surhttpsquidnlanrnet)

Soyez sucircr que lip forwarding est actif sur votre serveur et que la passerelle par deacutefaut pour ce serveur estdonmuand (PAS naret)

Naret------ configurer squid et ipchains - deacutesactiver les messages icmp REDIRECT (si besoin)

Marquer les paquets agrave destination du port 80 avec la valeur 2

naret iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 2

1

Configurer iproute2 de sorte quil route les paquets avec la marque 2 vers silom

naret echo 202 wwwout gtgt etciproute2rt_tablesnaret ip rule add fwmark 2 table wwwoutnaret ip route add default via 10002 dev eth0 table wwwoutnaret ip route flush cache

Si donmuang et naret sont sur le mecircme reacuteseau naret ne doit pas envoyer de messages icmpREDIRECT Ceux-ci doivent ecirctre deacutesactiveacutes par

naret echo 0 gt procsysnetipv4confallsend_redirectsnaret echo 0 gt procsysnetipv4confdefaultsend_redirectsnaret echo 0 gt procsysnetipv4confeth0send_redirects

2

La configuration est termineacutee veacuterifions-la

Sur naret

naret iptables -t mangle -LChain PREROUTING (policy ACCEPT)target prot opt source destination MARK tcp -- anywhere anywhere tcp dptwww MARK set 0x2

Chain OUTPUT (policy ACCEPT)target prot opt source destination

naret ip rule ls0 from all lookup local 32765 from all fwmark 2 lookup wwwout 32766 from all lookup main

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

90 Cache web transparent utilisant netfilter iproute2 ipchains etsquid

32767 from all lookup default

naret ip route list table wwwoutdefault via 2031142248 dev eth0

naret ip route 10001 dev eth0 scope link 1000024 dev eth0 proto kernel scope link src 100011270008 dev lo scope link default via 10003 dev eth0

(soyez sucircr que silom appartiens agrave lune des lignes ci-dessus Dans ce cascest la ligne avec 1000024)

|------||-FAIT-||------|

Scheacutema du trafic apregraves limpleacutementation

|---------------------------------------||Scheacutema du trafic apregraves limpleacutementation||---------------------------------------|

INTERNET||-----------------routeur donmuang--------------------- |||| || |||| ||naret silom ||trafic agrave destination du port 80=====gt(cache) || || |||| ===================================kaosarn RAS etc

Noter que le reacuteseau est asymeacutetrique car il y a un saut suppleacutementaire sur le chemin sortant

Voici le cheminement dun paquet traversant le reacuteseau de kaosarn allant etvenant dInternet

Pour le trafic webhttp requecircte http kaosarn-gtnaret-gtsilom-gtdonmuang-gtInternetreacuteponse http de Internet-gtdonmuang-gtsilom-gtkaosarn

Pour les requecirctes non webhttp (par ex telnet) donneacutees sortantes kaosarn-gtnaret-gtdonmuang-gtInternetdonneacutees entrantes dInternet-gtdonmuang-gtkaosarn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Scheacutema du trafic apregraves limpleacutementation 91

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen configurant un MTU par routes

Pour envoyer de grande quantiteacute de donneacutees Internet fonctionne geacuteneacuteralement mieux quand de grandspaquets sont utiliseacutes Chaque paquet implique une deacutecision de routage Le transfert dun fichier de 1Mo peutentraicircner soit lenvoi de 700 paquets en maximisant la taille des paquets soit de 4000 paquets en utilisant laplus petite taille possible

Cependant tous les eacuteleacutements dInternet ne supportent pas une capaciteacute utile (payload) de 1460 octets parpaquet Il est de plus neacutecessaire dessayer de trouver le plus grand paquet qui conviendra le mieux dans lebut doptimiser la connexion

Ce processus est appeleacute Deacutecouverte du MTU de chemin ougrave MTU signifie Maximum Transfert Unit (Uniteacutede transfert maximum)

Quand un routeur rencontre un paquet qui est trop gros pour ecirctre envoyeacute en un seul morceau ET que celui-cia eacuteteacute marqueacute avec le bit Dont Fragment il retourne un message ICMP indiquant quil a eacuteteacute obligeacute de rejeterle paquet Lhocircte eacutemetteur prend acte de cette indication en envoyant des paquets plus petits et par iteacuterationpeut trouver la taille optimum du paquet pour une connexion agrave travers un chemin particulier

Ceci fonctionnait correctement jusquagrave ce que Internet soit deacutecouvert par des vandales qui sefforcent deperturber les communications Ceci a conduit les administrateurs agrave soit bloquer soit mettre en forme le traficICMP lors dessais malencontreux dans le but dameacuteliorer la seacutecuriteacute ou la robustesse de leurs servicesInternet

La conseacutequence maintenant est que la deacutecouverte du MTU de chemin fonctionne de moins en moins bien eteacutechoue pour certaines routes conduisant agrave deacutetranges sessions TCPIP qui tombent peu de temps apregraves

Bien que je naie pas de preuves de ceci deux sites avec qui javais lhabitude davoir des problegravemes faisaientfonctionner agrave la fois Alteon et Acedirectors avant les systegravemes affecteacutes Peut-ecirctre quelquun avec plus deconnaissances peut fournir des indices quant agrave la raison de ce qui se passe

Solution

Quand vous rencontrez des sites qui preacutesentent ce problegraveme vous pouvez deacutesactiver la deacutecouverte du MTUde chemin en le configurant manuellement Koos van den Hout a agrave peu pregraves eacutecrit

Le problegraveme suivant jai configureacute le mtu et mru de ma ligne deacutedieacutee fonctionnant avec ppp agrave296 dans la mesure ougrave le deacutebit est de seulement 33k6 et que je ne peux pas influencer la filedattente de lautre cocircteacute A 296 la reacuteponse agrave lappui dune touche intervient dans un deacutelairaisonnable

Et de mon cocircteacute jai un routeur avec translation dadresse (masquage) fonctionnant (bien sucircr)sous Linux

Reacutecemment jai seacutepareacute le serveur du routeur de sorte que la plupart des applicationsfonctionnent sur une machine diffeacuterente de celle qui reacutealise le routage

Jai alors eu des problegravemes en me connectant sur lirc Grosse panique Je vous assure quecertains essais trouvaient que jeacutetais connecteacute agrave lirc me montrant mecircme comme connecteacute surlirc mais je ne recevais pas le motd (message of the day message du jour) de lirc Jai

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

92Circonvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

veacuterifieacute ce qui pouvait ecirctre erroneacute et ai noteacute que javais deacutejagrave eu des soucis lieacutes au MTU encontactant certains sites web Je navais aucun souci pour les atteindre quand le MTU eacutetait agrave1500 le problegraveme napparaissant que lorsque le MTU eacutetait configureacute agrave 296 Puisque lesserveurs irc bloquent tout le trafic dont il nont pas besoin pour leurs opeacuterations immeacutediatesils bloquent aussi licmp

Jai manoeuvreacute pour convaincre les responsables dun serveur web que ceci eacutetait la cause dunproblegraveme mais les responsables du serveur irc navaient pas lintention de reacuteparer ceci

Donc je devais ecirctre sucircr que le trafic masqueacute sortant partait avec le mtu faible du lien externeMais je voulais que le trafic ethernet local ait le MTU normal (pour des choses comme letrafic nfs)

Solution

ip route add default via 10001 mtu 296

(10001 eacutetant ma passerelle par deacutefaut ladresse interne de mon routeur masquant)

En geacuteneacuteral il est possible doutrepasser la deacutecouverte du MTU de chemin en configurant des routesspeacutecifiques Par exemple si seuls certains reacuteseaux posent problegravemes ceci devrait aider

ip route add 1959696024 via 10001 mtu 1000

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

Comme expliqueacute au-dessus la deacutecouverte du MTU de chemin ne marche pas aussi bien que cela devrait ecirctreSi vous savez quun saut de votre reacuteseau a un MTU limiteacute (lt1500) vous ne pouvez pas compter sur ladeacutecouverte du MTU de chemin pour le deacutecouvrir

Outre le MTU il y a encore un autre moyen de configurer la taille maximum du paquet par ce qui est appeleacutele MSS (Maximum Segment Size Taille Maximum du Segment) Cest un champ dans les options TCP dupaquet SYN

Les noyaux Linux reacutecents et quelques pilotes de peacuteripheacuterique PPPoE (notamment lexcellent RoaringPenguin) impleacutementent la possibiliteacute de fixer le MSS

Le bon cocircteacute de tout ceci est que en positionnant la valeur MSS vous dicirctes agrave lhocircte distant de maniegravereeacutequivoque nessaie pas de menvoyer des paquets plus grands que cette valeur Aucun trafic ICMP nestneacutecessaire pour faire fonctionner cela

Malheureusement cest de la bidouille eacutevidente -- ccedila deacutetruit la proprieacuteteacute laquobout-en-boutraquo de la connexion enmodifiant les paquets Ayant dit cela nous utilisons cette astuce dans beaucoup dendroit et cela fonctionnecomme un charme

Pour que tout ceci fonctionne vous aurez besoin au moins de iptables-121a et de Linux 243 ou plus Laligne de commande basique est

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --clamp-mss-to-pmtu

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Solution 93

Ceci calcule le MSS approprieacute pour votre lien Si vous vous sentez courageux ou que vous pensez ecirctre lemieux placeacute pour juger vous pouvez aussi faire quelque chose comme ceci

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --set-mss 128

Ceci configure le MSS du paquet SYN agrave 128 Utilisez ceci si vous avez de la voix sur IP (VoIP) avec de touspetits paquets et de grands paquets http qui provoquent des coupures dans vos communications vocales

Le Conditionneur de Trafic Ultime Faible temps de latenceTeacuteleacutechargement vers lamont et laval rapide

Note ce script a reacutecemment eacuteteacute mis agrave niveau et il ne marchait avant quavec les clients Linux de votrereacuteseau Vous devriez donc le mettre agrave jour si vous avez des machines Windows ou des Macs dans votrereacuteseau qui neacutetaient pas capables de teacuteleacutecharger plus rapidement pendant que dautres eacutetaient en train deteacuteleacutecharger vers lamont

Jai essayeacute de creacuteer le Saint Graal

Maintenir agrave tout moment un faible temps de latence pour le trafic interactifCeci signifie que la reacutecupeacuteration ou la transmission de fichiers ne doivent pas perturber SSH ou mecircmetelnet Ceci est la chose la plus importante car mecircme un temps de latence de 200ms est importantpour pouvoir travailler confortablement

Autoriser le surf agrave des vitesses raisonnables pendant que lon teacuteleacutecharge vers lamont ou vers lavalMecircme si http est un trafic de masse les autres trafics ne doivent pas trop le noyer

Etre sucircr que le teacuteleacutechargement vers lamont ne va pas faire du tort aux teacuteleacutechargements vers laval et aux autreseacuteleacutements autour

Le principal pheacutenomegravene observeacute est la forte reacuteduction de la vitesse de teacuteleacutechargement vers lavalquand il y a du trafic montant

Il savegravere que tout ceci est possible au prix dune minuscule reacuteduction de la bande passante La preacutesence degrandes files dattente sur les dispositifs daccegraves domestiques comme le cacircble ou les modems DSL expliquepourquoi les teacuteleacutechargements vers lamont vers laval et ssh se peacutenalisent mutuellement

La prochaine partie explique en profondeur ce qui provoque les retards et comment nous pouvons lescorriger Vous pouvez sans danger la passer et aller directement au script si vous vous fichez de la faccedilon dontla magie opegravere

Pourquoi cela ne marche t-il pas bien par deacutefaut

Les FAI savent que leurs performances ne sont seulement jugeacutees que sur la vitesse agrave laquelle les personnespeuvent teacuteleacutecharger vers laval En plus de la bande passante disponible la vitesse de teacuteleacutechargement estlourdement influenceacutee par la perte des paquets qui gecircne seacuterieusement les performances de TCPIP Lesgrandes files dattente peuvent aider agrave preacutevenir la perte des paquets et augmenter les teacuteleacutechargements LesFAI configurent donc de grandes files dattente

Ces grandes files dattente endommagent cependant linteractiviteacute Une frappe doit dabord parcourir la filedattente du flux montant ce qui peut prendre plusieurs secondes et aller jusquagrave lhocircte distant Elle est alors

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

94Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

traiteacutee conduisant agrave un paquet de retour qui doit traverser la file dattente du flux descendant localiseacutee chezvotre FAI avant quelle napparaisse sur leacutecran

Cet HOWTO nous enseigne plusieurs maniegraveres de modifier et traiter la file dattente mais malheureusementtoutes les files dattente ne nous sont pas accessibles Les files dattente du FAI sont sans limites et la filedattente du flux montant reacuteside probablement dans votre modem cacircble ou votre peacuteripheacuterique DSL Il se peutque vous soyez capable ou non de le configurer La plupart du temps ce ne sera pas le cas

Et apregraves Etant donneacute que nous ne pouvons pas controcircler ces files dattente elles doivent disparaicirctre et ecirctretransfeacutereacutees sur notre routeur Linux Heureusement ceci est possible

Limiter la vitesse de teacuteleacutechargement vers lamont (upload)En limitant notre vitesse de teacuteleacutechargement vers lamont agrave une vitesse leacutegegraverement plus faible que lavitesse reacuteelle disponible il ny a pas de files dattente mises en place dans notre modem La filedattente est maintenant transfeacutereacutee vers Linux

Limiter la vitesse de teacuteleacutechargement vers laval (download)Ceci est leacutegegraverement plus ruseacute dans la mesure ougrave nous ne pouvons pas vraiment influencer la vitesse agravelaquelle Internet nous envoie les donneacutees Nous pouvons cependant rejeter les paquets qui arriventtrop vite ce qui provoque le ralentissement de TCPIP jusquau deacutebit deacutesireacute Comme nous ne voulonspas supprimer inutilement du trafic nous configurons une vitesse de rafale (burst) plus grande

Maintenant que nous avons fait ceci nous avons eacutelimineacute totalement la file dattente du flux descendant (saufpour de courtes rafales de donneacutees) et obtenu la possibiliteacute de geacuterer la file dattente du flux montant avectoute la puissance Linux

Il nous reste agrave nous assurer que le trafic interactif se retrouve au deacutebut de la file dattente du flux montantPour ecirctre sucircr que le flux montant ne va pas peacutenaliser le flux descendant nous deacuteplaccedilons eacutegalement les paquetsACK au deacutebut de la file dattente Cest ce qui provoque normalement un eacutenorme ralentissement quand dutrafic de masse est geacuteneacutereacute dans les deux sens Les paquets ACK du trafic descendant rentrent en concurrenceavec le trafic montant et sont donc ralentis

Si nous avons fait tout ceci nous obtenons les mesures suivantes en utilisant lexcellente connexion ADSL dexs4all en Hollande

Temps de latence de base round-trip minavgmax = 144171217 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers laval round-trip minavgmax = 560957365864 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers lamont round-trip minavgmax = 204142332124276 ms

Avec le conditionneur lors dun teacuteleacutechargement vers lamont agrave 220kbits round-trip minavgmax = 157518799 ms

Avec le conditionneur lors dun teacuteleacutechargement vers laval agrave 850kbits round-trip minavgmax = 204469740 ms

Lors dun teacuteleacutechargement vers lamont les teacuteleacutechargements vers laval seffectuent agrave environ80 de la vitesse maximale disponible et 90 pour les teacuteleacutechargements verslamont Le temps de latence augmente alors jusquagrave 850 ms je nai pas encoredeacutetermineacute la raison de ce pheacutenomegravene

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Pourquoi cela ne marche t-il pas bien par deacutefaut 95

Ce que vous pouvez attendre de ce script deacutepend largement de votre vitesse de lien reacuteelle Quand vousteacuteleacutechargez vers lamont agrave pleine vitesse il y aura toujours un paquet devant votre frappe de clavier Ceci estla limite basse de votre temps de latence Pour la calculer divisez votre MTU par la vitesse du flux montantLes valeurs classiques seront un peu plus eacuteleveacutees que ccedila Diminuez votre MTU pour un meilleur effet

Voici deux versions de ce script une avec lexcellent HTB de Devik et lautre avec CBQ qui est preacutesent danschaque noyau Linux contrairement agrave HTB Les deux ont eacuteteacute testeacutes et marchent correctement

Le script (CBQ)

Marche avec tous les noyaux A linteacuterieur du gestionnaire de mise en file dattente CBQ nous placcedilons deuxSFQ pour ecirctre sucircr que de multiples flux de masse ne vont pas mutuellement se peacutenaliser

Le trafic descendant est reacuteglementeacute en utilisant un filtre tc contenant un Token Bucket Filter

Vous pourriez ameacuteliorer ce script en ajoutant bounded aux lignes qui deacutemarrent avec tc class add classid120 Si vous avez diminueacute votre MTU diminuez aussi les nombres allot amp avpkt

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobitsDOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe CBQ agrave la racine

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence Classe principale

tc class add dev $DEV parent 1 classid 11 cbq rate $UPLINKkbit allot 1500 prio 5 bounded isolated

classe de prioriteacute supeacuterieure 110

tc class add dev $DEV parent 11 classid 110 cbq rate $UPLINKkbit allot 1600 prio 1 avpkt 1000

la classe par deacutefaut et pour le trafic de masse 120 Reccediloit leacutegegraverement moins que le trafic et a une prioriteacute plus faible bulk and default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 cbq rate $[9$UPLINK10]kbit allot 1600 prio 2 avpkt 1000

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

96 Le script (CBQ)

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

Deacutemarrage des filtres le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110 ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

tc filter add dev $DEV parent 1 protocol ip prio 13 u32 match ip dst 00000 flowid 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacuteelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Le script (HTB)

Le script suivant nous permet datteindre tous nos buts en utilisant la merveilleuse file dattente HTB Voir lechapitre correspondant Cela vaut la peine de mettre agrave jour votre noyau

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobits

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le script (HTB) 97

DOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe HTB agrave la racine le trafic ira par deacutefaut vers 120

tc qdisc add dev $DEV root handle 1 htb default 20

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence

tc class add dev $DEV parent 1 classid 11 htb rate $UPLINKkbit burst 6k

la classe de haute prioriteacute 110

tc class add dev $DEV parent 11 classid 110 htb rate $UPLINKkbit burst 6k prio 1

bulk amp default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 htb rate $[9$UPLINK10]kbit burst 6k prio 2

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110

ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacutelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

98 Le script (HTB)

attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau

Bien que ceci soit deacutecrit en deacutetail ailleurs et dans nos pages de manuel cette question est souvent poseacuteeHeureusement il y a une reacuteponse simple qui ne neacutecessite pas la compreacutehension complegravete du controcircle de trafic

Ce script de trois lignes met en place la limitation du deacutebit

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1 classid 11 cbq rate 512kbit allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1 protocol ip prio 16 u32 match ip dst 195969697 flowid 11

La premiegravere ligne installe un gestionnaire de mise en file dattente baseacute sur des classes sur votre interface etindique au noyau que pour ses calculs il peut la consideacuterer comme une interface agrave 10 Mbitss Cependant ilny aura pas de grands dommages si vous indiquez une valeur erroneacutee Donner la vraie valeur permettradavoir des choses plus preacutecises

La seconde ligne creacutee une classe de 512kbits avec des valeurs par deacutefaut raisonnables Pour les deacutetails voirles pages de manuel cbq et Chapitre 9gt

La derniegravere ligne indique quel trafic devra passer par la classe reacutealisant la mise en forme Le trafic qui nestseacutelectionneacute par cette regravegle nest PAS mis en forme Pour avoir des seacutelections plus compliqueacutees (sous-reacuteseauxports sources ou de destinations) voir la section intituleacutee Toutes les commandes de filtres dont vous aureznormalement besoin dans Chapitre 9gt

Si vous avez changeacute quelque chose et que vous vouliez recharger le script exeacutecutez la commande tc qdisc deldev $DEV root pour supprimer votre configuration actuelle

Le script peut ecirctre ameacutelioreacute en ajoutant une derniegravere ligne optionnelle tc qdisc add dev $DEV parent 11 sfqperturb 10 Voir la section intituleacutee Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing) dans Chapitre 9gt pour savoir ce que cela fait

Exemple dune solution de translation dadresse avec de la QoS

Je mappelle Pedro Larroy

ltpiotrmemberfsforggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau 99

Je deacutecris ici une configuration dans le cas ougrave de nombreux utilisateurs seraient connecteacutes agrave Internet agrave traversun routeur Linux qui possegravede une adresse publique et qui reacutealise de la translation dadresse (NAT) Jutilisecette configuration QoS pour fournir laccegraves agrave 198 utilisateurs dans une citeacute universitaire dans laquelle je vis etougrave jadministre le reacuteseau Les utilisateurs sont de gros consommateurs de programmes peer to peer et uncontrocircle de trafic correct est neacutecessaire Jespegravere que ceci servira dexemples pratiques agrave tous les lecteursinteacuteresseacutes par le lartc

Dans un premier temps la configuration sera reacutealiseacutee pas agrave pas et agrave la fin jexpliquerai comment rendre ceprocessus automatique au deacutemarrage Le reacuteseau utiliseacute pour cet exemple est un reacuteseau local connecteacute agraveInternet agrave travers un routeur Linux ayant une adresse publique Lajout dun ensemble de regravegles iptablespermettrait facilement lextension agrave plusieurs adresses IP publiques Les eacuteleacutements suivants sont neacutecessaires

Linux 2418 ou une version du noyau supeacuterieure installeacuteeSi vous utilisez le noyau 2418 vous devrez appliquer la mise agrave jour HTB

iprouteSoyez eacutegalement sucircr que le binaire tc est compatible avec HTB Un binaire preacute compileacute estdistribueacute avec HTB

iptables

Commenccedilons loptimisation de cette rare bande passante

Tout dabord nous allons configurer des gestionnaires de mise en file dattente dans lesquels nous allonsclassifier le trafic Nous creacuteons un gestionnaire htb composeacute de 6 classes avec des prioriteacutes croissantes Nousavons alors des classes qui obtiendront le deacutebit alloueacute et qui pourront de plus utiliser la bande passante dontles autres classes nont pas besoin Rappelons que les classes de plus hautes prioriteacutes (correspondant auxnombres prio les plus faibles) obtiendront en premier lexcegraves de bande passante Notre liaison ADSL agrave un fluxdescendant de 2Mbitss et un flux montant de 300 kbitss Jutilise un deacutebit de seuil (ceil rate) de 240 kbitsscar au-delagrave de cette limite les problegravemes de latence commence agrave prendre de lampleur Ceci est ducirc auremplissage dun tampon placeacute quelque part entre nous et les hocirctes distants

Ajuster la variable CEIL agrave 75 de votre bande passante montante maximum et ajuster le nom de linterface(eth0 dans la suite) agrave celle qui a ladresse publique Internet Exeacutecutez ce qui suit dans un shell root

CEIL=240 tc qdisc add dev eth0 root handle 1 htb default 15 tc class add dev eth0 parent 1 classid 11 htb rate $CEILkbit ceil $CEILkbit tc class add dev eth0 parent 11 classid 110 htb rate 80kbit ceil 80kbit prio 0 tc class add dev eth0 parent 11 classid 111 htb rate 80kbit ceil $CEILkbit prio 1 tc class add dev eth0 parent 11 classid 112 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 113 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 114 htb rate 10kbit ceil $CEILkbit prio 3 tc class add dev eth0 parent 11 classid 115 htb rate 30kbit ceil $CEILkbit prio 3 tc qdisc add dev eth0 parent 112 handle 120 sfq perturb 10 tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Nous avons juste creacuteeacute une arborescence htb avec un seul niveau de profondeur Quelque chose comme ceci

+-----------+ | racine 1 | +-----------+ | +---------------------------------------+ | classe 11 | +---------------------------------------+ | | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

100 Exemple dune solution de translation dadresse avec de la QoS

+----+ +----+ +----+ +----+ +----+ +----+ |110| |111| |112| |113| |114| |115| +----+ +----+ +----+ +----+ +----+ +----+

classid 110 htb rate 80kbit ceil 80kbit prio 0Ceci est la classe de prioriteacute la plus eacuteleveacutee Les paquets de cette classe auront le plus faible deacutelai etobtiendront en premier lexcegraves de bande passante Cest donc une bonne ideacutee de limiter le deacutebit deseuil de cette classe Nous enverrons dans cette classe les paquets qui ont un avantage agrave avoir unfaible deacutelai tel que le trafic interactif ssh telnet dns quake3 irc et les paquets avec le bit SYNactiveacute

classid 111 htb rate 80kbit ceil $CEILkbit prio 1Nous avons ici la premiegravere classe dans laquelle nous commenccedilons agrave mettre du trafic de masse Dansmon exemple jai le trafic provenant de mon serveur web local et les requecirctes pour les pages web respectivement le port source 80 et le port destination 80

classid 112 htb rate 20kbit ceil $CEILkbit prio 2Dans cette classe je mettrai le trafic configureacute avec le champ TOS Deacutebit Maximum activeacute ainsique le reste du trafic provenant des processus locaux de mon routeur vers Internet Les classessuivantes ne recevront donc que du trafic routeacute par cette machine

classid 113 htb rate 20kbit ceil $CEILkbit prio 2Cette classe est pour le trafic des autres machines NATeacutees (NdT beacuteneacuteficiant du service detranslation dadresse) qui ont besoin dune prioriteacute plus grande dans leur trafic de masse

classid 114 htb rate 10kbit ceil $CEILkbit prio 3Le trafic mail (SMTP pop3) et les paquets configureacutes avec le champ TOS Coucirct Minimum serontenvoyeacutes dans cette classe

classid 115 htb rate 30kbit ceil $CEILkbit prio 3Finalement nous avons ici le trafic de masse des machines NATeacutees se trouvant derriegravere le routeurLes paquets lieacutes agrave kazaa edonkey et autres iront ici pour ne pas interfeacuterer avec les autres services

Classification des paquets

Nous avons configureacute le gestionnaire de mise en file dattente mais aucune classification de paquets naencore eacuteteacute faite Pour linstant tous les paquets sortants passent par la classe 115 (car nous avons utiliseacute tcqdisc add dev eth0 root handle 1 htb default 15) Nous devons donc maintenant indiquer ougrave doivent aller lespaquets Ceci est la partie la plus importante

Nous allons maintenant configurer les filtres de tel sorte que nous puissions classifier les paquets aveciptables Je preacutefegravere vraiment le faire avec iptables car celui-ci est tregraves souple et que nous avons un compteurde paquets pour chaque regravegle De plus avec la cible RETURN les paquets nont pas besoin de traverser toutesles regravegles Nous exeacutecutons les commandes suivantes

tc filter add dev eth0 parent 10 protocol ip prio 1 handle 1 fw classid 110 tc filter add dev eth0 parent 10 protocol ip prio 2 handle 2 fw classid 111 tc filter add dev eth0 parent 10 protocol ip prio 3 handle 3 fw classid 112 tc filter add dev eth0 parent 10 protocol ip prio 4 handle 4 fw classid 113 tc filter add dev eth0 parent 10 protocol ip prio 5 handle 5 fw classid 114 tc filter add dev eth0 parent 10 protocol ip prio 6 handle 6 fw classid 115

Nous indiquons simplement au noyau que les paquets qui ont une valeur FWMARK speacutecifique (handle x fw)vont dans la classe speacutecifieacutee (classid xx) Voyons maintenant comment marquer les paquets avec iptables

Tout dabord nous devons comprendre comment les paquets traversent les filtres avec iptables

+------------+ +---------+ +-------------+ Paquets-| PREROUTING |--- Deacutecision----| FORWARD |-------+-------| POSTROUTING |- Paquets entrant +------------+ de routage +-minus-------+ | +-------------+ sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Commenccedilons loptimisation de cette rare bande passante 101

| | +-------+ +--------+ | INPUT |-- Processus locaux-| OUTPUT | +-------+ +--------+

Je suppose que toutes vos tables ont leur politique par deacutefaut configureacutee agrave ACCEPT (-P ACCEPT) ce quidevrait ecirctre le cas si vous navez pas encore toucheacute agrave iptables Notre reacuteseau priveacute est une classe B avecladresse 172170016 et notre adresse publique est 21217021172

Nous indiquons au noyau de faire de la translation dadresse NAT les clients du reacuteseau priveacute peuvent alorscommencer agrave dialoguer avec lexteacuterieur

echo 1 gt procsysnetipv4ip_forward iptables -t nat -A POSTROUTING -s 172170025525500 -o eth0 -j SNAT --to-source 21217021172

Veacuterifions maintenant que les paquets transitent bien agrave travers 115

tc -s class show dev eth0

Vous pouvez commencer agrave marquer les paquets en ajoutant les regravegles dans la chaicircne PREROUTING de latable mangle

iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p icmp -j RETURN

Vous devriez maintenant ecirctre capable de voir leacutevolution du compteur de paquets quand vous pinguez des sitessur Internet depuis les machines du reacuteseau priveacute Veacuterifiez que le compteur de paquets augmente dans 110

tc -s class show dev eth0

Nous avons mis -j RETURN de maniegravere agrave ce que les paquets ne traversent pas toutes les regravegles Les paquetsicmp ne scruteront pas les autres regravegles deacutefinies sous RETURN Gardez ceci agrave lesprit Nous commenccedilonsmaintenant agrave ajouter dautres regravegles pour geacuterer les champs TOS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6 iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

Donnons la prioriteacute aux paquets SSH

iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

Une bonne ideacutee est de donner la prioriteacute aux paquets initiant une connexion tcp agrave savoir ceux qui ont le bitSYN activeacute

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j MARK --set-mark 0x1 iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j RETURN

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

102 Classification des paquets

Et ainsi de suite Apregraves la mise en place des regravegles dans la chaicircne PREROUTING de la table mangle nousterminons par

iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

Ainsi le trafic non marqueacute est dirigeacute vers 115 En fait cette derniegravere eacutetape nest pas neacutecessaire puisque laclasse par deacutefaut est 115 Un marquage est quand mecircme reacutealiseacute de maniegravere agrave avoir une coheacuterence pourlensemble de la configuration De plus il est utile davoir une comptabiliteacute pour cette regravegle

Cest une bonne ideacutee de faire de mecircme avec la chaicircne OUTPUT Reacutepeacutetez ces commandes avec -A OUTPUT agravela place de PREROUTING (sPREROUTINGOUTPUT) Le trafic geacuteneacutereacute localement (sur le routeur Linux)sera alors eacutegalement classifieacute Je termine la chaicircne OUTPUT par -j MARK --set-mark 0x3 de tel sorte que letrafic local ait une prioriteacute plus grande

Ameacuteliorer notre configuration

Toute notre configuration est maintenant opeacuterationnelle Prenez du temps pour regarder les graphes etobserver ougrave votre bande passante est la plus utiliseacutee et cela correspond agrave vos souhaits Jai fait ceci pendant denombreuses heures ce qui ma permis davoir une connexion Internet fonctionnant tregraves bien Autrement vousserez confronteacute en permanence agrave des timeout et des allocations de bande passante presque nulles pour lesnouvelles connexions tcp

Si vous repeacuterez des classes qui sont pleines la plupart du temps ce peut ecirctre une bonne ideacutee de leur attacherun autre gestionnaire de mise en file dattente de maniegravere agrave ce que le partage de la bande passante soit pluseacutequitable

tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Rendre tout ceci actif au deacutemarrage

Il est certain que ceci peut ecirctre fait de diffeacuterentes faccedilons Dans mon cas jai un shell scriptetcinitdpacketfilter qui accepte les arguments [start | stop | stop-tables | start-tables |reload-tables] Celui-ci configure les gestionnaires de mise en file dattente et charge les modules du noyauneacutecessaires et se comporte donc comme une deacutemon Le mecircme script charge les regravegles iptables agrave partir deetcnetworkiptables-rules Je vais lembellir un peu et le rendrait disponible sur ma page webici

Chapitre 16 Construire des ponts et des pseudoponts avec du Proxy ARPLes ponts sont des peacuteripheacuteriques qui peuvent ecirctre installeacutes dans un reacuteseau sans aucune reconfiguration Uncommutateur reacuteseau est basiquement un pont multi-ports Un pont est souvent un commutateur avec 2 portsCependant Linux supporte tregraves bien plusieurs interfaces dans un pont le conduisant agrave fonctionner comme unvrai commutateur

Les ponts sont souvent deacuteployeacutes quand on est confronteacute agrave un reacuteseau deacutefaillant qui a besoin decirctre reacutepareacute sansaucune modification Dans la mesure ougrave un pont est un eacutequipement de niveau 2 la couche sous la couche IP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 16 Construire des ponts et des pseudo ponts avec du Proxy ARP 103

les routeurs et serveurs ne sont pas conscients de son existence Ceci signifie que vous pouvez bloquer oumodifier certains paquets de maniegravere transparente ou mettre en forme le trafic

Un autre eacuteleacutement positif est quun pont peut souvent ecirctre remplaceacute par un cacircble croiseacute ou un hub quand iltombe en panne

Laspect neacutegatif est que la mise en place dun pont peut engendrer beaucoup de confusion agrave moins quil ne soittregraves bien configureacute Le pont napparaicirct pas dans les traceroute mais pourtant des paquets disparaissent sansraison ou sont changeacutes en allant dun point A agrave un point B (ce reacuteseau est HANTE ) Vous devriez eacutegalementvous demander si une organisation qui ne veut rien changer fait le bon choix

Le pont Linux 2425 est documenteacute sur cette page

Etat des ponts et iptables

Au moment de Linux 2420 le pont et iptables ne se voient pas lun lautre sans une aide Si vous pontezles paquets de eth0 agrave eth1 ils ne passent pas par iptables Ceci signifie que vous ne pouvez pas faire defiltrage de translation dadresse (NAT) de deacutesossage ou quoique ce soit dautres Ceci a eacuteteacute corrigeacute dans lesversions 2545 et supeacuterieures

Vous devriez eacutegalement regarder ebtables qui est encore un autre projet Il vous permettra de faire deschoses vraiment terribles comme MACNAT et brouting Cest vraiment effroyable

Pont et mise en forme

Ca marche comme dans les reacuteclames Soyez sucircr du cocircteacute attribueacute agrave chaque interface Autrement il se peut quevous mettiez en forme le trafic sortant au niveau de votre interface interne ce qui ne marchera pas Utiliseztcpdump si neacutecessaire

Pseudo-pont avec du Proxy-ARP

Si vous voulez juste impleacutementer un pseudo pont allez jusquagrave la section Impleacutementez-le Cependant il estsage de lire un peu la faccedilon dont il fonctionne en pratique

Un pseudo pont travaille de maniegravere un peu diffeacuterente Par deacutefaut un pont transmet les paquets sans les alteacutererdune interface agrave une autre Il ne regarde que ladresse mateacuterielle des paquets pour deacuteterminer ougrave ils doiventaller Ceci signifie que vous pouvez pontez un trafic que Linux ne comprend pas aussi longtemps quil y aune adresse mateacuterielle

Un pseudo pont travaille diffeacuteremment et ressemble plus agrave un routeur cacheacute quagrave un pont Mais comme unpont il a un impact faible sur larchitecture du reacuteseau

Le fait quil ne soit pas un pont preacutesente lavantage que les paquets traversent reacuteellement le noyau et peuventecirctre filtreacutes modifieacutes redirigeacutes ou rerouteacutes

Un pont reacuteel peut eacutegalement reacutealiser ces tours de force mais il a besoin dun code speacutecial comme le EthernetFrame Diverter ou la mise agrave jour mentionneacutee au-dessus

Un autre avantage dun pseudo pont est quil ne transmet pas les paquets quil ne comprend pas nettoyant ainsivotre reacuteseau de beaucoup de cochonneries Dans le cas ougrave vous auriez besoin de ces cochonneries (comme lespaquets SAP ou Netbeui) utilisez un vrai pont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

104 Etat des ponts et iptables

ARP amp Proxy-ARP

Quand un hocircte veut dialoguer avec un autre hocircte sur le mecircme segment physique il envoie un paquet duProtocole de Reacutesolution dAdresse (ARP) qui en simplifiant quelque peu est lu comme ceci Qui a 10001le dire agrave 10007 En reacuteponse agrave ceci 10001 renvoie un petit paquet ici

10007 envoie alors des paquets agrave ladresse mateacuterielle mentionneacutee dans le paquet ici Il met dans un cachecette adresse mateacuterielle pour un temps relativement long et apregraves lexpiration du cache repose sa question

Quand on construit un pseudo pont on configure le pont pour quil reacuteponde agrave ces paquets ARP les hocirctes dureacuteseau envoyant alors leurs paquets au pont Le pont traite alors ces paquets et les envoie agrave linterface adapteacutee

Donc en reacutesumeacute quand un hocircte dun cocircteacute du pont demande ladresse mateacuterielle dun hocircte se situant de lautrecocircteacute le pont reacutepond avec un paquet qui dit transmets le moi

De cette faccedilon tout le trafic de donneacutees est transmis agrave la bonne place et il traverse toujours le pont

Impleacutementez-le

Les versions anciennes du noyau linux permettait de faire du proxy ARP uniquement agrave une granulariteacute sousreacuteseaux Ainsi pour configurer un pseudo pont il fallait speacutecifier les bonnes routes vers les deux cocircteacutes dupont et eacutegalement creacuteer les regravegles proxy-ARP correspondantes Ceacutetait peacutenible deacutejagrave par la quantiteacute de textequil fallait taper puis parce quil eacutetait facile de se tromper et creacuteer des configurations erroneacutees ougrave le pontreacutepondait agrave des requecirctes pour des reacuteseaux quil ne savait pas router

Avec Linux 24 (et peut-ecirctre bien le 22) cette possibiliteacute a eacuteteacute retireacutee et a eacuteteacute remplaceacutee par une option dansle reacutepertoire proc appeleacutee proxy-arp La proceacutedure pour construire un pseudo pont est maintenant

Assigner une adresse agrave chaque interface la gauche et la droite1 Creacuteer des routes pour que votre machine connaisse quels hocirctes reacutesident agrave gauche et quels hocirctesreacutesident agrave droite

2

Activer le proxy-ARP sur chaque interface echo 1 gt procsysnetipv4confethLproxyamplowbararpecho 1 gt procsysnetipv4confethRproxyamplowbararp ougrave L et R deacutesignent les numeacuteros delinterface du cocircteacute gauche (Left) et de celle du cocircteacute droit (Right)

3

Noubliez pas eacutegalement dactiver loption ipamplowbarforwarding Quand on convertit un vrai pont il se peutque vous trouviez cette option deacutesactiveacutee dans la mesure ougrave il ny en a pas besoin pour un pont

Une autre chose que vous devriez consideacuterer lors de la conversion est que vous aurez besoin deffacer le cachearp des ordinateurs du reacuteseau Le cache arp peut contenir danciennes adresses mateacuterielles du pont qui ne sontplus correctes

Sur un Cisco ceci est reacutealiseacute en utilisant la commande clear arp-cache et sous linux en utilisant arp -dipadresse Vous pouvez aussi attendre lexpiration manuelle du cache ce qui peut ecirctre plutocirct long

Il se peut que vous deacutecouvriez eacutegalement que votre reacuteseau eacutetait mal configureacute si vous avezaviez lhabitude despeacutecifier les routes sans les masques de sous-reacuteseau Dans le passeacute certaines versions de route pouvaientcorrectement deviner le masque ou au contraire se tromper sans pour autant vous le notifier Quand vousfaites du routage chirurgical comme deacutecrit plus haut il est vital que vous veacuterifiez vos masques desous-reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP amp Proxy-ARP 105

Chapitre 17 Routage Dynamique - OSPF et BGPSi votre reacuteseau commence agrave devenir vraiment gros ou si vous commencez agrave consideacuterer Internet comme votrepropre reacuteseau vous avez besoin doutils qui routent dynamiquement vos donneacutees Les sites sont souvent relieacutesentre eux par de multiples liens et de nouveaux liens surgissent en permanence

LInternet utilise la plupart du temps les standards OSPF (RFC 2328) et BGP4 (RFC 1771) Linux supporteles 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 travauxde reacutefeacuterence

Vue densemble

Cisco Systems Cisco Systems Designing large-scale IP Internetworks

Pour OSPF

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

Halabi a aussi eacutecrit un tregraves bon guide sur la conception du routage OSPF mais il semble avoir eacuteteacute effaceacute dusite 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

Bien que les exemples soient speacutecifiques agrave Cisco ils sont remarquablement semblables au langage deconfiguration de Zebra -)

Configurer OSPF avec Zebra

Contactez-moi si les informations qui suivent ne sont pas exactes ou si vous avez des suggestions Zebra estun formidable logiciel de routage dynamique eacutecrit par Kunihiro Ishiguro Toshiaki Takada et Yasuhiro OharaConfigurer OSPF avec zebra est simple et rapide mais en pratique il y a de nombreux paramegravetres dans le casougrave vous auriez des besoins speacutecifiques OSPF est labreacuteviation de Open Shortest Path First et quelques une deses fonctionnaliteacutes sont

hieacuterarchiqueLes reacuteseaux sont regroupeacutes par zones (areas) qui sont interconnecteacutees par une zone eacutepine dorsale quisera appeleacutee zone 0 Tout le trafic passe par la zone 0 et tous les routeurs de cette zone ont lesinformations de routage de toutes les autres zones

convergence rapideLes routes sont propageacutees tregraves rapidement compareacute agrave RIP par exemple

eacuteconomie de bande passanteUtilise la multi-distribution agrave la place de la diffusion ce qui eacutevite de submerger les autres hocirctes avecdes informations de routage sans inteacuterecirct pour eux La multi-distribution reacuteduit ainsi le deacutebit sur le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

106 Chapitre 17 Routage Dynamique - OSPF et BGP

reacuteseau De mecircme les routeurs internes (ceux dont toutes les interfaces sont situeacutees dans la mecircmezone) nobtiennent pas dinformations sur les autres zones Les routeurs avec des interfaces dans plusdune zone sont appeleacutes Area Border Routers Ils possegravedent les informations de topologie sur leszones auxquelles ils sont connecteacutes

Utilisation intensive de CPUOSPF est baseacute sur lalgorithme de Dijkstra Shortest Path First qui est coucircteux en temps de calculcompareacute aux autres algorithmes de routage Ce nest pas forceacutement mauvais dans la mesure ougrave le pluscourt chemin est calculeacute uniquement pour chaque zone Donc pour les reacuteseaux de petite agrave moyennetaille ce ne sera pas un problegraveme vous ne vous en rendrez pas compte

Information deacutetat de lienOSPF prend en compte les caracteacuteristiques speacutecifiques des reacuteseaux et interfaces telles que la bandepassante les deacutefauts de liens et le coucirct moneacutetaire

Protocole ouvert et logiciel sous license GPLOSPF est un protocole ouvert et Zebra est un logiciel sous license GPL ce qui repreacutesente un avantageeacutevident par rapport aux protocoles et logiciels proprieacutetaires

Preacuterequis

Noyau Linux Compileacute avec CONFIG_NETLINK_DEV and CONFIG_IP_MULTICAST (Je ne sais pas si dautreseacuteleacutements sont eacutegalement neacutecessaires)

IprouteZebra

Reacutecupeacuterez-le avec votre gestionnaire de paquet favori ou agrave partir de httpwwwzebraorg

Configurer Zebra

Prenons le reacuteseau suivant comme exemple

---------------------------------------------------- | 1921680024 | | | | Zone 0 100BaseTX Commuteacute | | Epine dorsale Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |1 |2 |253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSLATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172170016 Zone 1 | | 1921681024 wlan Zone 2 | ------------ | Reacuteseau etudiant (dortoir) | | Sans fil de Barcelone | ------------------------------------ -------------------------------

Ne soyez pas effrayeacute par ce diagramme Zebra reacutealise la plus grande partie du travail automatiquement cequi ne demandera aucun travail de saisie des routes avec Zebra Il serait peacutenible de maintenir toutes ces routesagrave la main au quotidien La chose la plus importante agrave maicirctriser clairement cest la topologie du reacuteseau Faitesparticuliegraverement attention agrave la zone 0 puisque cest la plus importante Dans un premier temps configurezZebra en eacuteditant zebraconf et en ladaptant agrave vos besoins

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configurer OSPF avec Zebra 107

hostname omega password xxx enable password xxx Interfaces description interface lo description test of desc interface eth1 multicast Static default route ip route 00000 21217021129 log file varlogzebrazebralog

Debian neacutecessite eacutegalement leacutedition de etczebradaemons pour quils soient lanceacutes au deacutemarrage

zebra=yes ospfd=yes

Nous devons maintenant editer ospfdconf si vous utilisez encore IPV4 ou ospf6dconf si vous travaillez avecIPV6 Mon fichier ospfdconf ressemble agrave ceci

hostname omega password xxx enable password xxx router ospf network 1921680024 area 0 network 172170016 area 1 log stdout log file varlogzebraospfdlog

Ceci indique agrave ospf la topologie de notre reacuteseau

Exeacutecuter Zebra

Nous devons maintenant deacutemarrer Zebra soit agrave la main en tapant zebra -d soit avec un script commeetcinitdzebra start En regardant attentivement les logs de ospdfd on peut voir les eacuteleacutements suivants

20021213 224624 OSPF interface 19216801 join AllSPFRouters Multicast group 20021213 224634 OSPF SMUX_CLOSE with reason 5 20021213 224644 OSPF SMUX_CLOSE with reason 5 20021213 224654 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF DR-Election[1st] Backup 19216801 20021213 224704 OSPF DR-Election[1st] DR 19216801 20021213 224704 OSPF DR-Election[2nd] Backup 0000 20021213 224704 OSPF DR-Election[2nd] DR 19216801 20021213 224704 OSPF interface 19216801 join AllDRouters Multicast group 20021213 224706 OSPF DR-Election[1st] Backup 19216802 20021213 224706 OSPF DR-Election[1st] DR 19216801 20021213 224706 OSPF Packet[DD] Negotiation done (Slave) 20021213 224706 OSPF nsm_change_status() scheduling new router-LSA origination 20021213 224711 OSPF ospf_intra_add_router Start

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

108 Configurer Zebra

Ignorez le message SMUX_CLOSE pour linstant dans la mesure ougrave il concerne SNMP Nous pouvons voirque 19216801 est routeur deacutesigneacute (Designated Router) et que 19216802 est le le routeur deacutesigneacute desauvegarde (Backup Designated Router)

Nous pouvons eacutegalement interagir avec zebra et ospfd en exeacutecutant

$ telnet localhost zebra$ telnet localhost ospfd

Voyons comment les routes se sont propageacutees en se connectant agrave zebra

rootatlantis~ telnet localhost zebra Trying 127001 Connected to atlantis Escape character is ^]

Hello this is zebra (version 092a) Copyright 1996-2001 Kunihiro Ishiguro

User Access Verification

Password atlantisgt show ip route Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Kgt 00000 via 19216801 eth1 Cgt 1270008 is directly connected lo O 172170016 [11010] is directly connected eth0 062153 Cgt 172170016 is directly connected eth0 O 1921680024 [11010] is directly connected eth1 062153 Cgt 1921680024 is directly connected eth1 atlantisgt show ip ospf border-routers ============ OSPF router routing table ============= R 1921680253 [10] area (0000) ABR via 1921680253 eth1 [10] area (0001) ABR via 1721702 eth0

ou directement avec iproute

rootomega~ ip route 2121702112826 dev eth0 proto kernel scope link src 21217021172 1921680024 dev eth1 proto kernel scope link src 19216801 172170016 via 19216802 dev eth1 proto zebra metric 20 default via 21217021129 dev eth0 proto zebra rootomega~

Nous pouvons voir les routes Zebra qui neacutetaient pas preacutesentes auparavant Il est vraiment agreacuteable de voirapparaicirctre les routes quelques secondes apregraves le lancement de zebra et ospfd Vous pouvez veacuterifier laconnectiviteacute avec les autres hocirctes en utilisant ping Les routes zebra sont automatiques Vous pouvez ajouterun autre routeur au reacuteseau configurez Zebra et voilagrave

Astuce vous pouvez utiliser

tcpdump -i eth1 ip[9] == 89

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exeacutecuter Zebra 109

pour analyser les paquets OSPF Le numeacutero du protocole OSPF est 89 et le champ du protocole est le 9iegravemeoctet de len-tecircte ip

OSPF possegravede de nombreux paramegravetres speacutecialement pour les grands reacuteseaux Dans de prochainsdeacuteveloppements du HOWTO nous montrerons des meacutethodes de reacuteglages fins dOSPF

Configurer BGP4 avec Zebra

Le Border Gateway Protocol Version 4 (BGP4) est un protocole de routage dynamique deacutecrit dans la RFC1771 Il permet la distribution des informations de connectiviteacute cest agrave dire les tables de routage vers dautresnoeuds BGP4 actifs Il peut ecirctre utiliseacute comme un EGP ou un IGP Dans le mode EGP chaque noeud doitavoir son propre numeacutero de systegraveme autonome ( utonomous System (AS)) BGP4 supporte etlaggreacutegation de routes (reacuteunir plusieurs routes en une seule) gt The Border Gateway Protocol Version 4(BGP4) is a dynamic routing gt protocol described in RFC 1771 It allows the distribution of gt reachabilityinformation ie routing tables to other BGP4 gt enabled nodes It can either be used as EGP or IGP in EGPmode gt each node must have its own Autonomous System (AS) number gt BGP4 supports Classless InterDomain Routing (CIDR) and route gt aggregation (merge multiple routes into one)

scheacutema reacuteseau (Exemple)

Le scheacutema reacuteseau suivant est utiliseacute pour les exemples agrave suivre AS 1 et 50 ont plusieurs voisins mais nousavons seulement besoin de configurer 1 et 50 comme nos voisins Les noeuds communiquent entre eux pardes tunnels dans cet exemple mais ce nest pas une obligation

Note les numeacuteros AS utiliseacutes dans cet exemple sont reacuteserveacutes Veuillez obtenir vos propres numeacuteros AS duRIPE si vous installez des liens officiels

-------------------- | 192168231224 | | AS 23 | -------------------- ------------------ ------------------ | 1921681124 |-------| 10101116 | | AS 1 | | AS 50 | ------------------ ------------------

Configuration (Exemple)

La configuration suivante est eacutecrite pour le noeud 192168231224 et elle sera facile agrave adapter pour les autresnoeuds

Elle commence par des eacuteleacutements geacuteneacuteraux comme le nom de lhocircte les mots de passe et les options de debug

hostname hostname anakin

login password password xxx

enable password (super user mode) enable password xxx

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

110 Configurer BGP4 avec Zebra

path to logfile log file varlogzebrabgpdlog

debugging be verbose (can be removed afterwards) debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates

La liste de controcircle daccegraves (Access list) est utiliseacutee pour limiter la redistribution aux reacuteseaux priveacutes (RFC1918)

RFC 1918 networks access-list local_nets permit 1921680016 access-list local_nets permit 172160012 access-list local_nets permit 100008 access-list local_nets deny any

Letape suivante consiste agrave configurer chaque AS

Own AS number router bgp 23

IP address of the router bgp router-id 1921682312

announce our own network to other neighbors network 19216823024

advertise all connected routes (= directly attached interfaces) redistribute connected

advertise kernel routes (= manually inserted routes) redistribute kernel

Chaque section router bgp contient une liste de voisins auquels le routeur est connecteacute

neighbor 19216811 remote-as 1 neighbor 19216811 distribute-list local_nets in neighbor 101011 remote-as 50 neighbor 101011 distribute-list local_nets in

Veacuterification de la configuration

Note vtysh est un multiplexeur qui connecte toutes les interfaces utilisateur de zebra ensemble

anakin sh ip bgp summary BGP router identifier 1921682312 local AS number 23 2 BGP AS-PATH entries 0 BGP community entries

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd 101001 4 50 35 40 0 0 0 002840 1 19216811 4 1 27574 27644 0 0 0 032604 14

Total number of neighbors 2 anakin anakin sh ip bgp neighbors 101001 BGP neighbor is 101001 remote AS 50 local AS 23 external link

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration (Exemple) 111

BGP version 4 remote router ID 101001 BGP state = Established up for 002901 anakin

Voyons quelles routes nous avons obtenues de nos voisins

anakin sh ip ro bgp Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Bgt 172160014 [200] via 19216811 tun0 2d10h19m Bgt 172300016 [200] via 19216811 tun0 100924 Bgt 19216851032 [200] via 19216811 tun0 2d10h27m Bgt 19216852632 [200] via 19216811 tun0 100924 Bgt 19216853632 [200] via 19216811 tun0 2d10h19m Bgt 19216817024 [200] via 19216811 tun0 3d05h07m Bgt 19216817132 [200] via 19216811 tun0 3d05h07m Bgt 19216832024 [200] via 19216811 tun0 2d10h27m anakin

Chapitre 18 Autres possibiliteacutesCe chapitre est une liste des projets ayant une relation avec le routage avanceacute et la mise en forme du traficsous Linux Certains de ces liens meacuteriteraient des chapitres speacutecifiques dautres sont tregraves bien documenteacutes etnont pas besoin de HOWTO en plus

Impleacutementation VLAN 8021Q pour Linux (site)VLAN est une faccedilon tregraves sympa de diviser vos reacuteseaux dune maniegravere plus virtuelle que physique Debonnes informations sur les VLAN pourront ecirctre trouveacutees ici Avec cette impleacutementation votre boiteLinux pourra dialoguer VLAN avec des machines comme les Cisco Catalyst 3ComamplcubCorebuilder Netbuilder II SuperStack II switch 630amprcub Extreme Ntwks Summit 48Foundry amplcubServerIronXL FastIronamprcub

Impleacutementation alternative VLAN 8021Q pour Linux(site)Une impleacutementation alternative de VLAN pour Linux Ce projet a deacutemarreacute suite au deacutesaccord aveclarchitecture et le style de codage du projet VLAN eacutetabli avec comme reacutesultat une structure delensemble plus clair Mise agrave jour a eacuteteacute inclus dans le noyau 2414 (peut-ecirctre dans le 2413)

Un bon HOWTO agrave propos des VLAN peut ecirctre trouveacute ici

Mise agrave jour a eacuteteacute inclue dans le noyau agrave partir de la version 2414 (peut-ecirctre 13)Serveur Linux Virtuel (Linux Virtual Server )(site)

Ces personnes sont tregraves talentueuses Le Serveur Virtuel Linux est un serveur agrave haute disponibiliteacutehautement eacutevolutif construit autour dune grappe (cluster) de serveurs avec un eacutequilibreur de chargetournant sur le systegraveme dexploitation Linux Larchitecture du cluster est transparente pour lesutilisateurs finaux qui ne voient quun simple serveur virtuel

En reacutesumeacute que vous ayez besoin deacutequilibrer votre charge ou de controcircler votre trafic LVS aura unemaniegravere de le faire Certaines de leurs techniques sont positivement diaboliques Par exemple ilspermettent agrave plusieurs machines davoir une mecircme adresse IP mais en deacutesactivant lARP dessusSeule la machine LVS qui a elle lARP actif deacutecide de lhocircte qui manipulera le paquet entrantCelui-ci est envoyeacute avec la bonne adresse MAC au serveur choisi Le trafic sortant passe directementpar le routeur et non par la machine LVS qui par conseacutequent na pas besoin de voir vos 5Gbits dedonneacutees allant sur Internet Cette machine LVS ne peut alors pas ecirctre un goulot deacutetranglement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

112 Chapitre 18 Autres possibiliteacutes

Limpleacutementation de LVS neacutecessite une mise agrave jour pour les noyaux 20 et 22 alors quun moduleNetfilter est disponible dans le 24 Il ny a donc pas besoin de mise agrave jour pour cette version dunoyau Le support 24 est encore en deacuteveloppement Battez-vous donc avec et envoyez voscommentaires ou vos mises agrave jour

CBQinit (site)Configurer CBQ peut ecirctre un peu intimidant speacutecialement si votre seul souhait est de mettre en formele trafic dordinateurs placeacutes derriegravere un routeur CBQinit peut vous aider agrave configurer Linux agrave laidedune syntaxe simplifieacutee

Par exemple si vous voulez que tous les ordinateurs de votre reacuteseau 1921681024 (sur eth110 Mbits) aient leur vitesse de teacuteleacutechargement limiteacutee agrave 28 Kbits remplissez le fichier deconfiguration de CBQinit avec ce qui suit

DEVICE=eth110Mbit1MbitRATE=28KbitWEIGHT=2KbitPRIO=5RULE=1921681024

Utiliser simplement ce programme si le comment et pourquoi ne vous inteacuteresse pas Nous utilisonsCBQinit en production et il marche tregraves bien On peut mecircme faire des choses plus avanceacutees commela mise en forme deacutependant du temps La documentation est directement inteacutegreacutee dans le script ce quiexplique labsence dun fichier README

Scripts faciles de mise en forme Chronox(site)Stephan Mueller (smuellerchronoxde) a eacutecrit deux scripts utiles limitconn et shaper Lepremier vous permet de maicirctriser une session de teacuteleacutechargement comme ceci

limitconn -s SERVERIP -p SERVERPORT -l LIMIT

Il fonctionne avec Linux 22 et 24

Le second script est plus compliqueacute et peut ecirctre utiliseacute pour mettre en place des files dattentediffeacuterentes baseacutees sur les regravegles iptables Celles-ci sont utiliseacutees pour marquer les paquets qui sontalors mis en forme

Impleacutementation du Protocole Redondant Routeur Virtuel (site)Ceci est purement pour la redondance Deux machines avec leurs propres adresses IP et MAC creacuteentune troisiegraveme adresse IP et MAC virtuelle Bien que destineacute agrave lorigine uniquement aux routeurs quiont besoin dadresses MAC constantes cela marche eacutegalement pour les autres serveurs

La beauteacute de cette approche est lincroyable faciliteacute de la configuration Pas de compilation de noyauou de neacutecessiteacute de mise agrave jour tout se passe dans lespace utilisateur

Lancer simplement ceci sur toutes les machines participant au service

vrrpd -i eth0 -v 50 100022

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 18 Autres possibiliteacutes 113

Et vous voilagrave opeacuterationnel 100022 est maintenant geacutereacute par lun de vos serveurs probablement lepremier agrave avoir lanceacute le deacutemon vrrp Deacuteconnectez maintenant cet ordinateur du reacuteseau et tregravesrapidement ladresse 100022 et ladresse MAC seront geacutereacutees par lun des autres ordinateurs

Jai essayeacute ceci et il a eacuteteacute actif et opeacuterationnel en 1 minute Pour une raison eacutetrange ma passerelle pardeacutefaut a eacuteteacute supprimeacutee Cependant loption -n permet de preacutevenir cela

Voici une deacutefaillance en direct

64 bytes from 100022 icmp_seq=3 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=4 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=5 ttl=255 time=168 ms64 bytes from 100022 icmp_seq=6 ttl=255 time=18 ms64 bytes from 100022 icmp_seq=7 ttl=255 time=17 ms

Pas un paquet ping na eacuteteacute perdu Apregraves 4 paquets jai deacuteconnecteacute mon P200 du reacuteseau et mon 486a pris le relais ce qui est visible par laugmentation du temps de latence

Chapitre 19 Lectures suppleacutementaireshttpsnafufreedomorglinux22iproute-noteshtml

Contient beaucoup dinformations techniques et de commentaires sur le noyauhttpwwwdavinottawaoncaols

Transparents de Jamal Hadi Salim un des auteurs du controcircleur de trafic de Linuxhttpdefiantcoinetcomiproute2ip-cref

Version HTML de la documentation LaTeX dAlexeys explique une partie diproute2 en deacutetailshttpwwwaciriorgfloydcbqhtml

Sally Floyd a une bonne page sur CBQ incluant ses publications originales Aucune nest speacutecifique agraveLinux mais il y a un travail de discussion sur la theacuteorie et lutilisation de CBQ Contenu tregravestechnique mais une bonne lecture pour ceux qui sont inteacuteresseacutes

Differentiated Services on LinuxThis document par Werner Almesberger Jamal Hadi Salim et Alexey Kuznetsov Deacutecrit les fonctionsDiffServ du noyau Linux entre autres les gestionnaires de mise en file dattente TBF GREDDSMARK et le classificateur tcindex

httpcetipl~ekravietzcbqNET4_tchtmlUn autre HOWTO en polonais Vous pouvez cependant copiercoller les lignes de commandes ellesfonctionnent de la mecircme faccedilon dans toutes les langues Lauteur travaille en collaboration avec nouset sera peut ecirctre bientocirct un auteur de sections de cet HOWTO

IOS Committed Access RateDes gens de Cisco qui ont pris la louable habitude de mettre leur documentation en ligne La syntaxede Cisco est diffeacuterente mais les concepts sont identiques sauf quon fait mieux et sans mateacuterielcoutant le prix dune voiture -)

TCPIP Illustrated volume 1 W Richard Stevens ISBN 0-201-63346-9Sa lecture est indispensable si vous voulez reacuteellement comprendre TCPIP et de plus elle estdivertissante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

114 Chapitre 19 Lectures suppleacutementaires

Chapitre 20 RemerciementsNotre but est de faire la liste de toutes les personnes qui ont contribueacute agrave ce HOWTO ou qui nous ont aideacutes agraveexpliquer le fonctionnement des choses Alors quil nexiste pas actuellement de tableau dhonneur Netfilternous souhaitons saluer les personnes qui apportent leur aide

Junk Alins

ltjuanjomatupcesgt

bull

Joe Van Andelbull Michael T Babcock

ltmbabcockfibrespeednetgt

bull

Christopher Barton

ltcpbartonuiucedugt

bull

Peter Bieringer

ltpbbieringerdegt

bull

Ard van Breemen

ltardkwaaknetgt

bull

Ron Brinker

ltserviceemciscomgt

bull

ukasz Bromirski

ltlbromirskimr0vkaeuorggt

bull

Lennert Buytenhek

ltbuytenhgnuorggt

bull

Esteve Camps

ltestevehadesudgesgt

bull

Ricardo Javier Cardenes

ltricardoconysiscomgt

bull

Stef Coene

ltstefcoenedocumorggt

bull

Don Cohen

ltdon-lartcisiscs3-inccomgt

bull

Jonathan Corbet

ltlwnlwnnetgt

bull

Gerry N5JXS Creager

ltgerrycstamuedugt

bull

Marco Davids

ltmarcosaranlgt

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 115

Jonathan Day

ltjd9812my-dejacomgt

bull

Martin aka devik Devera

ltdevikcdiczgt

bull

Hannes Ebner

lthefli4ldegt

bull

Derek Fawcus

ltdfawcusciscocomgt

bull

David Fries

ltdfriesmailwinorggt

bull

Stephan Kobold Gehring

ltStephanGehringbechtledegt

bull

Jacek Glinkowski

ltjglinkowhnscomgt

bull

Andrea Glorioso

ltsamaperchetopiorggt

bull

Thomas Graaf

lttgrafsuugchgt

bull

Sandy Harris

ltsandystormcagt

bull

Nadeem Hasan

ltnhasanusanetgt

bull

Erik Hensema

lterikhensemaxs4allnlgt

bull

Vik Heyndrickx

ltvikheyndrickxedchqcomgt

bull

Spauldo Da Hippie

ltspauldousanetgt

bull

Koos van den Hout

ltkooskzdoosxs4allnlgt

bull

Stefan Huelbrock ltshuelbrockdatasystemsdegtbull Ayotunde Itayemi

ltaitayemimetrongcomgt

bull

Alexander W Janssen ltyallaynfonaticdegtbull Andreas Jellinghaus ltajdungeoninkadegtbull Gareth John ltgdjohnzeplerorggtbull Dave Johnsonbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

116 Chapitre 20 Remerciements

ltdjwwwuklinuxorggtMartin Josefsson ltgandalfwlugwestbosegtbull Andi Kleen ltaksusedegtbull Andreas J Koenig ltandreaskoeniganimadegtbull Pawel Krawczyk ltkravietzalfacetiplgtbull Amit Kucheria ltamitkittckuedugtbull Edmund Lau ltedlauucficsuciedugtbull Philippe Latu ltphilippelatulinux-franceorggtbull Arthur van Leeuwen ltarthurvlscikunnlgtbull Jose Luis Domingo Lopez

ltjdomingo24x7linuxcomgt

bull

Robert Lowe

ltroberthlowelawrenceedugt

bull

Jason Lunz ltjccgatechedugtbull Stuart Lynne ltslfireplugnetgtbull Alexey Mahotkin ltalexmformulabezrugtbull Predrag Malicevic ltpmalicieeeorggtbull Patrick McHardy ltkabertrashnetgtbull Andreas Mohr ltandilisasdegtbull James Morris ltjmorrisintercodecomaugtbull Andrew Morton ltakpmzipcomaugtbull Wim van der Mostbull Stephan Mueller ltsmuellerchronoxdegtbull Togan Muftuoglu lttoganmyahoocomgtbull Chris Murray ltcmurraystargatecagtbull Patrick Nagelschmidt ltdtogmxnetgtbull Ram Narula ltramprincess1netgtbull Jorge Novo ltjnovoeducanetnetgtbull Patrik ltphkurdnugtbull Pl Osgyny ltoplabwestel900netgtbull Lutz Preszligler ltLutzPresslerSerNetDEgtbull Jason Pyeron ltjasonpyeroncomgtbull Rod Roark ltrodsunsetsystemscomgtbull Pavel Roskin ltproskignuorggtbull Rusty Russell ltrustyrustcorpcomaugtbull Mihai RUSU ltdizzyroedunetgtbull Rob Pitman ltrobpitmancozagtbull Jamal Hadi Salim lthadicyberuscagtbull Ren Serral ltrserralacupcesgtbull David Sauer ltdavidspenguinczgtbull Sheharyar Suleman Shaikh ltsss23drexeledugtbull Stewart Shields ltMourningBladebigfootcomgtbull Nick Silberstein ltnhsilberyahoocomgtbull Konrads Smelkov ltkonradsinterbaltikacomgtbull William Stearns

ltwstearnspoboxcomgt

bull

Andreas Steinmetz ltastdomdvdegtbull Matthew Strait ltstraitmmathcscarletonedugtbull Jason Tackaberry lttacklinuxcomgtbull Charles Tassell ltctassellisnnetgtbull Glen Turner ltglenturneraarneteduaugtbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 117

Tea Sponsor Eric Veldhuyzen ltericterranugtbull Thomas Walpuski ltthomasbenderthinknerddegtbull Song Wang ltwsongeceuciedugtbull Chris Wilson

ltchrisnetserverscoukgt

bull

Lazar Yanackiev

ltLyanackievgmxnetgt

bull

Pedro Larroy

ltpiotrmemberfsforggt

Chaptitre 15 section 10 Exemple dune solution de translation dadresse avec de la QoSdiams Chaptitre 17 section 1 Configurer OSPF avec Zebradiams

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

118 Chapitre 20 Remerciements

  • HOWTO du routage avanceacute et du controcircle de trafic sous Linux
Page 5: HOWTO du routage avanc© et du contr´le de trafic sous Linux

Chapitre 1 DeacutedicaceCe document est deacutedieacute agrave beaucoup de gens dans ma tentative de tous me les rappeler je peux en citerquelques-uns

Rusty Russellbull Alexey N Kuznetsovbull La fine eacutequipe de Googlebull Leacutequipe de Casema Internetbull

Chapitre 2 IntroductionBienvenue cher lecteur

Ce document a pour but de vous eacuteclairer sur la maniegravere de faire du routage avanceacute avec Linux 2224Meacuteconnus par les utilisateurs les outils standard de ces noyaux permettent de faire des choses spectaculairesLes commandes comme route et ifconfig sont des interfaces vraiment pauvres par rapport agrave la grandepuissance potentielle diproute2

Jespegravere que ce HOWTO deviendra aussi lisible que ceux de Rusty Russell tregraves reacuteputeacute (parmi dautres choses)pour son netfilter

Vous pouvez nous contacter en nous eacutecrivant agrave leacutequipe HOWTO Cependant postez sil vous plaicirct vosquestions sur la liste de diffusion (voir la section correspondante) pour celles qui ne sont pas directement lieacuteesagrave ce HOWTO

Avant de vous perdre dans ce HOWTO si la seule chose que vous souhaitez faire est de la simple mise enforme de trafic allez directement au chapitre Autres possibiliteacutesgt et lisez ce qui concerne CBQinit

Conditions de distribution et Mise en garde

Ce document est distribueacute dans lespoir quil sera utile et utiliseacute mais SANS AUCUNE GARANTIE sansmecircme une garantie implicite de qualiteacute leacutegale et marchande ni aptitude agrave un quelconque usage

En un mot si votre dorsale STM-64 est tombeacutee ou distribue de la pornographie agrave vos estimeacutes clients celanest pas de notre faute Deacutesoleacute

Copyright (c) 2001 par Bert Hubert Gregory Maxwell et Martijn van Oosterhout Remco van Mook Paul BSchroeder et autres Ce document ne peut ecirctre distribueacute quen respectant les termes et les conditions exposeacutesdans la Open Publication License v10 ou supeacuterieure (la derniegravere version est actuellement disponible surhttpwwwopencontentorgopenpub)

Copiez et distribuez (vendez ou donnez) librement ce document dans nimporte quel format Les demandes decorrections etou de commentaires sont agrave adresser agrave la personne qui maintient ce document

Il est aussi demandeacute que si vous publiez cet HOWTO sur un support papier vous en envoyiez desexemplaires aux auteurs pour une ltlt relecture critique gtgt -)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 2 Introduction 5

Connaissances preacutealables

Comme le titre limplique ceci est un HOWTO ltlt avanceacute gtgt Bien quil ne soit pas besoin decirctre un expertreacuteseau certains preacute-requis sont neacutecessaires

Voici dautres reacutefeacuterences qui pourront vous aider agrave en apprendre plus

Rusty Russells networking-concepts-HOWTOTregraves bonne introduction expliquant ce quest un reacuteseau et comment on le connecte agrave dautres reacuteseaux

Linux Networking-HOWTO (ex Net-3 HOWTO)Excellent document bien que tregraves bavard Il vous apprendra beaucoup de choses qui sont deacutejagraveconfigureacutees si vous ecirctes capable de vous connecter agrave Internet Il peut eacuteventuellement ecirctre situeacute agraveusrdocHOWTONET-HOWTOtxt mais peut eacutegalement ecirctre trouveacute en ligne

Ce que Linux peut faire pour vous

Une petite liste des choses qui sont possibles

Limiter la bande passante pour certains ordinateursbull Limiter la bande passante VERS certains ordinateursbull Vous aider agrave partager eacutequitablement votre bande passantebull Proteacuteger votre reacuteseau des attaques de type Deacuteni de Servicebull Proteacuteger Internet de vos clientsbull Multiplexer plusieurs serveurs en un seul pour leacutequilibrage de charge ou une disponibiliteacute ameacutelioreacuteebull Restreindre laccegraves agrave vos ordinateursbull Limiter laccegraves de vos utilisateurs vers dautres hocirctesbull Faire du routage baseacute sur lID utilisateur (eh oui ) ladresse MAC ladresse IP source le port le typede service lheure ou le contenu

bull

Peu de personnes utilisent couramment ces fonctionnaliteacutes avanceacutees Il y a plusieurs raisons agrave cela Bien quela documentation soit fournie la prise en main est difficile Les commandes de controcircle du trafic ne sontpratiquement pas documenteacutees

Notes diverses

Il y a plusieurs choses qui doivent ecirctre noteacutees au sujet de ce document Bien que jen ai eacutecrit la majeure partieje ne veux vraiment pas quil reste tel quel Je crois beaucoup agrave lOpen Source je vous encourage donc agraveenvoyer des remarques des mises agrave jour des corrections etc Nheacutesitez pas agrave mavertir des coquilles ouderreurs pures et simples Si mon anglais vous paraicirct parfois peu naturel ayez en tecircte sil vous plaicirct quelanglais nest pas ma langue natale Nheacutesitez pas agrave menvoyer vos suggestions amplsqbNdT en anglais ]

Si vous pensez que vous ecirctes plus qualifieacute que moi pour maintenir une section ou si vous pensez que vouspouvez eacutecrire et maintenir de nouvelles sections vous ecirctes le bienvenu La version SGML de ce HOWTO estdisponible via CVS Jenvisage que dautres personnes puissent travailler dessus

Pour vous aider vous trouverez beaucoup de mentions FIXME (NdT A CORRIGER) Les corrections sonttoujours les bienvenues Si vous trouvez une mention FIXME vous saurez que vous ecirctes en territoire inconnuCela ne veut pas dire quil ny a pas derreurs ailleurs faites donc tregraves attention Si vous avez valideacute quelquechose faites-nous le savoir ce qui nous permettra de retirer la mention FIXME

Je prendrai quelques liberteacutes tout au long de cet HOWTO Par exemple je pars de lhypothegravese duneconnexion Internet agrave 10 Mbits bien que je sache tregraves bien que cela ne soit pas vraiment courant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

6 Connaissances preacutealables

Accegraves CVS et propositions de mises agrave jour

Ladresse canonique de cet HOWTO est Ici

Nous avons maintenant un CVS en accegraves anonyme disponible depuis le monde entier Cela est inteacuteressantpour plusieurs raisons Vous pouvez facilement teacuteleacutecharger les nouvelles versions de ce HOWTO et soumettredes mises agrave jour

En outre cela permet aux auteurs de travailler sur la source de faccedilon indeacutependante ce qui est une bonne choseaussi

$ export CVSROOT=pserveranonoutpostds9anlvarcvsroot$ cvs loginCVS password [enter cvs (sans les caractegraveres )]$ cvs co 24routingcvs server Updating 24routingU 24routinglartcdb

Si vous avez fait des changements et que vous vouliez contribuer au HOWTO exeacutecutez cvs -z3 diff-uBb et envoyez-nous le reacutesultat par courrier eacutelectronique de faccedilon agrave pouvoir facilement inteacutegrer lesmodifications Merci Au fait soyez sucircr que vous avez eacutediteacute le fichier db les autres documents eacutetant geacuteneacutereacutesagrave partir de celui-ci

Un fichier Makefile est fourni pour vous aider agrave creacuteer des fichiers PostScript dvi pdf html et texte Vouspouvez avoir agrave installer les docbook docbook-utils ghostscript et tetex pour obtenir tous les formats de sortie

Faites attention de ne pas eacutediter le fichier 24routingsgml Il contient une ancienne version du HOWTO Lebon fichier est lartcdb

Liste de diffusion

Les auteurs reccediloivent de plus en plus de courriers eacutelectroniques agrave propos de cet HOWTO Vu linteacuterecirct de lacommunauteacute il a eacuteteacute deacutecideacute la mise en place dune liste de diffusion ougrave les personnes pourront discuter duroutage avanceacute et du controcircle de trafic Vous pouvez vous abonner agrave la liste ici

Il devra ecirctre noteacute que les auteurs sont tregraves heacutesitants agrave reacutepondre agrave des questions qui nont pas eacuteteacute poseacutees sur laliste Nous aimerions que la liste devienne une sorte de base de connaissance Si vous avez une questionrecherchez sil vous plaicirct dabord dans larchive et ensuite postez-lagrave dans la liste de diffusion

Plan du document

Nous allons essayer de faire des manipulations inteacuteressantes degraves le deacutebut ce qui veut dire que tout ne sera pasexpliqueacute en deacutetail tout de suite Veuillez passer sur ces deacutetails et accepter de consideacuterer quils deviendrontclairs par la suite

Le routage et le filtrage sont deux choses distinctes Le filtrage est tregraves bien documenteacute dans le HOWTO deRusty disponible ici

Rustys Remarkably Unreliable Guidesbull

Nous nous focaliserons principalement sur ce quil est possible de faire en combinant netfilter et iproute2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Accegraves CVS et propositions de mises agrave jour 7

Chapitre 3 Introduction agrave iproute2

Pourquoi iproute2

La plupart des distributions Linux et des UNIX utilisent couramment les veacuteneacuterables commandes arp ifconfiget route Bien que ces outils fonctionnent ils montrent quelques comportements inattendus avec les noyauxLinux des seacuteries 22 et plus Par exemple les tunnels GRE font partie inteacutegrante du routage de nos jours maisils neacutecessitent des outils complegravetement diffeacuterents

Avec iproute2 les tunnels font partie inteacutegrante des outils

Les noyaux Linux des seacuteries 22 et plus ont un sous-systegraveme reacuteseau complegravetement reacuteeacutecrit Ce nouveau codagede la partie reacuteseau apporte agrave Linux des performances et des fonctionnaliteacutes qui nont pratiquement pasdeacutequivalent parmi les autres systegravemes dexploitation En fait le nouveau logiciel de filtrage routage et declassification possegravede plus de fonctionnaliteacutes que les logiciels fournis sur beaucoup de routeurs deacutedieacutes depare-feu et de produits de mise en forme (shaping) du trafic

Dans les systegravemes dexploitation existants au fur et agrave mesure que de nouveaux concepts reacuteseau apparaissaientles deacuteveloppeurs sont parvenus agrave les greffer sur les structures existantes Ce travail constant dempilage decouches a conduit agrave des codes reacuteseau aux comportements eacutetranges un peu comme les langues humaines Dansle passeacute Linux eacutemulait le mode de fonctionnement de SunOS ce qui neacutetait pas lideacuteal

La nouvelle structure diproute2 a permis de formuler clairement des fonctionnaliteacutes impossibles agraveimpleacutementer dans le sous-systegraveme reacuteseau preacuteceacutedent

Un tour dhorizon diproute2

Linux possegravede un systegraveme sophistiqueacute dallocation de bande passante appeleacute Controcircle de trafic (TrafficControl) Ce systegraveme supporte diffeacuterentes meacutethodes pour classer ranger par ordre de prioriteacute partager etlimiter le trafic entrant et sortant

Nous commencerons par un petit tour dhorizon des possibiliteacutes diproute2

Preacuterequis

Vous devez ecirctre sucircr que vous avez installeacute les outils utilisateur (NdT userland tools par opposition agrave la partieltlt noyau gtgt diproute2) Le paquet concerneacute sappelle iproute sur RedHat et Debian Autrement il peut ecirctretrouveacute agrave ftpftpinracruip-routingiproute2-224-now-sstargz

Vous pouvez aussi essayer iproute2-currenttargz pour la derniegravere version

Certains eacuteleacutements diproute vous imposent lactivation de certaines options du noyau Il devra eacutegalement ecirctrenoteacute que toutes les versions de RedHat jusquagrave la version 62 incluse nont pas les fonctionnaliteacutes du controcirclede trafic activeacutees dans le noyau fourni par deacutefaut

RedHat 72 contient tous les eacuteleacutements par deacutefaut

Soyez eacutegalement sucircr que vous avez le support netlink mecircme si vous devez choisir de compiler votrepropre noyau iproute2 en a besoin

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

8 Chapitre 3 Introduction agrave iproute2

Explorer votre configuration courante

Cela peut vous paraicirctre surprenant mais iproute2 est deacutejagrave configureacute Les commandes courantes ifconfig etroute utilisent deacutejagrave les appels systegraveme avanceacutes diproute2 mais essentiellement avec les options par deacutefaut(cest-agrave-dire ennuyeuses)

Loutil ip est central et nous allons lui demander de nous montrer les interfaces

ip nous montre nos liens

[ahuhome ahu]$ ip link list1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 0000000000002 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff4 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp

La sortie peut varier mais voici ce qui est afficheacute pour mon routeur NAT (NdT translation dadresse) chezmoi Jexpliquerai seulement une partie de la sortie dans la mesure ougrave tout nest pas directement pertinent

La premiegravere interface que nous voyons est linterface loopback Bien que votre ordinateur puissefonctionner sans je vous le deacuteconseille La taille de MTU (uniteacute maximum de transmission) est de 3924octets et loopback nest pas supposeacute ecirctre mis en file dattente ce qui prend tout son sens dans la mesure ougravecette interface est le fruit de limagination de votre noyau

Je vais passer sur linterface dummy pour linstant et il se peut quelle ne soit pas preacutesente sur votre ordinateurIl y a ensuite mes deux interfaces physiques lune du cocircteacute de mon modem cacircble lautre servant mon segmentethernet agrave la maison De plus nous voyons une interface ppp0

Notons labsence dadresses IP Iproute deacuteconnecte les concepts de ltlt liens gtgt et ltlt dadresses IP gtgt AveclIP aliasing le concept de ladresse IP canonique est devenu de toute faccedilon sans signification

ip nous montre bien cependant ladresse MAC lidentifiant mateacuteriel de nos interfaces ethernet

ip nous montre nos adresses IP

[ahuhome ahu]$ ip address show 1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 000000000000 inet 1270018 brd 127255255255 scope host lo2 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff inet 100018 brd 10255255255 scope global eth04 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp inet 2126494251 peer 2126494132 scope global ppp0

Cela contient plus dinformations ip montre toutes nos adresses et agrave quelles cartes elles appartiennent inetsignifie Internet (IPv4) Il y a beaucoup dautres familles dadresses mais elles ne nous concernent pas pour le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explorer votre configuration courante 9

moment

Examinons linterface eth0 de plus pregraves Il est dit quelle est relieacutee agrave ladresse internet 100018Quest-ce que cela signifie Le 8 deacutesigne le nombre de bits reacuteserveacutes agrave ladresse reacuteseau Il y a 32 bits donc ilreste 24 bits pour deacutesigner une partie de notre reacuteseau Les 8 premiers bits de 10001 correspondent agrave10000 notre adresse reacuteseau et notre masque de sous-reacuteseau est 255000

Les autres bits repegraverent des machines directement connecteacutees agrave cette interface Donc 10250313 estdirectement disponible sur eth0 comme lest 10001 dans notre exemple

Avec ppp0 le mecircme concept existe bien que les nombres soient diffeacuterents Son adresse est2126494251 sans masque de sous-reacuteseau Cela signifie que vous avez une liaison point agrave point et quetoutes les adresses agrave lexception de 2126494251 sont distantes Il y a cependant plus dinformationsEn effet on nous dit que de lautre cocircteacute du lien il ny a encore quune seule adresse 21264941 Le 32nous preacutecise quil ny a pas de ltlt bits reacuteseau gtgt

Il est absolument vital que vous compreniez ces concepts Reacutefeacuterez-vous agrave la documentation mentionneacutee audeacutebut de ce HOWTO si vous avez des doutes

Vous pouvez aussi noter qdisc qui deacutesigne la gestion de la mise en file dattente (Queueing Discipline)Cela deviendra vital plus tard

ip nous montre nos routes

Nous savons maintenant comment trouver les adresses 10xyz et nous sommes capables datteindre21264941 Cela nest cependant pas suffisant et nous avons besoin dinstructions pour atteindre lemonde LInternet est disponible via notre connexion PPP et il se trouve que 21264941 est precirct agravepropager nos paquets agrave travers le monde et agrave nous renvoyer le reacutesultat

[ahuhome ahu]$ ip route show21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Cela se comprend de soi-mecircme Les 4 premiegraveres lignes donnent explicitement ce qui eacutetait sous-entendu parip address show la derniegravere ligne nous indiquant que le reste du monde peut ecirctre trouveacute via21264941 notre passerelle par deacutefaut Nous pouvons voir que cest une passerelle agrave cause du motltlt via gtgt qui nous indique que nous avons besoin denvoyer les paquets vers 21264941 et que cestelle qui se chargera de tout

En reacutefeacuterence voici ce que lancien utilitaire route nous propose

[ahuhome ahu]$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref UseIface21264941 0000 255255255255 UH 0 0 0 ppp010000 0000 255000 U 0 0 0 eth0127000 0000 255000 U 0 0 0 lo0000 21264941 0000 UG 0 0 0 ppp0

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

10 ip nous montre nos adresses IP

ARP

ARP est le Protocole de Reacutesolution dAdresse (Address Resolution Protocol) Il est deacutecrit dans le RFC 826ARP est utiliseacute par une machine dun reacuteseau local pour retrouver ladresse mateacuterielle (la localisation) duneautre machine sur le mecircme reacuteseau Les machines sur Internet sont geacuteneacuteralement connues par leur nom auquelcorrespond une adresse IP Cest ainsi quune machine sur le reacuteseau foocom est capable de communiqueravec une autre machine qui est sur le reacuteseau barnet Une adresse IP cependant ne peut pas vous indiquerla localisation physique de la machine Cest ici que le protocole ARP entre en jeu

Prenons un exemple tregraves simple Supposons que jaie un reacuteseau composeacute de plusieurs machines dont lamachine foo dadresse IP 10001 et la machine bar qui a ladresse IP 10002 Maintenant fooveut envoyer un ping vers bar pour voir sil est actif mais foo na aucune indication sur la localisation debar Donc si foo deacutecide denvoyer un ping vers bar il a besoin denvoyer une requecircte ARP Cette requecircteARP est une faccedilon pour foo de crier sur le reacuteseau ltlt Bar (10002) Ougrave es-tu gtgt Par conseacutequent toutesles machines sur le reacuteseau entendront foo crier mais seul bar (10002) reacutepondra Bar enverra unereacuteponse ARP directement agrave foo ce qui revient agrave dire ltlt Foo (10001) je suis ici agrave ladresse006094E0812 gtgt Apregraves cette simple transaction utiliseacutee pour localiser son ami sur le reacuteseau foo estcapable de communiquer avec bar jusquagrave ce quil (le cache ARP de foo) oublie ougrave bar est situeacute(typiquement au bout de 15 minutes sur Unix)

Maintenant voyons comment cela fonctionne Vous pouvez consulter votre cache (table) ARP (neighbor)comme ceci

[rootespa041 homesrciputils] ip neigh show937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Comme vous pouvez le voir ma machine espa041 (937641) sait ougrave trouver espa042 (937642)et espagate (93761) Maintenant ajoutons une autre machine dans le cache ARP

[rootespa041 homepaulschgnome-desktop] ping -c 1 espa043PING espa043austinibmcom (937643) from 937641 56(84) bytes of data64 bytes from 937643 icmp_seq=0 ttl=255 time=09 ms

1 packets transmitted 1 packets received 0 packet lossround-trip minavgmax = 090909 ms

[rootespa041 homesrciputils] ip neigh show937643 dev eth0 lladdr 000629218020 nud reachable937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Par conseacutequent lorsque espa041 a essayeacute de contacter espa043 ladresse mateacuterielle de espa043 (salocalisation) a alors eacuteteacute ajouteacutee dans le cache ARP Donc tant que la dureacutee de vie de lentreacutee correspondant agraveespa043 dans le cache ARP nest pas deacutepasseacutee espa041 sait localiser espa043 et na plus besoindenvoyer de requecircte ARP

Maintenant effaccedilons espa043 de notre cache ARP

[rootespa041 homesrciputils] ip neigh delete 937643 dev eth0[rootespa041 homesrciputils] ip neigh show937643 dev eth0 nud failed937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud stale

Maintenant espa041 a agrave nouveau oublieacute la localisation despa043 et aura besoin denvoyer une autrerequecircte ARP la prochaine fois quil voudra communiquer avec lui Vous pouvez aussi voir ci-dessus que leacutetat

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP 11

despagate (93761) est passeacute en stale Cela signifie que la localisation connue est encore valide maisquelle devra ecirctre confirmeacutee agrave la premiegravere transaction avec cette machine

Chapitre 4 Regravegles - bases de donneacutees des politiquesde routageSi vous avez un routeur important il se peut que vous vouliez satisfaire les besoins de diffeacuterentes personnesqui peuvent ecirctre traiteacutees diffeacuteremment Les bases de donneacutees des politiques de routage vous aident agrave fairecela en geacuterant plusieurs ensembles de tables de routage

Si vous voulez utiliser cette fonctionnaliteacute assurez-vous que le noyau est compileacute avec les options IP Advanced router et IP policy routing

Quand le noyau doit prendre une deacutecision de routage il recherche quelle table consulter Par deacutefaut il y a troistables Lancien outil route modifie les tables principale (main) et locale (local) comme le fait loutil ip (pardeacutefaut)

Les regravegles par deacutefaut

[ahuhome ahu]$ ip rule list0 from all lookup local 32766 from all lookup main 32767 from all lookup default

Ceci liste la prioriteacute de toutes les regravegles Nous voyons que toutes les regravegles sont appliqueacutees agrave tous les paquets(from all) Nous avons vu la table main preacuteceacutedemment sa sortie seffectuant avec ip route ls mais lestables local et default sont nouvelles

Si nous voulons faire des choses fantaisistes nous pouvons creacuteer des regravegles qui pointent vers des tablesdiffeacuterentes et qui nous permettent de redeacutefinir les regravegles de routage du systegraveme

Pour savoir exactement ce que fait le noyau en preacutesence dun assortiment de regravegles plus complet reacutefeacuterez-vousagrave la documentation ip-cref dAlexey amplsqbNdT dans le paquetage iproute2 de votre distribution]

Politique de routage simple par ladresse source

Prenons encore une fois un exemple reacuteel Jai 2 modems cacircble connecteacutes agrave un routeur Linux NAT(masquerading) Les personnes habitant avec moi me paient pour avoir accegraves agrave Internet Supposons quun demes co-locataires consulte seulement hotmail et veuille payer moins Cest daccord pour moi mais il utiliserale modem le plus lent

Le modem cacircble ltlt rapide gtgt est connu sous 2126494251 et est en liaison PPP avec 21264941Le modem cacircble ltlt lent gtgt est connu sous diverses adresses IP 2126478148 dans notre exemple avecun lien vers 1959698253

La table locale

[ahuhome ahu]$ ip route list table localbroadcast 127255255255 dev lo proto kernel scope link src 127001 local 10001 dev eth0 proto kernel scope host src 10001 broadcast 10000 dev eth0 proto kernel scope link src 10001 local 2126494251 dev ppp0 proto kernel scope host src 2126494251 broadcast 10255255255 dev eth0 proto kernel scope link src 10001 broadcast 127000 dev lo proto kernel scope link src 127001

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

12 Chapitre 4 Regravegles - bases de donneacutees des politiques de routage

local 2126478148 dev ppp2 proto kernel scope host src 2126478148 local 127001 dev lo proto kernel scope host src 127001 local 1270008 dev lo proto kernel scope host src 127001

Il y a beaucoup de choses eacutevidentes mais aussi des choses qui ont besoin decirctre preacuteciseacutees quelque peu ce quenous allons faire La table de routage par deacutefaut est vide

Regardons la table principale (main)

[ahuhome ahu]$ ip route list table main 1959698253 dev ppp2 proto kernel scope link src 2126478148 21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Maintenant nous geacuteneacuterons une nouvelle regravegle que nous appellerons John pour notre hypotheacutetiqueco-locataire Bien que nous puissions travailler avec des nombres IP purs il est plus facile dajouter notre tabledans le fichier etciproute2rtamplowbartables

echo 200 John gtgt etciproute2rt_tables ip rule add from 100010 table John ip rule ls0 from all lookup local 32765 from 100010 lookup John32766 from all lookup main 32767 from all lookup default

Maintenant tout ce quil reste agrave faire est de geacuteneacuterer la table John et de vider le cache des routes

ip route add default via 1959698253 dev ppp2 table John ip route flush cache

Et voilagrave qui est fait Il ne reste plus comme exercice laisseacute au lecteur quagrave impleacutementer cela dans ip-up

Routage avec plusieurs accegraves Internetfournisseurs daccegraves

Une configuration classique est la suivante ougrave deux fournisseurs daccegraves permettent la connexion dun reacuteseaulocal (ou mecircme dune simple machine) agrave Internet

________ +--------------+ | | | +-------------+ Fournisseur 1+------- __ | | | ___ _ +------+-------+ +--------------+ | _ __ | if1 | | | || Reacuteseau Local -----+ Routeur Linux| | Internet _ __ | | | __ __ | if2 | ___ +------+-------+ +--------------+ | | | | +-------------+ Fournisseur 2+------- | | | +--------------+ ________

Il y a geacuteneacuteralement deux questions agrave se poser pour cette configuration

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de routage simple par ladresse source 13

Accegraves seacutepareacute

La premiegravere est de savoir comment router les reacuteponses aux paquets entrants par un fournisseur particulierdisons le Fournisseur 1 vers ce mecircme fournisseur

Commenccedilons par deacutefinir quelques symboles $IF1 sera le nom de la premiegravere interface (if1 sur la figureau-dessus) et $IF2 le nom de la deuxiegraveme interface $IP1 sera alors ladresse IP associeacutee agrave $IF1 et $IP2 seraladresse IP associeacutee agrave $IF2 $P1 sera ladresse IP de la passerelle du fournisseur daccegraves 1 et $P2 seraladresse IP de la passerelle du fournisseur daccegraves 2 Enfin $P1_NET sera ladresse reacuteseau agrave linteacuterieur duquelse situe $P1 et $P2_NET sera ladresse reacuteseau agrave linteacuterieur duquel se situe $P2

Deux tables de routage suppleacutementaires sont creacuteeacutees par exemple T1 et T2 Celles-ci sont ajouteacutees dansetciproute2rt_tables La configuration du routage dans ces tables seffectue de la faccedilonsuivante

ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2

Rien de vraiment spectaculaire Une route est simplement positionneacutee vers la passerelle et une route pardeacutefaut via cette passerelle est mise en place comme nous le ferions dans le cas dun seul fournisseur daccegravesIci les routes sont placeacutees dans des tables seacutepareacutees une par fournisseur daccegraves Il est agrave noter que la route versle reacuteseau suffit dans la mesure ougrave elle indique comment trouver nimporte quel hocircte dans ce reacuteseau ce quiinclut la passerelle

La table de routage principale est maintenant configureacutee Cest une bonne ideacutee de router les eacuteleacutements agravedestination dun voisin direct agrave travers linterface connecteacutee agrave ce voisin Notez les arguments src qui assurentque la bonne adresse IP source sera choisie

ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2

Indiquez maintenant votre preacutefeacuterence pour votre route par deacutefaut

ip route add default via $P1

Vous configurez ensuite les regravegles de routage Celles-ci deacutefinissent la table qui sera vraiment choisie pour leroutage Il faut sassurer que le routage seffectue agrave travers une interface donneacutee si vous avez ladresse sourcecorrespondante

ip rule add from $IP1 table T1 ip rule add from $IP2 table T2

Cet ensemble de commandes vous assure que toutes les reacuteponses au trafic entrant sur une interface particuliegravereseront envoyeacutees par cette interface

Avertissement

Notes dun lecteur si $P0_NET est le reacuteseau local et $IF0 est son interface alors les entreacutees suivantes sontdeacutesirables

ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

14 Accegraves seacutepareacute

ip route add 1270008 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 1270008 dev lo table T2

Nous avons maintenant une configuration tregraves basique Elle marchera pour tous les processus exeacutecuteacutes sur lerouteur lui-mecircme ainsi que pour le reacuteseau local si celui-ci est masqueacute Si ce nest pas le cas soit vous avezune plage dadresses IP pour chaque fournisseur daccegraves soit vous masquez vers lun des deux fournisseursdaccegraves Dans les deux cas vous ajouterez des regravegles indiquant en fonction de ladresse IP de la machine dureacuteseau local vers quel fournisseur vous allez router

Balance de charge

La seconde question concerne la balance de charge du trafic sortant vers les deux fournisseurs daccegraves Cecinest pas vraiment tregraves dur si vous avez deacutejagrave configureacute laccegraves seacutepareacute comme deacutecrit ci-dessus

Au lieu de choisir lun des deux fournisseurs daccegraves comme route par deacutefaut celle-ci peut ecirctre une routemulti-chemin Par deacutefaut le noyau reacutepartira les routes vers les deux fournisseurs daccegraves Ceci est reacutealiseacute de lafaccedilon suivante (construit eacutegalement sur lexemple de la section de laccegraves seacutepareacute)

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

Ceci reacutealisera la balance des routes vers les deux fournisseurs Les paramegravetres weight peuvent permettre defavoriser un fournisseur par rapport agrave un autre

Il est agrave noter que la balance de charge ne sera pas parfaite dans la mesure ougrave elle est baseacutee sur les routes et quecelles-ci sont mises dans des caches Ceci signifie que les routes vers les sites les plus souvent utiliseacutespasseront toujours par le mecircme fournisseur daccegraves

De plus si vous voulez vraiment mettre en oeuvre ceci vous devriez eacutegalement aller consulter les mises agrave jourde Julien Anastasov agrave httpwwwssibg~jaroutes Elles rendront le travail plus facile

Chapitre 5 GRE et autres tunnelsIl y a trois sortes de tunnels sous Linux lIP dans un tunnel IP le tunnel GRE et les tunnels qui existent endehors du noyau (comme PPTP par exemple)

Quelques remarques geacuteneacuterales agrave propos des tunnels

Les tunnels peuvent faire des choses tregraves inhabituelles et vraiment sympas Ils peuvent aussi absolument toutdeacutetraquer si vous ne les avez pas configureacutes correctement Ne deacutefinissez pas votre route par deacutefaut sur untunnel agrave moins que vous ne sachiez EXACTEMENT ce que vous faites

De plus le passage par un tunnel augmente le poids des en-tecirctes (overhead) puisquun en-tecircte IPsuppleacutementaire est neacutecessaire Typiquement ce surcoucirct est de 20 octets par paquet Donc si la taillemaximum de votre paquet sur votre reacuteseau (MTU) est de 1500 octets un paquet qui est envoyeacute agrave travers untunnel sera limiteacute agrave une taille de 1480 octets Ce nest pas neacutecessairement un problegraveme mais soyez sucircr davoirbien eacutetudieacute la fragmentation et le reacuteassemblage des paquets IP quand vous preacutevoyez de relier des reacuteseaux degrande taille par des tunnels Et bien sucircr la maniegravere la plus rapide de creuser un tunnel est de creuser des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 5 GRE et autres tunnels 15

cocircteacutes

IP dans un tunnel IP

Ce type de tunnel est disponible dans Linux depuis un long moment Il neacutecessite deux modules ipipo etnewamplowbartunnelo

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsInternet) Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C

et le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quel paquet de A vers B etvice-versa Il est eacutegalement possible dutiliser lInternet pour cela

Voici ce quil faut faire

Premiegraverement assurez-vous que les modules soient installeacutes

insmod ipipoinsmod new_tunnelo

Ensuite sur le routeur du reacuteseau A faites la chose suivante

ifconfig tunl0 10011 pointopoint 172192021route add -net 10020 netmask 2552552550 dev tunl0

et sur le routeur du reacuteseau B

ifconfig tunl0 10021 pointopoint 172161718route add -net 10010 netmask 2552552550 dev tunl0

Et quand vous aurez termineacute avec votre tunnel

ifconfig tunl0 down

Vite fait bien fait Vous ne pouvez pas transmettre les paquets de diffusion (broadcast) ni le trafic IPv6 agravetravers un tunnel IP-IP Vous ne pouvez connecter que deux reacuteseaux IPv4 qui normalement ne seraient pascapables de se ltlt parler gtgt cest tout Dans la mesure ougrave la compatibiliteacute a eacuteteacute conserveacutee ce code tournedepuis un bon moment et il reste compatible depuis les noyaux 13 Le tunnel Linux IP dans IP ne fonctionnepas avec dautres systegravemes dexploitation ou routeurs pour autant que je sache Cest simple ccedila marcheUtilisez-le si vous le pouvez autrement utilisez GRE

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

16 Quelques remarques geacuteneacuterales agrave propos des tunnels

Le tunnel GRE

GRE est un protocole de tunnel qui a eacuteteacute agrave lorigine deacuteveloppeacute par Cisco et qui peut reacutealiser plus de chosesque le tunnel IP dans IP Par exemple vous pouvez aussi transporter du trafic multi-diffusion (multicast) et delIPv6 agrave travers un tunnel GRE

Dans Linux vous aurez besoin du module ipamplowbargreo

Le tunnel IPv4

Dans un premier temps inteacuteressons-nous au tunnel IPv4

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsinternet)

Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C Appelons ce reacuteseau neta

Et pour le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C Appelons ce reacuteseau netb

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quels paquets de A vers B etvice-versa Comment et pourquoi on sen moque

Sur le routeur du reacuteseau A nous faisons la chose suivante

ip tunnel add netb mode gre remote 172192021 local 172161718 ttl 255ip link set netb upip addr add 10011 dev netbip route add 1002024 dev netb

Discutons un peu de cela Sur la ligne 1 nous avons ajouteacute un peacuteripheacuterique tunnel que nous avons appeleacutenetb (ce qui est eacutevident dans la mesure ougrave cest lagrave que nous voulons aller) De plus nous lui avons ditdutiliser le protocole GRE (mode gre) que ladresse distante est 172192021 (le routeur de lautrecocircteacute) que nos paquets ltlt tunneleacutes gtgt devront ecirctre geacuteneacutereacutes agrave partir de 172161718 (ce qui autorise votreserveur agrave avoir plusieurs adresses IP sur le reacuteseau C et ainsi vous permet de choisir laquelle sera utiliseacutee pourvotre tunnel) et que le champ TTL de vos paquets sera fixeacute agrave 255 (ttl 255)

La deuxiegraveme ligne active le peacuteripheacuterique

Sur la troisiegraveme ligne nous avons donneacute agrave cette nouvelle interface ladresse 10011 Cest bon pour depetits reacuteseaux mais quand vous commencez une exploitation miniegravere (BEAUCOUP de tunnels ) vouspouvez utiliser une autre gamme dadresses IP pour vos interfaces ltlt tunnel gtgt (dans cet exemple vouspourriez utiliser 10030)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le tunnel GRE 17

Sur la quatriegraveme ligne nous positionnons une route pour le reacuteseau B Notez la notation diffeacuterente pour lemasque de sous-reacuteseau Si vous necirctes pas familiariseacute avec cette notation voici comment ccedila marche vouseacutecrivez le masque de sous-reacuteseau sous sa forme binaire et vous comptez tous les 1 Si vous ne savez pascomment faire cela rappelez-vous juste que 255000 est 8 25525500 est 16 et2552552550 est 24 Et 2552552540 est 23 au cas ougrave ccedila vous inteacuteresserait

Mais arrecirctons ici et continuons avec le routeur du reacuteseau B

ip tunnel add neta mode gre remote 172161718 local 172192021 ttl 255ip link set neta upip addr add 10021 dev netaip route add 1001024 dev neta

Et quand vous voudrez retirer le tunnel sur le routeur A

ip link set netb downip tunnel del netb

Bien sucircr vous pouvez remplacer netb par neta pour le routeur B

Le tunnel IPv6

Voir la section 6 pour une courte description des adresses IPv6

Agrave propos des tunnels

Supposons que vous ayez le reacuteseau IPv6 suivant et que vous vouliez le connecter agrave une dorsale IPv6 (6bone)ou agrave un ami

Reacuteseau 3ffe406515a2196

Votre adresse IPv4 est 172161718 et le routeur 6bone a une adresse IPv4 172222324

ip tunnel add sixbone mode sit remote 172222324 local 172161718 ttl 255ip link set sixbone upip addr add 3ffe406515a2196 dev sixboneip route add 3ffe15 dev sixbone

Voyons cela de plus pregraves Sur la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique tunnel appeleacute sixboneNous lui avons affecteacute le mode sit (qui est le tunnel IPv6 sur IPv4) et lui avons dit ougrave lon va (remote) etdougrave lon vient (local) TTL est configureacute agrave son maximum 255 Ensuite nous avons rendu le peacuteripheacuteriqueactif (up) Puis nous avons ajouteacute notre propre adresse reacuteseau et configureacute une route pour 3ffe15 agravetravers le tunnel

Les tunnels GRE constituent actuellement le type de tunnel preacutefeacutereacute Cest un standard qui est largementadopteacute mecircme agrave lexteacuterieur de la communauteacute Linux ce qui constitue une bonne raison de lutiliser

Tunnels dans lespace utilisateur

Il y a des dizaines dimpleacutementations de tunnels agrave lexteacuterieur du noyau Les plus connues sont bien sucircr PPP etPPTP mais il y en a bien plus (certaines proprieacutetaires certaines seacutecuriseacutes dautres qui nutilisent pas IP) quideacutepassent le cadre de ce HOWTO

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

18 Le tunnel IPv4

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsaleIPv6 (6bone)Par Marco Davids ltmarcosaranlgt

NOTE au mainteneur

En ce qui me concerne ce tunnel IPv6-IPv4 nest pas par deacutefinition un tunnel GRE Vous pouvez reacutealiser untunnel IPv6 sur IPv4 au moyen des peacuteripheacuteriques tunnels GRE (tunnels GRE NIMPORTE QUOI vers IPv4)mais le peacuteripheacuterique utiliseacute ici (sit) ne permet que des tunnels IPv6 sur IPv4 ce qui est quelque chose dediffeacuterent

Tunnel IPv6

Voici une autre application des possibiliteacutes de tunnels de Linux Celle-ci est populaire parmi les premiersadeptes dIPv6 ou les pionniers si vous preacutefeacuterez Lexemple pratique deacutecrit ci-dessous nest certainement pas laseule maniegravere de reacutealiser un tunnel IPv6 Cependant cest la meacutethode qui est souvent utiliseacutee pour reacutealiser untunnel entre Linux et un routeur Cisco IPv6 et lexpeacuterience ma appris que cest ce type deacutequipement quebeaucoup de personnes ont Dix contre un que ceci sappliquera aussi pour vous -)

De petites choses agrave propos des adresses IPv6

Les adresses IPv6 sont en comparaison avec les adresses IPv4 vraiment grandes 128 bits contre 32 bits Etceci nous fournit la chose dont nous avons besoin beaucoup beaucoup dadresses IP 340282266920938463463374607431768211465 pour ecirctre preacutecis A part ceci IPv6 (ou IPnggeacuteneacuteration suivante (Next Generation)) est supposeacute fournir des tables de routage plus petites sur les routeursdes dorsales Internet une configuration plus simple des eacutequipements une meilleure seacutecuriteacute au niveau IP etun meilleur support pour la Qualiteacute de Service (QoS)

Un exemple 2002836b9820000000000000836b9886

Ecrire les adresses IPv6 peut ecirctre un peu lourd Il existe donc des regravegles qui rendent la vie plus facile

Ne pas utiliser les zeacuteros de tecircte comme dans IPv4 bull Utiliser des double-points de seacuteparation tous les 16 bits ou 2 octets bull Quand vous avez beaucoup de zeacuteros conseacutecutifs vous pouvez eacutecrire Vous ne pouvez cependantfaire cela quune seule fois par adresse et seulement pour une longueur de 16 bits

bull

Ladresse 2002836b9820000000000000836b9886 peut ecirctre eacutecrite2002836b9820836b9886 ce qui est plus amical

Un autre exemple ladresse 3ffe0000000000000000000034A1F32C peut ecirctre eacutecrite3ffe2034A1F32C ce qui est beaucoup plus court

IPv6 a pour but decirctre le successeur de lactuel IPv4 Dans la mesure ougrave cette technologie est relativementreacutecente il ny a pas encore de reacuteseau natif IPv6 agrave leacutechelle mondiale Pour permettre un deacuteveloppement rapidela dorsale IPv6 (6bone) a eacuteteacute introduite

Les reacuteseaux natifs IPv6 sont interconnecteacutes gracircce agrave lencapsulation du protocole IPv6 dans des paquets IPv4qui sont envoyeacutes agrave travers linfrastructure IPv4 existante dun site IPv6 agrave un autre

Cest dans cette situation que lon monte un tunnel

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone) 19

Pour ecirctre capable dutiliser IPv6 vous devrez avoir un noyau qui le supporte Il y a beaucoup de bonsdocuments qui expliquent la maniegravere de reacutealiser cela Mais tout se reacutesume agrave quelques eacutetapes

Reacutecupeacuterer une distribution Linux reacutecente avec une glibc convenablebull Reacutecupeacuterer alors les sources agrave jour du noyaubull

Si tout cela est fait vous pouvez alors poursuivre en compilant un noyau supportant lIPv6

Aller dans usrsrclinux et tapez bull make menuconfigbull Choisir Networking Optionsbull Seacutelectionner The IPv6 protocol IPv6 enable EUI-64 token format IPv6disable provider based addresses

bull

ASTUCE Ne compiler pas ces options en tant que module Ceci ne marchera souvent pas bien

En dautres termes compilez IPv6 directement dans votre noyau Vous pouvez alors sauvegarder votreconfiguration comme dhabitude et entreprendre la compilation de votre noyau

ASTUCE Avant de faire cela modifier votre Makefile comme suit EXTRAVERSION = -x --gt EXTRAVERSION = -x-IPv6

Il y a beaucoup de bonnes documentations sur la compilation et linstallation dun noyau Cependant cedocument ne traite pas de ce sujet Si vous rencontrez des problegravemes agrave ce niveau allez et recherchez dans ladocumentation des renseignements sur la compilation du noyau Linux correspondant agrave vos propresspeacutecifications

Le fichier usrsrclinuxREADME peut constituer un bon deacutepart Apregraves avoir reacutealiseacute tout ceci etredeacutemarreacute avec votre nouveau noyau flambant neuf vous pouvez lancer la commande sbinifconfig -a etnoter un nouveau peacuteripheacuterique sit0 SIT signifie Transition Simple dInternet (Simple Internet Transition)Vous pouvez vous auto complimenter vous avez maintenant franchi une eacutetape importante vers IP laprochaine geacuteneacuteration -)

Passons maintenant agrave leacutetape suivante Vous voulez connecter votre hocircte ou peut-ecirctre mecircme tout votre reacuteseauLAN agrave dautres reacuteseaux IPv6 Cela pourrait ecirctre la dorsale IPv6 ltlt 6bone gtgt qui a eacuteteacute speacutecialement mise enplace dans ce but particulier

Supposons que vous avez le reacuteseau IPv6 suivant 3ffe6046864 et que vous vouliez le connecter agraveune dorsale IPv6 ou agrave un ami Notez sil vous plaicirct que la notation sous-reacuteseau 64 est similaire agrave celle desadresses IPv4

Votre adresse IPv4 est 14510024181 et le routeur 6bone a ladresse IPv4 14510015

ip tunnel add sixbone mode sit remote 14510015 [local 14510024181 ttl 225] ip link set sixbone up ip addr add 3FFE60467296 dev sixbone ip route add 3ffe015 dev sixbone

Discutons de ceci Dans la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique appeleacute sixbone Nous lui avonsdonneacute lattribut sit (mode sit) (qui est le tunnel IPv6 dans IPv4) et nous lui avons dit ougrave aller (remote)et dougrave nous venions (local) TTL est configureacute agrave son maximum 255

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

20 Tunnel IPv6

Ensuite nous avons rendu le peacuteripheacuterique actif (up) Apregraves cela nous avons ajouteacute notre propre adressereacuteseau et configureacute une route pour 3ffe15 (qui est actuellement la totaliteacute du 6bone) agrave travers le tunnelSi la machine sur laquelle vous mettez en place tout ceci est votre passerelle IPv6 ajoutez alors les lignessuivantes

echo 1 gtprocsysnetipv6confallforwarding usrlocalsbinradvd

En derniegravere instruction radvd est un deacutemon dannonce comme zebra qui permet de supporter lesfonctionnaliteacutes dautoconfiguration dIPv6 Recherchez le avec votre moteur de recherche favori Vous pouvezveacuterifier les choses comme ceci

sbinip -f inet6 addr

Si vous arrivez agrave avoir radvd tournant sur votre passerelle IPv6 et que vous deacutemarrez une machine avec IPv6sur votre reacuteseau local vous serez ravi de voir les beacuteneacutefices de lautoconfiguration IPv6

sbinip -f inet6 addr1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue inet6 1128 scope host

3 eth0 ltBROADCASTMULTICASTUPgt mtu 1500 qdisc pfifo_fast qlen 100inet6 3ffe6046850544cfffe01e3d664 scope global dynamicvalid_lft forever preferred_lft 604646sec inet6 fe8050544cfffe01e3d610 scope link

Vous pouvez maintenant configurer votre serveur de noms pour les adresses IPv6 Le type A a un eacutequivalentpour IPv6 AAAA Leacutequivalent de in-addrarpa est ip6int Il y a beaucoup dinformationsdisponibles sur ce sujet

Il y a un nombre croissant dapplications IPv6 disponibles comme le shell seacutecuriseacute telnet inetd le navigateurMozilla le serveur web Apache et beaucoup dautres Mais ceci est en dehors du sujet de ce document deroutage -)

Du cocircteacute Cisco la configuration ressemblera agrave ceci

interface Tunnel1description IPv6 tunnelno ip addressno ip directed-broadcastipv6 address 3FFE60467196tunnel source Serial0tunnel destination 14510024181tunnel mode ipv6ipipv6 route 3FFE6046864 Tunnel1

Si vous navez pas un Cisco agrave votre disposition essayez un des prestataires de tunnel IPv6 disponible surInternet Ils sont precircts agrave configurer leur Cisco avec un tunnel suppleacutementaire pour vous le plus souvent aumoyen dune agreacuteable interface web Cherchez ipv6 tunnel broker avec votre moteur de recherche favori

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers InternetA ce jour deux versions dIPSEC sont disponibles pour Linux FreeSWAN qui fucirct la premiegravereimpleacutementation majeure existe pour les noyaux Linux 22 et 24 Ce projet a un site officiel et eacutegalement unsite non officiel qui est bien maintenu FreeSWAN na jamais eacuteteacute inteacutegreacute dans le noyau pour un certainnombre de raisons Celle qui est la plus souvent mentionneacutee concerne un problegraveme politique avec les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers Internet 21

ameacutericains travaillant sur la cryptographie qui freinent son exportabiliteacute De plus la mise en place deFreeSWAN dans le noyau Linux est deacutelicate ce qui nen fait pas un bon candidat pour une reacuteelle inteacutegration

De plus des personnes se sont inquieacuteteacutees de la qualiteacute du code Pour configurer FreeSWAN de nombreusesdocumentations sont disponibles

Une impleacutementation native dIPSEC est preacutesente dans le noyau agrave partir de la version Linux 2547 Elle a eacuteteacuteeacutecrite par Alexey Kuznetsov et Dave Miller qui se sont inspireacutes des travaux du groupe USAGI IPv6 Aveccette fusion les CryptoAPI de James Morris deviennent eacutegalement une partie du noyau qui fait ainsi vraimentdu cryptage

Ce HOWTO ne documente que la version 25 dIPSEC FreeSWAN est recommandeacute pour linstant pour lesutilisateurs de Linux 24 Faicirctes cependant attention dans la mesure ougrave sa configuration est diffeacuterente delIPSEC natif Il y a maintenant une mise agrave jour qui permet au code FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux

A partir du noyau 2549 IPSEC fonctionne sans lajout de mises agrave jour suppleacutementaires

Note Les outils de lespace utilisateur sont disponibles ici Il y a plusieurs programmesdisponibles celui qui est proposeacute dans le lien est baseacute sur Racoon

Lors de la compilation du noyau soyez sucircr dactiver PF_KEY AH et tous les eacuteleacutements deCryptoAPI

Avertissement

Lauteur de ce chapitre est un complet nigaud en ce qui concerne IPSEC Si vous trouvez les ineacutevitableserreurs envoyez un courrier eacutelectronique agrave Bert Hubert ltahuds9anlgt

Tout dabord nous montrerons comment configurer manuellement une communication seacutecuriseacutee entre deuxhocirctes Une grande partie de ce processus peut ecirctre automatiseacutee mais nous le ferons ici agrave la main afin decomprendre ce qui se passe sous le capot

Passez agrave la section suivante si la seule gestion automatique des cleacutes vous inteacuteresse Soyez cependant conscientque la compreacutehension de la gestion manuelle des cleacutes est utile

Introduction sur la gestion manuelle des cleacutes

IPSEC est un sujet compliqueacute De nombreuses informations sont disponibles en ligne Ce HOWTO seconcentrera sur la mise en place et agrave lexplication des principes de base Tous les exemples sont baseacutes surRacoon dont le lien est donneacute au-dessus

Note Certaines configurations iptables rejettent les paquets IPSEC Pour transmettreIPSEC utilisez iptables -A xxx -p 50 -j ACCEPT et iptables -A xxx -p 51 -j ACCEPT

IPSEC offre une version seacutecuriseacutee de la couche IP (Internet Protocol) La seacutecuriteacute dans ce contexte prend deuxformes lencryptage et lauthentification Une vision naiumlve de la seacutecuriteacute ne propose que le cryptage On peutcependant montrer facilement que cest insuffisant il se peut que vous ayez une communication crypteacutee maisvous navez aucune garantie que lhocircte distant est bien celui auquel vous pensez

IPSEC supporte Encapsulated Security Payload (Encapsulation Seacutecuriseacutee de la Charge utile) (ESP) pour lecryptage et Authentication Header (Entecircte dAuthentification) (AH) pour authentifier le partenaire distantVous pouvez configurer les deux ou deacutecider de ne faire que lun des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

22 Introduction sur la gestion manuelle des cleacutes

ESP et AH sappuient tous les deux sur des Associations de Seacutecuriteacute (Security Associations (SA)) UneAssociation de Seacutecuriteacute (SA) consiste en une source une destination et une instruction Un exemple simpledAssociation de Seacutecuriteacute (SA) pour lauthentification peut ressembler agrave ceci

add 100011 1000216 ah 15700 -A hmac-md5 1234567890123456

Ceci indique que le trafic allant de 100011 vers 1000216 a besoin dun En-tecircte dAuthentification(AH) qui peut ecirctre signeacute en utilisant HMAC-MD et le secret 1234567890123456 Cette instruction estrepeacutereacutee par lidentificateur SPI (Security Parameter Index)15700 dont nous parlerons plus par la suite Lepoint inteacuteressant agrave propos des Associations de Seacutecuriteacute (SA) est quelles sont symeacutetriques Les deux coteacutes dela conversation partagent exactement la mecircme Association de Seacutecuriteacute (SA) qui nest pas recopieacutee sur lhocirctedistant Notez cependant quil ny a pas de regravegles dinversion automatique Cette Association de Seacutecuriteacute(SA) deacutecrit une authentification possible de 100011 vers 1000216 Pour un trafic bidirectionneldeux Associations de Seacutecuriteacute (SA) sont neacutecessaires

Un exemple dAssociation de Seacutecuriteacute (SA) pour le cryptage ESP

add 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012

Ceci signifie que le trafic allant de 100011 vers 1000216 est chiffreacute en utilisant 3des-cbc avec lacleacute 123456789012123456789012 Lidentificateur SPI est 15701

Jusquici nous avons vu que les Associations de Seacutecuriteacute (SA) deacutecrivent les instructions possibles mais pas lapolitique qui indique quand ces SA doivent ecirctre utiliseacutees En fait il pourrait y avoir un nombre arbitraire deSA presques identiques ne se diffeacuterenciant que par les identificateurs SPI Entre parenthegraveses SPI signifieSecurity Parameter Index ou Index du Paramegravetre de Seacutecuriteacute en franccedilais Pour faire vraiment du cryptagenous devons deacutecrire une politique Cette politique peut inclure des choses comme utiliser ipsec sil estdisponible ou rejeter le trafic agrave moins que vous ayez ipsec

Une Politique de Seacutecuriteacute (Security Policy (SP)) typique ressemble agrave ceci

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Si cette configuration est appliqueacutee sur lhocircte 1000216 cela signifie que tout le trafic allant vers100011 doit ecirctre encrypteacute et encapsuleacute dans un en-tecircte dauthentification AH Notez que ceci ne deacutecritpas quelle SA sera utiliseacutee Cette deacutetermination est un exercice laisseacute agrave la charge du noyau

En dautres termes une Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons une Association de Seacutecuriteacutedeacutecrit COMMENT nous le voulons

Les paquets sortants sont eacutetiqueteacutes avec le SPI SA (le comment) que le noyau utilise pour lencryptage etlauthentification et lhocircte distant peut consulter les instructions de veacuterification et de deacutecryptagecorrespondantes

Ce qui suit est une configuration tregraves simple permettant le dialogue de lhocircte 1000216 vers lhocircte100011 en utilisant lencryptage et lauthentification Notez que le trafic de retour de cette premiegravereversion est en clair et que cette configuration ne doit pas ecirctre deacuteployeacutee

Sur lhocircte 1000216

sbinsetkey -f

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Introduction sur la gestion manuelle des cleacutes 23

add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456 add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Sur lhocircte 100011 nous donnons les mecircmes Associations de Seacutecuriteacute (SA) Nous ne donnons pas dePolitique de Seacutecuriteacute

sbinsetkey -fadd 1000216 100011 ah 24500 -A hmac-md5 1234567890123456add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

Avec la mise en place de la configuration ci-dessus (ces fichiers peuvent ecirctre exeacutecuteacutes si setkey est installeacutedans sbin) la commande ping 100011 exeacutecuteacutee sur 1000216 va donner la sortie suivante avec tcpdump

223752 1000216 gt 100011 AH(spi=0x00005fb4seq=0xa) ESP(spi=0x00005fb5seq=0xa) (DF)223752 100011 gt 1000216 icmp echo reply

Notez que le paquet de retour provenant de 100011 est en effet complegravetement visible Le paquet ping eacutemispar 1000216 ne peut eacutevidemment pas ecirctre lu par tcpdump mais celui-ci montre lIndex du Paramegravetre deSeacutecuriteacute (SPI) de lAH ainsi que lESP qui indique agrave 100011 comment veacuterifier lauthenticiteacute de notre paquetet comment le deacutecrypter

Quelques eacuteleacutements doivent ecirctre mentionneacutes La configuration ci-dessus est proposeacutee dans de nombreuxexemples dIPSEC mais elle est tregraves dangereuse Le problegraveme est quelle contient la politique indiquant agrave1000216 comment traiter les paquets allant vers 100011 et comment 100011 doit traiter ces paquetsmais ceci nINDIQUE pas agrave 100011 de rejeter le trafic non authentifieacute et non encrypteacute

Nimporte qui peut maintenant inseacuterer des donneacutees spoofeacutees (NdT usurpeacutees) et entiegraverement non crypteacuteesque 10001 acceptera Pour remeacutedier agrave ceci nous devons avoir sur 100011 une Politique de Seacutecuriteacute pourle trafic entrant

sbinsetkey -f spdadd 1000216 100011 any -P IN ipsec esptransportrequire ahtransportrequire

Ceci indique agrave 100011 que tout le trafic venant de 1000216 neacutecessite davoir un ESP et AH valide

Maintenant pour compleacuteter cette configuration nous devons eacutegalement renvoyer un trafic encrypteacute etauthentifieacute La configuration complegravete sur 1000216 est la suivante

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

24 Introduction sur la gestion manuelle des cleacutes

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire ahtransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 100011 1000216 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire ahtransportrequire

Notez que dans cet exemple nous avons utiliseacute des cleacutes identiques pour les deux directions du trafic Cecinest cependant en aucun cas exigeacute

Pour examiner la configuration que nous venons de creacuteer exeacutecuter setkey -D qui montre les SA ou setkey-DP qui montre les politiques configureacutees

Gestion automatique des cleacutes

Dans la section preacuteceacutedente lencryptage eacutetait configureacute pour utiliser simplement le partage de secrets Endautres termes pour rester seacutecuriseacute nous devons transfeacuterer la configuration de notre encryptage agrave travers untunnel seacutecuriseacute Si nous avons configureacute lhocircte distant par telnet nimporte quel tiers pourrait avoir prisconnaissance de notre secret partageacute et ainsi notre configuration ne serait plus sucircre

De plus puisque le secret est partageacute ce nest pas un secret Lhocircte distant ne peut pas en faire grand chosemais nous devons ecirctre sucircrs dutiliser un secret diffeacuterent pour les communications avec tous nos partenairesCeci neacutecessite un grand nombre de cleacutes Pour 10 partenaires nous devrions avoir au moins 50 secretsdiffeacuterents

En plus du problegraveme des cleacutes symeacutetriques le renouvellement des cleacutes est eacutegalement neacutecessaire Si un tierseacutecoute suffisamment le trafic il peut ecirctre en position de retrouver la cleacute par reacutetro ingeacutenierie On peut senpreacutemunir en modifiant la cleacute de temps en temps mais ce processus a besoin decirctre automatiseacute

Un autre problegraveme est que la gestion manuelle des cleacutes deacutecrite au-dessus impose de deacutefinir preacuteciseacutement lesalgorithmes et les longueurs de cleacutes utiliseacutees ce qui neacutecessite une grande coordination avec lhocircte distant Il

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestion automatique des cleacutes 25

serait preacutefeacuterable davoir la capaciteacute agrave deacutecrire une politique des cleacutes plus large comme par exemple Nouspouvons faire du 3DES et du Blowfish avec les longueurs de cleacutes suivantes

Pour reacutesoudre ces problegravemes IPSEC fournit lEchange de Cleacute sur Internet (Internet Key Echange (IKE))permettant dautomatiser leacutechange de cleacutes geacuteneacutereacutees aleacuteatoirement Ces cleacutes sont transmises en utilisant unetechnologie dencryptage asymeacutetrique neacutegocieacutee

Limpleacutementation IPSEC de Linux 25 fonctionne avec le deacutemon IKE KAME racoon Depuis le 9novembre la version de racoon preacutesente la distribution iptools dAlexey peut ecirctre compileacutee en supprimant aupreacutealable include ltnetroutehgt dans deux fichiers Je fournis une version preacutecompileacutee

Note LEchange de Cleacute sur Internet (IKE) doit avoir accegraves au port UDP 500 Soyez sucircr queiptables ne le bloque pas

Theacuteorie

Comme expliqueacute avant la gestion automatique des cleacutes reacutealise beaucoup dopeacuterations pour nousSpeacutecifiquement il creacutee agrave la voleacutee les Associations de Seacutecuriteacute Il ne configure cependant pas la politique pournous ce qui est le fonctionnement attendu

Donc pour beacuteneacuteficier de IKE configurez une politique mais ne fournissez aucune Association de Seacutecuriteacute Sile noyau deacutecouvre quil y a une politique IPSEC mais pas dAssociation de Seacutecuriteacute il va le notifier au deacutemonIKE qui va chercher agrave en neacutegocier une

De nouveau rappelons que la Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons tandis que lAssociation deSeacutecuriteacute deacutecrit COMMENT nous le voulons Lutilisation de la gestion automatique des cleacutes nous permet dene speacutecifier que ce que nous voulons

Exemple

Kame racoon possegravede un grand nombre doptions dont la plupart des valeurs par deacutefaut sont corrects nousnavons donc pas besoin de les modifier Comme nous lavons dit auparavant lopeacuterateur doit deacutefinir unePolitique de Seacutecuriteacute mais pas dAssociations de Seacutecuriteacute Nous laissons cette neacutegociation au deacutemon IKE

Dans cet exemple 10001 et 1000216 sont encore une fois sur le point deacutetablir des communicationsseacutecuriseacutees mais cette fois avec laide du deacutemon racoon Par soucis de simplification cette configurationutilisera des cleacutes preacute-partageacutees les redouteacutes secrets partageacutes Nous discuterons des certificats X509 dans unesection agrave part Voir la section intituleacutee Gestion automatique des cleacutes en utilisant les certificats X509gt

Nous allons agrave peu pregraves rester fidegravele agrave la configuration par deacutefaut qui est identique sur les deux hocirctes

path pre_shared_key usrlocaletcracoonpsktxt

remote anonymous exchange_mode aggressivemain doi ipsec_doi situation identity_only

my_identifier address

lifetime time 2 min secminhour initial_contact on proposal_check obey obey strict or claim

proposal encryption_algorithm 3des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

26 Theacuteorie

hash_algorithm sha1 authentication_method pre_shared_key dh_group 2

sainfo anonymous pfs_group 1 lifetime time 2 min encryption_algorithm 3des authentication_algorithm hmac_sha1 compression_algorithm deflate

Beaucoup de paramegravetres Je pense que lon peut encore en supprimer pour se rapprocher de la configurationpar deacutefaut Remarquons ici quelques eacuteleacutements notables Nous avons configureacute deux sections anonymous cequi convient pour tous les hocirctes distants Ceci va ainsi faciliter les configurations suppleacutementaires Il nest pasneacutecessaire davoir de sections speacutecifiques agrave une machine particuliegravere agrave moins que vous ne le vouliez vraiment

De plus la configuration preacutecise que nous nous identifions gracircce agrave notre adresse IP (my_identifier address) etque nous pouvons faire du 3des sha1 et que nous utiliserons une cleacute preacute-partageacutee se trouvant dans psktxt

Dans le fichier psktxt nous avons configureacute deux entreacutees qui sont diffeacuterentes suivant les hocirctes Sur100011

1000216 password2

Sur 1000216

100011 password2

Soyez sucircr que ces fichiers sont la proprieacuteteacute de root et quils ont le mode 0600 Dans le cas contraire racoonne pourra faire confiance agrave leur contenu Notez que ces fichiers sont symeacutetriques lun de lautre

Nous sommes maintenant precirct agrave configurer notre politique qui est assez simple Sur lhocircte 1000216

sbinsetkey -fflushspdflush

spdadd 1000216 100011 any -P out ipsec esptransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

spdadd 100011 1000216 any -P out ipsec esptransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire

Noter que ces politiques sont encore une fois symeacutetriques

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exemple 27

Nous sommes maintenant precirct agrave lancer racoon Une fois lanceacute au moment ougrave nous essayons une connexionun telnet depuis 100011 vers 1000216 ou linverse racoon aura deacutemarreacute la neacutegociation

121844 INFO isakmpc1689isakmp_post_acquire() IPsec-SA request for 100011 queued due to no phase1 found121844 INFO isakmpc794isakmp_ph1begin_i() initiate new phase 1 negotiation 1000216[500]lt=gt100011[500]121844 INFO isakmpc799isakmp_ph1begin_i() begin Aggressive mode121844 INFO vendoridc128check_vendorid() received Vendor ID KAMEracoon121844 NOTIFY oakleyc2037oakley_skeyid() couldnt find the proper pskey try to get one by the peers address121844 INFO isakmpc2417log_ph1established() ISAKMP-SA established 1000216[500]-100011[500] spi044d25dede78a4d1ff01e5b4804f0680121845 INFO isakmpc938isakmp_ph2begin_i() initiate new phase 2 negotiation 1000216[0]lt=gt100011[0]121845 INFO pfkeyc1106pk_recvupdate() IPsec-SA established ESPTransport 100011-gt1000216 spi=44556347(0x2a7e03b)121845 INFO pfkeyc1318pk_recvadd() IPsec-SA established ESPTransport 1000216-gt100011 spi=15863890(0xf21052)

Lexeacutecution de la commande setkey -D qui nous montre les Associations de Seacutecuriteacute nous indique quellessont en effet preacutesentes

1000216 100011 esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000) E 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04 A hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99 seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last Nov 11 122912 2002 hard 0(s) soft 0(s) current 304(bytes) hard 0(bytes) soft 0(bytes) allocated 3 hard 0 soft 0 sadb_seq=1 pid=17112 refcnt=0100011 1000216 esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000) E 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a A hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last hard 0(s) soft 0(s) current 231(bytes) hard 0(bytes) soft 0(bytes) allocated 2 hard 0 soft 0 sadb_seq=0 pid=17112 refcnt=0

Nous avons les Politiques de Seacutecuriteacute que nous avons nous-mecircme configureacutees

100011[any] 1000216[any] tcp in ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122912 2002 lifetime0(s) validtime0(s) spid=3616 seq=5 pid=17134 refcnt=31000216[any] 100011[any] tcp out ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122844 2002 lifetime0(s) validtime0(s) spid=3609 seq=4 pid=17134 refcnt=3

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

28 Exemple

Problegravemes et deacutefauts connus

Si cela ne marche pas veacuterifiez que tous les fichiers de configuration sont la proprieacuteteacute de root et quils nepeuvent ecirctre lus que par celui-ci Pour deacutemarrer racoon en avant-plan utilisez -F Pour le forcer agrave lire unfichier de configuration agrave la place de celui preacuteciseacute lors de la compilation utilisez -f Pour obtenir denombreux deacutetails ajouter loption log debug dans le fichier racoonconf

Gestion automatique des cleacutes en utilisant les certificats X509

Comme nous lavons dit avant lutilisation de secrets partageacutes est compliqueacutee car ils ne peuvent pas ecirctrefacilement partageacutes et une fois quils le sont ils ne sont plus secrets Heureusement nous avons latechnologie dencryptage asymmeacutetrique pour nous aider agrave reacutesoudre ce problegraveme

Si chaque participant dune liaison IPSEC creacutee une cleacute publique et priveacutee des communications seacutecuriseacuteespeuvent ecirctre mises en place par les deux parties en publiant leur cleacute publique et en configurant leur politique

Creacuteer une cleacute est relativement facile bien que cela exige un peu de travail Ce qui suit est baseacute sur loutilopenssl

Construire un certificat X509 pour votre hocircte

OpenSSL dispose dune importante infrastructure de gestions des clefs capable de geacuterer des clefs signeacutees ounon par une autoriteacute de certification Pour linstant nous avons besoin de court-circuiter toute cetteinfrastructure et de mettre en place une seacutecuriteacute de charlatan et de travailler sans autoriteacute de certification

Nous allons tout dabord creacuteer une requecircte de certificat (certificate request) pour notre hocircte appeleacute laptop

$ openssl req -new -nodes -newkey rsa1024 -sha1 -keyform PEM -keyout laptopprivate -outform PEM -out requestpem

Des questions nous sont poseacutees

Country Name (2 letter code) [AU]NLState or Province Name (full name) [Some-State]Locality Name (eg city) []DelftOrganization Name (eg company) [Internet Widgits Pty Ltd]Linux AdvancedRouting amp Traffic ControlOrganizational Unit Name (eg section) []laptopCommon Name (eg YOUR name) []bert hubertEmail Address []ahuds9anl

Please enter the following extra attributesto be sent with your certificate requestA challenge password []An optional company name []

Vous avez toute liberteacute quant aux reacuteponses Vous pouvez ou non mettre le nom dhocircte en fonction de vosbesoins de seacutecuriteacute Cest ce que nous avons fait dans cet exemple

Nous allons maintenant auto signer cette requecircte

$ openssl x509 -req -in requestpem -signkey laptopprivate -out laptoppublicSignature oksubject=C=NLL=DelftO=Linux Advanced Routing amp Traffic ControlOU=laptopCN=bert hubertEmail=ahuds9anl

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Problegravemes et deacutefauts connus 29

Getting Private key

Le fichier requestpem peut maintenant ecirctre eacutelimineacute

Reacutepeacutetez cette proceacutedure pour tous les hocirctes qui ont besoin dune cleacute Vous pouvez distribuer le fichier publicen toute impuniteacute mais garder le fichier private priveacute

Configuration et lancement

Une fois que nous avons les cleacutes publiques et priveacutees pour nos hocirctes nous pouvons indiquer agrave racoon de lesutiliser

Reprenons notre configuration preacuteceacutedente et les deux hocirctes 100011 (upstairs) et 1000216 (laptop)

Dans le fichier racoonconf preacutesent sur 100011 nous ajoutons

path certificate usrlocaletcracooncerts

remote 1000216 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

certificate_type x509 upstairspublic upstairsprivate

peers_certfile laptoppublic proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Ceci indique agrave racoon que les certificats se trouvent dans usrlocaletcracooncerts De plusil contient des eacuteleacutements speacutecifiques pour lhocircte distant 1000216

La ligne asn1dn indique agrave racoon que lidentification pour lhocircte local et distant doit ecirctre extraite des cleacutespubliques Ceci correspond agrave la ligne subject=C=NLL=DelftO=Linux Advanced Routing amp TrafficControlOU=laptopCN=bert hubertEmail=ahuds9anl donneacute au-dessus

La ligne certificate_type preacutecise lemplacement des cleacutes publiques et priveacutees locales La deacuteclarationpeers_certfile preacutecise agrave racoon que la cleacute publique de lhocircte distant se trouve dans le fichierlaptoppublic

La section proposal reste inchangeacutee par rapport agrave ce que nous avons vu plus tocirct agrave lexception deauthentification_method qui est maintenant rsasig ce qui indique lutilisation de cleacute RSA publiquepriveacuteepour lauthentification

La configuration ajouteacutee sur 1000216 est presque identique exception faite de lhabituelle symeacutetrie

path certificate usrlocaletcracooncerts

remote 100011 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

30 Construire un certificat X509 pour votre hocircte

certificate_type x509 laptoppublic laptopprivate

peers_certfile upstairspublic

proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Maintenant que nous avons ajouteacute ces eacuteleacutements sur les deux hocirctes la seule chose qui reste agrave faire est de mettreen place les fichiers contenant les cleacutes La machine upstairs doit avoir les fichiers upstairsprivateupstairspublic et laptoppublic placeacutes dans usrlocaletcracooncerts Soyez sucircrque le reacutepertoire est la proprieacuteteacute de root et quil possegravede les droits 0700 Dans le cas contraire racoon pourraitrefuser de lire le contenu de ce reacutepertoire

La machine laptop doit avoir les fichiers upstairsprivate upstairspublic etlaptoppublic placeacutes dans usrlocaletcracooncerts Autrement dit chaque hocircte doitavoir ses propres cleacutes publique et priveacutee et de plus la cleacute publique de lhocircte distant

Veacuterifiez que la Politique de Seacutecuriteacute est en place (exeacutecutez la commande spdadd vue dans la section intituleacuteeExemplegt) Lancez alors racoon et tout devrait fonctionner

Comment configurer des tunnels seacutecuriseacutes

Pour configurer des communications seacutecuriseacutees avec un hocircte distant nous devons eacutechanger des cleacutespubliques Bien quil ne soit pas neacutecessaire que la cleacute publique reste secregravete il est important decirctre sucircr quecette cleacute na pas eacuteteacute modifieacutee En dautres termes vous devez ecirctre certain quil ny a pas de man in the middle[NdT man in the middle est le nom dune attaque qui consiste agrave se placer entre lhocircte eacutemetteur et lhocircte dedestination]

Pour faciliter ceci OpenSSL propose la commande digest

$ openssl dgst upstairspublic MD5(upstairspublic)= 78a3bddafb4d681c1ca8ed4d23da4ff1

La seule chose que nous devons faire est de veacuterifier que notre partenaire distant voit la mecircme empreinte Cecipeut ecirctre effectueacute en se rencontrant physiquement ou par teacuteleacutephone en sassurant que le numeacutero de teacuteleacutephonede lhocircte distant na pas eacuteteacute envoyeacute dans le mecircme courrier eacutelectronique que celui qui contenait la cleacute

Une autre maniegravere de faire ceci est dutiliser un tiers de confiance qui exeacutecute le service dautoriteacute decertification (Certificate Authority) Cette autoriteacute de certification (CA) peut alors signer votre cleacute celle quenous avons nous-mecircme creacuteeacute au-dessus

tunnels IPSEC

Jusquici nous navons seulement consideacutereacute IPSEC dans le mode appeleacute transport ougrave les points terminauxcomprennent directement IPSEC Comme ceci nest pas souvent le cas il peut ecirctre neacutecessaire davoir desrouteurs qui eux seuls comprennent IPSEC et qui reacutealisent le travail pour les hocirctes se trouvant derriegravere euxCeci est appeleacute le mode tunnel

Configurer ceci est tregraves rapide Pour tunneler tout le trafic vers 1301610016 agrave partir de 1000216 via100011 nous eacuteditons ce qui suit sur 1000216

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration et lancement 31

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P out ipsec esptunnel1000216-100011require

Notez que loption -m tunnel est vitale Ceci configure tout dabord une Association de Seacutecuriteacute ESP entreles points terminaux de notre tunnel agrave savoir 1000216 et 100011

Nous allons ensuite reacuteellement configurer le tunnel On doit indiquer au noyau dencrypter tout le trafic de1000024 vers 13016100 De plus ce trafic doit ecirctre envoyeacute vers 100011

100011 a eacutegalement besoin decirctre configureacute

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P in ipsec esptunnel1000216-100011require

Notez que ceci est exactement identique agrave lexception du changement de -P out en -P in Les exemplespreacuteceacutedents nont configureacute le trafic que dans un seul sens Il est laisseacute comme exercice au lecteur le soin decompleacuteter lautre moitieacute du tunnel

Le nom de proxy ESP est eacutegalement donneacute pour cette configuration ce qui est un peu plus clair

Note Le tunnel IPSEC a besoin davoir la transmission IP activeacutee dans le noyau

Autre logiciel IPSEC

Thomas Walpuski preacutecise quil a eacutecrit une mise agrave jour pour que OpenBSD isakpmd puisse fonctionner avecLinux 25 IPSEC De plus la repository principale CVS de isakpmd contient maintenant le code Des notessont disponibles sur cette page

isakpmd est diffeacuterent de racoon mentionneacute au-dessus mais de nombreuses personnes lappreacutecient Il peut ecirctretrouveacute ici Dautres eacuteleacutements de lecture sur le CVS dOpenBSD ici Thomas a eacutegalement creacuteeacute un tarball pourceux qui ne sont pas habitueacutes agrave CVS ou patch

De plus des mises agrave jour sont disponibles pour permettre aux outils FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux 25 Vous pourrez les trouver ici

Interopeacuterabiliteacute dIPSEC avec dautres systegravemes

FIXME Ecrire ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

32 tunnels IPSEC

Windows

Andreas Jellinghaus ltajdungeoninkadegt rapporte win2k cela marche preacute-partage de cleacute et ladresse ippour lauthentification (je ne pense pas que windows supporte fdqn ou userfdqn) Les certificats devraienteacutegalement marcher mais cela na pas eacuteteacute essayeacute

Check Point VPN-1 NG

Peter Bieringer rapporte

Voici des reacutesultats (seul le mode tunnel a eacuteteacute testeacute auth=SHA1) DES ok 3DES ok AES-128 ok AES-192 non supporteacute par CP VPN-1 AES-256 ok CAST non supporteacute par le noyau Linux utiliseacute

Version Testeacutee FP4 aka R54 aka wAI

Plus dinformations ici

Chapitre 8 Routage multidistribution (multicast)FIXME Pas de reacutedacteur

Le Multicast-HOWTO est (relativement) ancien De ce fait il peut ecirctre impreacutecis ou induire en erreur agravecertains endroits

Avant que vous ne puissiez faire du routage multidistribution le noyau Linux a besoin decirctre configureacute poursupporter le type de routage multidistribution que vous voulez faire Ceci agrave son tour exige une deacutecision quantau choix du protocole de routage multidistribution que vous vous preacuteparez agrave utiliser Il y a essentiellementquatre types ltlt communs gtgt de protocoles DVMRP (la version multidistribution du protocole RIP unicast)MOSPF (la mecircme chose mais pour OSPF) PIM-SM (Protocol Independant Multicasting - Sparse Mode) quisuppose que les utilisateurs de nimporte quel groupe de multidistribution sont disperseacutes plutocirct que regroupeacutes)et PIM-DM (le mecircme mais Dense Mode) qui suppose quil y aura un regroupement significatif des utilisateursdun mecircme groupe de multidistribution

On pourra noter que ces options napparaissent pas dans le noyau Linux Ceci sexplique par le fait que leprotocole lui-mecircme est geacutereacute par une application de routage comme Zebra mrouted ou pind Cependant vousdevez avoir une bonne ideacutee de ce que vous allez utiliser de maniegravere agrave seacutelectionner les bonnes options dans lenoyau

Pour tout routage multidistribution vous avez forceacutement besoin de seacutelectionner les options multicastinget multicasting routing Ceci est suffisant pour DVMRP et MOSPF Dans le cas de PIM vous devezeacutegalement valider les options PIMv1 ou PIMv2 suivant que le reacuteseau que vous connectez utilise la version 1ou 2 du protocole PIM

Une fois que tout cela a eacuteteacute reacutealiseacute et que votre nouveau noyau a eacuteteacute compileacute vous verrez au deacutemarrage queIGMP est inclus dans la liste des protocoles IP Celui-ci est un protocole permettant de geacuterer les groupesmultidistribution Au moment de la reacutedaction Linux ne supportait que les versions 1 et 2 de IGMP bien quela version 3 existe et ait eacuteteacute documenteacutee Ceci ne va pas vraiment nous affecter dans la mesure ougrave IGMPv3 estencore trop reacutecent pour que ses fonctionnaliteacutes suppleacutementaires soient largement utiliseacutees Puisque IGMP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 8 Routage multidistribution (multicast) 33

soccupe des groupes seules les fonctionnaliteacutes preacutesentes dans la plus simple version de IGMP geacuterant ungroupe entier seront utiliseacutees IGMPv2 sera utiliseacute dans la plupart des cas bien que IGMPv1 puisse encoreecirctre rencontreacute

Jusque-lagrave cest bon Nous avons activeacute la multidistribution Nous devons dire au noyau de lutiliserconcregravetement Nous allons donc deacutemarrer le routage Ceci signifie que nous ajoutons un reacuteseau virtuel demultidistribution agrave la table du routeur

ip route add 2240004 dev eth0

(En supposant bien sucircr que vous diffusez agrave travers eth0 Remplacez-le par le peacuteripheacuterique de votre choix sineacutecessaire)

Maintenant dire agrave Linux de transmettre les paquets

echo 1 gt procsysnetipv4ipamplowbarforward

Arriveacute ici il se peut que vous vous demandiez si ceci va faire quelque chose Donc pour tester notreconnexion nous pinguons le groupe par deacutefaut 224001 pour voir si des machines sont preacutesentesToutes les machines du reacuteseau local avec la multidistribution activeacutee DEVRAIENT reacutepondre et aucune autreVous remarquerez quaucune des machines qui reacutepondent ne le fait avec ladresse IP 224001 Quellesurprise ) Ceci est une adresse de groupe (une ltlt diffusion gtgt pour les abonneacutes) et tous les membres dugroupe reacutepondront avec leur propre adresse et non celle du groupe

ping -c 2 224001

Maintenant vous ecirctes precirct agrave faire du vrai routage multidistribution Bien en supposant que vous ayez deuxreacuteseaux agrave router lun vers lautre

(A continuer )

Chapitre 9 Gestionnaires de mise en file dattentepour ladministration de la bande passanteQuand je lai deacutecouvert cela ma VRAIMENT souffleacute Linux 22 contient toutes les fonctionnaliteacutes pour lagestion de la bande passante de maniegravere comparable agrave un systegraveme deacutedieacute de haut niveau

Linux deacutepasse mecircme ce que lATM et le Frame peuvent fournir

Afin deacuteviter toute confusion voici les regravegles utiliseacutees par tc pour la speacutecification de la bande passante

mbps = 1024 kbps = 1024 1024 bps =gt bytes (octetss)mbit = 1024 kbit =gt kilo bitsmb = 1024 kb = 1024 1024 b =gt byte (octet)mbit = 1024 kbit =gt kilo bit

En interne les nombres sont stockeacutes en bps (octets) et b (octet)

Mais tc utilise luniteacute suivante lors de laffichage des deacutebits

1Mbit = 1024 Kbit = 1024 1024 bps =gt octetss

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

34 Chapitre 9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en filedattente

Avec la mise en file dattente nous deacuteterminons la maniegravere dont les donneacutees sont ENVOYEES Il est importantde comprendre que nous ne pouvons mettre en forme que les donneacutees que nous transmettons

Avec la maniegravere dont Internet travaille nous navons pas de controcircle direct sur ce que les personnes nousenvoient Cest un peu comme votre boicircte aux lettres (physique ) chez vous Il ny a pas de faccedilon dinfluencerle nombre de lettres que vous recevez agrave moins de contacter tout le monde

Cependant lInternet est principalement baseacute sur TCPIP qui possegravede quelques fonctionnaliteacutes qui vontpouvoir nous aider TCPIP na pas daptitude agrave connaicirctre les performances dun reacuteseau entre deux hocirctes Ilenvoie donc simplement des paquets de plus en plus rapidement (ltlt slow start gtgt) et quand des paquetscommencent agrave se perdre il ralentit car il na plus la possibiliteacute de les envoyer En fait cest un peu plus eacuteleacutegantque cela mais nous en dirons plus par la suite

Cest comme si vous ne lisiez que la moitieacute de votre courrier en espeacuterant que vos correspondants arrecircteront devous en envoyer Agrave la diffeacuterence que ccedila marche sur Internet -)

Si vous avez un routeur et que vous souhaitez eacuteviter que certains hocirctes de votre reacuteseau aient des vitesses deteacuteleacutechargement trop grandes vous aurez besoin de mettre en place de la mise en forme de trafic sur linterfaceINTERNE de votre routeur celle qui envoie les donneacutees vers vos propres ordinateurs

Vous devez eacutegalement ecirctre sucircr que vous controcirclez le goulot deacutetranglement de la liaison Si vous avez unecarte reacuteseau agrave 100Mbit et un routeur avec un lien agrave 256kbit vous devez vous assurer que vous nenvoyez pasplus de donneacutees que ce que le routeur peut manipuler Autrement ce sera le routeur qui controcirclera le lien etqui mettra en forme la bande passante disponible Nous devons pour ainsi dire ltlt ecirctre le proprieacutetaire de la filedattente gtgt et ecirctre le lien le plus lent de la chaicircne Heureusement cest facilement reacutealisable

Gestionnaires de mise en file dattente simples sans classes

Comme nous lavons deacutejagrave dit la gestion de mise en file dattente permet de modifier la faccedilon dont les donneacuteessont envoyeacutees Les gestionnaires de mise en file dattente sans classes sont ceux qui en gros acceptent lesdonneacutees et qui ne font que les reacuteordonner les retarder ou les jeter

Ils peuvent ecirctre utiliseacutes pour mettre en forme le trafic dune interface sans aucune subdivision Il estprimordial que vous compreniez cet aspect de la mise en file dattente avant de continuer sur les gestionnairesde mise en files dattente baseacutes sur des classes contenant dautres gestionnaires de mise en file dattente

Le gestionnaire le plus largement utiliseacute est de loin pfifoamplowbarfast qui est celui par deacutefaut Ceciexplique aussi pourquoi ces fonctionnaliteacutes avanceacutees sont si robustes Elles ne sont rien de plus ltlt quuneautre file dattente gtgt

Chacune de ces files dattente a ses forces et ses faiblesses Toutes nont peut-ecirctre pas eacuteteacute bien testeacutees

pfifoamplowbarfast

Cette file dattente comme son nom lindique premier entreacute premier sorti (First In First Out) signifie queles paquets ne subissent pas de traitements speacuteciaux En fait ce nest pas tout agrave fait vrai Cette file dattente atrois ltlt bandes gtgt A linteacuterieur de chacune de ces bandes des regravegles FIFO sappliquent Cependant tant quily a un paquet en attente dans la bande 0 la bande 1 ne sera pas traiteacutee Il en va de mecircme pour la bande 1 et labande 2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explication sur les files dattente et la gestion de la mise en file dattente 35

Le noyau prend en compte la valeur du champ Type de Service des paquets et prend soin dinseacuterer dans labande 0 les paquets ayant le bit ltlt deacutelai minimum gtgt activeacute

Ne pas confondre ce gestionnaire de mise en file dattente sans classes avec celui baseacute sur des classes PRIO Bien quils aient des comportements similaires pfifoamplowbarfast ne possegravede pas de classes et vous nepourrez pas y ajouter de nouveaux gestionnaires avec la commande tc

Paramegravetres amp usage

Vous ne pouvez pas configurer le gestionnaire pfifoamplowbarfast dans la mesure ougrave cest celui pardeacutefaut Voici sa configuration par deacutefaut

priomapDeacutetermine comment les prioriteacutes des paquets sont relieacutees aux bandes telles que deacutefinies par le noyauLa relation est eacutetablie en se basant sur loctet TOS du paquet qui ressemble agrave ceci

0 1 2 3 4 5 6 7+-----+-----+-----+-----+-----+-----+-----+-----+| | | || PRECEDENCE | TOS | MBZ || | | |+-----+-----+-----+-----+-----+-----+-----+-----+

Les quatre bits TOS (le champ TOS) sont deacutefinis comme suit

Binaire Deacutecimal Signification-----------------------------------------1000 8 Minimise le Deacutelai (Minimize delay) (md)0100 4 Maximalise le Deacutebit (Maximize throughput) (mt)0010 2 Maximalise la Fiabiliteacute (Maximize reliability) (mr)0001 1 Minimalise le Coucirct Moneacutetaire (Minimize monetary cost) (mmc)0000 0 Service Normal

Comme il y a 1 bit sur la droite de ces quatre bits la valeur reacuteelle du champ TOS est le double de lavaleur des bits TOS tcpdump -v -v fournit la valeur de tout le champ TOS et non pas seulementla valeur des quatre bits Cest la valeur que lon peut voir dans la premiegravere colonne du tableausuivant

TOS Bits Signification Prioriteacute Linux Bande------------------------------------------------------------------------0x0 0 Service Normal 0 Best Effort 10x2 1 Minimise le Coucirct Moneacutetaire (mmc) 1 Filler 20x4 2 Maximalise la Fiabiliteacute (mr) 0 Best Effort 10x6 3 mmc+mr 0 Best Effort 10x8 4 Maximalise le Deacutebit (mt) 2 Masse 20xa 5 mmc+mt 2 Masse 20xc 6 mr+mt 2 Masse 20xe 7 mmc+mr+mt 2 Masse 20x10 8 Minimise le Deacutelai (md) 6 Interactive 00x12 9 mmc+md 6 Interactive 00x14 10 mr+md 6 Interactive 00x16 11 mmc+mr+md 6 Interactive 00x18 12 mt+md 4 Int Masse 10x1a 13 mmc+mt+md 4 Int Masse 10x1c 14 mr+mt+md 4 Int Masse 10x1e 15 mmc+mr+mt+md 4 Int Masse 1

amplsqbNdT par flux de masse (bulk flow) il faut entendre ltlt gros flot de donneacutees transmises encontinu gtgt comme un transfert FTP A lopposeacute un flux interactif (interactive flow) correspond agravecelui geacuteneacutereacute par des requecirctes SSH]

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

36 pfifoamplowbarfast

Beaucoup de nombres La seconde colonne contient la valeur correspondante des quatre bits TOSsuivi de leur signification Par exemple 15 repreacutesente un paquet voulant un coucirct moneacutetaire minimalune fiabiliteacute maximum un deacutebit maximum ET un deacutelai minimum Jappellerai ceci un ltlt paquetHollandais gtgt

La quatriegraveme colonne liste la maniegravere dont le noyau Linux interpregravete les bits TOS en indiquant agravequelle prioriteacute ils sont relieacutes

La derniegravere colonne montre la carte des prioriteacutes par deacutefaut Sur la ligne de commande la carte desprioriteacutes ressemble agrave ceci

1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Ceci signifie par exemple que la prioriteacute 4 sera relieacutee agrave la bande numeacutero 1 La carte des prioriteacutesvous permet eacutegalement de lister des prioriteacutes plus grandes (gt 7) qui ne correspondent pas agrave unerelation avec le champ TOS mais qui sont configureacutees par dautres moyens

Le tableau suivant provenant de la RFC 1349 (agrave lire pour plus de deacutetails) indique comment lesapplications devraient configurer leurs bits TOS pour fonctionner correctement

TELNET 1000 (minimise le deacutelai)FTP Controcircle 1000 (minimise le deacutelai) Donneacutees 0100 (maximalise le deacutebit)

TFTP 1000 (minimise le deacutelai)

SMTP phase de commande 1000 (minimise le deacutelai) phase DATA 0100 (maximalise le deacutebit)

Domain Name Service requecircte UDP 1000 (minimise le deacutelai) requecircte TCP 0000 Transfert de Zone 0100 (maximalise le deacutebit)

NNTP 0001 (minimise le coucirct moneacutetaire)

ICMP Erreurs 0000 Requecirctes 0000 (presque) Reacuteponses ltmecircme chose que requecirctegt (presque)

txqueuelenLa longueur de cette file dattente est fournie par la configuration de linterface que vous pouvez voiret configurer avec ifconfig et ip Pour configurer la longueur de la file dattente agrave 10 exeacutecuter ifconfig eth0 txqueuelen 10

Vous ne pouvez pas configurer ce paramegravetre avec tc

Filtre agrave seau de jetons (Token Bucket Filter)

Le Token Bucket Filter (TBF) est un gestionnaire de mise en file dattente simple Il ne fait que laisser passerles paquets entrants avec un deacutebit nexceacutedant pas une limite fixeacutee administrativement Lenvoi de courtesrafales de donneacutees avec un deacutebit deacutepassant cette limite est cependant possible

TBF est tregraves preacutecis et peu gourmand du point de vue reacuteseau et processeur Consideacuterez-le en premier si vousvoulez simplement ralentir une interface

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 37

Limpleacutementation TBF consiste en un tampon (seau) constamment rempli par des eacuteleacutements virtuelsdinformation appeleacutes jetons avec un deacutebit speacutecifique (deacutebit de jeton) Le paramegravetre le plus important dutampon est sa taille qui correspond au nombre de jetons quil peut stocker

Chaque jeton entrant laisse sortir un paquet de donneacutees de la file dattente de donneacutees et ce jeton est alorssupprimeacute du seau Lassociation de cet algorithme avec les deux flux de jetons et de donneacutees nous conduit agravetrois sceacutenarios possibles

Les donneacutees arrivent dans TBF avec un deacutebit EGAL au deacutebit des jetons entrants Dans ce cas chaquepaquet entrant a son jeton correspondant et passe la file dattente sans deacutelai

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS PETIT que le deacutebit des jetons Seule une partiedes jetons est supprimeacutee au moment ougrave les paquets de donneacutees sortent de la file dattente de sorte queles jetons saccumulent jusquagrave atteindre la taille du tampon Les jetons libres peuvent ecirctre utiliseacutespour envoyer des donneacutees avec un deacutebit supeacuterieur au deacutebit des jetons standard si de courtes rafales dedonneacutees arrivent

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS GRAND que le deacutebit des jetons Ceci signifie quele seau sera bientocirct deacutepourvu de jetons ce qui provoque larrecirct de TBF pendant un moment Cecisappelle ltlt une situation de deacutepassement de limite gtgt (overlimit situation) Si les paquets continuentagrave arriver ils commenceront agrave ecirctre eacutelimineacutes

bull

Le dernier sceacutenario est tregraves important car il autorise la mise en forme administrative de la bande passantedisponible pour les donneacutees traversant le filtre

Laccumulation de jetons autorise leacutemission de courtes rafales de donneacutees sans perte en situation dedeacutepassement de limite mais toute surcharge prolongeacutee causera systeacutematiquement le retard des paquets puisleur rejet

Notez que dans limpleacutementation reacuteelle les jetons correspondent agrave des octets et non des paquets

Paramegravetres amp usage

Mecircme si vous naurez probablement pas besoin de les changer TBF a des paramegravetres Dabord ceux toujoursdisponibles sont

limit or latencyLimit est le nombre doctets qui peuvent ecirctre mis en file dattente en attendant la disponibiliteacute dejetons Vous pouvez eacutegalement indiquer ceci dune autre maniegravere en configurant le paramegravetrelatency qui speacutecifie le temps maximal pendant lequel un paquet peut rester dans TBF Ce dernierparamegravetre prend en compte la taille du seau le deacutebit et sil est configureacute le deacutebit de crecircte(peakrate)

burstbuffermaxburstTaille du seau en octets Cest la quantiteacute maximale en octets de jetons dont on disposerasimultaneacutement En geacuteneacuteral plus les deacutebits de mise en forme sont importants plus le tampon doit ecirctregrand Pour 10 Mbits sur plateforme Intel vous avez besoin dun tampon dau moins 10 kilo-octets sivous voulez atteindre la limitation configureacutee

Si votre tampon est trop petit les paquets pourront ecirctre rejeteacutes car il arrive plus de jetons par topdhorloge que ne peut en contenir le tampon

mpuUn paquet de taille nulle nutilise pas une bande passante nulle Pour ethernet la taille minimale dunpaquet est de 64 octets LUniteacute Minimale de Paquet (Minimun Packet Unit) deacutetermine le nombreminimal de jetons agrave utiliser pour un paquet

rateLe paramegravetre de la vitesse Voir les remarques au-dessus agrave propos des limites

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

38 Filtre agrave seau de jetons (Token Bucket Filter)

Si le seau contient des jetons et quil est autoriseacute agrave se vider alors il le fait par deacutefaut avec une vitesse infinieSi ceci vous semble inacceptable utilisez les paramegravetres suivants

peakrateSi des jetons sont disponibles et que des paquets arrivent ils sont immeacutediatement envoyeacutes par deacutefaut et pour ainsi dire agrave ltlt la vitesse de la lumiegravere gtgt Cela peut ne pas vous convenir speacutecialement sivous avez un grand seau

Le deacutebit de crecircte (peak rate) peut ecirctre utiliseacute pour speacutecifier la vitesse agrave laquelle le seau est autoriseacute agravese vider Si tout se passe comme eacutecrit dans les livres ceci est reacutealiseacute en libeacuterant un paquet puis enattendant suffisamment longtemps pour libeacuterer le paquet suivant Le temps dattente est calculeacute demaniegravere agrave obtenir un deacutebit eacutegal au deacutebit de crecircte

Cependant eacutetant donneacute que la reacutesolution du minuteur (timer) dUNIX est de 10 ms et que les paquetsont une taille moyenne de 10 000 bits nous sommes limiteacutes agrave un deacutebit de crecircte de 1mbits

mtuminburstLe deacutebit de crecircte de 1Mbs ne sert pas agrave grand chose si votre deacutebit habituel est supeacuterieur agrave cettevaleur Un deacutebit de crecircte plus eacuteleveacute peut ecirctre atteint en eacutemettant davantage de paquets par top duminuteur ce qui a pour effet de creacuteer un second seau

Ce second bucket ne prend par deacutefaut quun seul paquet et nest donc en aucun cas un seau

Pour calculer le deacutebit de crecircte maximum multipliez le mtu que vous avez configureacute par 100 (ou plusexactement par HZ qui est eacutegal agrave 100 sur Intel et agrave 1024 sur Alpha)

Configuration simple

Voici une configuration simple mais tregraves utile

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Pourquoi est-ce utile Si vous avez un peacuteripheacuterique reacuteseau avec une grande file dattente comme un modemDSL ou un modem cacircble et que le dialogue se fasse agrave travers une interface rapide comme une interfaceethernet vous observerez que teacuteleacutecharger vers lamont (uploading) deacutegrade complegravetement linteractiviteacute

amplsqbNdT uploading deacutesigne une opeacuteration qui consiste agrave transfeacuterer des donneacutees ou des programmesstockeacutes dans un ordinateur local vers un ordinateur distant agrave travers un reacuteseau La traduction officielle pour ceterme est ltlt teacuteleacutechargement vers lamont gtgt On parle alors de voie montante Le downloading deacutesignelopeacuteration inverse (transfert dun hocircte distant vers lordinateur local) et est traduit par ltlt teacuteleacutechargement gtgtou ltlt teacuteleacutechargement vers laval gtgt On parle alors de la voie descendante]

Le teacuteleacutechargement vers lamont va en effet remplir la file dattente du modem Celle-ci est probablementENORME car cela aide vraiment agrave obtenir de bon deacutebit de teacuteleacutechargement vers lamont Cependant ceci nestpas forceacutement ce que voulez Vous ne voulez pas forceacutement avoir une file dattente importante de maniegravere agravegarder linteractiviteacute et pouvoir encore faire des choses pendant que vous envoyez des donneacutees

La ligne de commande au-dessus ralentit lenvoi de donneacutees agrave un deacutebit qui ne conduit pas agrave une mise en filedattente dans le modem La file dattente reacuteside dans le noyau Linux ougrave nous pouvons lui imposer une taillelimite

Modifier la valeur 220kbit avec votre vitesse de lien REELLE moins un petit pourcentage Si vous avez unmodem vraiment rapide augmenter un peu le paramegravetre burst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 39

Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing)

Stochastic Fairness Queueing (SFQ) est une impleacutementation simple de la famille des algorithmes de mise enfile dattente eacutequitable Cette impleacutementation est moins preacutecise que les autres mais elle neacutecessite aussi moinsde calculs tout en eacutetant presque parfaitement eacutequitable

Le mot cleacute dans SFQ est conversation (ou flux) qui correspond principalement agrave une session TCP ou un fluxUDP Le trafic est alors diviseacute en un grand nombre de jolies files dattente FIFO une par conversation Letrafic est alors envoyeacute dans un tourniquet donnant une chance agrave chaque session denvoyer leurs donneacutees touragrave tour

Ceci conduit agrave un comportement tregraves eacutequitable et empecircche quune seule conversation eacutetouffe les autres SFQest appeleacute ltlt Stochastic gtgt car il nalloue pas vraiment une file dattente par session mais a un algorithme quidivise le trafic agrave travers un nombre limiteacute de files dattente en utilisant un algorithme de hachage

A cause de ce hachage plusieurs sessions peuvent finir dans le mecircme seau ce qui peut reacuteduire de moitieacute leschances dune session denvoyer un paquet et donc reacuteduire de moitieacute la vitesse effective disponible Pourempecirccher que cette situation ne devienne importante SFQ change tregraves souvent son algorithme de hachagepour que deux sessions entrantes en collision ne le fassent que pendant un nombre reacuteduit de secondes

Il est important de noter que SFQ nest seulement utile que dans le cas ougrave votre interface de sortie est vraimentsatureacutee Si ce nest pas le cas il ny aura pas de files dattente sur votre machine Linux et donc pas deffetsPlus tard nous deacutecrirons comment combiner SFQ avec dautres gestionnaires de mise en files dattente pourobtenir le meilleur des deux mondes

Configurer speacutecialement SFQ sur linterface ethernet qui est en relation avec votre modem cacircble ou votrerouteur DSL est vain sans dautres mises en forme du trafic

Paramegravetres amp usage

SFQ est presque configureacute de base

perturbReconfigure le hachage une fois toutes les pertub secondes Sil nest pas indiqueacute le hachage se serajamais reconfigureacute Ce nest pas recommandeacute 10 secondes est probablement une bonne valeur

quantumNombre doctets quun flux est autoriseacute agrave retirer de la file dattente avant que la prochaine file dattentene prenne son tour Par deacutefaut eacutegal agrave la taille maximum dun paquet (MTU) Ne le configurez pas endessous du MTU

Configuration simple

Si vous avez un peacuteripheacuterique qui a une vitesse identique agrave celle du lien et un deacutebit reacuteel disponible comme unmodem teacuteleacutephonique cette configuration aidera agrave promouvoir leacutequiteacute

tc qdisc add dev ppp0 root sfq perturb 10 tc -s -d qdisc lsqdisc sfq 800c dev ppp0 quantum 1514b limit 128p flows 1281024 perturb 10sec Sent 4812 bytes 62 pkts (dropped 0 overlimits 0)

Le nombre 800c est un descripteur (handle) automatiquement assigneacute et limit signifie que 128 paquetspeuvent attendre dans la file dattente Il y a 1024 ltlt seaux de hachage gtgt disponibles pour la comptabiliteacute128 pouvant ecirctre actifs agrave la fois (pas plus de paquets ne conviennent dans la file dattente) Le hachage est

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

40 Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

reconfigureacute toutes les 10 secondes

Conseils pour le choix de la file dattente

Pour reacutesumer ces files dattente simples gegraverent le trafic en reacuteordonnant en ralentissant ou en supprimant lespaquets

Les astuces suivantes peuvent vous aider agrave choisir la file dattente agrave utiliser Elles mentionnent certaines filesdattente deacutecrites dans le chapitre Gestionnaires de mise en file dattente avanceacutesgt

Pour simplement ralentir le trafic sortant utilisez le Token Bucket Filter Il convient bien pour leseacutenormes bandes passantes si vous paramegravetrez en conseacutequence le seau

bull

Si votre lien est vraiment satureacute et que vous voulez ecirctre sucircr quaucune session ne va accaparer labande passante vers lexteacuterieur utilisez le Stochastical Fairness Queueing

bull

Si vous avez une grande dorsale et que vous voulez savoir ce que vous faites consideacuterez RandomEarly Drop (voir le chapitre Gestionnaires de mise en file dattente avanceacutesgt)

bull

Pour ltlt mettre en forme gtgt le trafic entrant qui nest pas transmis utilisez la reacuteglementation Ingress(Ingress Policier) La mise en forme du flux entrant est appeleacutee ltlt reacuteglementation gtgt (policing) etnon ltlt mise en forme gtgt (shaping)

bull

Si vous transmettez le trafic utilisez TBF sur linterface vers laquelle vous transmettez les donneacutees Sivous voulez mettre en forme un trafic pouvant sortir par plusieurs interfaces alors le seul facteurcommun est linterface entrante Dans ce cas utilisez la reacuteglementation Ingress

bull

Si vous ne voulez pas mettre en forme le trafic mais que vous vouliez voir si votre interface esttellement chargeacutee quelle a ducirc mettre en file dattente les donneacutees utilisez la file dattente pfifo (paspfifoamplowbarfast) Elle na pas de bandes internes mais assure le comptage de la taille de sonaccumulateur

bull

Finalement vous pouvez aussi faire de la ltlt mise en forme sociale gtgt La technologie nest pastoujours capable de reacutealiser ce que vous voulez Les utilisateurs sont hostiles aux contraintestechniques Un mot aimable peut eacutegalement vous aider agrave avoir votre bande passante correctementdiviseacutee

bull

terminologie

Pour comprendre correctement des configurations plus compliqueacutees il est dabord neacutecessaire dexpliquerquelques concepts A cause de la complexiteacute et de la relative jeunesse du sujet beaucoup de mots diffeacuterentssont utiliseacutes par les personnes mais ils signifient en fait la mecircme chose

Ce qui suit est lacircchement inspireacute du texte draft-ietf-diffserv-model-06txt An InformalManagement Model for Diffserv Routers Il peut ecirctre trouveacute agrave ladressehttpwwwietforginternet-draftsdraft-ietf-diffserv-model-04txt

Lisez-le pour les deacutefinitions strictes des termes utiliseacutes

Gestionnaire de mise en file dattente (qdisc) (Queueing Discipline)Un algorithme qui gegravere la file dattente dun peacuteripheacuterique soit pour les donneacutees entrantes (ingress)soit pour les donneacutees sortantes (egress)

Gestionnaire de mise en file dattente sans classes (Classless qdisc)Un gestionnaire de mise en file dattente qui na pas de subdivisions internes configurables

Gestionnaire de mise en file dattente baseacute sur des classes (Classful qdisc)Un gestionnaire de mise en file dattente baseacute sur des classes contient de multiples classes Certainesde ces classes contiennent un gestionnaire de mise en file dattente suppleacutementaire qui peut encoreecirctre baseacute sur des classes mais ce nest pas obligatoire Si lon sen tient agrave la deacutefinition strictepfifoamplowbarfast EST baseacute sur des classes dans la mesure ougrave il contient trois bandes qui sont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 41

en fait des classes Cependant dun point de vue des perspectives de configuration pour lutilisateur ilest sans classes dans la mesure ougrave ces classes ne peuvent ecirctre modifieacutees avec loutil tc

ClassesUn gestionnaire de mise en file dattente baseacute sur les classes peut avoir beaucoup de classes chacunedelles eacutetant internes au gestionnaire Une classe peut agrave son tour se voir ajouter plusieurs classes Uneclasse peut donc avoir comme parent soit un gestionnaire de mise en file dattente soit une autreclasse Une classe terminale est une classe qui ne possegravede de classes enfants Seul 1 gestionnaire demise en file dattente est attacheacute agrave cette classe Ce gestionnaire est responsable de lenvoi des donneacuteesde cette classe Quand vous creacuteez une classe un gestionnaire de mise en file dattente fifo est creacuteeacuteQuand vous ajoutez une classe enfant ce gestionnaire est supprimeacute Le gestionnaire fifo dune classeterminale peut ecirctre remplaceacute par un autre gestionnaire plus adapteacute Vous pouvez mecircme remplacer cegestionnaire fifo par un gestionnaire de mise en file dattente baseacute sur des classes de sorte que vouspourrez rajouter des classes suppleacutementaires

Classificateur (Classifier)Chaque gestionnaire de mise en file dattente baseacute sur des classes a besoin de deacuteterminer vers quellesclasses il doit envoyer un paquet Ceci est reacutealiseacute en utilisant le classificateur

Filtre (Filter)La classification peut ecirctre reacutealiseacutee en utilisant des filtres Un filtre est composeacute dun certain nombre deconditions qui si elles sont toutes veacuterifieacutees satisfait le filtre

Ordonnancement (Scheduling)Un gestionnaire de mise en file dattente peut avec laide dun classificateur deacutecider que des paquetsdoivent sortir plus tocirct que dautres Ce processus est appeleacute ordonnancement (scheduling) et estreacutealiseacute par exemple par le gestionnaire pfifoamplowbarfast mentionneacute plus tocirctLordonnancement est aussi appeleacute ltlt reclassement gtgt (reordering) ce qui peut precircter agrave confusion

Mise en forme (Shaping)Le processus qui consiste agrave retarder leacutemission des paquets sortants pour avoir un trafic conforme agrave undeacutebit maximum configureacute La mise en forme est reacutealiseacutee sur egress Familiegraverement rejeter despaquets pour ralentir le trafic est eacutegalement souvent appeleacute Mise en forme

Reacuteglementation (Policing)Retarder ou jeter des paquets dans le but davoir un trafic restant en dessous dune bande passanteconfigureacutee Dans Linux la reacuteglementation ne peut que jeter un paquet et non le retarder dans lamesure ougrave il ny a pas de ltlt file dattente dentreacutee gtgt (ingress queue)

Work-ConservingUn gestionnaire de mise en file dattente work-conserving deacutelivre toujours un paquet sil y en a un dedisponible En dautres termes il ne retarde jamais un paquet si ladaptateur reacuteseau est precirct agrave lenvoyer(dans le cas du gestionnaire egress)

non-Work-ConservingQuelques gestionnaire de mise en files dattente comme par exemple le Token Bucket Filter peuventavoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante Cecisignifie quils refusent parfois de libeacuterer un paquet bien quils en aient un de disponible

Maintenant que nous avons deacutefini notre terminologie voyons ougrave tous ces eacuteleacutements sont situeacutes

Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------gt Pile IP | | | | | | | Y | | | Y | | ^ | | | | ----------gt Transmission -gt | | ^ | | | | Y | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

42 terminologie

| ^ Y -qdisc1- | | | Classificateur --qdisc2-- | ---gt-gtGestionnaire de mise de sortie ---qdisc3---- | -gt | en file dattente (Egress) __qdisc4__ | | dentreacutee (Ingress) -qdiscN_ | | | +-----------------------------------------------------------+

Merci agrave Jamal Hadi Salim pour cette repreacutesentation ASCII

Le grand rectangle repreacutesente le noyau La flegraveche la plus agrave gauche repreacutesente le trafic du reacuteseau entrant dansvotre machine Celui-ci alimente alors le gestionnaire de mise en file dattente Ingress qui peut appliquer desfiltres agrave un paquet et deacutecider de le supprimer Ceci est appeleacute ltlt reacuteglementation gtgt (Policing)

Ce processus a lieu tregraves tocirct avant davoir beaucoup parcouru le noyau Cest par conseacutequent un tregraves bonendroit pour rejeter au plus tocirct du trafic sans pour autant consommer beaucoup de ressources CPU

Si le paquet est autoriseacute agrave continuer il peut ecirctre destineacute agrave une application locale et dans ce cas il entre dans lacouche IP pour ecirctre traiteacute et deacutelivreacute agrave un programme utilisateur Le paquet peut eacutegalement ecirctre transmis sansentrer dans une application et dans ce cas ecirctre destineacute agrave egress Les programmes utilisateurs peuventeacutegalement deacutelivrer des donneacutees qui sont alors transmises et examineacutees par le classificateur Egress

Lagrave il est examineacute et mis en file dattente vers un certain nombre de gestionnaire de mise en file dattente Pardeacutefaut il ny a quun seul gestionnaire egress installeacute pfifoamplowbarfast qui reccediloit tous les paquetsCeci correspond agrave ltlt la mise en file dattente gtgt (enqueueing)

Le paquet reacuteside maintenant dans le gestionnaire de mise en file dattente attendant que le noyau le reacuteclamepour le transmettre agrave travers linterface reacuteseau Ceci correspond au ltlt retrait de la file dattente gtgt(dequeueing)

Le scheacutema ne montre que le cas dun seul adaptateur reacuteseau Les flegraveches entrantes et sortantes du noyau nedoivent pas ecirctre trop prises au pied de la lettre Chaque adaptateur reacuteseau a un gestionnaire dentreacutee et desortie

Gestionnaires de file dattente baseacutes sur les classes

Les gestionnaires de mise en file dattente baseacutes sur des classes sont tregraves utiles si vous avez diffeacuterentes sortesde trafic qui doivent ecirctre traiteacutes diffeacuteremment Lun dentre eux est appeleacute CBQ pour Class Based QueueingIl est si souvent mentionneacute que les personnes identifient les gestionnaires de mise en file dattente baseacutes surdes classes uniquement agrave CBQ ce qui nest pas le cas

CBQ est le meacutecanisme le plus ancien ainsi que le plus compliqueacute Il naura pas forceacutement les effets que vousrecherchez Ceci surprendra peut-ecirctre ceux qui sont sous lemprise de ltlt leffet Sendmail gtgt qui nousenseigne quune technologie complexe non documenteacutee est forceacutement meilleure que toute autre

Nous eacutevoquerons bientocirct plus agrave propos CBQ et ses alternatives

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

Quand le trafic entre dans un gestionnaire de mise en file dattente baseacute sur des classes il doit ecirctre envoyeacute verslune de ses classes il doit ecirctre ltlt classifieacute gtgt Pour deacuteterminer que faire dun paquet les eacuteleacutements appeleacutesltlt filtres gtgt sont consulteacutes Il est important de savoir que les filtres sont appeleacutes de linteacuterieur dungestionnaire et pas autrement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestionnaires de file dattente baseacutes sur les classes 43

Les filtres attacheacutes agrave ce gestionnaire renvoient alors une deacutecision que le gestionnaire utilise pour mettre en filedattente le paquet vers lune des classes Chaque sous-classe peut essayer dautres filtres pour voir si denouvelles instructions sappliquent Si ce nest pas le cas la classe met le paquet en file dattente dans legestionnaire de mise en file dattente quelle contient

En plus de contenir dautres gestionnaires la plupart des gestionnaires de mise en file dattente baseacutes sur desclasses reacutealisent eacutegalement de la mise en forme Ceci est utile pour reacutealiser agrave la fois lordonnancement (avecSFQ par exemple) et le controcircle de deacutebit Vous avez besoin de ceci dans les cas ougrave vous avez une interface agravehaut deacutebit (ethernet par exemple) connecteacutee agrave un peacuteripheacuterique plus lent (un modem cacircble)

Si vous nutilisez que SFQ rien ne devait se passer dans la mesure ougrave les paquets entrent et sortent du routeursans deacutelai linterface de sortie est de loin beaucoup plus rapide que la vitesse reacuteelle de votre liaison il ny aalors pas de files dattente agrave reacuteordonnancer

La famille des gestionnaires de mise en file dattente racines descripteursdescendances et parents

Chaque interface agrave ltlt un gestionnaire de mise en file dattente racine gtgt de sortie (egress root qdisc) Pardeacutefaut le gestionnaire de mise en file dattente sans classes mentionneacute plus tocirct pfifoamplowbarfastChaque gestionnaire et classe est repeacutereacute par un descripteur (handle) qui pourra ecirctre utiliseacute par les prochainesdeacuteclarations de configuration pour se reacutefeacuterer agrave ce gestionnaire En plus du gestionnaire de sortie une interfacepeut eacutegalement avoir un gestionnaire dentreacutee (ingress) qui reacuteglemente le trafic entrant

Ces descripteurs sont constitueacutes de deux parties un nombre majeur et un nombre mineur ltmajorgtltminorgtIl est habituel de nommer le gestionnaire racine 1 ce qui est eacutequivalent agrave 10 Le nombre mineur dungestionnaire de mise en file dattente est toujours 0

Les classes doivent avoir le mecircme nombre majeur que leur parent Le nombre majeur doit ecirctre unique agravelinteacuterieur dune configuration egress ou ingress Le nombre mineur doit ecirctre unique agrave linteacuterieur dungestionnaire de mise en file dattente et de ses classes

Comment les filtres sont utiliseacutes pour classifier le trafic

Pour reacutecapituler une hieacuterarchie typique pourrait ressembler agrave ceci

1 Gestionnaire de mise en file dattente racine | 11 classe enfant | | | | 110 111 112 classes enfants | | | | 11 | classe terminale | | 10 12 Gestionnaire de mise en file dattente 101 102 121 122 classes terminales

Mais ne laissez pas cet arbre vous abuser Vous ne devriez pas imaginer le noyau ecirctre au sommet de larbre etle reacuteseau en dessous ce qui nest justement pas le cas Les paquets sont mis et retireacutes de la file dattente agrave laracine du gestionnaire qui est le seul eacuteleacutement avec lequel le noyau dialogue

Un paquet pourrait ecirctre classifieacute agrave travers une chaicircne suivante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

44 Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

1 -gt 11 -gt 12 -gt 122

Le paquet reacuteside maintenant dans la file dattente du gestionnaire attacheacute agrave la classe 122 Dans cet exempleun filtre a eacuteteacute attacheacute agrave chaque noeud de larbre chacun choisissant la prochaine branche agrave prendre Cela estreacutealisable Cependant ceci est eacutegalement possible

1 -gt 122

Dans ce cas un filtre attacheacute agrave la racine a deacutecideacute denvoyer le paquet directement agrave 122

Comment les paquets sont retireacutes de la file dattente et envoyeacutes vers le mateacuteriel

Quand le noyau deacutecide quil doit extraire des paquets pour les envoyer vers linterface le gestionnaire racine1 reccediloit une requecircte dequeue qui est transmise agrave 11 et qui agrave son tour est passeacutee agrave 10 11 et 12chacune interrogeant leurs descendances qui essaient de retirer les paquets de leur file dattente Dans ce casle noyau doit parcourir lensemble de larbre car seul 122 contient un paquet

En reacutesumeacute les classes ltlt emboicircteacutees gtgt parlent uniquement agrave leur gestionnaire de mise en file dattenteparent jamais agrave une interface Seul la file dattente du gestionnaire racine est videacutee par le noyau

Ceci a pour reacutesultat que les classes ne retirent jamais les paquets dune file dattente plus vite que ce que leurparent autorise Et cest exactement ce que nous voulons de cette maniegravere nous pouvons avoir SFQ dans uneclasse interne qui ne fait pas de mise en forme mais seulement de lordonnancement et avoir un gestionnairede mise en file dattente exteacuterieur qui met en forme le trafic

Le gestionnaire de mise en file dattente PRIO

Le gestionnaire de mise en file dattente ne met pas vraiment en forme le trafic il ne fait que le subdiviser ense basant sur la maniegravere dont vous avez configureacute vos filtres Vous pouvez consideacuterer les gestionnaires PRIOcomme une sorte de super pfifoamplowbarfast dopeacute ougrave chaque bande est une classe seacutepareacutee au lieudune simple FIFO

Quand un paquet est mis en file dattente dans le gestionnaire PRIO une classe est choisie en fonction desfiltres que vous avez donneacutes Par deacutefaut trois classes sont creacuteeacutees Ces classes contiennent par deacutefaut de pursgestionnaires de mise en file dattente FIFO sans structure interne mais vous pouvez les remplacer parnimporte quels gestionnaires disponibles

Chaque fois quun paquet doit ecirctre retireacute dune file dattente la classe 1 est dabord testeacutee Les classes pluseacuteleveacutees ne sont utiliseacutees que si aucune des bandes plus faibles na pas fourni de paquets

Cette file dattente est tregraves utile dans le cas ougrave vous voulez donner la prioriteacute agrave certains trafics en utilisant toutela puissance des filtres tc et en ne se limitant pas seulement aux options du champ TOS Vous pouvezeacutegalement ajouter un autre gestionnaire de mise en file dattente aux trois classes preacutedeacutefinies tandis quepfifoamplowbarfast est limiteacute aux simples gestionnaires FIFO

Puisquil ne met pas vraiment en forme on applique le mecircme avertissement que pour SFQ Utilisez PRIOseulement si votre lien physique est vraiment satureacute ou inteacutegrez-le agrave linteacuterieur dun gestionnaire de mise enfile dattente baseacute sur des classes qui reacutealisent la mise en forme Ce dernier cas est valable pour pratiquementtous les modems-cacircbles et les peacuteripheacuteriques DSL

En termes formels le gestionnaire de mise en file dattente PRIO est un ordonnanceur Work-Conserving

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Comment les filtres sont utiliseacutes pour classifier le trafic 45

Paramegravetres PRIO amp usage

Les paramegravetres suivants sont reconnus par tc

bandsNombre de bandes agrave creacuteer Chaque bande est en fait une classe Si vous changez ce nombre vousdevez eacutegalement changer

priomapSi vous ne fournissez pas de filtres tc pour classifier le trafic le gestionnaire PRIO regarde la prioriteacuteTCamplowbarPRIO pour deacutecider comment mettre en file dattente le trafic

Ceci fonctionne comme le gestionnaire de mise en file dattente pfifoamplowbarfast mentionneacuteplus tocirct Voir la section correspondante pour plus de deacutetails

Les bandes sont des classes et sont appeleacutees par deacutefaut majeur1 agrave majeur3 Donc si votre gestionnaire demise en file dattente est appeleacute 12 tc filtre le trafic vers 121 pour lui accorder une plus grande prioriteacute

Par iteacuteration la bande 0 correspond au nombre mineur 1 la bande 1 au nombre mineur 2 etc

Configuration simple

Nous allons creacuteer cet arbre

racine 1 prio 1 Gestionnaire racine | | | 11 12 13 classes | | | 10 20 30 gestionnaire gestionnaire sfq tbf sfqbande 0 1 2

Le trafic de masse ira vers 30 tandis que le trafic interactif ira vers 20 ou 10

Les lignes de commande

tc qdisc add dev eth0 root handle 1 prio Ceci creacutee instantaneacutement les classes 11 12 13

tc qdisc add dev eth0 parent 11 handle 10 sfq tc qdisc add dev eth0 parent 12 handle 20 tbf rate 20kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 13 handle 30 sfq

Regardons maintenant ce que nous avons creacuteeacute

tc -s qdisc ls dev eth0 qdisc sfq 30 quantum 1514b Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 132 bytes 2 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0 overlimits 0)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

46 Paramegravetres PRIO amp usage

Comme vous pouvez le voir la bande 0 a deacutejagrave reccedilu du trafic et un paquet a eacuteteacute envoyeacute pendant lexeacutecution decette commande

Nous allons maintenant geacuteneacuterer du trafic de masse avec un outil qui configure correctement les options TOSet regarder de nouveau

scp tc ahu100011ahu100011s password tc 100 || 353 KB 0000 tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 2230 bytes 31 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0 overlimits 0)

Comme vous pouvez le voir tout le trafic a eacuteteacute envoyeacute comme preacutevu vers le descripteur 30 qui est la bandede plus faible prioriteacute Maintenant pour veacuterifier que le trafic interactif va vers les bandes de plus grandeprioriteacute nous geacuteneacuterons du trafic interactif

tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 14926 bytes 193 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0 overlimits 0)

Ca a marcheacute Tout le trafic suppleacutementaire a eacuteteacute vers 10 qui est notre gestionnaire de plus grande prioriteacuteAucun trafic na eacuteteacute envoyeacute vers les prioriteacutes les plus faibles qui avaient reccedilu au preacutealable tout le trafic venantde notre scp

Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Comme dit avant CBQ est le gestionnaire de mise en file dattente disponible le plus complexe celui qui a eule plus de publiciteacute qui est le moins compris et qui est probablement le plus farceur lors de sa mise au pointCe nest pas parce que les auteurs sont mauvais ou incompeacutetents loin de lagrave mais lalgorithme CBQ nest pasremarquablement preacutecis et il ne correspond pas vraiment agrave la faccedilon dont Linux fonctionne

En plus decirctre baseacute sur des classes CBQ sert eacutegalement agrave la mise en forme de trafic et cest sur cet aspect quilne fonctionne pas tregraves bien Il travaille comme ceci si vous essayez de mettre en forme une connexion de10mbits agrave 1mbitss le lien doit ecirctre inactif 90amppercnt du temps Si ce nest pas le cas nous devons limiter letaux de sorte quil soit inactif 90amppercnt du temps

Ceci est assez dur agrave mesurer et cest pour cette raison que CBQ deacuteduit le temps dinactiviteacute du nombre demicrosecondes qui seacutecoulent entre les requecirctes de la couche mateacuterielle pour avoir plus de donneacutees Cettecombinaison peut ecirctre utiliseacutee pour eacutevaluer si le lien est chargeacute ou non

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 47

Ceci est plutocirct leacuteger et lon arrive pas toujours agrave des reacutesultats convenables Par exemple quen est-il de lavitesse de liaison reacuteelle dune interface qui nest pas capable de transmettre pleinement les donneacutees agrave100mbits peut-ecirctre agrave cause dun mauvais pilote de peacuteripheacuterique Une carte reacuteseau PCMCIA ne pourrajamais atteindre 100mbits agrave cause de la conception du bus De nouveau comment calculons-nous le tempsdinactiviteacute

Cela devient mecircme pire quand on considegravere un peacuteripheacuterique reacuteseau pas-vraiment-reacuteel comme PPP OverEthernet ou PPTP over TCPIP La largeur de bande effective est dans ce cas probablement deacutetermineacutee parlefficaciteacute des tubes vers lespace utilisateur qui est eacutenorme

Les personnes qui ont effectueacute des mesures ont deacutecouvert que CBQ nest pas toujours tregraves exact et parfoismecircme tregraves eacuteloigneacute de la configuration

Cependant il marche bien dans de nombreuses circonstances Avec la documentation fournie ici vous devriezecirctre capable de le configurer pour quil fonctionne bien dans la plupart des cas

Mise en forme CBQ en deacutetail

Comme dit preacuteceacutedemment CBQ fonctionne en sassurant que le lien est inactif juste assez longtemps pourabaisser la bande passante reacuteelle au deacutebit configureacute Pour reacutealiser cela il calcule le temps qui devrait seacutecoulerentre des paquets de taille moyennne

En cours de fonctionnement le temps dinactiviteacute effectif (the effective idletime) est mesureacute en utilisantlalgorithme EWMA (Exponential Weighted Moving Average) qui considegravere que les paquets reacutecents sontexponentiellement plus nombreux que ceux passeacutes La charge moyenne UNIX (UNIX loadaverage) estcalculeacutee de la mecircme maniegravere

Le temps dinactiviteacute calculeacute est soustrait agrave celui mesureacute par EWMA et le nombre reacutesultant est appeleacuteavgidle Un lien parfaitement chargeacute a un avgidle nul un paquet arrive agrave chaque intervalle calculeacute

Une liaison surchargeacutee a un avgidle neacutegatif et sil devient trop neacutegatif CBQ sarrecircte un moment et se placealors en deacutepassement de limite (overlimit)

Inversement un lien inutiliseacute peut accumuler un avgidle eacutenorme qui autoriserait alors des bandespassantes infinies apregraves quelques heures dinactiviteacute Pour eacuteviter cela avgidle est borneacute agrave maxidle

En situation de deacutepassement de limite CBQ peut en theacuteorie bloquer le deacutebit pour une dureacutee eacutequivalente autemps qui doit seacutecouler entre deux paquets moyens puis laisser passer un paquet et bloquer de nouveau ledeacutebit Regardez cependant le paramegravetre minburst ci-dessous

Voici les paramegravetres que vous pouvez speacutecifier pour configurer la mise en forme

avpktTaille moyenne dun paquet mesureacutee en octets Neacutecessaire pour calculer maxidle qui deacuterive demaxburst qui est speacutecifieacute en paquets

bandwidthLa bande passante physique de votre peacuteripheacuterique neacutecessaire pour les calculs du temps de nonutilisation (idle time)

cellLa dureacutee de transmission dun paquet naugmente pas neacutecessairement de maniegravere lineacuteaire en fonctionde sa taille Par exemple un paquet de 800 octets peut ecirctre transmis en exactement autant de tempsquun paquet de 806 octets Ceci deacutetermine la granulariteacute Cette valeur est geacuteneacuteralement positionneacutee agrave8 et doit ecirctre une puissance de deux

maxburst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

48 Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Ce nombre de paquets est utiliseacute pour calculer maxidle de telle sorte que quand avgidle est eacutegalagrave maxidle le nombre de paquets moyens peut ecirctre envoyeacute en rafale avant que avgidle neretombe agrave 0 Augmentez-le pour ecirctre plus toleacuterant vis agrave vis des rafales de donneacutees Vous ne pouvezpas configurer maxidle directement mais seulement via ce paramegravetre

minburstComme nous lavons deacutejagrave indiqueacute CBQ doit bloquer le deacutebit dans le cas dun deacutepassement de limiteLa solution ideacuteale est de le faire pendant exactement le temps dinutilisation calculeacute puis de laisserpasser un paquet Cependant les noyaux UNIX ont geacuteneacuteralement du mal agrave preacutevoir des eacuteveacutenementsplus courts que 10 ms il vaut donc mieux limiter le deacutebit pendant une peacuteriode plus longue puisenvoyer minburst paquets dun seul coup et dormir pendant une dureacutee de minburst

Le temps dattente est appeleacute offtime De plus grandes valeurs de minburst megravenent agrave une mise enforme plus preacutecise dans le long terme mais provoquent de plus grandes rafales de donneacutees pendantdes peacuteriodes de quelques millisecondes

minidleSi avgidle est infeacuterieur agrave 0 nous sommes en deacutepassement de limite et nous devons attendre jusquagravece que avgidle devienne suffisamment important pour envoyer un paquet Pour eacuteviter quunebrusque rafale de donneacutees nempecircche le lien de fonctionner pendant une dureacutee prolongeacutee avgidleest remis agrave minidle sil atteint une valeur trop basse

La valeur minidle est speacutecifieacutee en microsecondes neacutegatives 10 signifie alors que avgidle estborneacute agrave -10micros

mpuTaille minumum dun paquet Neacutecessaire car mecircme un paquet de taille nulle est encapsuleacute par 64octets sur ethernet et il faut donc un certain temps pour le transmettre CBQ doit connaicirctre ceparamegravetre pour calculer preacuteciseacutement le temps dinutilisation

rateDeacutebit du trafic sortant du gestionnaire Ceci est le ltlt paramegravetre de vitesse gtgt

En interne CBQ est finement optimiseacute Par exemple les classes qui sont connues pour ne pas avoir dedonneacutees preacutesentes dans leur file dattente ne sont pas interrogeacutees Les classes en situation de deacutepassement delimite sont peacutenaliseacutees par la diminution de leur prioriteacute effective Tout ceci est tregraves habile et compliqueacute

Le comportement CBQ classful

En plus de la mise en forme en utilisant les approximations idletime mentionneacutees ci-dessus CBQ peuteacutegalement agir comme une file dattente PRIO dans le sens ougrave les classes peuvent avoir diffeacuterentes prioriteacutesLes prioriteacutes de plus faible valeur seront examineacutees avant celles de valeurs plus eacuteleveacutees

Chaque fois quun paquet est demandeacute par la couche mateacuterielle pour ecirctre envoyeacute sur le reacuteseau un processusweighted round robin (WRR) deacutemarre en commenccedilant par les classes de plus faibles numeacuteros

Celles-ci sont regroupeacutees et interrogeacutees si elles ont des donneacutees disponibles Apregraves quune classe ait eacuteteacuteautoriseacutee agrave retirer de la file dattente un nombre doctets la classe de prioriteacute suivante est consulteacutee

Les paramegravetres suivants controcirclent le processus WRR

allotQuand le CBQ racine reccediloit une demande denvoi de paquets sur une interface il va essayer tous lesgestionnaires internes (dans les classes) tour agrave tour suivant lordre du paramegravetre priority Achaque passage une classe ne peut envoyer quune quantiteacute limiteacutee de donneacutees Le paramegravetre allotest luniteacute de base de cette quantiteacute Voir le paramegravetre weight pour plus dinformations

prioCBQ peut eacutegalement agir comme un peacuteripheacuterique PRIO Les classes internes avec les prioriteacutes les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Mise en forme CBQ en deacutetail 49

plus eacuteleveacutees sont consulteacutees en premier et aussi longtemps quelles ont du trafic les autres classes nesont pas examineacutees

weightLe paramegravetre weight assiste le processus Weighted Round Robin Chaque classe a tour agrave tour lapossibiliteacute denvoyer ses donneacutees Si vous avez des classes avec des bandes passantessignificativement plus importantes il est logique de les autoriser agrave envoyer plus de donneacutees agrave chaquetour que les autres

Vous pouvez utiliser des nombres arbitraires dans la mesure ougrave CBQ additionne tous les paramegravetresweight preacutesents sous une classe et les normalise La regravegle empirique qui consiste agrave prendrerate10 semble fonctionner correctement Le paramegravetre weight normaliseacute est multiplieacute par leparamegravetre allot pour deacuteterminer la quantiteacute de donneacutees agrave envoyer agrave chaque tour

Notez sil vous plaicirct que toutes les classes agrave linteacuterieur dune hieacuterarchie CBQ doivent avoir le mecircme nombremajeur

Paramegravetres CBQ qui deacuteterminent le partage amp le precirct du lien

En plus de purement limiter certains trafics il est eacutegalement possible de speacutecifier quelles classes peuventemprunter de la bande passante aux autres classes ou reacuteciproquement precircter sa bande passante

isolated sharingUne classe qui est configureacutee avec isolated ne precirctera pas sa bande passante agrave ses classes enfantsUtilisez ceci si vous avez sur votre lien deux agences concurrentes ou qui ne sappreacutecient pas et qui neveulent pas se precircter gratuitement de la bande passante

Le programme de controcircle tc connait eacutegalement sharing qui agit agrave linverse du paramegravetreisolated

bounded borrowUne classe peut aussi ecirctre borneacutee (bounded) ce qui signifie quelle nessaiera pas demprunter de labande passante agrave ses classes enfants tc connait eacutegalement borrow qui agit agrave linverse de bounded

Une situation typique pourrait ecirctre le cas ougrave vous avez deux agences preacutesentes sur votre lien qui sont agrave la foisisolated et bounded Ceci signifie quelles sont strictement limiteacutees agrave leur deacutebit et quelles ne precircterontpas aux autres leur bande passante

A linteacuterieur de ces classes dagence il pourrait y avoir dautres classes qui sont autoriseacutees agrave eacutechanger leurbande passante

Configuration simple

1 gestionnaire de mise en file dattente racine | 11 classe enfant 13 14 classes terminales | | 30 40 gestionnares de mise en file dattente (sfq) (sfq)

Cette configuration limite le trafic dun serveur web agrave 5 mbit et le trafic SMTP agrave 3 mbit Il est souhaitablequils noccupent pas plus de 6 mbit agrave eux deux Nous avons une carte reacuteseau agrave 100 mbit et les classes peuventsemprunter mutuellement de la bande passante

tc qdisc add dev eth0 root handle 10 cbq bandwidth 100Mbit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

50 Le comportement CBQ classful

avpkt 1000 cell 8 tc class add dev eth0 parent 10 classid 11 cbq bandwidth 100Mbit rate 6Mbit weight 06Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

Cette partie installe la racine et la classe 11 habituelle La classe 11 est borneacutee la bande passante totale nepourra donc pas exceacuteder 6 mbit

Comme dit avant CBQ a besoin de NOMBREUX paramegravetres Tous ces paramegravetres sont cependant expliqueacutesau-dessus La configuration HTB correspondante est beaucoup plus simple

tc class add dev eth0 parent 11 classid 13 cbq bandwidth 100Mbit rate 5Mbit weight 05Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 tc class add dev eth0 parent 11 classid 14 cbq bandwidth 100Mbit rate 3Mbit weight 03Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000

Ce sont nos deux classes Notez comment nous avons configureacute la valeur du paramegravetre weight en fonctiondu paramegravetre rate La bande passante de lensemble des deux classes ne pourra jamais deacutepasser 6 mbit Enfait les identifieurs de classe (classid) doivent avoir le mecircme numeacutero majeur que le gestionnaire de miseen file dattente parent

tc qdisc add dev eth0 parent 13 handle 30 sfq tc qdisc add dev eth0 parent 14 handle 40 sfq

Les deux classes ont par deacutefaut un gestionnaire de mise en file dattente FIFO Nous les remplaccedilons par unefile dattente SFQ de telle sorte que chaque flux de donneacutees soit traiteacute de maniegravere eacutegale

tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 13 tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 14

Ces commandes directement attacheacutees agrave la racine envoient le trafic vers le bon gestionnaire de mise en filedattente

Notez que nous utilisons tc class add pour CREER des classes agrave linteacuterieur dun gestionnaire de mise enfile dattente et que nous utilisons tc qdisc add pour veacuteritablement configurer ces classes

Vous vous demandez peut-ecirctre ce qui arrive au trafic qui nest classifieacute par aucune des deux regravegles Dans cecas les donneacutees seront traiteacutees agrave linteacuterieur de 10 et le deacutebit ne sera pas limiteacute

Si le trafic SMTP+web tente de deacutepasser la limite de 6 mbits la bande passante sera diviseacutee selon leparamegravetre weight donnant 58 du trafic au serveur web et 38 au serveur smtp

Avec cette configuration vous pouvez eacutegalement dire que le trafic du serveur web sera au minimum de 58 6 mbit = 375 mbit

Dautres paramegravetres CBQ split amp defmap

Comme preacuteciseacute avant un gestionnaire de mise en file dattente baseacute sur des classes doit appeler des filtrespour deacuteterminer dans quelle classe un paquet sera mis en file dattente

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 51

En plus dappeler les filtres CBQ offre dautres options defmap amp split Cest plutocirct compliqueacute agravecomprendre et de plus ce nest pas vital Mais eacutetant donneacute que ceci est le seul endroit connu ougrave defmap ampsplit sont correctement expliqueacutes je vais faire de mon mieux

Etant donneacute que nous voulons le plus souvent reacutealiser le filtrage en ne consideacuterant que le champ TOS unesyntaxe speacuteciale est fournie Chaque fois que CBQ doit trouver ougrave le paquet doit ecirctre mis en file dattente ilveacuterifie si le noeud est un noeud daiguillage (split node) Si cest le cas un de ses sous-gestionnaires a indiqueacuteson souhait de recevoir tous les paquets configureacutes avec une certaine prioriteacute Celle ci peut ecirctre deacuteriveacutee duchamp TOS ou des options des sockets positionneacutees par les applications

Les bits de prioriteacutes des paquets subissent un ET logique avec le champ defmap pour voir si unecorrespondance existe En dautres termes cest un moyen pratique de creacuteer un filtre tregraves rapide qui ne seraactif que pour certaines prioriteacutes Un defmap de ff (en hexadeacutecimal) veacuterifiera tout tandis quune valeur de 0ne veacuterifiera rien Une configuration simple aidera peut-ecirctre agrave rendre les choses plus claires

tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 mpu 64

tc class add dev eth1 parent 10 classid 11 cbq bandwidth 10Mbit rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000

Preacuteambule standard de CBQ Je nai jamais pris lhabitude de la quantiteacute de nombres neacutecessaires

Le paramegravetre defmap se reacutefegravere aux bits TCamplowbarPRIO qui sont deacutefinis comme suit

TC_PRIO Num Correspond agrave TOS-------------------------------------------------BESTEFFORT 0 Maximalise la Fiabiliteacute FILLER 1 Minimalise le Coucirct BULK 2 Maximalise le Deacutebit (0x8) INTERACTIVE_BULK 4 INTERACTIVE 6 Minimise le Deacutelai (0x10) CONTROL 7

Les nombres TCamplowbarPRIO correspondent aux bits compteacutes agrave partir de la droite Voir la sectionpfifoamplowbarfast pour plus de deacutetails sur la faccedilon dont les bits TOS sont convertis en prioriteacutes

Maintenant les classes interactive et de masse

tc class add dev eth1 parent 11 classid 12 cbq bandwidth 10Mbit rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 10 defmap c0

tc class add dev eth1 parent 11 classid 13 cbq bandwidth 10Mbit rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 10 defmap 3f

La gestion de mise en file dattente daiguillage (split qdisc) est 10 et cest agrave ce niveau que le choix sera faitC0 correspond au nombre binaire 11000000 et 3F au nombre binaire 00111111 Ces valeurs sont choisiesde telle sorte quagrave elles deux elles veacuterifient tous les bits La premiegravere classe correspond aux bits 6 amp 7 ce quiest eacutequivalent aux trafics ltlt interactif gtgt et de ltlt controcircle gtgt La seconde classe correspond au reste

Le noeud 10 possegravede maintenant la table suivante

prioriteacute envoyer agrave0 131 132 13

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

52 Dautres paramegravetres CBQ split amp defmap

3 134 135 136 127 12

Pour dautres amusements vous pouvez eacutegalement donner un ltlt masque de changement gtgt qui indiqueexactement les prioriteacutes que vous souhaitez changer Nutilisez ceci quavec la commande tc classchange Par exemple pour ajouter le trafic best effort agrave la classe 12 nous devrons exeacutecuter ceci

tc class change dev eth1 classid 12 cbq defmap 0101

La carte des prioriteacutes au niveau de 10 ressemble maintenant agrave ceci

prioriteacute envoyer agrave0 121 132 133 134 135 136 127 12

FIXME tc class change na pas eacuteteacute testeacute mais simplement vu dans les sources

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Martin Devera(ltdevikgt) reacutealisa agrave juste titre que CBQ est complexe et quil ne semble pas optimiseacute pour denombreuses situations classiques Son approche hieacuterarchique est bien adapteacutee dans le cas de configurations ougraveil y a une largeur de bande passante fixeacutee agrave diviser entre diffeacuterents eacuteleacutements Chacun de ces eacuteleacutements aura unebande passante garantie avec la possibiliteacute de speacutecifier la quantiteacute de bande passante qui pourra ecirctreemprunteacutee

HTB travaille juste comme CBQ mais il na pas recourt agrave des calculs de temps dinoccupation pour la mise enforme A la place cest un Token Bucket Filter baseacute sur des classes dougrave son nom Il na que quelquesparamegravetres qui sont bien documenteacutes sur ce site

Au fur et agrave mesure que votre configuration HTB se complexifie votre configuration sadapte bien Avec CBQelle est deacutejagrave complexe mecircme dans les cas simples HTB3 (voir sa page principale pour les deacutetails desversions HTB) fait maintenant parti des sources officielles du noyau (agrave partir des versions 2420-pre1 et2531 et supeacuterieures) Il est encore cependant possible que vous soyez obligeacute de reacutecupeacuterer la version mise agravejour de tc pour HTB3 Les programmes de lespace utilisateur et la partie HTB du noyau doivent avoir lemecircme numeacutero majeur Sans cela tc ne marchera pas avec HTB13

Si vous avez deacutejagrave un noyau reacutecent ou si vous ecirctes sur le point de mettre agrave jour votre noyau consideacuterez HTBcoucircte que coucircte

Configuration simple

Fonctionnellement presque identique agrave la configuration simple CBQ preacutesenteacutee ci-dessus

tc qdisc add dev eth0 root handle 1 htb default 30

tc class add dev eth0 parent 1 classid 11 htb rate 6mbit burst 15k

tc class add dev eth0 parent 11 classid 110 htb rate 5mbit burst 15k tc class add dev eth0 parent 11 classid 120 htb rate 3mbit ceil 6mbit burst 15k

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket) 53

tc class add dev eth0 parent 11 classid 130 htb rate 1kbit ceil 6mbit burst 15k

Lauteur recommande SFQ sous ces classes

tc qdisc add dev eth0 parent 110 handle 10 sfq perturb 10 tc qdisc add dev eth0 parent 120 handle 20 sfq perturb 10 tc qdisc add dev eth0 parent 130 handle 30 sfq perturb 10

Ajouter les filtres qui dirigent le trafic vers les bonnes classes

U32=tc filter add dev eth0 protocol ip parent 10 prio 1 u32 $U32 match ip dport 80 0xffff flowid 110 $U32 match ip sport 25 0xffff flowid 120

Et cest tout Pas de vilains nombres non expliqueacutes pas de paramegravetres non documenteacutes

HTB semble vraiment merveilleux Si 10 et 20 ont atteint tous les deux leur bande passante garantie etquil en reste agrave partager ils lempruntent avec un rapport de 53 comme attendu

Le trafic non classifieacute est achemineacute vers 30 qui a une petite bande passante mais qui peut emprunter tout cequi est laisseacute libre Puisque nous avons choisi SFQ en interne on heacuterite naturellement de leacutequiteacute

Classifier des paquets avec des filtres

Pour deacuteterminer quelle classe traitera un paquet la ltlt chaicircne de classificateurs gtgt est appeleacutee chaque foisquun choix a besoin decirctre fait Cette chaicircne est constitueacutee de tous les filtres attacheacutes aux gestionnaires demise en file dattente baseacutes sur des classes qui doivent prendre une deacutecision

On reprend larbre qui nest pas un arbre

racine 1 | _11_ | | | 10 11 12 101 102 121 122

Quand un paquet est mis en file dattente linstruction approprieacutee de la chaicircne de filtre est consulteacutee agrave chaquebranche Une configuration typique devrait avoir un filtre en 11 qui dirige le paquet vers 12 et un filtre en12 qui lenvoie vers 122

Vous pourriez eacutegalement avoir ce dernier filtre en 11 mais vous pouvez gagner en efficaciteacute en ayant destests plus speacutecifiques plus bas dans la chaicircne

A ce propos vous ne pouvez pas filtrer un paquet ltlt vers le haut gtgt Donc avec HTB vous devrez attachertous les filtres agrave la racine

Encore une fois les paquets ne sont mis en file dattente que vers le bas Quand ils sont retireacutes de la filedattente ils montent de nouveau vers linterface Ils ne tombent PAS vers lextreacutemiteacute de larbre en direction deladaptateur reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

54 Configuration simple

Quelques exemples simples de filtrage

Comme expliqueacute dans le chapitre Filtres avanceacutes pour la classification des paquetsgt vous pouvez vraimentanalyser nimporte quoi en utilisant une syntaxe tregraves compliqueacutee Pour commencer nous allons montrercomment reacutealiser les choses eacutevidentes ce qui heureusement est plutocirct facile

Disons que nous avons un gestionnaire de mise en file dattente PRIO appeleacute 10 qui contient trois classes etque nous voulons assigner agrave la bande de plus haute prioriteacute tout le trafic allant et venant du port 22 Les filtresseraient les suivants

tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip dport 22 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip sport 80 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Quest-ce que cela signifie Cela dit attacher agrave eth0 au noeud 10 un filtre u32 de prioriteacute 1 qui analysele port de destination ip 22 et qui lenvoie vers la bande 101 La mecircme chose est reacutepeacuteteacutee avec le port source80 La derniegravere commande indique que si aucune correspondance nest trouveacutee alors le trafic devra aller versla bande 102 la plus grande prioriteacute suivante

Vous devez ajouter eth0 ou nimporte laquelle de vos interfaces car chaque interface possegravede un espace denommage de ses descripteurs qui lui est propre

Pour seacutelectionner une adresse IP utilisez ceci

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip dst 432132 flowid 101 tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 123432 flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Ceci dirige le trafic allant vers 4321 et venant de 1234 vers la file dattente de plus haute prioriteacutetandis que le reste ira vers la prochaine plus haute prioriteacute

Vous pouvez rassembler ces deux veacuterifications pour reacutecupeacuterer le trafic venant de 1234 avec le portsource 80

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 432132 match ip sport 80 0xffff flowid 101

Toutes les commandes de filtres dont vous aurez normalement besoin

La plupart des commandes preacutesenteacutees ici commencent avec le preacuteambule suivant

tc filter add dev eth0 parent 10 protocol ip prio 1 u32

Ils sont appeleacutes filtres u32 et analysent NIMPORTE QUELLE partie dun paquet

Sur ladresse sourcedestinationMasque pour la source match ip src 123024 et masque pour la destination match ipdst 432024 Pour analyser un hocircte simple employez 32 ou omettez le masque

Sur le port sourcedestination tous les protocoles IPSource match ip sport 80 0xffff et destination match ip dport 0xffff

Sur le protocole ip (tcp udp icmp gre ipsec)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Quelques exemples simples de filtrage 55

Utilisez les nombres deacutefinis dans etcprotocols par exemple 1 pour icmp match ipprotocol 1 0xff

Sur fwmarkVous pouvez marquer les paquets avec ipchains ou iptables et voir cette marque preacuteserveacutee lors duroutage agrave travers les interfaces Ceci est vraiment utile pour mettre uniquement en forme le trafic sureth1 et venant de eth0 par exemple La syntaxe est la suivante

tc filter add dev eth1 protocol ip parent 10 prio 1 handle 6 fw flowid 11

Notez que ce nest pas une correspondance u32

Vous pouvez positionner une marque comme ceci

iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

Le nombre 6 est arbitraire

Si vous ne voulez pas assimiler la syntaxe complegravete de tc filter utilisez juste iptables et apprenezseulement la seacutelection baseacutee sur fwmark

Sur le champ TOSPour seacutelectionner le trafic interactif deacutelai minimum

tc filter add dev ppp0 parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 14

Utilisez 0x08 0xff pour le trafic de masse

Pour plus de commandes de filtrage voir le chapitre Filtres avanceacutes pour la classification des paquetsgt

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediatequeueing device (IMQ))

Le peacuteripheacuterique IMQ nest pas un gestionnaire de mise en file dattente mais son utilisation est fortement lieacutee agraveceux-ci Au coeur de Linux les gestionnaires de mise en file dattente sont attacheacutes aux peacuteripheacuteriques reacuteseauxet tout ce qui est mis en file dattente dans ce peacuteripheacuterique lest dabord dans le gestionnaire Avec ce conceptil existe deux limitations

1 Seule la mise en forme du trafic sortant est possible (un gestionnaire dentreacutee existe mais ses possibiliteacutessont tregraves limiteacutees en comparaison des gestionnaires de mise en file baseacutes sur les classes)

2 Un gestionnaire de mise en file dattente ne voit le trafic que dune interface et des limitations globales nepeuvent pas ecirctre mises en place

IMQ est ici pour aider agrave reacutesoudre ces deux limitations En reacutesumeacute vous pouvez mettre tout ce que vousvoulez dans un gestionnaire de mise en file dattente Les paquets speacutecialement marqueacutes sont intercepteacutes parles points daccroche netfilter NF_IP_PRE_ROUTING et NF_IP_POST_ROUTING et sont transfeacutereacutes vers legestionnaire attacheacute au peacuteripheacuterique imq Une cible iptables est utiliseacutee pour le marquage des paquets

Ceci vous permet de reacutealiser de la mise en forme dentreacutee eacutetant donneacute que vous pouvez marquer les paquetsentrant par un peacuteripheacuterique quelconque etou traiter les interfaces comme des classes pour configurer deslimites globales Vous pouvez eacutegalement reacutealiser de nombreuses autres choses comme simplement mettrevotre trafic http dans un gestionnaire mettre les requecirctes de nouvelles connexions dans un gestionnaire

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

56 Toutes les commandes de filtres dont vous aurez normalement besoin

Configuration simple

La premiegravere chose qui devrait vous venir agrave lesprit est dutiliser la mise en forme du trafic entrant pour vousgarantir une grande passante ) La configuration se fait comme avec nimporte quelle autre interface

tc qdisc add dev imq0 root handle 1 htb default 20

tc class add dev imq0 parent 1 classid 11 htb rate 2mbit burst 15k

tc class add dev imq0 parent 11 classid 110 htb rate 1mbittc class add dev imq0 parent 11 classid 120 htb rate 1mbit

tc qdisc add dev imq0 parent 110 handle 10 pfifotc qdisc add dev imq0 parent 120 handle 20 sfq

tc filter add dev imq0 parent 100 protocol ip prio 1 u32 match ip dst 100023032 flowid 110

Dans cet exemple u32 est utiliseacute pour la classification Les autres classificateurs devraient marcher tout aussibien Le trafic doit ensuite ecirctre seacutelectionneacute et marqueacute pour ecirctre mis en file dattente vers imq0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0

ip link set imq0 up

Les cibles iptables IMQ sont valides dans les chaicircnes PREROUTING et POSTROUTING de la table mangleLa syntaxe est la suivante

IMQ [ --todev n ] n numeacutero du peacuteripheacuterique imq

Il existe aussi une cible ip6tables

Notez que le trafic nest pas mis en file dattente quand la cible est activeacutee mais apregraves La localisation exactede lentreacutee du trafic dans le peacuteripheacuterique imq deacutepend de la direction de ce trafic (entrantsortant) Ces entreacuteessont les points daccroche preacutedeacutefinis de netfilter et utiliseacutes par iptables

enum nf_ip_hook_priorities NF_IP_PRI_FIRST = INT_MIN NF_IP_PRI_CONNTRACK = -200 NF_IP_PRI_MANGLE = -150 NF_IP_PRI_NAT_DST = -100 NF_IP_PRI_FILTER = 0 NF_IP_PRI_NAT_SRC = 100 NF_IP_PRI_LAST = INT_MAX

Pour le trafic entrant imq se deacuteclare avec la prioriteacute NF_IP_PRI_MANGLE + 1 ce qui signifie que lespaquets entrent dans le peacuteripheacuterique imq juste apregraves la chaine PREROUTING de la table mangle

Pour le trafic sortant imq utilise NF_IP_PRI_LAST qui honore le fait que les paquets rejeteacutes par la table filternoccuperont pas de bande passante

Les mises agrave jour et de plus amples informations peuvent ecirctre trouveacutees sur le site imq

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 57

Chapitre 10 Eacutequilibrage de charge sur plusieursinterfacesIl existe plusieurs maniegraveres pour le faire Une des plus faciles et des plus directes est TEQL (True (or Trivial)Link Equalizer Comme la plupart des eacuteleacutements en relation avec la gestion de file dattente leacutequilibrage decharge est bidirectionnel Les deux eacutequipements terminaux du lien ont besoin de participer pour obtenir uneefficaciteacute optimale

Imaginez la situation suivante

+-------+ eth1 +-------+ | |==========| | reacuteseau 1 -----| A | | B |---- reacuteseau 2 | |==========| | +-------+ eth2 +-------+

A et B sont des routeurs dont nous supposerons quils fonctionnent avec Linux pour le moment Si le trafic vadu reacuteseau 1 vers le reacuteseau 2 le routeur A a besoin de distribuer les paquets sur les deux liens allant vers B Lerouteur B a besoin decirctre configureacute pour laccepter On retrouve la mecircme chose dans le sens inverse pour lespaquets allant du reacuteseau 2 vers le reacuteseau 1 Le routeur B a besoin denvoyer les paquets agrave la fois sur eth1 eteth2

La reacutepartition est faite par un peacuteripheacuterique TEQL comme ceci (cela ne pouvait pas ecirctre plus simple)

tc qdisc add dev eth1 root teql0 tc qdisc add dev eth2 root teql0 ip link set dev teql0 up

Noubliez pas la commande ip link set up

Ceci a besoin decirctre fait sur les deux hocirctes Le peacuteripheacuterique teql0 est basiquement un distributeur tourniquetau-dessus de eth1 et eth2 pour lenvoi des paquets Aucune donneacutee narrive jamais agrave travers unpeacuteripheacuterique teql mais les donneacutees apparaissent sur eth1 et eth2

Nous navons pour le moment que les peacuteripheacuteriques et nous avons eacutegalement besoin dun routage correctLune des possibiliteacutes pour reacutealiser cela est dassigner un reacuteseau 31 sur chacun des liens ainsi que sur lepeacuteripheacuterique teql0

FIXME Avons nous besoin de quelque chose comme nobroadcast Un 31 est trop petit pour contenirune adresse reacuteseau et une adresse de diffusion Si cela ne marche pas comme preacutevu essayez un 30 etajustez les adresses IP Vous pouvez mecircme essayer sans attribuer dadresses agrave eth1 et eth2

Sur le routeur A

ip addr add dev eth1 1000031 ip addr add dev eth2 1000231 ip addr add dev teql0 1000431

Sur le routeur B

ip addr add dev eth1 1000131 ip addr add dev eth2 1000331 ip addr add dev teql0 1000531

Le routeur A devrait maintenant ecirctre capable de lancer un ping vers 10001 10003 et 10005 agrave

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

58 Chapitre 10 Eacutequilibrage de charge sur plusieurs interfaces

travers les deux liens physiques et le peacuteripheacuterique ltlt eacutegaliseacute gtgt Le routeur B devrait maintenant ecirctre capablede lancer un ping vers 10000 10002 et 10004 agrave travers les liens

Si cela marche le routeur A peut prendre 10005 comme route vers le reacuteseau 2 et le routeur B10004 comme route vers le reacuteseau 1 Pour le cas particulier ougrave le reacuteseau 1 est votre reacuteseau personnel etougrave le reacuteseau 2 est lInternet le routeur A peut prendre 10005 comme passerelle par deacutefaut

Avertissement

Rien nest aussi simple quil y paraicirct Les interfaces eth1 et eth2 sur les deux routeurs A et B ne doivent pasavoir la fonction de filtrage par chemin inverse activeacutee Dans le cas contraire ils rejetteront les paquetsdestineacutes agrave des adresses autres que les leurs

echo 0 gt procsysnetipv4confeth1rp_filter echo 0 gt procsysnetipv4confeth2rp_filter

Il y a un seacuterieux problegraveme avec le reacuteordonnancement des paquets Supposons que six paquets aient besoindecirctre envoyeacutes de A vers B Par exemple eth1 peut traiter les paquets 1 3 et 5 et eth2 les paquets 2 4 et 6Dans un monde ideacuteal le routeur B devrait recevoir ces paquets dans lordre 1 2 3 4 5 6 Mais il est plusprobable que le noyau les recevra comme ceci 2 1 4 3 6 5 Ce problegraveme va perturber TCPIP Alors quilny a pas de problegravemes pour les liens transportant diffeacuterentes sessions TCPIP vous ne serez pas capable deregrouper plusieurs liens et obtenir par ftp un simple fichier beaucoup plus rapidement agrave moins que lesystegraveme dexploitation envoyant ou recevant ne soit Linux En effet celui-ci nest pas facilement perturbeacute parde simples reacuteordonnancements

Cependant leacutequilibrage de charge est une bonne ideacutee pour de nombreuses applications

Chapitre 11 Netfilter et iproute - marquage depaquetsJusquagrave maintenant nous avons vu comment iproute travaille et netfilter a eacuteteacute mentionneacute plusieurs fois Vousne perdrez pas votre temps agrave consulter Rustys Remarkably Unreliable Guides Le logiciel Netfilter peut ecirctretrouveacute ici

Netfilter nous permet de filtrer les paquets ou de deacutesosser leurs en-tecirctes Une de ses fonctionnaliteacutesparticuliegraveres est de pouvoir marquer un paquet avec un nombre gracircce agrave loption --set-mark

Comme exemple la commande suivante marque tous les paquets destineacutes au port 25 en loccurrence lecourrier 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 chegravere au meacutegaoctet) et une qui est pluslente mais avec un tarif moins eacuteleveacute Nous souhaiterions que le courrier passe par la route la moins chegravere

Nous avons deacutejagrave marqueacute le paquet avec un 1 et nous allons maintenant renseigner la base de donneacutees de lapolitique de routage pour quelle agisse sur ces paquets marqueacutes

echo 201 mailout gtgt etciproute2rt_tables ip rule add fwmark 1 table mailout ip rule ls0 from all lookup local 32764 from all fwmark 1 lookup mailout

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 11 Netfilter et iproute - marquage de paquets 59

32766 from all lookup main 32767 from all lookup default

Nous allons maintenant geacuteneacuterer la table mailout avec une route vers la ligne lente mais peu coucircteuse

sbinip route add default via 1959698253 dev ppp0 table mailout

Voilagrave qui est fait Il se peut que nous voulions mettre en place des exceptions et il existe de nombreuxmoyens pour le faire Nous pouvons modifier la configuration de netfilter pour exclure certains hocirctes ou nouspouvons inseacuterer une regravegle avec une prioriteacute plus faible qui pointe sur la table principale pour nos hocirctes faisantexception

Nous pouvons aussi utiliser cette fonctionnaliteacute pour nous conformer aux bits TOS en marquant les paquetsavec diffeacuterents types de service et les nombres correspondants On creacutee ensuite les regravegles qui agissent sur cestypes de service De cette faccedilon on peut deacutedier une ligne RNIS aux connexions interactives

Inutile de le dire cela marche parfaitement sur un hocircte qui fait de la translation dadresse (NAT) autrementdit du masquerading

IMPORTANT Nous avons reccedilu une information selon laquelle MASQ et SNAT entrent en conflit avec lemarquage de paquets Rusty Russell lexplique dans ce courrier

Deacutesactivez le filtrage de chemin inverse pour que cela fonctionne correctement

Note pour marquer les paquets vous aurez besoin de valider quelques options du noyau

IP advanced router (CONFIG_IP_ADVANCED_ROUTER) [Yn]IP policy routing (CONFIG_IP_MULTIPLE_TABLES) [Yn]IP use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Yn]

Voir aussi la section intituleacutee Cache web transparent utilisant netfilter iproute2 ipchains et squid dansChapitre 15gt dans le chapitre Recettes de cuisinegt

Chapitre 12 Filtres avanceacutes pour la (re-)classificationdes paquetsComme expliqueacute dans la section sur les gestionnaires de mise en file dattente baseacutes sur des classes les filtressont neacutecessaires pour classifier les paquets dans nimporte laquelle des sous-files dattente Ces filtres sontappeleacutes agrave linteacuterieur des gestionnaires de mise en file dattente baseacutes sur des classes

Voici une liste incomplegravete des classificateurs disponibles

fwBase la deacutecision sur la faccedilon dont le pare-feu a marqueacute les paquets Ceci peut ecirctre un passage facile sivous ne voulez pas apprendre la syntaxe tc lieacutee aux filtres Voir le chapitre sur les gestionnaires demise en file dattente pour plus de deacutetails

u32Base la deacutecision sur les champs agrave linteacuterieur du paquet (cest-agrave-dire ladresse IP source etc)

routeBase la deacutecision sur la route que va emprunter le paquet

rsvp rsvp6Route les paquets en se basant sur RSVP Seulement utile sur les reacuteseaux que vous controcirclez Internetne respecte pas RSVP

tcindex

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

60 Chapitre 12 Filtres avanceacutes pour la (re-)classification des paquets

Utiliseacute par le gestionnaire de file dattente DSMARK Voir la section DSMARKgt

Notez quil y a geacuteneacuteralement plusieurs maniegraveres de classifier un paquet Cela deacutepend du systegraveme declassification que vous souhaitez utiliser

Les classificateurs acceptent en geacuteneacuteral quelques arguments communs Ils sont listeacutes ici pour des raisonspratiques

protocolLe protocole que ce classificateur acceptera Geacuteneacuteralement on nacceptera que le trafic IP Exigeacute

parentLe descripteur auquel ce classificateur est attacheacute Ce descripteur doit ecirctre une classe deacutejagrave existanteExigeacute

prioLa prioriteacute de ce classificateur Les plus petits nombres seront testeacutes en premier

handleCette reacutefeacuterence a plusieurs significations suivant les diffeacuterents filtres

Toutes les sections suivantes supposeront que vous essayez de mettre en forme le trafic allant vers HostACes sections supposeront que la classe racine a eacuteteacute configureacutee sur 1 et que la classe vers laquelle vousvoulez envoyer le trafic seacutelectionneacute est 11

Le classificateur u32

Le filtre u32 est le filtre le plus avanceacute dans limpleacutementation courante Il est entiegraverement baseacute sur des tablesde hachage ce qui le rend robuste quand il y a beaucoup de regravegles de filtrage

Dans sa forme la plus simple le filtre u32 est une liste denregistrements chacun consistant en deux champs un seacutelecteur et une action Les seacutelecteurs deacutecrits ci-dessous sont compareacutes avec le paquet IP traiteacute jusquagrave lapremiegravere correspondance et laction associeacutee est reacutealiseacutee Le type daction le plus simple serait de diriger lepaquet vers une classe CBQ deacutefinie

La ligne de commande du programme tc filter utiliseacutee pour configurer le filtre consiste en trois parties laspeacutecification du filtre un seacutelecteur et une action La speacutecification du filtre peut ecirctre deacutefinie comme

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

Le champ protocol deacutecrit le protocole sur lequel le filtre sera appliqueacute Nous ne discuterons que du cas duprotocole ip Le champ preference (priority peut ecirctre utiliseacute comme alternative) fixe la prioriteacute dufiltre que lon deacutefinit Cest important dans la mesure ougrave vous pouvez avoir plusieurs filtres (listes de regravegles)avec des prioriteacutes diffeacuterentes Chaque liste sera scruteacutee dans lordre dajout des regravegles Alors la liste avec laprioriteacute la plus faible (celle qui a le numeacutero de preacutefeacuterence le plus eacuteleveacute) sera traiteacutee Le champ parentdeacutefinit le sommet de larbre CBQ (par ex 10) auquel le filtre doit ecirctre attacheacute

Les options deacutecrites sappliquent agrave tous les filtres pas seulement agrave u32

Le seacutelecteur U32

Le seacutelecteur U32 contient la deacutefinition dun modegravele qui sera compareacute au paquet traiteacute Plus preacuteciseacutement ildeacutefinit quels bits doivent correspondre dans len-tecircte du paquet et rien de plus mais cette meacutethode simple esttregraves puissante Jetons un oeil sur lexemple suivant directement tireacute dun filtre assez complexe reacuteellementexistant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le classificateur u32 61

tc filter parent 1 protocol ip pref 10 u32 fh 800800 order 2048 key ht 800 bkt 0 flowid 13 match 0010000000ff0000 at 0

Pour linstant laissons de cocircteacute la premiegravere ligne tous ces paramegravetres deacutecrivent les tables de hachage du filtreFocalisons-nous sur la ligne de seacutelection contenant le mot-cleacute match Ce seacutelecteur fera correspondre lesen-tecirctes IP dont le second octet sera 0x10 (0010) Comme nous pouvons le deviner le nombre 00ff est lemasque de correspondance disant au filtre quels bits il doit regarder Ici cest 0xff donc loctetcorrespondra si cest exactement 0x10 Le mot-cleacute at signifie que la correspondance doit deacutemarrer audeacutecalage speacutecifieacute (en octets) - dans notre cas cest au deacutebut du paquet Traduisons tout cela en langagehumain le paquet correspondra si son champ Type de Service (TOS) a le bit ltlt faible deacutelai gtgt positionneacuteAnalysons une autre regravegle

tc filter parent 1 protocol ip pref 10 u32 fh 800803 order 2051 key ht 800 bkt 0 flowid 13 match 000000160000ffff at nexthdr+0

Loption nexthdr deacutesigne len-tecircte suivant encapsuleacute dans le paquet IP cest agrave dire celui du protocole de lacouche supeacuterieure La correspondance commencera eacutegalement au deacutebut du prochain en-tecircte Elle devrait avoirlieu dans le deuxiegraveme mot de 32 bits de len-tecircte Dans les protocoles TCP et UDP ce champ contient le portde destination du paquet Le nombre est donneacute dans le format big-endian cest-agrave-dire les bits les plussignificatifs en premier Il faut donc lire 0x0016 comme 22 en deacutecimal qui correspond au service SSH dans lecas de TCP Comme vous le devinez cette correspondance est ambigueuml sans un contexte et nous endiscuterons plus loin

Ayant compris tout cela nous trouverons le seacutelecteur suivant tregraves facile agrave lire matchc0a80100ffffff00 at 16 Ce que nous avons ici cest une correspondance de trois octets au 17egravemeoctet en comptant agrave partir du deacutebut de len-tecircte IP Cela correspond aux paquets qui ont une adresse dedestination quelconque dans le reacuteseau 192168124 Apregraves avoir analyseacute les exemples nous pouvonsreacutesumer ce que nous avons appris

Seacutelecteurs geacuteneacuteraux

Les seacutelecteurs geacuteneacuteraux deacutefinissent le modegravele le masque et le deacutecalage qui seront compareacutes au contenu dupaquet En utilisant les seacutelecteurs geacuteneacuteraux vous pouvez rechercher des correspondances sur nimporte quelbit de len-tecircte IP (ou des couches supeacuterieures) Ils sont quand mecircme plus difficiles agrave eacutecrire et agrave lire que lesseacutelecteurs speacutecifiques deacutecrits ci-dessus La syntaxe geacuteneacuterale des seacutelecteurs est

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

Un des mots-cleacutes u32 u16 ou u8 doit speacutecifier la longueur du modegravele en bits PATTERN et MASK serapporteront agrave la longueur deacutefinie par ce mot-cleacute Le paramegravetre OFFSET est le deacutecalage en octets pour ledeacutemarrage de la recherche de correspondance Si le mot-clef nexthdr+ est preacutesent le deacutecalage sera relatif agravelen-tecircte de la couche reacuteseau supeacuterieure

Quelques exemples

tc filter add dev ppp14 parent 10 prio 10 u32 match u8 64 0xff at 8 flowid 14

Un paquet correspondra agrave cette regravegle si sa ltlt dureacutee de vie gtgt (TTL) est de 64 TTL est le champ deacutemarrantjuste apregraves le 8egraveme octet de len-tecircte IP

Correspond agrave tous les paquets TCP ayant le bit ACK activeacute

tc filter add dev ppp14 parent 10 prio 10 u32 match ip protocol 6 0xff

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

62 Le seacutelecteur U32

match u8 0x10 0xff at nexthdr+13 flowid 13

Utilisez ceci pour deacuteterminer la preacutesence du bit ACK sur les paquets dune longueur infeacuterieure agrave 64 octets

Veacuterifie la preacutesence dun ACK protocol IP 6 longueur de len-tecircte IP 0x5(mots de 32 bits) longueur total IP 0x34 (ACK + 12 octets doptions TCP) TCP ack actif (bit 5 offset 33) tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 13

Seuls les paquets TCP sans charge utile et avec le bit ACK positionneacute veacuterifieront cette regravegle Ici nouspouvons voir un exemple dutilisation de deux seacutelecteurs le reacutesultat final eacutetant un ET logique de leur reacutesultatSi nous jetons un coup doeil sur un scheacutema de len-tecircte TCP nous pouvons voir que le bit ACK est le secondbit (0x10) du 14egraveme octet de len-tecircte TCP (at nexthdr+13) Comme second seacutelecteur si nous voulonsnous compliquer la vie nous pouvons eacutecrire match u8 0x06 0xff at 9 agrave la place du seacutelecteurspeacutecifique protocol tcp puisque 6 est le numeacutero du protocole TCP speacutecifieacute au 10egraveme octet de len-tecircteIP Dun autre cocircteacute dans cet exemple nous ne pourrons pas utiliser de seacutelecteur speacutecifique pour la premiegraverecorrespondance simplement parce quil ny a pas de seacutelecteur speacutecifique pour deacutesigner les bits TCP ACK

Le filtre ci dessous est une version modifieacutee du filtre preacutesenteacute au-dessus La diffeacuterence est quil ne veacuterifie pasla longueur de len-tecircte ip Pourquoi Car le filtre au-dessus ne marche que sur les systegravemes 32 bits

tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 match u16 0x0000 0xffc0 at 2 flowid 13

Les seacutelecteurs speacutecifiques

La table suivante contient la liste de tous les seacutelecteurs speacutecifiques que les auteurs de cette section ont trouveacutesdans le code source du programme tc Ils rendent simplement la vie plus facile en accroissant la lisibiliteacute de laconfiguration du filtre

FIXME emplacement de la table - la table est dans un fichier seacutepareacute selectorhtml

FIXME Cest encore en Polonais -(

FIXME doit ecirctre sgmliseacute

Quelques exemples

tc filter add dev ppp0 parent 10 prio 10 u32 match ip tos 0x10 0xff flowid 14

FIXME tcp dport match ne fonctionne pas comme deacutecrit ci-dessous

La regravegle ci-dessus correspondra agrave des paquets qui ont le champ TOS eacutegal agrave 0x10 Le champ TOS commenceau deuxiegraveme octet du paquet et occupe 1 octet ce qui nous permet deacutecrire un seacutelecteur geacuteneacuteral eacutequivalent match u8 0x10 0xff at 1 Cela nous donne une indication sur limpleacutementation du filtre u32 Les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seacutelecteurs geacuteneacuteraux 63

regravegles speacutecifiques sont toujours traduites en regravegles geacuteneacuterales et cest sous cette forme quelles sont stockeacutees enmeacutemoire par le noyau Cela amegravene agrave une autre conclusion les seacutelecteurs tcp et udp sont exactement lesmecircmes et cest la raison pour laquelle vous ne pouvez pas utiliser un simple seacutelecteur match tcp dport53 0xffff pour deacutesigner un paquet TCP envoyeacute sur un port donneacute Ce seacutelecteur deacutesigne aussi les paquetsUDP envoyeacutes sur ce port Vous devez eacutegalement speacutecifier le protocole avec la regravegle suivante

tc filter add dev ppp0 parent 10 prio 10 u32 match tcp dport 53 0xffff match ip protocol 0x6 0xff flowid 12

Le classificateur route

Ce classificateur filtre en se basant sur les informations des tables de routage Quand un paquet passant agravetravers les classes et en atteint une qui est marqueacutee avec le filtre route il divise le paquet en se basant surlinformation de la table de routage

tc filter add dev eth1 parent 10 protocol ip prio 100 route

Ici nous ajoutons un classificateur route sur le noeud parent 10 avec la prioriteacute 100 Quand un paquetatteint ce noeud (ce qui arrive immeacutediatement puisquil est racine) il consulte la table de routage et si uneentreacutee de la table correspond il envoie le paquet vers la classe donneacutee et lui donne une prioriteacute de 100Ensuite vous ajoutez lentreacutee de routage approprieacutee pour finalement activer les choses

Lastuce ici est de deacutefinir realm en se basant soit sur la destination soit sur la source Voici la faccedilon deproceacuteder

ip route add HostNetwork via Gateway dev Device realm RealmNumber

Par exemple nous pouvons deacutefinir notre reacuteseau de destination 192168100 avec le nombre realm eacutegalagrave 10

ip route add 19216810024 via 192168101 dev eth1 realm 10

Quand on ajoute des filtres route on peut utiliser les nombres realm pour repreacutesenter les reacuteseaux ou leshocirctes et speacutecifier quelle est la correspondance entre les routes et les filtres

tc filter add dev eth1 parent 10 protocol ip prio 100 route to 10 classid 110

La regravegle ci-dessus indique que les paquets allant vers le reacuteseau 192168100 correspondent agrave la classe110

Le filtre route peut aussi ecirctre utiliseacute avec les routes sources Par exemple il y a un sous-reacuteseau attacheacute agravenotre routeur Linux sur eth2

ip route add 1921682024 dev eth2 realm 2 tc filter add dev eth1 parent 10 protocol ip prio 100 route from 2 classid 12

Ici le filtre speacutecifie que les paquets venant du reacuteseau 19216820 (realm 2) correspondront agrave la classe12

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

64 Les seacutelecteurs speacutecifiques

Les filtres de reacuteglementation (Policing filters)

Pour reacutealiser des configurations encore plus compliqueacutees vous pouvez avoir des filtres qui analysent le traficagrave hauteur dune certaine bande passante Vous pouvez configurer un filtre pour quil cesse complegravetementlanalyse de tout le trafic au-dessus dun certain deacutebit ou pour quil nanalyse pas la bande passante deacutepassantun certain deacutebit

Ainsi si vous deacutecidez de reacuteglementer agrave 4mbits mais quun trafic de 5mbits est preacutesent vous pouvez cesserdanalyser lensemble des 5mbits ou seulement cesser danalyser le 1 mbits suppleacutementaire et envoyer 4mbits agrave la classe correspondante

Si la bande passante deacutepasse le deacutebit configureacute vous pouvez rejeter un paquet le reclassifier ou voir si unautre filtre y correspond

Techniques de reacuteglementation

Il y a essentiellement deux faccedilons de reacuteglementer Si vous avez compileacute le noyau avec Estimators celui-cipeut mesurer plus ou moins pour chaque filtre le trafic qui est passeacute Ces estimations ne sont pas coucircteuses entemps CPU eacutetant donneacute quil ne compte que 25 fois par seconde le nombre de donneacutees qui sont passeacutees etquil calcule le deacutebit agrave partir de lagrave

Lautre maniegravere utilise encore le Token Bucket Filter qui reacuteside agrave linteacuterieur du filtre cette fois Le TBF analyseseulement le trafic A HAUTEUR de la bande passante que vous avez configureacutee Si cette bande passante estdeacutepasseacutee seul lexcegraves est traiteacute par laction de deacutepassement de limite configureacutee

Avec lestimateur du noyau

Ceci est tregraves simple et il ny a quun seul paramegravetre avrate Soit le flux demeure sous avrate et le filtreclassifie le trafic vers la classe approprieacutee soit votre deacutebit le deacutepasse et laction indiqueacutee par deacutefaut laltlt reclassification gtgt est reacutealiseacutee dans ce cas

Le noyau utilise lalgorithme EWMA pour votre bande passante ce qui la rend moins sensible aux courtesrafales de donneacutees

Avec le Token Bucket Filter

Utilisez les paramegravetres suivants

buffermaxburstbull mtuminburstbull mpubull ratebull

Ceux-ci se comportent la plupart du temps de maniegravere identique agrave ceux deacutecrits dans la section Filtre agrave seau dejetonsgt Notez cependant que si vous configurez le mtu du filtre de reacuteglementation TBF trop bas aucunpaquet ne passera et le gestionnaire de mise en file dattente de sortie TBF ne fera que les ralentir

Une autre diffeacuterence est que la reacuteglementation ne peut que laisser passer ou jeter un paquet Il ne peut pas leretenir dans le but de le retarder

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Les filtres de reacuteglementation (Policing filters) 65

Actions de deacutepassement de limite (Overlimit actions)

Si votre filtre deacutecide quun deacutepassement de limite est atteint il peut mettre en oeuvre des ltlt actions gtgtActuellement trois actions sont disponibles

continueProvoque larrecirct de lanalyse du filtre bien que dautres filtres aient la possibiliteacute de le faire

dropCeci est une option tregraves feacuteroce qui supprime simplement le trafic exceacutedant un certain deacutebit Elle estsouvent employeacutee dans le Ingress policer et a des utilisations limiteacutees Par exemple si vous avez unserveur de noms qui seacutecroule sil traite plus de 5mbits de paquets alors vous pourrez dans ce casutiliser un filtre dentreacutee pour ecirctre sucircr quil ne traitera jamais plus de 5mbits

PassOKTransmettre le trafic Peut ecirctre utiliseacute pour mettre hors service un filtre compliqueacute tout en le laissanten place

reclassifyPermet le plus souvent une reclassification vers Best Effort Ceci est laction par deacutefaut

Exemples

Le seul vrai exemple connu est mentionneacute dans la section Proteacuteger votre machine des inondations SYNgt

FIXME Si vous avez deacutejagrave utiliseacute ceci partagez sil vous plaicirct votre expeacuterience avec nous

Filtres hacheacutes pour un filtrage massif tregraves rapide

Si vous avez besoin de milliers de regravegles par exemple dans le cas ougrave vous avez beaucoup de clients oudordinateurs tous avec des speacutecifications QoS diffeacuterentes vous pourrez constater que le noyau passebeaucoup de temps agrave analyser toutes ces regravegles

Par deacutefaut tous les filtres reacutesident dans une grande chaicircne qui est analyseacutee par ordre deacutecroissant des prioriteacutesSi vous avez 1000 regravegles 1000 controcircles peuvent ecirctre neacutecessaires pour deacuteterminer ce quil faut faire dunpaquet

La veacuterification irait plus vite sil y avait 256 chaicircnes avec chacune quatre regravegles et si vous pouviez reacutepartir lespaquets sur ces 256 chaicircnes afin que la bonne regravegle soit preacutesente

Ceci est rendu possible par le hachage Imaginons que vous ayez sur votre reacuteseau 1024 clients avec desmodems cacircble avec des adresses IP allant de 1200 agrave 123255 et que chacun doit avoir unclassement particulier par exemple ltlt pauvre gtgt ltlt moyen gtgt et ltlt bourrage gtgt Cela vous ferait alors1024 regravegles dans le genre

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123254 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123255 classid 12

Pour aller plus vite nous pouvons utiliser la derniegravere partie de ladresse IP comme ltlt cleacute de hachage gtgtNous obtenons alors 256 tables la premiegravere ressemblant agrave ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

66 Actions de deacutepassement de limite (Overlimit actions)

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1210 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1220 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1230 classid 12

La suivante commence comme ceci

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11

De cette maniegravere seules quatre recherches au plus sont neacutecessaires et deux en moyenne

La configuration est plutocirct compliqueacutee mais elle en vaut vraiment la peine du fait des nombreuses regraveglesNous creacuteons dabord un filtre racine puis une table avec 256 entreacutees

tc filter add dev eth1 parent 10 prio 5 protocol ip u32 tc filter add dev eth1 parent 10 prio 5 handle 2 u32 divisor 256

Nous ajoutons maintenant des regravegles dans la table preacuteceacutedemment creacuteeacutee

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 120123 flowid 11 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 121123 flowid 12 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 123123 flowid 13 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 124123 flowid 12

Ceci est lentreacutee 123 qui contient les correspondances pour 12013 121123 122123 et123123 qui les envoient respectivement vers 11 12 13 et 12 Notez que nous devons speacutecifiernotre seau de hachage en hexadeacutecimal 0x7b pour 123

Nous creacuteons ensuite un ltlt filtre de hachage gtgtqui dirige le trafic vers la bonne entreacutee de la table de hachage

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 800 match ip src 120016 hashkey mask 0x000000ff at 12 link 2

Ok certains nombres doivent ecirctre expliqueacutes La table de hachage par deacutefaut est appeleacutee 800 et tous lesfiltres deacutemarrent de lagrave Nous seacutelectionnons alors ladresse source qui est en position 12 13 14 et 15 danslen-tecircte IP et indiquons que seule la derniegravere partie nous inteacuteresse Ceci est envoyeacute vers la table de hachage2 qui a eacuteteacute creacuteeacutee plus tocirct

Cest plutocirct compliqueacute mais cela marche en pratique et les performances seront eacutepoustouflantes Notez quecet exemple pourrait ecirctre ameacutelioreacute pour que chaque chaicircne contienne un filtre ce qui repreacutesenterait le casideacuteal

Filtrer le trafic IPv6

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Filtres hacheacutes pour un filtrage massif tregraves rapide 67

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

La base de donneacutees des politiques de routage (RPDB) a remplaceacute le routage IPv4 et la structure dadressage agravelinteacuterieur du noyau Linux ce qui a permis les merveilleuses fonctionnaliteacutes deacutecrites dans ce HOWTOMalheureusement la pile IPv6 agrave linteacuterieur de Linux a eacuteteacute impleacutementeacutee en dehors de cette structure principaleBien quils partagent des fonctionnaliteacutes la structure RPDB de base ne participe pas dans ou avec lesstructures dadressage et de routage de IPv6

Ceci va sucircrement changer nous devons juste attendre un peu plus longtemps

FIXME Des ideacutees sur des personnes travaillant sur ce sujet Planifications

Marquer les paquets IPv6 en utilisant ip6tables

ip6tables est capable de marquer un paquet et de lui assigner un numeacutero

ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Ceci ne va cependant pas nous aider dans la mesure ougrave le paquet ne passera pas par la structure RPDB

Utiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

IPv6 est normalement encapsuleacute dans un tunnel SIT et transporteacute agrave travers les reacuteseaux IPv4 Voir la sectionsur le tunnel IPv6 pour de plus amples informations quant agrave la configuration dun tel tunnel Ceci nous permetde filtrer les paquets IPv4 en consideacuterant les paquets IPv6 comme la charge utile

Le filtre suivant repegravere tous les paquets IPv6 encapsuleacutes dans des paquets IPv4

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff flowid 4242

Continuons Supposons que les paquets IPv6 soient envoyeacutes gracircce agrave des paquets IPv4 et que ces paquets nontpas doptions On pourrait utiliser le filtre suivant pour repeacuterer ICMPv6 dans IPv6 dans IPv4 nayant aucuneoption 0x3a (58) est le type du champ en-tecircte suivant pour ICMPv6

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3a 0xff at 26 flowid 4242

Repeacuterer ladresse de destination IPv6 neacutecessite un peu plus de travail Le filtre suivant repegravere ladresse dedestination 3ffe202cffff322304ffffe08358d

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3f 0xff at 44 match u8 0xfe 0xff at 45 match u8 0x20 0xff at 46 match u8 0x2c 0xff at 47 match u8 0xff 0xff at 48 match u8 0xff 0xff at 49 match u8 0x00 0xff at 50 match u8 0x32 0xff at 51 match u8 0x02 0xff at 52

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

68 Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

match u8 0x30 0xff at 53 match u8 0x4f 0xff at 54 match u8 0xff 0xff at 55 match u8 0xfe 0xff at 56 match u8 0x08 0xff at 57 match u8 0x35 0xff at 58 match u8 0x8d 0xff at 59 flowid 1013

La mecircme technique peut ecirctre utiliseacutee pour repeacuterer les reacuteseaux Par exemple 2001

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x20 0xff at 28 match u8 0x01 0xff at 29 flowid 1013

Chapitre 13 Paramegravetres reacuteseau du noyauLe noyau utilise de nombreux paramegravetres qui peuvent ecirctre ajusteacutes en diffeacuterentes circonstances Bien quecomme dhabitude les paramegravetres par deacutefaut conviennent agrave 99amppercnt des installations nous ne pourrionspas appeler ce document ltlt HOWTO avanceacute gtgt sans en dire un mot

Les eacuteleacutements inteacuteressants sont dans procsysnet jetez-y un oeil Tout ne sera pas documenteacute ici audeacutepart mais nous y travaillons

En attendant vous pouvez jeter un oeil dans les sources du noyau Linux et lire le fichierDocumentationfilesystemsproctxt La plupart des fonctionnaliteacutes y sont expliqueacutees

Filtrage de Chemin Inverse (Reverse Path Filtering)

Par deacutefaut les routeurs routent tout mecircme les paquets qui visiblement nappartiennent pas agrave votre reacuteseau Unexemple courant est lespace des adresses IP priveacutees seacutechappant sur Internet Si vous avez une interface avecune route pour 1959696024 dessus vous ne vous attendrez pas agrave voir arriver des paquets venant de21264941

Beaucoup dutilisateurs veulent deacutesactiver cette fonctionnaliteacute Les deacuteveloppeurs du noyau ont permis de lefaire facilement Il y a des fichiers dans proc ougrave vous pouvez ordonner au noyau de le faire pour vous Lameacutethode est appeleacutee ltlt Filtrage par Chemin Inverse gtgt (Reverse Path Filtering) Pour faire simple si lareacuteponse agrave ce paquet ne sort pas par linterface par laquelle il est entreacute alors cest un paquet ltlt bogueacute gtgt et ilsera ignoreacute

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

for i in procsysnetipv4confrp_filter dogt echo 2 gt $i gt done

En reprenant lexemple du deacutebut si un paquet arrivant sur le routeur Linux par eth1 preacutetend venir du reacuteseauBureau+FAI il sera eacutelimineacute De mecircme si un paquet arrivant du reacuteseau Bureau preacutetend ecirctre de quelque part agravelexteacuterieur du pare-feu il sera eacutegalement eacutelimineacute

Ce qui est preacutesenteacute ci-dessus est le filtrage de chemin inverse complet Le parameacutetrage par deacutefaut filtreseulement sur les adresses IP des reacuteseaux directement connecteacutes Ce parameacutetrage par deacutefaut est utiliseacute parceque le filtrage complet eacutechoue dans le cas dun routage asymeacutetrique (ougrave il y a des paquets arrivant par un

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 13 Paramegravetres reacuteseau du noyau 69

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 reacuteseau Les donneacutees descendent vers la parabole satellite et les reacuteponses repartentpar des lignes terrestres normales)

Si cette exception sapplique dans votre cas (vous devriez ecirctre au courant) vous pouvez simplement deacutesactiverle rpamplowbarfilter sur linterface darriveacutee des donneacutees satellite Si vous voulez voir si des paquetssont eacutelimineacutes le fichier logamplowbarmartians du mecircme reacutepertoire indiquera au noyau de les enregistrerdans votre syslog

echo 1 gtprocsysnetipv4confltinterfacenamegtlog_martians

FIXME Est-ce que la configuration des fichiers dans confamplcubdefaultallamprcub suffit - martijn

Configurations obscures

Bon il y a beaucoup de paramegravetres qui peuvent ecirctre modifieacutes Nous essayons de tous les lister Voir aussi unedocumentation partielle dans Documentationip-sysctltxt

Certaines de ces configurations ont des valeurs par deacutefaut diffeacuterentes suivant que vous reacutepondez Yes ou No agravela question Configure as router and not host lors de la compilation du noyau

Oskar Andreasson a une page sur ces options et il apparaicirct quelle soit meilleure que la notre De ce fait allezeacutegalement voir httpipsysctl-tutorialfrozentuxnet

ipv4 geacuteneacuterique

En remarque geacuteneacuterale les fonctionnaliteacutes de limitation de deacutebit ne fonctionnent pas sur linterfaceloopback Nessayez donc pas de les tester localement Les limites sont exprimeacutees en ltlt tic-tac gtgt (jiffies)et elles utilisent obligatoirement le Token Bucket Filter mentionneacute plus tocirct

amplsqbNdT le terme jiffies deacutesigne un mouvement reacutegulier faisant reacutefeacuterence au ltlt tic-tac gtgt dune horlogeDans le noyau lui-mecircme une variable globale nommeacutee jiffies est increacutementeacutee agrave chaque interruptiondhorloge]

Le noyau a une horloge interne qui tourne agrave HZ impulsions (ou jiffies) par seconde Sur Intel HZ est la plupartdu temps eacutegale agrave 100 Donc configurer un fichier amplowbarrate agrave disons 50 autorise 2 paquets parseconde Le Token Bucket Filter est eacutegalement configureacute pour autoriser une rafale de donneacutees de 6 paquets auplus si suffisamment de jetons ont eacuteteacute gagneacutes

Plusieurs eacuteleacutements de la liste suivante proviennent du fichierusrsrclinuxDocumentationnetworkingip-sysctltxt eacutecrit par Alexey Kuznetsovltkuznetms2inracrugt et Andi Kleen ltakmucdegt

procsysnetipv4icmpamplowbardestunreachamplowbarrateSi le noyau deacutecide quil ne peut pas deacutelivrer un paquet il le rejettera et enverra agrave la source du paquetun ICMP notifiant ce rejet

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarallNagit en aucun cas comme eacutecho pour les paquets Ne configurez pas ceci par deacutefaut Cependant sivous ecirctes utiliseacute comme relais dans une attaque de Deacuteni de Services cela peut ecirctre utile

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarbroadcastsamplsqbUtileamprsqb

Si vous pinguez ladresse de diffusion dun reacuteseau tous les hocirctes sont senseacutes reacutepondre Cela permet decoquettes attaques de deacuteni de service Mettez cette valeur agrave 1 pour ignorer ces messages de diffusion

procsysnetipv4icmpamplowbarechoreplyamplowbarrate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

70 Filtrage de Chemin Inverse (Reverse Path Filtering)

Le deacutebit auquel les reacuteponses echo sont envoyeacutees aux destinatairesprocsysnetipv4icmpamplowbarignoreamplowbarbogusamplowbarerroramplowbarresponses

Configurer ceci pour ignorer les erreurs ICMP dhocirctes du reacuteseau reacuteagissant mal aux trames envoyeacuteesvers ce quils perccediloivent comme ladresse de diffusion

procsysnetipv4icmpamplowbarparamprobamplowbarrateUn message ICMP relativement peu connu qui est envoyeacute en reacuteponse agrave des paquets qui ont desen-tecirctes IP ou TCP erroneacutes Avec ce fichier vous pouvez controcircler le deacutebit auquel il est envoyeacute

procsysnetipv4icmpamplowbartimeexceedamplowbarrateVoici la ceacutelegravebre cause des ltlt eacutetoiles Solaris gtgt dans traceroute Limite le nombre de messages ICMPTime Exceeded envoyeacutes

procsysnetipv4igmpamplowbarmaxamplowbarmembershipsNombre maximal de sockets igmp (multidistribution) en eacutecoute sur lhocircte FIXME Est-ce vrai

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmaxtimeFIXME Ajouter une petite explication sur le stockage des partenaires internet (inet peer) Intervallede temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris en compte lorsdune faible (voire inexistante) utilisation du pool Mesureacute en jiffies amplsqbNdT Le pool deacutesigne icila liste des adresses IP des partenaires internet]

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmintimeIntervalle de temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris encompte lors dune utilisation intensive du pool Mesureacute en jiffies

procsysnetipv4inetamplowbarpeeramplowbarmaxttlDureacutee de conservation maximale des enregistrements Les entreacutees non utiliseacutees expireront au bout decet intervalle de temps (cest-agrave-dire quand le nombre dentreacutees dans le pool est tregraves petit) Mesureacute enjiffies

procsysnetipv4inetamplowbarpeeramplowbarminttlDureacutee de conservation minimale des enregistrements Devrait ecirctre suffisante pour prendre en comptele temps de vie des fragments sur lhocircte qui doit reacuteassembler les paquets Cette dureacutee minimale estgarantie si le nombre deacuteleacutements dans le pool est infeacuterieur au seuil fixeacute parinetamplowbarpeeramplowbarthreshold

procsysnetipv4inetamplowbarpeeramplowbarthresholdTaille approximative de lespace de stockage des partenaires internet A partir de ce seuil les entreacuteessont effaceacutees Ce seuil deacutetermine la dureacutee de vie des entreacutees ainsi que les intervalles de temps entredeux deacuteclenchements du ramasse-miettes Plus il y a dentreacutees plus le temps de vie est faible et pluslintervalle du ramasse-miettes est faible

procsysnetipv4ipamplowbarautoconfigCe fichier contient la valeur 1 si lhocircte a reccedilu sa configuration IP par RARP BOOTP DHCP ou unmeacutecanisme similaire Autrement il contient la valeur zeacutero

procsysnetipv4ipamplowbardefaultamplowbarttlDureacutee de vie (TTL) des paquets Fixer agrave la valeur sucircre de 64 Augmentez-la si vous avez un reacuteseauimmense mais pas ltlt pour samuser gtgt les boucles sans fin dun mauvais routage sont plusdangereuses si le TTL est eacuteleveacute Vous pouvez mecircme envisager de diminuer la valeur dans certainescirconstances

procsysnetipv4ipamplowbardynaddrVous aurez besoin de positionner cela si vous utilisez la connexion agrave la demande avec une adressedinterface dynamique Une fois que votre interface a eacuteteacute configureacutee toutes les sockets TCP locauxqui nont pas eu de paquets de reacuteponse seront retraiteacutees pour avoir la bonne adresse Cela reacutesout leproblegraveme poseacute par une connexion deacutefectueuse ayant configureacute une interface suivie par une deuxiegravemetentative reacuteussie (avec une adresse IP diffeacuterente)

procsysnetipv4ipamplowbarforwardLe noyau doit-il essayer de transmettre les paquets Deacutesactiveacute par deacutefaut

procsysnetipv4ipamplowbarlocalamplowbarportamplowbarrangeIntervalle des ports locaux pour les connexions sortantes En fait assez petit par deacutefaut 1024 agrave 4999

procsysnetipv4ipamplowbarnoamplowbarpmtuamplowbardiscConfigurez ceci si vous voulez deacutesactiver la deacutecouverte du MTU de chemin une technique pour

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 71

deacuteterminer le plus grand MTU possible sur votre chemin Voir aussi la section sur la deacutecouverte duMTU de chemin dans le chapitre Recettes de cuisinegt

procsysnetipv4ipfragamplowbarhighamplowbarthreshMeacutemoire maximum utiliseacutee pour reacuteassembler les fragments IP Quandipfragamplowbarhighamplowbarthresh octets de meacutemoire sont alloueacutes pour cela legestionnaire de fragments rejettera les paquets jusquagrave ce queipfragamplowbarlowamplowbarthresh soit atteint

procsysnetipv4ipamplowbarnonlocalamplowbarbindConfigurez ceci si vous voulez que vos applications soient capables de se lier agrave une adresse quinappartient pas agrave une interface de votre systegraveme Ceci peut ecirctre utile quand votre machine est sur unlien non-permanent (ou mecircme permanent) Vos services sont donc capables de deacutemarrer et de se lier agraveune adresse speacutecifique quand votre lien est inactif

procsysnetipv4ipfragamplowbarlowamplowbarthreshMeacutemoire minimale utiliseacutee pour reacuteassembler les fragments IP

procsysnetipv4ipfragamplowbartimeTemps en secondes du maintien dun fragment IP en meacutemoire

procsysnetipv4tcpamplowbarabortamplowbaronamplowbaroverflowUne option booleacuteenne controcirclant le comportement dans le cas de nombreuses connexions entrantesQuand celle-ci est activeacutee le noyau envoie rapidement des paquets RST quand un service estsurchargeacute

procsysnetipv4tcpamplowbarfinamplowbartimeoutTemps de maintien de leacutetat FIN-WAIT-2 pour un socket dans le cas ougrave il a eacuteteacute fermeacute de notre cocircteacuteLe partenaire peut ecirctre deacutefectueux et ne jamais avoir fermeacute son cocircteacute ou mecircme mourir de maniegravereinattendue La valeur par deacutefaut est de 60 secondes La valeur usuelle utiliseacutee dans le noyau 22 eacutetaitde 180 secondes Vous pouvez la remettre mais rappelez vous que si votre machine a un serveurWEB surchargeacute vous risquez de deacutepasser la meacutemoire avec des kilotonnes de sockets morts Lessockets FIN-WAIT2 sont moins dangereux que les sockets FIN-WAIT1 parce quils consomment aumaximum 15K de meacutemoire mais ils ont tendance agrave vivre plus longtemps Cftcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarkeepaliveamplowbartimeDureacutee entre lenvoi de deux messages keepalive quand loption keepalive est activeacutee Par deacutefaut 2heures

procsysnetipv4tcpamplowbarkeepaliveamplowbarintvlA quelle freacutequence les sondes sont retransmises lorsquil ny a pas eu acquittement de sonde Pardeacutefaut 75 secondes

procsysnetipv4tcpamplowbarkeepaliveamplowbarprobesCombien de sondes TCP keepalive seront envoyeacutees avant de deacutecider que la connexion est briseacutee Pardeacutefaut 9 En multipliant par tcpamplowbarkeepaliveamplowbarintvl cela donne le tempspendant lequel un lien peut ecirctre actif sans donner de reacuteponses apregraves lenvoi dun keepalive

procsysnetipv4tcpamplowbarmaxamplowbarorphansNombre maximum de sockets TCP qui ne sont pas relieacutes agrave un descripteur de fichier utilisateur geacutereacutepar le systegraveme Si ce nombre est deacutepasseacute les connexions orphelines sont immeacutediatement reacuteinitialiseacuteeset un avertissement est envoyeacute Cette limite existe seulement pour preacutevenir des attaques de deacuteni deservices simples Vous ne devez pas compter sur ceci ou diminuer cette limite artificiellement maisplutocirct laugmenter (probablement apregraves avoir augmenteacute la meacutemoire) si les conditions du reacuteseaureacuteclament plus que cette valeur par deacutefaut et reacutegler vos services reacuteseau pour quils deacutetruisent sanstarder ce type deacutetat Laissez-moi vous rappeler encore que chaque orphelin consomme jusquagraveenviron 64K de meacutemoire non swappable

procsysnetipv4tcpamplowbarorphanamplowbarretriesCombien dessais avant de deacutetruire une connexion TCP fermeacutee par notre cocircteacute La valeur par deacutefaut de7 correspond agrave un temps denviron 50s agrave 16 min suivant le RTO Si votre machine supporte un serveurWeb vous pouvez envisager de baisser cette valeur dans la mesure ougrave de tels sockets peuventconsommer des ressources significatives Cf tcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarmaxamplowbarsynamplowbarbacklog

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

72 ipv4 geacuteneacuterique

Nombre maximum de requecirctes dune connexion meacutemoriseacutee qui navait pas encore reccedilu daccuseacute dereacuteception du client connecteacute La valeur par deacutefaut est de 1024 pour des systegravemes avec plus de 128 Mode meacutemoire et 128 pour des machines avec moins de meacutemoire Si un serveur souffre de surchargeessayez daugmenter ce nombre Attention Si vous positionnez une valeur supeacuterieure agrave 1024 il seraitpreacutefeacuterable de changer TCPamplowbarSYNQamplowbarHSIZE dans le fichierincludenettcph pour garder TCPamplowbarSYNQamplowbarHSIZE16 lt=tcpamplowbarmaxamplowbarsynamplowbarbacklog et de recompiler de noyau

procsysnetipv4tcpamplowbarmaxamplowbartwamplowbarbucketsNombre maximum de sockets timewait geacutereacutees par le systegraveme simultaneacutement Si ce nombre estdeacutepasseacute le socket timewait est immeacutediatement deacutetruit et un message davertissement est envoyeacuteCette limite nexiste que pour preacutevenir des attaques de deacuteni de services simples Vous ne devez pasdiminuer cette limite artificiellement mais plutocirct laugmenter (probablement apregraves avoir augmenteacute lameacutemoire) si les conditions du reacuteseau reacuteclament plus que cette valeur par deacutefaut

procsysnetipv4tcpamplowbarretransamplowbarcollapseCompatibiliteacute bug agrave bug avec certaines imprimantes deacutefectueuses Tentative denvoi de plus grospaquets lors de la retransmission pour contourner le bug de certaines piles TCP

procsysnetipv4tcpamplowbarretries1Combien dessais avant de deacutecider que quelque chose est erroneacute et quil est neacutecessaire dinformer decette suspicion la couche reacuteseau La valeur minimale du RFC est de 3 Cest la valeur par deacutefaut ellecorrespond agrave un temps denviron 3 sec agrave 8 min suivant le RTO

procsysnetipv4tcpamplowbarretries2Combien dessais avant de deacutetruire une connexion TCP active Le RFC 1122 preacutecise que la limite nedevrait pas deacutepasser 100 secondes Cest un nombre trop petit La valeur par deacutefaut de 15 correspond agraveun temps de environ 13 agrave 30 minutes suivant le RTO

procsysnetipv4tcpamplowbarrfc1337Ce booleacuteen active un rectificatif pour ltlt lassassinat hasardeux des time-wait dans tcp gtgt deacutecrit dansle RFC 1337 Sil est activeacute le noyau rejette les paquets RST pour les sockets agrave leacutetat de time-waitPar deacutefaut 0

procsysnetipv4tcpamplowbarsackUtilise un ACK seacutelectif qui peut ecirctre utiliseacute pour signifier que des paquets speacutecifiques sont manquantFacilite ainsi une reacutecupeacuteration rapide

procsysnetipv4tcpamplowbarstdurgUtilise linterpreacutetation du RFC Host Requirements du champ TCP pointeur urgent La plupart deshocirctes utilisent la vieille interpreacutetation BSD Donc si vous activez cette option il se peut que Linux necommunique plus correctement avec eux Par deacutefaut FALSE (FAUX)

procsysnetipv4tcpamplowbarsynamplowbarretriesNombre de paquets SYN que le noyau enverra avant de tenter leacutetablissement dune nouvelleconnexion

procsysnetipv4tcpamplowbarsynackamplowbarretriesPour ouvrir lautre cocircteacute de la connexion le noyau envoie un SYN avec un ACK superposeacute(piggyback) pour accuser reacuteception du SYN preacuteceacutedemment envoyeacute Cest la deuxiegraveme partie de lapoigneacutee de main agrave trois voies (threeway handshake) Cette configuration deacutetermine le nombre depaquets SYN+ACK agrave envoyer avant que le noyau nabandonne la connexion

procsysnetipv4tcpamplowbartimestampsLes estampillages horaires sont utiliseacutes entre autres pour se proteacuteger du rebouclage des numeacuteros deseacutequence On peut concevoir quun lien agrave 1 gigabit puisse de nouveau rencontrer un numeacutero deseacutequence preacuteceacutedent avec une valeur hors-ligne parcequil eacutetait dune geacuteneacuteration preacuteceacutedenteLestampillage horaire permet de reconnaicirctre cet ltlt ancien paquet gtgt

procsysnetipv4tcpamplowbartwamplowbarrecycleMise en place du recyclage rapide des sockets TIME-WAIT La valeur par deacutefaut est 1 Celle-ci nedevrait pas ecirctre changeacutee sans le conseildemande dexperts techniques

procsysnetipv4tcpamplowbarwindowamplowbarscalingTCPIP autorise normalement des fenecirctres jusquagrave une taille de 65535 octets Pour des reacuteseauxvraiment rapides cela peut ne pas ecirctre assez Les options windows scaling autorisent des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 73

fenecirctres jusquau gigaoctet ce qui est adapteacute pour les produits agrave grande bande passante

Configuration des peacuteripheacuteriques

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4confDEVacceptamplowbarredirectsSi un routeur deacutecide que vous lutilisez agrave tort (cest-agrave-dire quil a besoin de reacute-envoyer votre paquet surla mecircme interface) il vous enverra un message ICMP Redirect Cela preacutesente cependant un petitrisque pour la seacutecuriteacute et vous pouvez le deacutesactiver ou utiliser les redirections seacutecuriseacutees

procsysnetipv4confDEVacceptamplowbarsourceamplowbarroutePlus vraiment utiliseacute On lutilisait pour ecirctre capable de donner agrave un paquet une liste dadresses IP agravevisiter Linux peut ecirctre configureacute pour satisfaire cette option IP

procsysnetipv4confDEVbootpamplowbarrelayAccepte les paquets avec une adresse source 0bcd et des adresses destinations qui ne correspondentni agrave cet hocircte ni au reacuteseau local On suppose quun deacutemon de relais BOOTP interceptera et transmettrade tels paquets

La valeur par deacutefaut est 0 puisque cette fonctionnaliteacute nest pas encore impleacutementeacutee (noyau 2212)procsysnetipv4confDEVforwarding

Active ou deacutesactive la transmission IP sur cette interfaceprocsysnetipv4confDEVlogamplowbarmartians

Voir la section sur le Filtrage de Chemin Inversegtprocsysnetipv4confDEVmcamplowbarforwarding

Si vous faites de la transmission multidistribution (multicast) sur cette interfaceprocsysnetipv4confDEVproxyamplowbararp

Si vous configurez ceci agrave 1 cet interface reacutepondra aux requecirctes ARP pour les adresses que le noyaudoit router Peut ecirctre tregraves utile si vous mettez en place des ltlt pseudo ponts ip gtgt Prenez bien gardedavoir des masques de sous-reacuteseau corrects avant dactiver cette option Faites eacutegalement attentionque le rp_filter agisse aussi sur le requecirctes ARP

procsysnetipv4confDEVrpamplowbarfilterVoir la section sur le Filtrage de Chemin Inversegt

procsysnetipv4confDEVsecureamplowbarredirectsAccepte les messages de redirection ICMP seulement pour les passerelles indiqueacutees dans la liste despasserelles par deacutefaut Activeacute par deacutefaut

procsysnetipv4confDEVsendamplowbarredirectsActive la possibiliteacute denvoyer les messages de redirections mentionneacutees ci-dessus

procsysnetipv4confDEVsharedamplowbarmediaSi cela nest pas activeacute le noyau ne considegravere pas que diffeacuterents sous-reacuteseaux peuvent communiquerdirectement sur cette interface La configuration par deacutefaut est Yes

procsysnetipv4confDEVtagFIXME agrave remplir

Politique de voisinage

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4neighDEVanycastamplowbardelayValeur maximum du deacutelai aleacuteatoire de reacuteponse exprimeacute en jiffies (1100 sec) aux messages desollicitation des voisins Nest pas encore impleacutementeacute (Linux ne possegravede pas encore le supportanycast)

procsysnetipv4neighDEVappamplowbarsolicit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

74 Configuration des peacuteripheacuteriques

Deacutetermine le nombre de requecirctes agrave envoyer au deacutemon ARP de lespace utilisateur Utilisez 0 pourdeacutesactiver

procsysnetipv4neighDEVbaseamplowbarreachableamplowbartimeUne valeur de base utiliseacutee pour le calcul du temps aleacuteatoire daccegraves comme speacutecifieacute dans leRFC2461

procsysnetipv4neighDEVdelayamplowbarfirstamplowbarprobeamplowbartimeDeacutelai avant de tester pour la premiegravere fois si le voisin peut ecirctre atteint (voirgcamplowbarstaleamplowbartime)

procsysnetipv4neighDEVgcamplowbarstaleamplowbartimeDeacutetermine la freacutequence agrave laquelle on doit veacuterifier les vieilles entreacutees ARP Si une entreacutee est obsolegraveteelle devra de nouveau ecirctre reacutesolue (ce qui est utile quand une adresse IP a eacuteteacute attribueacutee agrave une autremachine) Si ucastamplowbarsolicit est supeacuterieur agrave 0 alors on essaie dabord denvoyer unpaquet ARP directement agrave lhocircte connu Si cela eacutechoue et que mcastamplowbarsolicit estsupeacuterieur agrave 0 alors une requecircte ARP est multidiffuseacutee

procsysnetipv4neighDEVlocktimeUne entreacutee ARP nest remplaceacutee par une nouvelle que si lancienne est au moins preacutesente depuislocktime Cela eacutevite trop deacutecriture dans le cache

procsysnetipv4neighDEVmcastamplowbarsolicitNombre maximum dessais conseacutecutifs pour une sollicitation multicast

procsysnetipv4neighDEVproxyamplowbardelayTemps maximum (le temps reacuteel est aleacuteatoire et compris entre 0 et proxytime) avant de reacutepondre agraveune requecircte ARP pour laquelle nous avons une entreacutee de proxy ARP Peut ecirctre utiliseacute dans certainscas pour se preacutemunir des inondations reacuteseaux

procsysnetipv4neighDEVproxyamplowbarqlenLongueur maximale de la file dattente du temporisateur de cache arp en attente (Voirproxyamplowbardelay)

procsysnetipv4neighDEVretransamplowbartimeLe temps exprimeacute en jiffies (1100 sec) entre deux requecirctes ARP Utiliseacute pour la reacutesolutiondadresses et pour deacuteterminer si un voisin est inaccessible

procsysnetipv4neighDEVucastamplowbarsolicitNombre maximum de requecirctes ARP unicast

procsysnetipv4neighDEVunresamplowbarqlenLongueur maximum de la file dattente pour la requecircte ARP en cours le nombre de paquets qui sontaccepteacutes des autres couches pendant la reacutesolution ARP dune adresse

Internet QoS Architectures and Mechanisms for Quality of Service Zheng Wang ISBN 1-55860-608-4Livre traitant des sujets lieacutes agrave la qualiteacute de service Bien pour comprendre les concepts de base

Configuration du routage

procsysnetipv4routeerroramplowbarburstCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarburst est grand moins il yaura de messages Erroramplowbarburst controcircle le moment ougrave les messages seront supprimeacutesLes configurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeerroramplowbarcostCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarcost est grand moins il yaura de messages erroramplowbarburst controcircle le moment ougrave les messages seront jeteacutes Lesconfigurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeflushLeacutecriture dans ce fichier provoque la vidange du cache du routage

procsysnetipv4routegcamplowbarelasticityValeurs qui controcirclent la freacutequence et le comportement de lalgorithme garbage collection du cachede routage Ceci peut ecirctre important en cas de deacutefaut Au moins gcamplowbartimeout secondes

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de voisinage 75

seacutecouleront avant que le noyau ne passe agrave une autre route si la preacuteceacutedente nest plus opeacuterationnelleConfigureacute par deacutefaut agrave 300 Diminuez cette valeur si vous voulez passer plus rapidement ce type deproblegraveme

Voir aussi ce message par Ard van Breemenprocsysnetipv4routegcamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarminamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarthresh

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbartimeout

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routemaxamplowbardelay

Deacutelai dattente pour la vidange du cache du routageprocsysnetipv4routemaxamplowbarsize

Taille maximum du cache de routage Les vieilles entreacutees seront purgeacutees quand le cache aura atteintcette taille

procsysnetipv4routeminamplowbaradvamplowbarmssFIXME agrave remplir

procsysnetipv4routeminamplowbardelayDeacutelai dattente pour vider le cache de routage

procsysnetipv4routeminamplowbarpmtuFIXME agrave remplir

procsysnetipv4routemtuamplowbarexpiresFIXME agrave remplir

procsysnetipv4routeredirectamplowbarloadFacteurs qui deacuteterminent si plus de redirections ICMP doivent ecirctre envoyeacutees agrave un hocircte speacutecifiqueAucune redirection ne sera envoyeacutee une fois que la limite de charge (load limit) ou que le nombremaximum de redirections aura eacuteteacute atteint

procsysnetipv4routeredirectamplowbarnumberVoir procsysnetipv4routeredirectamplowbarload

procsysnetipv4routeredirectamplowbarsilenceTemporisation pour les redirections Au dela de cette peacuteriode les redirections seront de nouveauenvoyeacutees mecircme si elles ont eacuteteacute stoppeacutees parce que la charge ou le nombre limite a eacuteteacute atteint

Chapitre 14 Gestionnaires de mise en file dattenteavanceacutes amp moins communsSi vous constatez que vous avez des besoins qui ne sont pas geacutereacutes par les files dattente citeacutees preacuteceacutedemmentle noyau contient quelques autres files dattente plus speacutecialiseacutees mentionneacutees ici

bfifopfifo

Ces files dattente sans classes sont plus simples que pfifoamplowbarfast dans la mesure ougrave elles nontpas de bandes internes tout le trafic eacutetant vraiment eacutequivalent Elles ont cependant lavantage important dereacutealiser des statistiques Donc mecircme si vous navez pas besoin de mise en forme ou de donner une prioriteacutevous pouvez employer ce gestionnaire pour deacuteterminer larrieacutereacute (backlog) de votre interface

pfifo mesure en paquets et bfifo en octets

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

76 Chapitre 14 Gestionnaires de mise en file dattente avanceacutes amp moins communs

Paramegravetres amp usage

limitSpeacutecifie la taille de la file dattente Mesureacutee en octets pour bfifo et en paquets pour pfifo Pardeacutefaut correspond agrave des paquets de taille eacutegale au paramegravetre txqueuelen de linterface (voir lechapitre pfifo_fastgt) ou txqueuelenmtu octets pour bfifo

Algorithme Clark-Shenker-Zhang (CSZ)

Ceci est si theacuteorique que mecircme Alexey (lauteur principal de CBQ) preacutetend ne pas le comprendre De sonpropre avis

David D Clark Scott Shenker and Lixia Zhang Supporting Real-Time Applications in anIntegrated Services Packet Network Architecture and Mechanism

Comme je le comprends lideacutee principale est de creacuteer des flux WFQ pour chaque servicegaranti et dallouer le reste de la bande passante au flux factice appeleacute flow-0 Le Flux-0inclut le trafic de service preacutedictif et le trafic best-effort Il est traiteacute par un ordonnanceur deprioriteacute qui alloue la bande passante de plus grande prioriteacute aux services preacutedictifs et le resteaux paquets best-effort

Notez que dans CSZ les flux ne sont PAS limiteacutes agrave leur bande passante On suppose que leflux a passeacute le controcircle dadmission agrave la frontiegravere du reacuteseau QoS et quil na pas besoin demises en forme suppleacutementaires Nimporte quelles autres tentatives pour ameacuteliorer le flux oupour le mettre en forme gracircce agrave un seau de jetons lors deacutetapes intermeacutediaires introduiront desretards non deacutesireacutes et augmenteront la gigue

A lheure actuelle CSZ est le seul ordonnanceur qui fournit un veacuteritable service garanti Lesautres impleacutementations (incluant CBQ) nassurent pas un deacutelai garanti et rendent la giguealeacuteatoire

Ne semble pas actuellement un bon candidat agrave utiliser agrave moins que vous nayez lu et comprislarticle mentionneacute

DSMARK

Esteve Camps

ltmarvingrnesgtltestevehadesudgesgt

Ce texte est un extrait de ma thegravese sur le support QoS dans Linux Septembre 2000

Documents sources

Draft-almesberger-wajhak-diffserv-linux-01txtbull Exemples de la distribution iproute2bull White Paper-QoS protocols and architectures et Foires Aux Questions IP QoS les deux par Qualityof Service Forum

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 77

Introduction

Avant tout il serait preacutefeacuterable de lire les RFC eacutecrits sur ce sujet (RFC2474 RFC2475 RFC2597 et RFC2598)sur le site web du groupe de travail DiffServ IETF et sur le site web de Werner Almesberger (Il a eacutecrit lecode permettant le support des Services Diffeacuterencieacutes sous Linux)

A quoi DSMARK est-il relieacute

DSMARK est un gestionnaire de mise en file dattente qui offre les fonctionnaliteacutes dont ont besoin les servicesdiffeacuterencieacutes (Differentiated Services) (eacutegalement appeleacutes DiffServ ou tout simplement DS) DiffServ est lunedes deux architectures actuelles de la Qualiteacute de Services (QoS Quality of Services) (lautre est appeleacuteeservices inteacutegreacutes (Integrated Services) Elle se base sur la valeur du champ DS contenu dans len-tecircte IP dupaquet

Une des premiegraveres solutions dans IP pour offrir des niveaux de qualiteacute de services eacutetait le champ Type deService (octet TOS) de len-tecircte IP En modifiant la valeur de ce champ nous pouvions choisir un niveaueacuteleveacutefaible du deacutebit du deacutelai ou de la fiabiliteacute Cependant cela ne fournissait pas une flexibiliteacute suffisantepour les besoins de nouveaux services (comme les applications temps reacuteel les applications interactives etautres) Par la suite de nouvelles architectures sont apparues Lune delle a eacuteteacute DiffServ qui a gardeacute les bitsTOS et les a renommeacutes champ DS

Guide des services diffeacuterencieacutes

Les services diffeacuterencieacutes sont orienteacutes groupes Cela signifie que nous ne savons rien des flux (ce sera le butdes services inteacutegreacutes (integrated Services)) Nous connaissons par contre les agreacutegations de flux et nousadopterons des comportements diffeacuterents suivant lagreacutegation agrave laquelle appartient le paquet

Quand un paquet arrive agrave un noeud frontalier (noeud dentreacutee du domaine DiffServ) et entre dans un domaineDiffServ nous devrons avoir une politique une mise en forme etou un marquage de ces paquets (le marquagefait reacutefeacuterence agrave la mise en place dune valeur dans le champ DS Comme on le ferait pour des vaches -)) Cesera cette marquevaleur que les noeuds internes de votre domaine DiffServ regarderons pour deacuteterminer quelcomportement ou niveau de qualiteacute de service appliquer

Comme vous pouvez le deacuteduire les Services Diffeacuterencieacutes impliquent un domaine sur lequel toutes les regraveglesDS devront ecirctre appliqueacutees Vous pouvez raisonner de la faccedilon suivante ltlt Je classifierai tous les paquetsentrant dans mon domaine Une fois quils seront entreacutes dans mon domaine ils seront soumis aux regravegles quema classification impose et chaque noeud traverseacute appliquera son niveau de qualiteacute de service gtgt

En fait vous pouvez appliquer vos propres politiques dans vos domaines locaux mais des autorisations auniveau service devront ecirctre consideacutereacutees lors de la connexion agrave dautres domaines DS

En ce moment vous vous posez peut-ecirctre beaucoup de questions DiffServ est plus vaste que ce que jaiexpliqueacute En fait vous pouvez comprendre que je ne peux pas reacutesumer plus de trois RFC en 50 lignes -)

Travailler avec DSMARK

Comme le speacutecifie la bibliographie concernant DiffServ nous diffeacuterencions les noeuds frontaliers et lesnoeuds inteacuterieurs Ce sont deux eacuteleacutements importants dans le chemin quemprunte le trafic Les deux reacutealisentune classification quand un paquet arrive Le reacutesultat peut ecirctre utiliseacute agrave diffeacuterents endroits lors du processusDS avant que le paquet ne soit libeacutereacute vers le reacuteseau Cela est possible car le nouveau code DiffServ fournit unestructure appeleacutee skamplowbarbuff incluant un nouveau champ appeleacute skb-gttcindex Ce champmeacutemorisera le reacutesultat de la classification initiale et pourra ecirctre utiliseacute agrave plusieurs reprises dans le traitementDS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

78 Introduction

La valeur skb-gttcamplowbarindex sera initialement configureacutee par le gestionnaire de mise en filedattente DSMARK Cette valeur sera extraite du champ DS de len-tecircte IP de tous les paquets reccedilus En outrele classificateur clsamplowbartcindex lira tout ou une partie de la valeur skb-gttcindex et lutiliserapour seacutelectionner les classes

Mais avant tout regardons la commande qdisc DSMARK et ses paramegravetres

dsmark indices INDICES [ default_index DEFAULT_INDEX ] [ set_tc_index ]

Que signifient ces paramegravetres

indices taille de la table des couples (masquevaleur) La valeur maximum est 2ˆn ougrave ngt=0bull defaultamplowbarindex index dentreacutee par deacutefaut de la table si aucune correspondance nesttrouveacutee

bull

setamplowbartcamplowbarindex indique au gestionnaire DSMARK de reacutecupeacuterer le champs DSet de lenregistrer dans skb-gttcamplowbarindex

bull

Regardons DSMARK proceacuteder

Comment SCHamplowbarDSMARK travaille

Ce gestionnaire de mise en file dattente reacutealisera les eacutetapes suivantes

Si vous avez deacuteclareacute loption setamplowbartcamplowbarindex dans la commande qdisc lechamp DS est reacutecupeacutereacute et meacutemoriseacute dans la variable skb-gttcamplowbarindex

bull

Le classificateur est invoqueacute Celui-ci sera exeacutecuteacute et retournera un identificateur de classe (class ID)qui sera enregistreacute dans la variable skb-gttcamplowbarindex Si aucun filtre correspondant nesttrouveacute nous consideacuterons loption defaultamplowbarindex comme eacutetant lidentificateur de classeagrave enregistrer Si ni setamplowbartcamplowbarindex ni defaultamplowbarindex nont eacuteteacutedeacuteclareacutes alors les reacutesultats peuvent ecirctre non preacutedictifs

bull

Apregraves avoir eacuteteacute envoyeacute dans le gestionnaire de file dattente interne ougrave le reacutesultat du filtre peut ecirctrereacuteutiliseacute lidentificateur de classe retourneacute par le gestionnaire est stockeacute dans la variableskb-gttcamplowbarindex Cette valeur sera utiliseacutee plus tard pour indexer la table masque-valeurLe reacutesultat de lopeacuteration suivante sera assigneacute au paquet

Nouveau_champ_DS = ( Ancien_champ_DS amp masque ) | valeur

bull

La nouvelle valeur reacutesultera donc dun ET logique entre les valeurs du champamplowbarDS et dumasque suivi dun OU logique avec le paramegravetre valeur Regardez la figure suivante pourcomprendre tout ce processus

bull

skb-gtihp-gttos- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gt | | ^ | -- Si vous deacuteclarez set_tc_index nous configurons | | lt-----Peut changer | la valeur DS dans la variable skb-gttc_index | |O le champ DS | A| |R +-|-+ +------+ +---+-+ File dattente-+ +---N|-----|----+ | | | |filtre|---gt| | |--gt --gt| | | D| | | | | |-----gt| tc |---gt| | | interne | |----gt| v | | | | | |index |---gt| | | +---------------+ | ----gt(masquevaleur)|--gt| O | +------+ +-|-+--------------^----+ | ( ) | | | | ^ | | | | ( ) | | | +----------|---------|----------------|-------|--+ ( ) | | | sch_dsmark | | | | | +-|------------|---------|----------------|-------|------------------+ | | | lt- tc_index -gt | | | |(lecture)| peut changer | | lt--------------Index de la table

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Travailler avec DSMARK 79

| | | | | des couples v | v v | (masquevaleur)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -gt skb-gttc_index

Comment faire le marquage Il suffit de modifier le masque et la valeur associeacutes agrave la classe que vous voulezmarquer Regardez la ligne de code suivante

tc class change dev eth0 classid 11 dsmark mask 0x3 value 0xb8

Cela modifie le couple (masquevaleur) dans la table de hachage et re-marque les paquets appartenant agrave laclasse 11 Vous devez changer ces valeurs en raison des valeurs par deacutefaut que le couple (masque valeur)obtient initialement (voir le tableau ci-dessous)

Nous allons maintenant expliquer comment le filtre TCamplowbarINDEX travaille et comment il sintegravegredans tout cela En outre le filtre TCamplowbarINDEX peut ecirctre utiliseacute dans des configurations autres que cellesincluant les services DS

Le filtre TCamplowbarINDEX

Voici la commande de base pour deacuteclarer un filtre TCamplowbarINDEX

tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ] [ pass_on | fall_through ] [ classid CLASSID ] [ police POLICE_SPEC ]

Ensuite nous montrons lexemple utiliseacute pour expliquer le mode opeacuteratoire de TCamplowbarINDEX Soyezattentif aux mots en gras tc qdisc add dev eth0 handle 10 root dsmark indices 64setamplowbartcamplowbarindex tc filter add dev eth0 parent 10 protocol ip prio 1 tcindex mask 0xfc shift 2 tcqdisc add dev eth0 parent 10 handle 20 cbq bandwidth 10Mbit cell 8 avpkt 1000 mpu 64 ampnum Classe dutrafic EF tc class add dev eth0 parent 20 classid 21 cbq bandwidth 10Mbit rate 1500Kbit avpkt 1000 prio 1bounded isolated allot 1514 weight 1 maxburst 10 ampnum Gestionnaire de file dattente fifo pour le trafic EFtc qdisc add dev eth0 parent 21 pfifo limit 5 tc filter add dev eth0 parent 20 protocol ip prio 1 handle 0x2etcindex classid 21 passamplowbaron (Ce code nest pas complet Ce nest quun extrait de lexemple EFCBQinclus dans la distribution iproute2)

Avant tout supposons que nous recevons un paquet marqueacute comme EF Si vous lisez le RFC2598 vousverrez que DSCP recommande une valeur de 101110 pour le trafic EF Cela signifie que le champ DS seraeacutegal agrave 10111000 (rappelez- vous que les bits les moins significatifs de loctet TOS ne sont pas utiliseacutes dansDS) ou 0xb8 en notation hexadeacutecimale

FILTRE TC INDEX +---+ +-------+ +---+-+ +------+ +-+ +-------+ | | | | | | | |FILTRE| +-+ +-+ | | | | | |-----gt| MASK | -gt | | | -gt |HANDLE|-gt| | | | -gt | | -gt | | | | | =0xfc | | | | |0x2E | | +----+ | | | | | | | | | | | | +------+ +--------+ | | | | | | | | | | | | | | |--gt| | | SHIFT | | | | | | | |--gt | | | =2 | | | +----------------------------+ | | | | | | | | | CBQ 20 | | | | | +-------+ +---+--------------------------------+ | | | | | | | +-------------------------------------------------------------+ | | DSMARK 10 |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

80 Comment SCHamplowbarDSMARK travaille

+-------------------------------------------------------------------------+

Le paquet arrive alors avec la valeur du champ DS configureacutee agrave 0xb8 Comme je lai expliqueacute auparavant legestionnaire de mise en file dattente dsmark identifieacute par 10 dans cet exemple reacutecupegravere le champ DS etlenregistre dans la variable skb-gttcamplowbarindex Leacutetape suivante consistera agrave associer un filtre agrave cegestionnaire de mise en file dattente (la seconde ligne dans cet exemple) Les opeacuterations suivantes serontreacutealiseacutees

Valeur1 = skb-gttc_index amp MASKCleacute = Valeur1 gtgt SHIFT

Dans cet exemple MASK=0xFC et SHIFT=2

Valeur1 = 10111000 amp 11111100 = 10111000Cleacute = 10111000 gtgt 2 = 00101110 -gt 0x2E en hexadeacutecimal

La valeur retourneacutee correspondra agrave un identificateur de filtre du gestionnaire de file dattente interne (danslexemple identifier par 20) Si un filtre avec cet identificateur (id) existe les conditions de controcircle et deperformance seront veacuterifieacutees (au cas ougrave le filtre inclurait ceci) et lidentificateur de classe sera retourneacute (dansnotre exemple classid 21) et stockeacute dans la variable skb-gttcamplowbarindex

Si aucun filtre avec cet identificateur nest trouveacute le reacutesultat deacutependra de la deacuteclaration de loptionfallamplowbarthrough Si tel est le cas la valeur Cleacute est retourneacutee comme identificateur de classe Si cela nestpas le cas une erreur est retourneacutee et le traitement continue avec les filtres restant Faites attention si vousutilisez loption fallamplowbarthrough ceci ne peut ecirctre fait que si une relation existe entre les valeurs de lavariable skb-gttcamplowbarindex et les identificateurs de classe

Les derniers paramegravetres agrave commenter sont hash et passamplowbaron Le premier est relieacute agrave la taille de la tablede hachage Passamplowbaron sera utiliseacute pour indiquer dessayer le filtre suivant dans le cas ougrave aucunidentificateur de classe eacutegal au reacutesultat du filtre ne serait trouveacute Laction par deacutefaut est fallamplowbarthrough(regarder la table suivante)

Finalement regardons quelles sont les valeurs possibles pour la configuration de tous ces paramegravetresTCINDEX

Nom TC Valeur Deacutefaut-----------------------------------------------------------------Hash 10x10000 Deacutependant de limpleacutementationMask 00xffff 0xffffShift 015 0Fall through Pass_on Flag Fall_throughClassid Majorminor RienPolice Rien

Ce type de filtre est tregraves puissant Il est neacutecessaire dexplorer toutes les possibiliteacutes En outre ce filtre nest passeulement utiliseacute dans les configurations DiffServ Vous pouvez lutiliser comme nimporte quel autre filtre

Je vous recommande de regarder les exemples DiffServ inclus dans la distribution iproute2 Je vous prometsque jessaierai de compleacuteter ce texte degraves que possible Tout ce que jai expliqueacute est le reacutesultat de nombreux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le filtre TCamplowbarINDEX 81

tests Merci de me dire si je me suis trompeacute quelque part

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

Tous les gestionnaires de mise en file dattente dont nous avons discuteacute jusquici sont des gestionnaires desortie Chaque interface peut eacutegalement avoir un gestionnaire de mise en file dattente dentreacutee qui nest pasutiliseacute pour envoyer les paquets agrave lexteacuterieur du peacuteripheacuterique reacuteseau Au lieu de cela il vous autorise agraveappliquer des filtres tc aux paquets entrants par linterface indeacutependamment de sils ont une destination localeou sils sont destineacutes agrave ecirctre transmis

Etant donneacute que les filtres tc contiennent une impleacutementation complegravete du Filtre agrave Seau de Jetons et quilssont eacutegalement capables de sappuyer sur lestimation du flux fourni par le noyau il y a beaucoup defonctionnaliteacutes disponibles Ceci vous permet de reacuteglementer le trafic entrant de faccedilon efficace avant mecircmequil nentre dans la pile IP

Paramegravetres amp usage

Le gestionnaire de mise en file dattente dentreacutee ne neacutecessite pas de paramegravetres Il diffegravere des autresgestionnaires dans le fait quil noccupe pas la racine du peacuteripheacuterique Attachez-le comme ceci

tc qdisc add dev eth0 ingress

Ceci vous autorise agrave avoir dautres gestionnaires de sortie sur votre peacuteripheacuterique en plus du gestionnairedentreacutee

Pour un exemple inventeacute sur la faccedilon dont le gestionnaire dentreacutee peut ecirctre utiliseacute voir le chapitre Recettes decuisine

Random Early Detection (RED)

Ce chapitre est conccedilu comme une introduction au routage de dorsales (backbones) Ces liaisons impliquentsouvent des bandes passantes supeacuterieures agrave 100 meacutegabitss ce qui neacutecessite une approche diffeacuterente de cellede votre modem ADSL agrave la maison

Le comportement normal des files dattente de routeurs est appeleacute tail-drop (NdT eacutelimine le reste) Letail-drop consiste agrave mettre en file dattente un certain volume de trafic et agrave eacuteliminer tout ce qui deacuteborde Cenest pas du tout eacutequitable et cela conduit agrave des retransmissions de synchronisation Quand une retransmissionde synchronisation a lieu la brusque rafale de rejet dun routeur qui a atteint sa limite entraicircnera une rafale deretransmissions retardeacutee qui inondera agrave nouveau le routeur congestionneacute

Dans le but den finir avec les congestions occasionnelles des liens les routeurs de dorsales integravegrent souventdes files dattente de grande taille Malheureusement bien que ces files dattente offrent un bon deacutebit ellespeuvent augmenter sensiblement les temps de latence et entraicircner un comportement tregraves saccadeacute desconnexions TCP pendant la congestion

Ces problegravemes avec le tail-drop deviennent de plus en plus preacuteoccupants avec laugmentation de lutilisationdapplications hostiles au reacuteseau Le noyau Linux nous offre la technique RED abreacuteviation de Random EarlyDetect ou deacutetection preacutecoce directe

RED nest pas la solution miracle agrave tous ces problegravemes Les applications qui nintegravegrent pas correctement latechnique de lexponential backoff obtiennent toujours une part trop grande de bande passante Cependantavec la technique RED elles ne provoquent pas trop de deacutegacircts sur le deacutebit et les temps de latence des autresconnexions

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

82 Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

RED eacutelimine statistiquement des paquets du flux avant quil natteigne sa limite dure (hard) Sur une dorsalecongestionneacutee cela entraicircne un ralentissement en douceur de la liaison et eacutevite les retransmissions desynchronisation La technique RED aide aussi TCP agrave trouver une vitesse eacutequitable plus rapidement enpermettant deacuteliminer des paquets plus tocirct il conserve une file dattente plus courte et des temps de latencemieux controcircleacutes La probabiliteacute quun paquet soit eacutelimineacute dune connexion particuliegravere est proportionnelle agrave labande passante utiliseacutee par cette connexion plutocirct quau nombre de paquets quelle envoie

La technique RED est une bonne gestion de file dattente pour les dorsales ougrave vous ne pouvez pas vouspermettre le coucirct dune meacutemorisation deacutetat par session qui est neacutecessaire pour une mise en file dattentevraiment eacutequitable

Pour utiliser RED vous devez reacutegler trois paramegravetres Min Max et burst Min est la taille minimum de la filedattente en octets avant que les rejets naient lieu Max est le maximum doux (soft) en dessous duquellalgorithme sefforcera de rester et burst est le nombre maximum de paquets envoyeacutes en rafale

Vous devriez configurer Min en calculant le plus grand temps de latence acceptable pour la mise en filedattente multiplieacute par votre bande passante Par exemple sur mon lien ISDN agrave 64 Kbitss je voudrais avoirun temps de latence de base de mise en file dattente de 200 ms Je configure donc Min agrave 1600 octets (= 02 x64000 8) Imposer une valeur Min trop petite va deacutegrader le deacutebit et une valeur Min trop grande va deacutegraderle temps de latence Sur une liaison lente choisir un coefficient Min petit ne peut pas remplacer une reacuteductiondu MTU pour ameacuteliorer les temps de reacuteponse

Vous devriez configurer Max agrave au moins deux fois Min pour eacuteviter les synchronisations Sur des liens lentsavec de petites valeurs de Min il peut ecirctre prudent davoir Max quatre fois plus grand que Min ou plus

Burst controcircle la reacuteponse de lalgorithme RED aux rafales Burst doit ecirctre choisi plus grand que minavpkt(paquet moyen) Expeacuterimentalement jai trouveacute que (min+min+max)(3avpkt) marche bien

De plus vous devez configurer limit et avpkt Limit est une valeur de seacutecuriteacute sil y a plus de Limit octetsdans la file RED reprend la technique tail-drop Je choisis une valeur typique eacutegale agrave 8 fois Max Avpktdevrait ecirctre fixeacute agrave la taille moyenne dun paquet 1000 fonctionne correctement sur des liaisons Internet hautdeacutebit ayant un MTU de 1500 octets

Lire larticle sur la file dattente RED par Sally Floyd et Van Jacobson pour les informations techniques

Generic Random Early Detection

Il ny a pas grand chose de connu sur GRED Il ressemble agrave GRED avec plusieurs files dattente internescelles-ci eacutetant choisies en se basant sur le champ tcindex de Diffserv Selon une diapositive trouveacutee ici ilpossegravede les capaciteacutes Distributed Weighted RED de Cisco ainsi que les capaciteacutes RIO de Clark

Chaque file dattente virtuelle peut avoir ses propres Drop Parameters

FIXME Demandez agrave Jamal or Werner de nous en dire plus

Emulation VCATM

Ceci est leffort principal de Werner Almesberger pour vous autoriser agrave construire des circuits virtuelsau-dessus des sockets TCPIP Le circuit virtuel est un concept venant de la theacuteorie des reacuteseaux ATM

Pour plus dinformations voir la page ATM sur Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Random Early Detection (RED) 83

Weighted Round Robin (WRR)

Ce gestionnaire de mise en file dattente nest pas inclus dans les noyaux standards mais peut ecirctre teacuteleacutechargeacuteeagrave partir de ce lien Ce gestionnaire de mise en file dattente na eacuteteacute testeacute quavec les noyaux 22 mais marcheraprobablement eacutegalement avec les noyaux 2425

La file dattente WRR partage la bande passante entre ses classes en utilisant la technique du tourniquetpondeacutereacute Ceci est similaire agrave la file dattente CBQ qui contient des classes sur lesquelles lon peut associerarbitrairement des files dattente Toutes les classes qui ont suffisamment de demandes obtiendront la bandepassante proportionnellement au poids associeacute des classes Les poids peuvent ecirctre configureacutes manuellement enutilisant le programme tc Ils peuvent eacutegalement ecirctre configureacutes pour deacutecroicirctre automatiquement pour lesclasses transfeacuterant moins de donneacutees

La file dattente a un classificateur inteacutegreacute qui assigne les paquets venant ou allant vers diffeacuterentes machines agravediffeacuterentes classes On peut utiliser soit ladresse MAC soit ladresse IP de ladresse source ou de destinationLadresse MAC ne peut cependant ecirctre utiliseacutee que quand la boite Linux est un pont ethernet Les classes sontautomatiquement assigneacutees aux machines en fonction des paquets vus

Ce gestionnaire de mise en file dattente peut ecirctre tregraves utile au site comme les reacutesidences eacutetudiantes ougrave desindividus sans liens particuliers partagent une connexion Internet Un ensemble de scripts pour configurer untel cas de figure pour ce genre de site est proposeacute dans la distribution WRR

Chapitre 15 Recettes de cuisineCette section contient des ltlt recettes de cuisine gtgt qui peuvent vous aider agrave reacutesoudre vos problegravemes Un livrede cuisine ne remplace cependant pas une reacuteelle compreacutehension essayez donc dassimiler ce qui suit

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations)

Vous pouvez faire cela de plusieurs maniegraveres Apache possegravede un module qui permet de le supporter maisnous montrerons comment Linux peut le faire pour dautres services Les commandes ont eacuteteacute reprises dunepreacutesentation de Jamal Hadi dont la reacutefeacuterence est fournie ci-dessous

Disons que nous avons deux clients avec http ftp et du streaming audio Nous voulons leur vendre unelargeur de bande passante limiteacutee Nous le ferons sur le serveur lui-mecircme

Le client A doit disposer dau moins 2 meacutegabits et le client B a payeacute pour 5 meacutegabits Nous seacuteparons nosclients en creacuteant deux adresses IP virtuelles sur notre serveur

ip address add 1881771661 dev eth0 ip address add 1881771662 dev eth0

Cest agrave vous dassocier les diffeacuterents serveurs agrave la bonne adresse IP Tous les deacutemons courants supportent cela

Nous pouvons tout dabord attacher une mise en file dattente CBQ agrave eth0

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

Nous creacuteons ensuite les classes pour nos clients

tc class add dev eth0 parent 10 classid 11 cbq bandwidth 10Mbit rate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

84 Chapitre 15 Recettes de cuisine

2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 tc class add dev eth0 parent 10 classid 12 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 Quest-ce quundiviseur FIXME Un diviseur est lieacute agrave une table de hachage et au nombre deseaux -ahu tc filter add dev eth0 parent 10 protocol ip prio 5 handle 1 u32 divisor 1 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771661 flowid 11 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771662 flowid 12

Et voilagrave qui est fait

FIXME Pourquoi pas un filtre token bucket Y a t-il un retour par deacutefaut agrave pfifoamplowbarfast quelquepart

Proteacuteger votre machine des inondations SYN

Dapregraves la documentation iproute dAlexey adapteacutee agrave netfilter Si vous utilisez ceci prenez garde dajuster lesnombres avec des valeurs raisonnables pour votre systegraveme

Si vous voulez proteacuteger tout un reacuteseau oubliez ce script qui est plus adapteacute agrave un hocircte seul

Il apparaicirct que la toute derniegravere version de loutil iproute2 est neacutecessaire pour que ceci fonctionne avec lenoyau 240

binsh -x script simple utilisant les capaciteacutes 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 beacuteneacuteficier de puissantes fonctionnaliteacutes sur les SYN chemins vers les divers utilitaires Agrave changer en fonction des vocirctresTC=sbintcIP=sbinipIPTABLES=sbiniptablesINDEV=eth2 marque tous les paquets SYN entrant agrave travers $INDEV avec la valeur 1 $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn -j MARK --set-mark 1 installe la file dattente ingress sur linterface associeacutee $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 agrave 3 par seconde (pas vraiment utile mais sert agrave montrer ce point -JHS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations) 85

$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 $INDEVecho ---- Class parameters Ingress ----------$TC class ls dev $INDEVecho ---- filter parameters Ingress ----------$TC filter ls dev $INDEV parent ffff

supprime la file dattente ingress $TC qdisc del $INDEV ingress

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service

Reacutecemment les attaques distribueacutees de deacuteni de service sont devenues une nuisance importante sur InternetEn filtrant proprement et en limitant le deacutebit de votre reacuteseau vous pouvez agrave la fois eacuteviter de devenir victimeou source de ces attaques

Vous devriez filtrer vos reacuteseaux de telle sorte que vous nautorisiez pas les paquets avec une adresse IP sourcenon locale agrave quitter votre reacuteseau Cela empecircche les utilisateurs denvoyer de maniegravere anonyme descochonneries sur Internet

La limitation de deacutebit peut faire encore mieux comme vu plus haut Pour vous rafraicircchir la meacutemoire revoicinotre diagramme ASCII

[Internet] ---ltE3 T3 nimporte quoigt--- [routeur Linux] --- [Bureau+FAI] eth1 eth0

Nous allons dabord configurer les parties preacute-requises

tc qdisc add dev eth0 root handle 10 cbq bandwidth 10Mbit avpkt 1000 tc class add dev eth0 parent 100 classid 101 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 deacuteterminercombien de trafic ICMP vous voulez autoriser Vous pouvez reacutealiser des mesures avec tcpdump en eacutecrivantles reacutesultats dans un fichier pendant un moment et regarder combien de paquets ICMP passent par votrereacuteseau Ne pas oublier daugmenter la longueur du snapshot Si la mesure nest pas possible vous pouvezconsacrer par exemple 5amppercnt de votre bande passante disponible Configurons notre classe

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

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

86 Proteacuteger votre machine des inondations SYN

Cela limite le deacutebit agrave 100 Kbits sur la classe Maintenant nous avons besoin dun filtre pour assigner le traficICMP agrave cette classe

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

Donner la prioriteacute au trafic interactif

Si beaucoup de donneacutees arrivent agrave votre lien ou en partent et que vous essayez de faire de la maintenance viatelnet ou ssh cela peut poser problegraveme dautres paquets bloquent vos frappes clavier Cela ne serait-il pasmieux si vos paquets interactifs pouvaient se faufiler dans le trafic de masse Linux peut faire cela pour vous

Comme preacuteceacutedemment nous avons besoin de manipuler le trafic dans les deux sens Evidemment celamarche mieux sil y a des machines Linux aux deux extreacutemiteacutes du lien bien que dautres UNIX soientcapables de faire la mecircme chose Consultez votre gourou local SolarisBSD pour cela

Le gestionnaire standard pfifoamplowbarfast a trois bandes diffeacuterentes Le trafic de la bande 0 est transmis enpremier le trafic des bandes 1 et 2 eacutetant traiteacute apregraves Il est vital que votre trafic interactif soit dans la bande 0 Ce qui suit est adapteacute du (bientocirct obsolegravete) Ipchains-HOWTO

Il y a quatre bits rarement utiliseacutes dans len-tecircte IP appeleacutes bits de Type de Service (TOS) Ils affectent lamaniegravere dont les paquets sont traiteacutes Les quatre bits sont Deacutelai Minimum Deacutebit Maximum FiabiliteacuteMaximum et Coucirct Minimum Seul un de ces bits peut ecirctre positionneacute Rob van Nieuwkerk lauteur ducode TOS-mangling dans ipchains le configure comme suit

Le Deacutelai Minimum est particuliegraverement important pour moi Je lepositionne agrave 1 pour les paquets interactifs sur mon routeur (Linux)qui envoie le trafic vers lexteacuterieur Je suis derriegravere un modem agrave336 Kbps Linux reacutepartit les paquets dans trois filesdattente De cette maniegravere jobtiens des performances acceptablespour le trafic interactif tout en teacuteleacutechargeant en mecircme temps

Lutilisation la plus commune est de configurer les connexions telnet et ftp agrave Deacutelai Minimum et les donneacuteesFTP agrave Deacutebit 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 donneacutees venant dun telnet exteacuterieur vers votre ordinateur local Danslautre sens ccedila se fait tout seul telnet ssh et consorts configurent le champ TOS automatiquement pour lespaquets sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service 87

Si vous avez un client incapable de le faire vous pouvez toujours le faire avec netfilter Sur votre machinelocale

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

Cache web transparent utilisant netfilter iproute2 ipchains etsquid

Cette section a eacuteteacute envoyeacutee par le lecteur Ram Narula de Internet for Education (Internet pour leacuteducation)(Thailande)

La technique habituelle pour reacutealiser ceci dans Linux est probablement lutilisation dipchains APRES secirctreassureacute que le trafic sortant du port 80 (web) est routeacute agrave travers le serveur faisant fonctionner squid

Il y a 3 meacutethodes communes pour ecirctre sucircr que le trafic sortant du port 80 est routeacute vers le serveur faisantfonctionner squid et une quatriegraveme est introduite ici

La passerelle le faitSi vous pouvez dire agrave votre passerelle que les paquets sortants agrave destination du port 80 doivent ecirctreenvoyeacutes vers ladresse IP du serveur squid

MAIS

Ceci amegravenerait une charge suppleacutementaire sur le routeur et des routeurs commerciaux peuvent mecircmene pas supporter ceci

Utiliser un commutateur Couche 4Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problegraveme

MAIS

Le coucirct pour un tel eacutequipement est en geacuteneacuteral tregraves eacuteleveacute Typiquement un commutateur couche 4coucircte normalement plus cher quun serveur classique + un bon serveur linux

Utiliser le serveur cache comme passerelle reacuteseauVous pouvez forcer TOUT le trafic agrave travers le serveur cache

MAIS

Ceci est plutocirct risqueacute dans la mesure ougrave Squid utilise beaucoup de ressources CPU ce qui peutconduire agrave une baisse des performances de tout le reacuteseau Le serveur peut eacutegalement ne plusfonctionner et personne sur le reacuteseau ne pourra acceacuteder agrave Internet si cela a lieu

Routeur Linux+NetFilterEn utilisant Netfilter une autre technique peut ecirctre impleacutementeacutee Celle-ci consiste agrave utiliser Netfilterpour marquer les paquets agrave destination du port 80 et agrave utiliser iproute2 pour router les paquetsmarqueacutes vers le serveur Squid

|----------------|

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

88 Donner la prioriteacute au trafic interactif

| Impleacutementation ||----------------|

Adresses utiliseacutees 10001 naret (serveur NetFilter) 10002 silom (serveur Squid) 10003 donmuang (routeur connecteacute agrave Internet) 10004 kaosarn (un autre serveur sur le reacuteseau) 10005 RAS 1000024 reacuteseau principal 1000019 reacuteseau total

|----------------||Scheacutema du reacuteseau||----------------|

Internet|donmuang|------------hubcommutateur----------| | | |naret silom kaosarn RAS etc

Premiegraverement faire en sorte que tout le trafic passe par naret en eacutetant sucircr que cest la passerelle par deacutefaut agravelexception de silom La passerelle par deacutefaut de silom doit ecirctre donmuang (10003) ou ceci creacuteerait uneboucle du trafic web

(Tous les serveurs sur mon reacuteseau avaient 10001 comme passerelle par deacutefaut qui eacutetait lancienne adresse durouteur donmuang Cela ma conduit agrave attribuer 10003 comme adresse IP agrave donmuang et agrave donner 10001comme adresse IP agrave naret)

Silom------configurer squid et ipchains

Pour la configuration du serveur Squid sur silom soyez sucircr que celui-ci supporte le cacheproxy transparent(transparent cachingproxying) Le port par deacutefaut pour squid est en geacuteneacuteral 3128 Tout le trafic pour le port80 doit donc ecirctre redirigeacute localement vers le port 3128 Ceci peut ecirctre fait en utilisant ipchains comme suit

silom ipchains -N allow1silom ipchains -A allow1 -p TCP -s 1000019 -d 00 80 -j REDIRECT 3128silom ipchains -I input -j allow1

Ou avec netfilter

silom iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(note vous pouvez avoir eacutegalement dautres entreacutees)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Cache web transparent utilisant netfilter iproute2 ipchains etsquid 89

Pour plus dinformations sur la configuration du serveur Squid se reacutefeacuterer agrave la page FAQ Squid surhttpsquidnlanrnet)

Soyez sucircr que lip forwarding est actif sur votre serveur et que la passerelle par deacutefaut pour ce serveur estdonmuand (PAS naret)

Naret------ configurer squid et ipchains - deacutesactiver les messages icmp REDIRECT (si besoin)

Marquer les paquets agrave destination du port 80 avec la valeur 2

naret iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 2

1

Configurer iproute2 de sorte quil route les paquets avec la marque 2 vers silom

naret echo 202 wwwout gtgt etciproute2rt_tablesnaret ip rule add fwmark 2 table wwwoutnaret ip route add default via 10002 dev eth0 table wwwoutnaret ip route flush cache

Si donmuang et naret sont sur le mecircme reacuteseau naret ne doit pas envoyer de messages icmpREDIRECT Ceux-ci doivent ecirctre deacutesactiveacutes par

naret echo 0 gt procsysnetipv4confallsend_redirectsnaret echo 0 gt procsysnetipv4confdefaultsend_redirectsnaret echo 0 gt procsysnetipv4confeth0send_redirects

2

La configuration est termineacutee veacuterifions-la

Sur naret

naret iptables -t mangle -LChain PREROUTING (policy ACCEPT)target prot opt source destination MARK tcp -- anywhere anywhere tcp dptwww MARK set 0x2

Chain OUTPUT (policy ACCEPT)target prot opt source destination

naret ip rule ls0 from all lookup local 32765 from all fwmark 2 lookup wwwout 32766 from all lookup main

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

90 Cache web transparent utilisant netfilter iproute2 ipchains etsquid

32767 from all lookup default

naret ip route list table wwwoutdefault via 2031142248 dev eth0

naret ip route 10001 dev eth0 scope link 1000024 dev eth0 proto kernel scope link src 100011270008 dev lo scope link default via 10003 dev eth0

(soyez sucircr que silom appartiens agrave lune des lignes ci-dessus Dans ce cascest la ligne avec 1000024)

|------||-FAIT-||------|

Scheacutema du trafic apregraves limpleacutementation

|---------------------------------------||Scheacutema du trafic apregraves limpleacutementation||---------------------------------------|

INTERNET||-----------------routeur donmuang--------------------- |||| || |||| ||naret silom ||trafic agrave destination du port 80=====gt(cache) || || |||| ===================================kaosarn RAS etc

Noter que le reacuteseau est asymeacutetrique car il y a un saut suppleacutementaire sur le chemin sortant

Voici le cheminement dun paquet traversant le reacuteseau de kaosarn allant etvenant dInternet

Pour le trafic webhttp requecircte http kaosarn-gtnaret-gtsilom-gtdonmuang-gtInternetreacuteponse http de Internet-gtdonmuang-gtsilom-gtkaosarn

Pour les requecirctes non webhttp (par ex telnet) donneacutees sortantes kaosarn-gtnaret-gtdonmuang-gtInternetdonneacutees entrantes dInternet-gtdonmuang-gtkaosarn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Scheacutema du trafic apregraves limpleacutementation 91

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen configurant un MTU par routes

Pour envoyer de grande quantiteacute de donneacutees Internet fonctionne geacuteneacuteralement mieux quand de grandspaquets sont utiliseacutes Chaque paquet implique une deacutecision de routage Le transfert dun fichier de 1Mo peutentraicircner soit lenvoi de 700 paquets en maximisant la taille des paquets soit de 4000 paquets en utilisant laplus petite taille possible

Cependant tous les eacuteleacutements dInternet ne supportent pas une capaciteacute utile (payload) de 1460 octets parpaquet Il est de plus neacutecessaire dessayer de trouver le plus grand paquet qui conviendra le mieux dans lebut doptimiser la connexion

Ce processus est appeleacute Deacutecouverte du MTU de chemin ougrave MTU signifie Maximum Transfert Unit (Uniteacutede transfert maximum)

Quand un routeur rencontre un paquet qui est trop gros pour ecirctre envoyeacute en un seul morceau ET que celui-cia eacuteteacute marqueacute avec le bit Dont Fragment il retourne un message ICMP indiquant quil a eacuteteacute obligeacute de rejeterle paquet Lhocircte eacutemetteur prend acte de cette indication en envoyant des paquets plus petits et par iteacuterationpeut trouver la taille optimum du paquet pour une connexion agrave travers un chemin particulier

Ceci fonctionnait correctement jusquagrave ce que Internet soit deacutecouvert par des vandales qui sefforcent deperturber les communications Ceci a conduit les administrateurs agrave soit bloquer soit mettre en forme le traficICMP lors dessais malencontreux dans le but dameacuteliorer la seacutecuriteacute ou la robustesse de leurs servicesInternet

La conseacutequence maintenant est que la deacutecouverte du MTU de chemin fonctionne de moins en moins bien eteacutechoue pour certaines routes conduisant agrave deacutetranges sessions TCPIP qui tombent peu de temps apregraves

Bien que je naie pas de preuves de ceci deux sites avec qui javais lhabitude davoir des problegravemes faisaientfonctionner agrave la fois Alteon et Acedirectors avant les systegravemes affecteacutes Peut-ecirctre quelquun avec plus deconnaissances peut fournir des indices quant agrave la raison de ce qui se passe

Solution

Quand vous rencontrez des sites qui preacutesentent ce problegraveme vous pouvez deacutesactiver la deacutecouverte du MTUde chemin en le configurant manuellement Koos van den Hout a agrave peu pregraves eacutecrit

Le problegraveme suivant jai configureacute le mtu et mru de ma ligne deacutedieacutee fonctionnant avec ppp agrave296 dans la mesure ougrave le deacutebit est de seulement 33k6 et que je ne peux pas influencer la filedattente de lautre cocircteacute A 296 la reacuteponse agrave lappui dune touche intervient dans un deacutelairaisonnable

Et de mon cocircteacute jai un routeur avec translation dadresse (masquage) fonctionnant (bien sucircr)sous Linux

Reacutecemment jai seacutepareacute le serveur du routeur de sorte que la plupart des applicationsfonctionnent sur une machine diffeacuterente de celle qui reacutealise le routage

Jai alors eu des problegravemes en me connectant sur lirc Grosse panique Je vous assure quecertains essais trouvaient que jeacutetais connecteacute agrave lirc me montrant mecircme comme connecteacute surlirc mais je ne recevais pas le motd (message of the day message du jour) de lirc Jai

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

92Circonvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

veacuterifieacute ce qui pouvait ecirctre erroneacute et ai noteacute que javais deacutejagrave eu des soucis lieacutes au MTU encontactant certains sites web Je navais aucun souci pour les atteindre quand le MTU eacutetait agrave1500 le problegraveme napparaissant que lorsque le MTU eacutetait configureacute agrave 296 Puisque lesserveurs irc bloquent tout le trafic dont il nont pas besoin pour leurs opeacuterations immeacutediatesils bloquent aussi licmp

Jai manoeuvreacute pour convaincre les responsables dun serveur web que ceci eacutetait la cause dunproblegraveme mais les responsables du serveur irc navaient pas lintention de reacuteparer ceci

Donc je devais ecirctre sucircr que le trafic masqueacute sortant partait avec le mtu faible du lien externeMais je voulais que le trafic ethernet local ait le MTU normal (pour des choses comme letrafic nfs)

Solution

ip route add default via 10001 mtu 296

(10001 eacutetant ma passerelle par deacutefaut ladresse interne de mon routeur masquant)

En geacuteneacuteral il est possible doutrepasser la deacutecouverte du MTU de chemin en configurant des routesspeacutecifiques Par exemple si seuls certains reacuteseaux posent problegravemes ceci devrait aider

ip route add 1959696024 via 10001 mtu 1000

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

Comme expliqueacute au-dessus la deacutecouverte du MTU de chemin ne marche pas aussi bien que cela devrait ecirctreSi vous savez quun saut de votre reacuteseau a un MTU limiteacute (lt1500) vous ne pouvez pas compter sur ladeacutecouverte du MTU de chemin pour le deacutecouvrir

Outre le MTU il y a encore un autre moyen de configurer la taille maximum du paquet par ce qui est appeleacutele MSS (Maximum Segment Size Taille Maximum du Segment) Cest un champ dans les options TCP dupaquet SYN

Les noyaux Linux reacutecents et quelques pilotes de peacuteripheacuterique PPPoE (notamment lexcellent RoaringPenguin) impleacutementent la possibiliteacute de fixer le MSS

Le bon cocircteacute de tout ceci est que en positionnant la valeur MSS vous dicirctes agrave lhocircte distant de maniegravereeacutequivoque nessaie pas de menvoyer des paquets plus grands que cette valeur Aucun trafic ICMP nestneacutecessaire pour faire fonctionner cela

Malheureusement cest de la bidouille eacutevidente -- ccedila deacutetruit la proprieacuteteacute laquobout-en-boutraquo de la connexion enmodifiant les paquets Ayant dit cela nous utilisons cette astuce dans beaucoup dendroit et cela fonctionnecomme un charme

Pour que tout ceci fonctionne vous aurez besoin au moins de iptables-121a et de Linux 243 ou plus Laligne de commande basique est

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --clamp-mss-to-pmtu

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Solution 93

Ceci calcule le MSS approprieacute pour votre lien Si vous vous sentez courageux ou que vous pensez ecirctre lemieux placeacute pour juger vous pouvez aussi faire quelque chose comme ceci

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --set-mss 128

Ceci configure le MSS du paquet SYN agrave 128 Utilisez ceci si vous avez de la voix sur IP (VoIP) avec de touspetits paquets et de grands paquets http qui provoquent des coupures dans vos communications vocales

Le Conditionneur de Trafic Ultime Faible temps de latenceTeacuteleacutechargement vers lamont et laval rapide

Note ce script a reacutecemment eacuteteacute mis agrave niveau et il ne marchait avant quavec les clients Linux de votrereacuteseau Vous devriez donc le mettre agrave jour si vous avez des machines Windows ou des Macs dans votrereacuteseau qui neacutetaient pas capables de teacuteleacutecharger plus rapidement pendant que dautres eacutetaient en train deteacuteleacutecharger vers lamont

Jai essayeacute de creacuteer le Saint Graal

Maintenir agrave tout moment un faible temps de latence pour le trafic interactifCeci signifie que la reacutecupeacuteration ou la transmission de fichiers ne doivent pas perturber SSH ou mecircmetelnet Ceci est la chose la plus importante car mecircme un temps de latence de 200ms est importantpour pouvoir travailler confortablement

Autoriser le surf agrave des vitesses raisonnables pendant que lon teacuteleacutecharge vers lamont ou vers lavalMecircme si http est un trafic de masse les autres trafics ne doivent pas trop le noyer

Etre sucircr que le teacuteleacutechargement vers lamont ne va pas faire du tort aux teacuteleacutechargements vers laval et aux autreseacuteleacutements autour

Le principal pheacutenomegravene observeacute est la forte reacuteduction de la vitesse de teacuteleacutechargement vers lavalquand il y a du trafic montant

Il savegravere que tout ceci est possible au prix dune minuscule reacuteduction de la bande passante La preacutesence degrandes files dattente sur les dispositifs daccegraves domestiques comme le cacircble ou les modems DSL expliquepourquoi les teacuteleacutechargements vers lamont vers laval et ssh se peacutenalisent mutuellement

La prochaine partie explique en profondeur ce qui provoque les retards et comment nous pouvons lescorriger Vous pouvez sans danger la passer et aller directement au script si vous vous fichez de la faccedilon dontla magie opegravere

Pourquoi cela ne marche t-il pas bien par deacutefaut

Les FAI savent que leurs performances ne sont seulement jugeacutees que sur la vitesse agrave laquelle les personnespeuvent teacuteleacutecharger vers laval En plus de la bande passante disponible la vitesse de teacuteleacutechargement estlourdement influenceacutee par la perte des paquets qui gecircne seacuterieusement les performances de TCPIP Lesgrandes files dattente peuvent aider agrave preacutevenir la perte des paquets et augmenter les teacuteleacutechargements LesFAI configurent donc de grandes files dattente

Ces grandes files dattente endommagent cependant linteractiviteacute Une frappe doit dabord parcourir la filedattente du flux montant ce qui peut prendre plusieurs secondes et aller jusquagrave lhocircte distant Elle est alors

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

94Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

traiteacutee conduisant agrave un paquet de retour qui doit traverser la file dattente du flux descendant localiseacutee chezvotre FAI avant quelle napparaisse sur leacutecran

Cet HOWTO nous enseigne plusieurs maniegraveres de modifier et traiter la file dattente mais malheureusementtoutes les files dattente ne nous sont pas accessibles Les files dattente du FAI sont sans limites et la filedattente du flux montant reacuteside probablement dans votre modem cacircble ou votre peacuteripheacuterique DSL Il se peutque vous soyez capable ou non de le configurer La plupart du temps ce ne sera pas le cas

Et apregraves Etant donneacute que nous ne pouvons pas controcircler ces files dattente elles doivent disparaicirctre et ecirctretransfeacutereacutees sur notre routeur Linux Heureusement ceci est possible

Limiter la vitesse de teacuteleacutechargement vers lamont (upload)En limitant notre vitesse de teacuteleacutechargement vers lamont agrave une vitesse leacutegegraverement plus faible que lavitesse reacuteelle disponible il ny a pas de files dattente mises en place dans notre modem La filedattente est maintenant transfeacutereacutee vers Linux

Limiter la vitesse de teacuteleacutechargement vers laval (download)Ceci est leacutegegraverement plus ruseacute dans la mesure ougrave nous ne pouvons pas vraiment influencer la vitesse agravelaquelle Internet nous envoie les donneacutees Nous pouvons cependant rejeter les paquets qui arriventtrop vite ce qui provoque le ralentissement de TCPIP jusquau deacutebit deacutesireacute Comme nous ne voulonspas supprimer inutilement du trafic nous configurons une vitesse de rafale (burst) plus grande

Maintenant que nous avons fait ceci nous avons eacutelimineacute totalement la file dattente du flux descendant (saufpour de courtes rafales de donneacutees) et obtenu la possibiliteacute de geacuterer la file dattente du flux montant avectoute la puissance Linux

Il nous reste agrave nous assurer que le trafic interactif se retrouve au deacutebut de la file dattente du flux montantPour ecirctre sucircr que le flux montant ne va pas peacutenaliser le flux descendant nous deacuteplaccedilons eacutegalement les paquetsACK au deacutebut de la file dattente Cest ce qui provoque normalement un eacutenorme ralentissement quand dutrafic de masse est geacuteneacutereacute dans les deux sens Les paquets ACK du trafic descendant rentrent en concurrenceavec le trafic montant et sont donc ralentis

Si nous avons fait tout ceci nous obtenons les mesures suivantes en utilisant lexcellente connexion ADSL dexs4all en Hollande

Temps de latence de base round-trip minavgmax = 144171217 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers laval round-trip minavgmax = 560957365864 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers lamont round-trip minavgmax = 204142332124276 ms

Avec le conditionneur lors dun teacuteleacutechargement vers lamont agrave 220kbits round-trip minavgmax = 157518799 ms

Avec le conditionneur lors dun teacuteleacutechargement vers laval agrave 850kbits round-trip minavgmax = 204469740 ms

Lors dun teacuteleacutechargement vers lamont les teacuteleacutechargements vers laval seffectuent agrave environ80 de la vitesse maximale disponible et 90 pour les teacuteleacutechargements verslamont Le temps de latence augmente alors jusquagrave 850 ms je nai pas encoredeacutetermineacute la raison de ce pheacutenomegravene

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Pourquoi cela ne marche t-il pas bien par deacutefaut 95

Ce que vous pouvez attendre de ce script deacutepend largement de votre vitesse de lien reacuteelle Quand vousteacuteleacutechargez vers lamont agrave pleine vitesse il y aura toujours un paquet devant votre frappe de clavier Ceci estla limite basse de votre temps de latence Pour la calculer divisez votre MTU par la vitesse du flux montantLes valeurs classiques seront un peu plus eacuteleveacutees que ccedila Diminuez votre MTU pour un meilleur effet

Voici deux versions de ce script une avec lexcellent HTB de Devik et lautre avec CBQ qui est preacutesent danschaque noyau Linux contrairement agrave HTB Les deux ont eacuteteacute testeacutes et marchent correctement

Le script (CBQ)

Marche avec tous les noyaux A linteacuterieur du gestionnaire de mise en file dattente CBQ nous placcedilons deuxSFQ pour ecirctre sucircr que de multiples flux de masse ne vont pas mutuellement se peacutenaliser

Le trafic descendant est reacuteglementeacute en utilisant un filtre tc contenant un Token Bucket Filter

Vous pourriez ameacuteliorer ce script en ajoutant bounded aux lignes qui deacutemarrent avec tc class add classid120 Si vous avez diminueacute votre MTU diminuez aussi les nombres allot amp avpkt

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobitsDOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe CBQ agrave la racine

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence Classe principale

tc class add dev $DEV parent 1 classid 11 cbq rate $UPLINKkbit allot 1500 prio 5 bounded isolated

classe de prioriteacute supeacuterieure 110

tc class add dev $DEV parent 11 classid 110 cbq rate $UPLINKkbit allot 1600 prio 1 avpkt 1000

la classe par deacutefaut et pour le trafic de masse 120 Reccediloit leacutegegraverement moins que le trafic et a une prioriteacute plus faible bulk and default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 cbq rate $[9$UPLINK10]kbit allot 1600 prio 2 avpkt 1000

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

96 Le script (CBQ)

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

Deacutemarrage des filtres le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110 ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

tc filter add dev $DEV parent 1 protocol ip prio 13 u32 match ip dst 00000 flowid 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacuteelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Le script (HTB)

Le script suivant nous permet datteindre tous nos buts en utilisant la merveilleuse file dattente HTB Voir lechapitre correspondant Cela vaut la peine de mettre agrave jour votre noyau

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobits

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le script (HTB) 97

DOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe HTB agrave la racine le trafic ira par deacutefaut vers 120

tc qdisc add dev $DEV root handle 1 htb default 20

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence

tc class add dev $DEV parent 1 classid 11 htb rate $UPLINKkbit burst 6k

la classe de haute prioriteacute 110

tc class add dev $DEV parent 11 classid 110 htb rate $UPLINKkbit burst 6k prio 1

bulk amp default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 htb rate $[9$UPLINK10]kbit burst 6k prio 2

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110

ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacutelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

98 Le script (HTB)

attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau

Bien que ceci soit deacutecrit en deacutetail ailleurs et dans nos pages de manuel cette question est souvent poseacuteeHeureusement il y a une reacuteponse simple qui ne neacutecessite pas la compreacutehension complegravete du controcircle de trafic

Ce script de trois lignes met en place la limitation du deacutebit

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1 classid 11 cbq rate 512kbit allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1 protocol ip prio 16 u32 match ip dst 195969697 flowid 11

La premiegravere ligne installe un gestionnaire de mise en file dattente baseacute sur des classes sur votre interface etindique au noyau que pour ses calculs il peut la consideacuterer comme une interface agrave 10 Mbitss Cependant ilny aura pas de grands dommages si vous indiquez une valeur erroneacutee Donner la vraie valeur permettradavoir des choses plus preacutecises

La seconde ligne creacutee une classe de 512kbits avec des valeurs par deacutefaut raisonnables Pour les deacutetails voirles pages de manuel cbq et Chapitre 9gt

La derniegravere ligne indique quel trafic devra passer par la classe reacutealisant la mise en forme Le trafic qui nestseacutelectionneacute par cette regravegle nest PAS mis en forme Pour avoir des seacutelections plus compliqueacutees (sous-reacuteseauxports sources ou de destinations) voir la section intituleacutee Toutes les commandes de filtres dont vous aureznormalement besoin dans Chapitre 9gt

Si vous avez changeacute quelque chose et que vous vouliez recharger le script exeacutecutez la commande tc qdisc deldev $DEV root pour supprimer votre configuration actuelle

Le script peut ecirctre ameacutelioreacute en ajoutant une derniegravere ligne optionnelle tc qdisc add dev $DEV parent 11 sfqperturb 10 Voir la section intituleacutee Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing) dans Chapitre 9gt pour savoir ce que cela fait

Exemple dune solution de translation dadresse avec de la QoS

Je mappelle Pedro Larroy

ltpiotrmemberfsforggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau 99

Je deacutecris ici une configuration dans le cas ougrave de nombreux utilisateurs seraient connecteacutes agrave Internet agrave traversun routeur Linux qui possegravede une adresse publique et qui reacutealise de la translation dadresse (NAT) Jutilisecette configuration QoS pour fournir laccegraves agrave 198 utilisateurs dans une citeacute universitaire dans laquelle je vis etougrave jadministre le reacuteseau Les utilisateurs sont de gros consommateurs de programmes peer to peer et uncontrocircle de trafic correct est neacutecessaire Jespegravere que ceci servira dexemples pratiques agrave tous les lecteursinteacuteresseacutes par le lartc

Dans un premier temps la configuration sera reacutealiseacutee pas agrave pas et agrave la fin jexpliquerai comment rendre ceprocessus automatique au deacutemarrage Le reacuteseau utiliseacute pour cet exemple est un reacuteseau local connecteacute agraveInternet agrave travers un routeur Linux ayant une adresse publique Lajout dun ensemble de regravegles iptablespermettrait facilement lextension agrave plusieurs adresses IP publiques Les eacuteleacutements suivants sont neacutecessaires

Linux 2418 ou une version du noyau supeacuterieure installeacuteeSi vous utilisez le noyau 2418 vous devrez appliquer la mise agrave jour HTB

iprouteSoyez eacutegalement sucircr que le binaire tc est compatible avec HTB Un binaire preacute compileacute estdistribueacute avec HTB

iptables

Commenccedilons loptimisation de cette rare bande passante

Tout dabord nous allons configurer des gestionnaires de mise en file dattente dans lesquels nous allonsclassifier le trafic Nous creacuteons un gestionnaire htb composeacute de 6 classes avec des prioriteacutes croissantes Nousavons alors des classes qui obtiendront le deacutebit alloueacute et qui pourront de plus utiliser la bande passante dontles autres classes nont pas besoin Rappelons que les classes de plus hautes prioriteacutes (correspondant auxnombres prio les plus faibles) obtiendront en premier lexcegraves de bande passante Notre liaison ADSL agrave un fluxdescendant de 2Mbitss et un flux montant de 300 kbitss Jutilise un deacutebit de seuil (ceil rate) de 240 kbitsscar au-delagrave de cette limite les problegravemes de latence commence agrave prendre de lampleur Ceci est ducirc auremplissage dun tampon placeacute quelque part entre nous et les hocirctes distants

Ajuster la variable CEIL agrave 75 de votre bande passante montante maximum et ajuster le nom de linterface(eth0 dans la suite) agrave celle qui a ladresse publique Internet Exeacutecutez ce qui suit dans un shell root

CEIL=240 tc qdisc add dev eth0 root handle 1 htb default 15 tc class add dev eth0 parent 1 classid 11 htb rate $CEILkbit ceil $CEILkbit tc class add dev eth0 parent 11 classid 110 htb rate 80kbit ceil 80kbit prio 0 tc class add dev eth0 parent 11 classid 111 htb rate 80kbit ceil $CEILkbit prio 1 tc class add dev eth0 parent 11 classid 112 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 113 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 114 htb rate 10kbit ceil $CEILkbit prio 3 tc class add dev eth0 parent 11 classid 115 htb rate 30kbit ceil $CEILkbit prio 3 tc qdisc add dev eth0 parent 112 handle 120 sfq perturb 10 tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Nous avons juste creacuteeacute une arborescence htb avec un seul niveau de profondeur Quelque chose comme ceci

+-----------+ | racine 1 | +-----------+ | +---------------------------------------+ | classe 11 | +---------------------------------------+ | | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

100 Exemple dune solution de translation dadresse avec de la QoS

+----+ +----+ +----+ +----+ +----+ +----+ |110| |111| |112| |113| |114| |115| +----+ +----+ +----+ +----+ +----+ +----+

classid 110 htb rate 80kbit ceil 80kbit prio 0Ceci est la classe de prioriteacute la plus eacuteleveacutee Les paquets de cette classe auront le plus faible deacutelai etobtiendront en premier lexcegraves de bande passante Cest donc une bonne ideacutee de limiter le deacutebit deseuil de cette classe Nous enverrons dans cette classe les paquets qui ont un avantage agrave avoir unfaible deacutelai tel que le trafic interactif ssh telnet dns quake3 irc et les paquets avec le bit SYNactiveacute

classid 111 htb rate 80kbit ceil $CEILkbit prio 1Nous avons ici la premiegravere classe dans laquelle nous commenccedilons agrave mettre du trafic de masse Dansmon exemple jai le trafic provenant de mon serveur web local et les requecirctes pour les pages web respectivement le port source 80 et le port destination 80

classid 112 htb rate 20kbit ceil $CEILkbit prio 2Dans cette classe je mettrai le trafic configureacute avec le champ TOS Deacutebit Maximum activeacute ainsique le reste du trafic provenant des processus locaux de mon routeur vers Internet Les classessuivantes ne recevront donc que du trafic routeacute par cette machine

classid 113 htb rate 20kbit ceil $CEILkbit prio 2Cette classe est pour le trafic des autres machines NATeacutees (NdT beacuteneacuteficiant du service detranslation dadresse) qui ont besoin dune prioriteacute plus grande dans leur trafic de masse

classid 114 htb rate 10kbit ceil $CEILkbit prio 3Le trafic mail (SMTP pop3) et les paquets configureacutes avec le champ TOS Coucirct Minimum serontenvoyeacutes dans cette classe

classid 115 htb rate 30kbit ceil $CEILkbit prio 3Finalement nous avons ici le trafic de masse des machines NATeacutees se trouvant derriegravere le routeurLes paquets lieacutes agrave kazaa edonkey et autres iront ici pour ne pas interfeacuterer avec les autres services

Classification des paquets

Nous avons configureacute le gestionnaire de mise en file dattente mais aucune classification de paquets naencore eacuteteacute faite Pour linstant tous les paquets sortants passent par la classe 115 (car nous avons utiliseacute tcqdisc add dev eth0 root handle 1 htb default 15) Nous devons donc maintenant indiquer ougrave doivent aller lespaquets Ceci est la partie la plus importante

Nous allons maintenant configurer les filtres de tel sorte que nous puissions classifier les paquets aveciptables Je preacutefegravere vraiment le faire avec iptables car celui-ci est tregraves souple et que nous avons un compteurde paquets pour chaque regravegle De plus avec la cible RETURN les paquets nont pas besoin de traverser toutesles regravegles Nous exeacutecutons les commandes suivantes

tc filter add dev eth0 parent 10 protocol ip prio 1 handle 1 fw classid 110 tc filter add dev eth0 parent 10 protocol ip prio 2 handle 2 fw classid 111 tc filter add dev eth0 parent 10 protocol ip prio 3 handle 3 fw classid 112 tc filter add dev eth0 parent 10 protocol ip prio 4 handle 4 fw classid 113 tc filter add dev eth0 parent 10 protocol ip prio 5 handle 5 fw classid 114 tc filter add dev eth0 parent 10 protocol ip prio 6 handle 6 fw classid 115

Nous indiquons simplement au noyau que les paquets qui ont une valeur FWMARK speacutecifique (handle x fw)vont dans la classe speacutecifieacutee (classid xx) Voyons maintenant comment marquer les paquets avec iptables

Tout dabord nous devons comprendre comment les paquets traversent les filtres avec iptables

+------------+ +---------+ +-------------+ Paquets-| PREROUTING |--- Deacutecision----| FORWARD |-------+-------| POSTROUTING |- Paquets entrant +------------+ de routage +-minus-------+ | +-------------+ sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Commenccedilons loptimisation de cette rare bande passante 101

| | +-------+ +--------+ | INPUT |-- Processus locaux-| OUTPUT | +-------+ +--------+

Je suppose que toutes vos tables ont leur politique par deacutefaut configureacutee agrave ACCEPT (-P ACCEPT) ce quidevrait ecirctre le cas si vous navez pas encore toucheacute agrave iptables Notre reacuteseau priveacute est une classe B avecladresse 172170016 et notre adresse publique est 21217021172

Nous indiquons au noyau de faire de la translation dadresse NAT les clients du reacuteseau priveacute peuvent alorscommencer agrave dialoguer avec lexteacuterieur

echo 1 gt procsysnetipv4ip_forward iptables -t nat -A POSTROUTING -s 172170025525500 -o eth0 -j SNAT --to-source 21217021172

Veacuterifions maintenant que les paquets transitent bien agrave travers 115

tc -s class show dev eth0

Vous pouvez commencer agrave marquer les paquets en ajoutant les regravegles dans la chaicircne PREROUTING de latable mangle

iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p icmp -j RETURN

Vous devriez maintenant ecirctre capable de voir leacutevolution du compteur de paquets quand vous pinguez des sitessur Internet depuis les machines du reacuteseau priveacute Veacuterifiez que le compteur de paquets augmente dans 110

tc -s class show dev eth0

Nous avons mis -j RETURN de maniegravere agrave ce que les paquets ne traversent pas toutes les regravegles Les paquetsicmp ne scruteront pas les autres regravegles deacutefinies sous RETURN Gardez ceci agrave lesprit Nous commenccedilonsmaintenant agrave ajouter dautres regravegles pour geacuterer les champs TOS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6 iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

Donnons la prioriteacute aux paquets SSH

iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

Une bonne ideacutee est de donner la prioriteacute aux paquets initiant une connexion tcp agrave savoir ceux qui ont le bitSYN activeacute

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j MARK --set-mark 0x1 iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j RETURN

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

102 Classification des paquets

Et ainsi de suite Apregraves la mise en place des regravegles dans la chaicircne PREROUTING de la table mangle nousterminons par

iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

Ainsi le trafic non marqueacute est dirigeacute vers 115 En fait cette derniegravere eacutetape nest pas neacutecessaire puisque laclasse par deacutefaut est 115 Un marquage est quand mecircme reacutealiseacute de maniegravere agrave avoir une coheacuterence pourlensemble de la configuration De plus il est utile davoir une comptabiliteacute pour cette regravegle

Cest une bonne ideacutee de faire de mecircme avec la chaicircne OUTPUT Reacutepeacutetez ces commandes avec -A OUTPUT agravela place de PREROUTING (sPREROUTINGOUTPUT) Le trafic geacuteneacutereacute localement (sur le routeur Linux)sera alors eacutegalement classifieacute Je termine la chaicircne OUTPUT par -j MARK --set-mark 0x3 de tel sorte que letrafic local ait une prioriteacute plus grande

Ameacuteliorer notre configuration

Toute notre configuration est maintenant opeacuterationnelle Prenez du temps pour regarder les graphes etobserver ougrave votre bande passante est la plus utiliseacutee et cela correspond agrave vos souhaits Jai fait ceci pendant denombreuses heures ce qui ma permis davoir une connexion Internet fonctionnant tregraves bien Autrement vousserez confronteacute en permanence agrave des timeout et des allocations de bande passante presque nulles pour lesnouvelles connexions tcp

Si vous repeacuterez des classes qui sont pleines la plupart du temps ce peut ecirctre une bonne ideacutee de leur attacherun autre gestionnaire de mise en file dattente de maniegravere agrave ce que le partage de la bande passante soit pluseacutequitable

tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Rendre tout ceci actif au deacutemarrage

Il est certain que ceci peut ecirctre fait de diffeacuterentes faccedilons Dans mon cas jai un shell scriptetcinitdpacketfilter qui accepte les arguments [start | stop | stop-tables | start-tables |reload-tables] Celui-ci configure les gestionnaires de mise en file dattente et charge les modules du noyauneacutecessaires et se comporte donc comme une deacutemon Le mecircme script charge les regravegles iptables agrave partir deetcnetworkiptables-rules Je vais lembellir un peu et le rendrait disponible sur ma page webici

Chapitre 16 Construire des ponts et des pseudoponts avec du Proxy ARPLes ponts sont des peacuteripheacuteriques qui peuvent ecirctre installeacutes dans un reacuteseau sans aucune reconfiguration Uncommutateur reacuteseau est basiquement un pont multi-ports Un pont est souvent un commutateur avec 2 portsCependant Linux supporte tregraves bien plusieurs interfaces dans un pont le conduisant agrave fonctionner comme unvrai commutateur

Les ponts sont souvent deacuteployeacutes quand on est confronteacute agrave un reacuteseau deacutefaillant qui a besoin decirctre reacutepareacute sansaucune modification Dans la mesure ougrave un pont est un eacutequipement de niveau 2 la couche sous la couche IP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 16 Construire des ponts et des pseudo ponts avec du Proxy ARP 103

les routeurs et serveurs ne sont pas conscients de son existence Ceci signifie que vous pouvez bloquer oumodifier certains paquets de maniegravere transparente ou mettre en forme le trafic

Un autre eacuteleacutement positif est quun pont peut souvent ecirctre remplaceacute par un cacircble croiseacute ou un hub quand iltombe en panne

Laspect neacutegatif est que la mise en place dun pont peut engendrer beaucoup de confusion agrave moins quil ne soittregraves bien configureacute Le pont napparaicirct pas dans les traceroute mais pourtant des paquets disparaissent sansraison ou sont changeacutes en allant dun point A agrave un point B (ce reacuteseau est HANTE ) Vous devriez eacutegalementvous demander si une organisation qui ne veut rien changer fait le bon choix

Le pont Linux 2425 est documenteacute sur cette page

Etat des ponts et iptables

Au moment de Linux 2420 le pont et iptables ne se voient pas lun lautre sans une aide Si vous pontezles paquets de eth0 agrave eth1 ils ne passent pas par iptables Ceci signifie que vous ne pouvez pas faire defiltrage de translation dadresse (NAT) de deacutesossage ou quoique ce soit dautres Ceci a eacuteteacute corrigeacute dans lesversions 2545 et supeacuterieures

Vous devriez eacutegalement regarder ebtables qui est encore un autre projet Il vous permettra de faire deschoses vraiment terribles comme MACNAT et brouting Cest vraiment effroyable

Pont et mise en forme

Ca marche comme dans les reacuteclames Soyez sucircr du cocircteacute attribueacute agrave chaque interface Autrement il se peut quevous mettiez en forme le trafic sortant au niveau de votre interface interne ce qui ne marchera pas Utiliseztcpdump si neacutecessaire

Pseudo-pont avec du Proxy-ARP

Si vous voulez juste impleacutementer un pseudo pont allez jusquagrave la section Impleacutementez-le Cependant il estsage de lire un peu la faccedilon dont il fonctionne en pratique

Un pseudo pont travaille de maniegravere un peu diffeacuterente Par deacutefaut un pont transmet les paquets sans les alteacutererdune interface agrave une autre Il ne regarde que ladresse mateacuterielle des paquets pour deacuteterminer ougrave ils doiventaller Ceci signifie que vous pouvez pontez un trafic que Linux ne comprend pas aussi longtemps quil y aune adresse mateacuterielle

Un pseudo pont travaille diffeacuteremment et ressemble plus agrave un routeur cacheacute quagrave un pont Mais comme unpont il a un impact faible sur larchitecture du reacuteseau

Le fait quil ne soit pas un pont preacutesente lavantage que les paquets traversent reacuteellement le noyau et peuventecirctre filtreacutes modifieacutes redirigeacutes ou rerouteacutes

Un pont reacuteel peut eacutegalement reacutealiser ces tours de force mais il a besoin dun code speacutecial comme le EthernetFrame Diverter ou la mise agrave jour mentionneacutee au-dessus

Un autre avantage dun pseudo pont est quil ne transmet pas les paquets quil ne comprend pas nettoyant ainsivotre reacuteseau de beaucoup de cochonneries Dans le cas ougrave vous auriez besoin de ces cochonneries (comme lespaquets SAP ou Netbeui) utilisez un vrai pont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

104 Etat des ponts et iptables

ARP amp Proxy-ARP

Quand un hocircte veut dialoguer avec un autre hocircte sur le mecircme segment physique il envoie un paquet duProtocole de Reacutesolution dAdresse (ARP) qui en simplifiant quelque peu est lu comme ceci Qui a 10001le dire agrave 10007 En reacuteponse agrave ceci 10001 renvoie un petit paquet ici

10007 envoie alors des paquets agrave ladresse mateacuterielle mentionneacutee dans le paquet ici Il met dans un cachecette adresse mateacuterielle pour un temps relativement long et apregraves lexpiration du cache repose sa question

Quand on construit un pseudo pont on configure le pont pour quil reacuteponde agrave ces paquets ARP les hocirctes dureacuteseau envoyant alors leurs paquets au pont Le pont traite alors ces paquets et les envoie agrave linterface adapteacutee

Donc en reacutesumeacute quand un hocircte dun cocircteacute du pont demande ladresse mateacuterielle dun hocircte se situant de lautrecocircteacute le pont reacutepond avec un paquet qui dit transmets le moi

De cette faccedilon tout le trafic de donneacutees est transmis agrave la bonne place et il traverse toujours le pont

Impleacutementez-le

Les versions anciennes du noyau linux permettait de faire du proxy ARP uniquement agrave une granulariteacute sousreacuteseaux Ainsi pour configurer un pseudo pont il fallait speacutecifier les bonnes routes vers les deux cocircteacutes dupont et eacutegalement creacuteer les regravegles proxy-ARP correspondantes Ceacutetait peacutenible deacutejagrave par la quantiteacute de textequil fallait taper puis parce quil eacutetait facile de se tromper et creacuteer des configurations erroneacutees ougrave le pontreacutepondait agrave des requecirctes pour des reacuteseaux quil ne savait pas router

Avec Linux 24 (et peut-ecirctre bien le 22) cette possibiliteacute a eacuteteacute retireacutee et a eacuteteacute remplaceacutee par une option dansle reacutepertoire proc appeleacutee proxy-arp La proceacutedure pour construire un pseudo pont est maintenant

Assigner une adresse agrave chaque interface la gauche et la droite1 Creacuteer des routes pour que votre machine connaisse quels hocirctes reacutesident agrave gauche et quels hocirctesreacutesident agrave droite

2

Activer le proxy-ARP sur chaque interface echo 1 gt procsysnetipv4confethLproxyamplowbararpecho 1 gt procsysnetipv4confethRproxyamplowbararp ougrave L et R deacutesignent les numeacuteros delinterface du cocircteacute gauche (Left) et de celle du cocircteacute droit (Right)

3

Noubliez pas eacutegalement dactiver loption ipamplowbarforwarding Quand on convertit un vrai pont il se peutque vous trouviez cette option deacutesactiveacutee dans la mesure ougrave il ny en a pas besoin pour un pont

Une autre chose que vous devriez consideacuterer lors de la conversion est que vous aurez besoin deffacer le cachearp des ordinateurs du reacuteseau Le cache arp peut contenir danciennes adresses mateacuterielles du pont qui ne sontplus correctes

Sur un Cisco ceci est reacutealiseacute en utilisant la commande clear arp-cache et sous linux en utilisant arp -dipadresse Vous pouvez aussi attendre lexpiration manuelle du cache ce qui peut ecirctre plutocirct long

Il se peut que vous deacutecouvriez eacutegalement que votre reacuteseau eacutetait mal configureacute si vous avezaviez lhabitude despeacutecifier les routes sans les masques de sous-reacuteseau Dans le passeacute certaines versions de route pouvaientcorrectement deviner le masque ou au contraire se tromper sans pour autant vous le notifier Quand vousfaites du routage chirurgical comme deacutecrit plus haut il est vital que vous veacuterifiez vos masques desous-reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP amp Proxy-ARP 105

Chapitre 17 Routage Dynamique - OSPF et BGPSi votre reacuteseau commence agrave devenir vraiment gros ou si vous commencez agrave consideacuterer Internet comme votrepropre reacuteseau vous avez besoin doutils qui routent dynamiquement vos donneacutees Les sites sont souvent relieacutesentre eux par de multiples liens et de nouveaux liens surgissent en permanence

LInternet utilise la plupart du temps les standards OSPF (RFC 2328) et BGP4 (RFC 1771) Linux supporteles 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 travauxde reacutefeacuterence

Vue densemble

Cisco Systems Cisco Systems Designing large-scale IP Internetworks

Pour OSPF

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

Halabi a aussi eacutecrit un tregraves bon guide sur la conception du routage OSPF mais il semble avoir eacuteteacute effaceacute dusite 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

Bien que les exemples soient speacutecifiques agrave Cisco ils sont remarquablement semblables au langage deconfiguration de Zebra -)

Configurer OSPF avec Zebra

Contactez-moi si les informations qui suivent ne sont pas exactes ou si vous avez des suggestions Zebra estun formidable logiciel de routage dynamique eacutecrit par Kunihiro Ishiguro Toshiaki Takada et Yasuhiro OharaConfigurer OSPF avec zebra est simple et rapide mais en pratique il y a de nombreux paramegravetres dans le casougrave vous auriez des besoins speacutecifiques OSPF est labreacuteviation de Open Shortest Path First et quelques une deses fonctionnaliteacutes sont

hieacuterarchiqueLes reacuteseaux sont regroupeacutes par zones (areas) qui sont interconnecteacutees par une zone eacutepine dorsale quisera appeleacutee zone 0 Tout le trafic passe par la zone 0 et tous les routeurs de cette zone ont lesinformations de routage de toutes les autres zones

convergence rapideLes routes sont propageacutees tregraves rapidement compareacute agrave RIP par exemple

eacuteconomie de bande passanteUtilise la multi-distribution agrave la place de la diffusion ce qui eacutevite de submerger les autres hocirctes avecdes informations de routage sans inteacuterecirct pour eux La multi-distribution reacuteduit ainsi le deacutebit sur le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

106 Chapitre 17 Routage Dynamique - OSPF et BGP

reacuteseau De mecircme les routeurs internes (ceux dont toutes les interfaces sont situeacutees dans la mecircmezone) nobtiennent pas dinformations sur les autres zones Les routeurs avec des interfaces dans plusdune zone sont appeleacutes Area Border Routers Ils possegravedent les informations de topologie sur leszones auxquelles ils sont connecteacutes

Utilisation intensive de CPUOSPF est baseacute sur lalgorithme de Dijkstra Shortest Path First qui est coucircteux en temps de calculcompareacute aux autres algorithmes de routage Ce nest pas forceacutement mauvais dans la mesure ougrave le pluscourt chemin est calculeacute uniquement pour chaque zone Donc pour les reacuteseaux de petite agrave moyennetaille ce ne sera pas un problegraveme vous ne vous en rendrez pas compte

Information deacutetat de lienOSPF prend en compte les caracteacuteristiques speacutecifiques des reacuteseaux et interfaces telles que la bandepassante les deacutefauts de liens et le coucirct moneacutetaire

Protocole ouvert et logiciel sous license GPLOSPF est un protocole ouvert et Zebra est un logiciel sous license GPL ce qui repreacutesente un avantageeacutevident par rapport aux protocoles et logiciels proprieacutetaires

Preacuterequis

Noyau Linux Compileacute avec CONFIG_NETLINK_DEV and CONFIG_IP_MULTICAST (Je ne sais pas si dautreseacuteleacutements sont eacutegalement neacutecessaires)

IprouteZebra

Reacutecupeacuterez-le avec votre gestionnaire de paquet favori ou agrave partir de httpwwwzebraorg

Configurer Zebra

Prenons le reacuteseau suivant comme exemple

---------------------------------------------------- | 1921680024 | | | | Zone 0 100BaseTX Commuteacute | | Epine dorsale Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |1 |2 |253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSLATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172170016 Zone 1 | | 1921681024 wlan Zone 2 | ------------ | Reacuteseau etudiant (dortoir) | | Sans fil de Barcelone | ------------------------------------ -------------------------------

Ne soyez pas effrayeacute par ce diagramme Zebra reacutealise la plus grande partie du travail automatiquement cequi ne demandera aucun travail de saisie des routes avec Zebra Il serait peacutenible de maintenir toutes ces routesagrave la main au quotidien La chose la plus importante agrave maicirctriser clairement cest la topologie du reacuteseau Faitesparticuliegraverement attention agrave la zone 0 puisque cest la plus importante Dans un premier temps configurezZebra en eacuteditant zebraconf et en ladaptant agrave vos besoins

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configurer OSPF avec Zebra 107

hostname omega password xxx enable password xxx Interfaces description interface lo description test of desc interface eth1 multicast Static default route ip route 00000 21217021129 log file varlogzebrazebralog

Debian neacutecessite eacutegalement leacutedition de etczebradaemons pour quils soient lanceacutes au deacutemarrage

zebra=yes ospfd=yes

Nous devons maintenant editer ospfdconf si vous utilisez encore IPV4 ou ospf6dconf si vous travaillez avecIPV6 Mon fichier ospfdconf ressemble agrave ceci

hostname omega password xxx enable password xxx router ospf network 1921680024 area 0 network 172170016 area 1 log stdout log file varlogzebraospfdlog

Ceci indique agrave ospf la topologie de notre reacuteseau

Exeacutecuter Zebra

Nous devons maintenant deacutemarrer Zebra soit agrave la main en tapant zebra -d soit avec un script commeetcinitdzebra start En regardant attentivement les logs de ospdfd on peut voir les eacuteleacutements suivants

20021213 224624 OSPF interface 19216801 join AllSPFRouters Multicast group 20021213 224634 OSPF SMUX_CLOSE with reason 5 20021213 224644 OSPF SMUX_CLOSE with reason 5 20021213 224654 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF DR-Election[1st] Backup 19216801 20021213 224704 OSPF DR-Election[1st] DR 19216801 20021213 224704 OSPF DR-Election[2nd] Backup 0000 20021213 224704 OSPF DR-Election[2nd] DR 19216801 20021213 224704 OSPF interface 19216801 join AllDRouters Multicast group 20021213 224706 OSPF DR-Election[1st] Backup 19216802 20021213 224706 OSPF DR-Election[1st] DR 19216801 20021213 224706 OSPF Packet[DD] Negotiation done (Slave) 20021213 224706 OSPF nsm_change_status() scheduling new router-LSA origination 20021213 224711 OSPF ospf_intra_add_router Start

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

108 Configurer Zebra

Ignorez le message SMUX_CLOSE pour linstant dans la mesure ougrave il concerne SNMP Nous pouvons voirque 19216801 est routeur deacutesigneacute (Designated Router) et que 19216802 est le le routeur deacutesigneacute desauvegarde (Backup Designated Router)

Nous pouvons eacutegalement interagir avec zebra et ospfd en exeacutecutant

$ telnet localhost zebra$ telnet localhost ospfd

Voyons comment les routes se sont propageacutees en se connectant agrave zebra

rootatlantis~ telnet localhost zebra Trying 127001 Connected to atlantis Escape character is ^]

Hello this is zebra (version 092a) Copyright 1996-2001 Kunihiro Ishiguro

User Access Verification

Password atlantisgt show ip route Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Kgt 00000 via 19216801 eth1 Cgt 1270008 is directly connected lo O 172170016 [11010] is directly connected eth0 062153 Cgt 172170016 is directly connected eth0 O 1921680024 [11010] is directly connected eth1 062153 Cgt 1921680024 is directly connected eth1 atlantisgt show ip ospf border-routers ============ OSPF router routing table ============= R 1921680253 [10] area (0000) ABR via 1921680253 eth1 [10] area (0001) ABR via 1721702 eth0

ou directement avec iproute

rootomega~ ip route 2121702112826 dev eth0 proto kernel scope link src 21217021172 1921680024 dev eth1 proto kernel scope link src 19216801 172170016 via 19216802 dev eth1 proto zebra metric 20 default via 21217021129 dev eth0 proto zebra rootomega~

Nous pouvons voir les routes Zebra qui neacutetaient pas preacutesentes auparavant Il est vraiment agreacuteable de voirapparaicirctre les routes quelques secondes apregraves le lancement de zebra et ospfd Vous pouvez veacuterifier laconnectiviteacute avec les autres hocirctes en utilisant ping Les routes zebra sont automatiques Vous pouvez ajouterun autre routeur au reacuteseau configurez Zebra et voilagrave

Astuce vous pouvez utiliser

tcpdump -i eth1 ip[9] == 89

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exeacutecuter Zebra 109

pour analyser les paquets OSPF Le numeacutero du protocole OSPF est 89 et le champ du protocole est le 9iegravemeoctet de len-tecircte ip

OSPF possegravede de nombreux paramegravetres speacutecialement pour les grands reacuteseaux Dans de prochainsdeacuteveloppements du HOWTO nous montrerons des meacutethodes de reacuteglages fins dOSPF

Configurer BGP4 avec Zebra

Le Border Gateway Protocol Version 4 (BGP4) est un protocole de routage dynamique deacutecrit dans la RFC1771 Il permet la distribution des informations de connectiviteacute cest agrave dire les tables de routage vers dautresnoeuds BGP4 actifs Il peut ecirctre utiliseacute comme un EGP ou un IGP Dans le mode EGP chaque noeud doitavoir son propre numeacutero de systegraveme autonome ( utonomous System (AS)) BGP4 supporte etlaggreacutegation de routes (reacuteunir plusieurs routes en une seule) gt The Border Gateway Protocol Version 4(BGP4) is a dynamic routing gt protocol described in RFC 1771 It allows the distribution of gt reachabilityinformation ie routing tables to other BGP4 gt enabled nodes It can either be used as EGP or IGP in EGPmode gt each node must have its own Autonomous System (AS) number gt BGP4 supports Classless InterDomain Routing (CIDR) and route gt aggregation (merge multiple routes into one)

scheacutema reacuteseau (Exemple)

Le scheacutema reacuteseau suivant est utiliseacute pour les exemples agrave suivre AS 1 et 50 ont plusieurs voisins mais nousavons seulement besoin de configurer 1 et 50 comme nos voisins Les noeuds communiquent entre eux pardes tunnels dans cet exemple mais ce nest pas une obligation

Note les numeacuteros AS utiliseacutes dans cet exemple sont reacuteserveacutes Veuillez obtenir vos propres numeacuteros AS duRIPE si vous installez des liens officiels

-------------------- | 192168231224 | | AS 23 | -------------------- ------------------ ------------------ | 1921681124 |-------| 10101116 | | AS 1 | | AS 50 | ------------------ ------------------

Configuration (Exemple)

La configuration suivante est eacutecrite pour le noeud 192168231224 et elle sera facile agrave adapter pour les autresnoeuds

Elle commence par des eacuteleacutements geacuteneacuteraux comme le nom de lhocircte les mots de passe et les options de debug

hostname hostname anakin

login password password xxx

enable password (super user mode) enable password xxx

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

110 Configurer BGP4 avec Zebra

path to logfile log file varlogzebrabgpdlog

debugging be verbose (can be removed afterwards) debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates

La liste de controcircle daccegraves (Access list) est utiliseacutee pour limiter la redistribution aux reacuteseaux priveacutes (RFC1918)

RFC 1918 networks access-list local_nets permit 1921680016 access-list local_nets permit 172160012 access-list local_nets permit 100008 access-list local_nets deny any

Letape suivante consiste agrave configurer chaque AS

Own AS number router bgp 23

IP address of the router bgp router-id 1921682312

announce our own network to other neighbors network 19216823024

advertise all connected routes (= directly attached interfaces) redistribute connected

advertise kernel routes (= manually inserted routes) redistribute kernel

Chaque section router bgp contient une liste de voisins auquels le routeur est connecteacute

neighbor 19216811 remote-as 1 neighbor 19216811 distribute-list local_nets in neighbor 101011 remote-as 50 neighbor 101011 distribute-list local_nets in

Veacuterification de la configuration

Note vtysh est un multiplexeur qui connecte toutes les interfaces utilisateur de zebra ensemble

anakin sh ip bgp summary BGP router identifier 1921682312 local AS number 23 2 BGP AS-PATH entries 0 BGP community entries

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd 101001 4 50 35 40 0 0 0 002840 1 19216811 4 1 27574 27644 0 0 0 032604 14

Total number of neighbors 2 anakin anakin sh ip bgp neighbors 101001 BGP neighbor is 101001 remote AS 50 local AS 23 external link

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration (Exemple) 111

BGP version 4 remote router ID 101001 BGP state = Established up for 002901 anakin

Voyons quelles routes nous avons obtenues de nos voisins

anakin sh ip ro bgp Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Bgt 172160014 [200] via 19216811 tun0 2d10h19m Bgt 172300016 [200] via 19216811 tun0 100924 Bgt 19216851032 [200] via 19216811 tun0 2d10h27m Bgt 19216852632 [200] via 19216811 tun0 100924 Bgt 19216853632 [200] via 19216811 tun0 2d10h19m Bgt 19216817024 [200] via 19216811 tun0 3d05h07m Bgt 19216817132 [200] via 19216811 tun0 3d05h07m Bgt 19216832024 [200] via 19216811 tun0 2d10h27m anakin

Chapitre 18 Autres possibiliteacutesCe chapitre est une liste des projets ayant une relation avec le routage avanceacute et la mise en forme du traficsous Linux Certains de ces liens meacuteriteraient des chapitres speacutecifiques dautres sont tregraves bien documenteacutes etnont pas besoin de HOWTO en plus

Impleacutementation VLAN 8021Q pour Linux (site)VLAN est une faccedilon tregraves sympa de diviser vos reacuteseaux dune maniegravere plus virtuelle que physique Debonnes informations sur les VLAN pourront ecirctre trouveacutees ici Avec cette impleacutementation votre boiteLinux pourra dialoguer VLAN avec des machines comme les Cisco Catalyst 3ComamplcubCorebuilder Netbuilder II SuperStack II switch 630amprcub Extreme Ntwks Summit 48Foundry amplcubServerIronXL FastIronamprcub

Impleacutementation alternative VLAN 8021Q pour Linux(site)Une impleacutementation alternative de VLAN pour Linux Ce projet a deacutemarreacute suite au deacutesaccord aveclarchitecture et le style de codage du projet VLAN eacutetabli avec comme reacutesultat une structure delensemble plus clair Mise agrave jour a eacuteteacute inclus dans le noyau 2414 (peut-ecirctre dans le 2413)

Un bon HOWTO agrave propos des VLAN peut ecirctre trouveacute ici

Mise agrave jour a eacuteteacute inclue dans le noyau agrave partir de la version 2414 (peut-ecirctre 13)Serveur Linux Virtuel (Linux Virtual Server )(site)

Ces personnes sont tregraves talentueuses Le Serveur Virtuel Linux est un serveur agrave haute disponibiliteacutehautement eacutevolutif construit autour dune grappe (cluster) de serveurs avec un eacutequilibreur de chargetournant sur le systegraveme dexploitation Linux Larchitecture du cluster est transparente pour lesutilisateurs finaux qui ne voient quun simple serveur virtuel

En reacutesumeacute que vous ayez besoin deacutequilibrer votre charge ou de controcircler votre trafic LVS aura unemaniegravere de le faire Certaines de leurs techniques sont positivement diaboliques Par exemple ilspermettent agrave plusieurs machines davoir une mecircme adresse IP mais en deacutesactivant lARP dessusSeule la machine LVS qui a elle lARP actif deacutecide de lhocircte qui manipulera le paquet entrantCelui-ci est envoyeacute avec la bonne adresse MAC au serveur choisi Le trafic sortant passe directementpar le routeur et non par la machine LVS qui par conseacutequent na pas besoin de voir vos 5Gbits dedonneacutees allant sur Internet Cette machine LVS ne peut alors pas ecirctre un goulot deacutetranglement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

112 Chapitre 18 Autres possibiliteacutes

Limpleacutementation de LVS neacutecessite une mise agrave jour pour les noyaux 20 et 22 alors quun moduleNetfilter est disponible dans le 24 Il ny a donc pas besoin de mise agrave jour pour cette version dunoyau Le support 24 est encore en deacuteveloppement Battez-vous donc avec et envoyez voscommentaires ou vos mises agrave jour

CBQinit (site)Configurer CBQ peut ecirctre un peu intimidant speacutecialement si votre seul souhait est de mettre en formele trafic dordinateurs placeacutes derriegravere un routeur CBQinit peut vous aider agrave configurer Linux agrave laidedune syntaxe simplifieacutee

Par exemple si vous voulez que tous les ordinateurs de votre reacuteseau 1921681024 (sur eth110 Mbits) aient leur vitesse de teacuteleacutechargement limiteacutee agrave 28 Kbits remplissez le fichier deconfiguration de CBQinit avec ce qui suit

DEVICE=eth110Mbit1MbitRATE=28KbitWEIGHT=2KbitPRIO=5RULE=1921681024

Utiliser simplement ce programme si le comment et pourquoi ne vous inteacuteresse pas Nous utilisonsCBQinit en production et il marche tregraves bien On peut mecircme faire des choses plus avanceacutees commela mise en forme deacutependant du temps La documentation est directement inteacutegreacutee dans le script ce quiexplique labsence dun fichier README

Scripts faciles de mise en forme Chronox(site)Stephan Mueller (smuellerchronoxde) a eacutecrit deux scripts utiles limitconn et shaper Lepremier vous permet de maicirctriser une session de teacuteleacutechargement comme ceci

limitconn -s SERVERIP -p SERVERPORT -l LIMIT

Il fonctionne avec Linux 22 et 24

Le second script est plus compliqueacute et peut ecirctre utiliseacute pour mettre en place des files dattentediffeacuterentes baseacutees sur les regravegles iptables Celles-ci sont utiliseacutees pour marquer les paquets qui sontalors mis en forme

Impleacutementation du Protocole Redondant Routeur Virtuel (site)Ceci est purement pour la redondance Deux machines avec leurs propres adresses IP et MAC creacuteentune troisiegraveme adresse IP et MAC virtuelle Bien que destineacute agrave lorigine uniquement aux routeurs quiont besoin dadresses MAC constantes cela marche eacutegalement pour les autres serveurs

La beauteacute de cette approche est lincroyable faciliteacute de la configuration Pas de compilation de noyauou de neacutecessiteacute de mise agrave jour tout se passe dans lespace utilisateur

Lancer simplement ceci sur toutes les machines participant au service

vrrpd -i eth0 -v 50 100022

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 18 Autres possibiliteacutes 113

Et vous voilagrave opeacuterationnel 100022 est maintenant geacutereacute par lun de vos serveurs probablement lepremier agrave avoir lanceacute le deacutemon vrrp Deacuteconnectez maintenant cet ordinateur du reacuteseau et tregravesrapidement ladresse 100022 et ladresse MAC seront geacutereacutees par lun des autres ordinateurs

Jai essayeacute ceci et il a eacuteteacute actif et opeacuterationnel en 1 minute Pour une raison eacutetrange ma passerelle pardeacutefaut a eacuteteacute supprimeacutee Cependant loption -n permet de preacutevenir cela

Voici une deacutefaillance en direct

64 bytes from 100022 icmp_seq=3 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=4 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=5 ttl=255 time=168 ms64 bytes from 100022 icmp_seq=6 ttl=255 time=18 ms64 bytes from 100022 icmp_seq=7 ttl=255 time=17 ms

Pas un paquet ping na eacuteteacute perdu Apregraves 4 paquets jai deacuteconnecteacute mon P200 du reacuteseau et mon 486a pris le relais ce qui est visible par laugmentation du temps de latence

Chapitre 19 Lectures suppleacutementaireshttpsnafufreedomorglinux22iproute-noteshtml

Contient beaucoup dinformations techniques et de commentaires sur le noyauhttpwwwdavinottawaoncaols

Transparents de Jamal Hadi Salim un des auteurs du controcircleur de trafic de Linuxhttpdefiantcoinetcomiproute2ip-cref

Version HTML de la documentation LaTeX dAlexeys explique une partie diproute2 en deacutetailshttpwwwaciriorgfloydcbqhtml

Sally Floyd a une bonne page sur CBQ incluant ses publications originales Aucune nest speacutecifique agraveLinux mais il y a un travail de discussion sur la theacuteorie et lutilisation de CBQ Contenu tregravestechnique mais une bonne lecture pour ceux qui sont inteacuteresseacutes

Differentiated Services on LinuxThis document par Werner Almesberger Jamal Hadi Salim et Alexey Kuznetsov Deacutecrit les fonctionsDiffServ du noyau Linux entre autres les gestionnaires de mise en file dattente TBF GREDDSMARK et le classificateur tcindex

httpcetipl~ekravietzcbqNET4_tchtmlUn autre HOWTO en polonais Vous pouvez cependant copiercoller les lignes de commandes ellesfonctionnent de la mecircme faccedilon dans toutes les langues Lauteur travaille en collaboration avec nouset sera peut ecirctre bientocirct un auteur de sections de cet HOWTO

IOS Committed Access RateDes gens de Cisco qui ont pris la louable habitude de mettre leur documentation en ligne La syntaxede Cisco est diffeacuterente mais les concepts sont identiques sauf quon fait mieux et sans mateacuterielcoutant le prix dune voiture -)

TCPIP Illustrated volume 1 W Richard Stevens ISBN 0-201-63346-9Sa lecture est indispensable si vous voulez reacuteellement comprendre TCPIP et de plus elle estdivertissante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

114 Chapitre 19 Lectures suppleacutementaires

Chapitre 20 RemerciementsNotre but est de faire la liste de toutes les personnes qui ont contribueacute agrave ce HOWTO ou qui nous ont aideacutes agraveexpliquer le fonctionnement des choses Alors quil nexiste pas actuellement de tableau dhonneur Netfilternous souhaitons saluer les personnes qui apportent leur aide

Junk Alins

ltjuanjomatupcesgt

bull

Joe Van Andelbull Michael T Babcock

ltmbabcockfibrespeednetgt

bull

Christopher Barton

ltcpbartonuiucedugt

bull

Peter Bieringer

ltpbbieringerdegt

bull

Ard van Breemen

ltardkwaaknetgt

bull

Ron Brinker

ltserviceemciscomgt

bull

ukasz Bromirski

ltlbromirskimr0vkaeuorggt

bull

Lennert Buytenhek

ltbuytenhgnuorggt

bull

Esteve Camps

ltestevehadesudgesgt

bull

Ricardo Javier Cardenes

ltricardoconysiscomgt

bull

Stef Coene

ltstefcoenedocumorggt

bull

Don Cohen

ltdon-lartcisiscs3-inccomgt

bull

Jonathan Corbet

ltlwnlwnnetgt

bull

Gerry N5JXS Creager

ltgerrycstamuedugt

bull

Marco Davids

ltmarcosaranlgt

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 115

Jonathan Day

ltjd9812my-dejacomgt

bull

Martin aka devik Devera

ltdevikcdiczgt

bull

Hannes Ebner

lthefli4ldegt

bull

Derek Fawcus

ltdfawcusciscocomgt

bull

David Fries

ltdfriesmailwinorggt

bull

Stephan Kobold Gehring

ltStephanGehringbechtledegt

bull

Jacek Glinkowski

ltjglinkowhnscomgt

bull

Andrea Glorioso

ltsamaperchetopiorggt

bull

Thomas Graaf

lttgrafsuugchgt

bull

Sandy Harris

ltsandystormcagt

bull

Nadeem Hasan

ltnhasanusanetgt

bull

Erik Hensema

lterikhensemaxs4allnlgt

bull

Vik Heyndrickx

ltvikheyndrickxedchqcomgt

bull

Spauldo Da Hippie

ltspauldousanetgt

bull

Koos van den Hout

ltkooskzdoosxs4allnlgt

bull

Stefan Huelbrock ltshuelbrockdatasystemsdegtbull Ayotunde Itayemi

ltaitayemimetrongcomgt

bull

Alexander W Janssen ltyallaynfonaticdegtbull Andreas Jellinghaus ltajdungeoninkadegtbull Gareth John ltgdjohnzeplerorggtbull Dave Johnsonbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

116 Chapitre 20 Remerciements

ltdjwwwuklinuxorggtMartin Josefsson ltgandalfwlugwestbosegtbull Andi Kleen ltaksusedegtbull Andreas J Koenig ltandreaskoeniganimadegtbull Pawel Krawczyk ltkravietzalfacetiplgtbull Amit Kucheria ltamitkittckuedugtbull Edmund Lau ltedlauucficsuciedugtbull Philippe Latu ltphilippelatulinux-franceorggtbull Arthur van Leeuwen ltarthurvlscikunnlgtbull Jose Luis Domingo Lopez

ltjdomingo24x7linuxcomgt

bull

Robert Lowe

ltroberthlowelawrenceedugt

bull

Jason Lunz ltjccgatechedugtbull Stuart Lynne ltslfireplugnetgtbull Alexey Mahotkin ltalexmformulabezrugtbull Predrag Malicevic ltpmalicieeeorggtbull Patrick McHardy ltkabertrashnetgtbull Andreas Mohr ltandilisasdegtbull James Morris ltjmorrisintercodecomaugtbull Andrew Morton ltakpmzipcomaugtbull Wim van der Mostbull Stephan Mueller ltsmuellerchronoxdegtbull Togan Muftuoglu lttoganmyahoocomgtbull Chris Murray ltcmurraystargatecagtbull Patrick Nagelschmidt ltdtogmxnetgtbull Ram Narula ltramprincess1netgtbull Jorge Novo ltjnovoeducanetnetgtbull Patrik ltphkurdnugtbull Pl Osgyny ltoplabwestel900netgtbull Lutz Preszligler ltLutzPresslerSerNetDEgtbull Jason Pyeron ltjasonpyeroncomgtbull Rod Roark ltrodsunsetsystemscomgtbull Pavel Roskin ltproskignuorggtbull Rusty Russell ltrustyrustcorpcomaugtbull Mihai RUSU ltdizzyroedunetgtbull Rob Pitman ltrobpitmancozagtbull Jamal Hadi Salim lthadicyberuscagtbull Ren Serral ltrserralacupcesgtbull David Sauer ltdavidspenguinczgtbull Sheharyar Suleman Shaikh ltsss23drexeledugtbull Stewart Shields ltMourningBladebigfootcomgtbull Nick Silberstein ltnhsilberyahoocomgtbull Konrads Smelkov ltkonradsinterbaltikacomgtbull William Stearns

ltwstearnspoboxcomgt

bull

Andreas Steinmetz ltastdomdvdegtbull Matthew Strait ltstraitmmathcscarletonedugtbull Jason Tackaberry lttacklinuxcomgtbull Charles Tassell ltctassellisnnetgtbull Glen Turner ltglenturneraarneteduaugtbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 117

Tea Sponsor Eric Veldhuyzen ltericterranugtbull Thomas Walpuski ltthomasbenderthinknerddegtbull Song Wang ltwsongeceuciedugtbull Chris Wilson

ltchrisnetserverscoukgt

bull

Lazar Yanackiev

ltLyanackievgmxnetgt

bull

Pedro Larroy

ltpiotrmemberfsforggt

Chaptitre 15 section 10 Exemple dune solution de translation dadresse avec de la QoSdiams Chaptitre 17 section 1 Configurer OSPF avec Zebradiams

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

118 Chapitre 20 Remerciements

  • HOWTO du routage avanceacute et du controcircle de trafic sous Linux
Page 6: HOWTO du routage avanc© et du contr´le de trafic sous Linux

Connaissances preacutealables

Comme le titre limplique ceci est un HOWTO ltlt avanceacute gtgt Bien quil ne soit pas besoin decirctre un expertreacuteseau certains preacute-requis sont neacutecessaires

Voici dautres reacutefeacuterences qui pourront vous aider agrave en apprendre plus

Rusty Russells networking-concepts-HOWTOTregraves bonne introduction expliquant ce quest un reacuteseau et comment on le connecte agrave dautres reacuteseaux

Linux Networking-HOWTO (ex Net-3 HOWTO)Excellent document bien que tregraves bavard Il vous apprendra beaucoup de choses qui sont deacutejagraveconfigureacutees si vous ecirctes capable de vous connecter agrave Internet Il peut eacuteventuellement ecirctre situeacute agraveusrdocHOWTONET-HOWTOtxt mais peut eacutegalement ecirctre trouveacute en ligne

Ce que Linux peut faire pour vous

Une petite liste des choses qui sont possibles

Limiter la bande passante pour certains ordinateursbull Limiter la bande passante VERS certains ordinateursbull Vous aider agrave partager eacutequitablement votre bande passantebull Proteacuteger votre reacuteseau des attaques de type Deacuteni de Servicebull Proteacuteger Internet de vos clientsbull Multiplexer plusieurs serveurs en un seul pour leacutequilibrage de charge ou une disponibiliteacute ameacutelioreacuteebull Restreindre laccegraves agrave vos ordinateursbull Limiter laccegraves de vos utilisateurs vers dautres hocirctesbull Faire du routage baseacute sur lID utilisateur (eh oui ) ladresse MAC ladresse IP source le port le typede service lheure ou le contenu

bull

Peu de personnes utilisent couramment ces fonctionnaliteacutes avanceacutees Il y a plusieurs raisons agrave cela Bien quela documentation soit fournie la prise en main est difficile Les commandes de controcircle du trafic ne sontpratiquement pas documenteacutees

Notes diverses

Il y a plusieurs choses qui doivent ecirctre noteacutees au sujet de ce document Bien que jen ai eacutecrit la majeure partieje ne veux vraiment pas quil reste tel quel Je crois beaucoup agrave lOpen Source je vous encourage donc agraveenvoyer des remarques des mises agrave jour des corrections etc Nheacutesitez pas agrave mavertir des coquilles ouderreurs pures et simples Si mon anglais vous paraicirct parfois peu naturel ayez en tecircte sil vous plaicirct quelanglais nest pas ma langue natale Nheacutesitez pas agrave menvoyer vos suggestions amplsqbNdT en anglais ]

Si vous pensez que vous ecirctes plus qualifieacute que moi pour maintenir une section ou si vous pensez que vouspouvez eacutecrire et maintenir de nouvelles sections vous ecirctes le bienvenu La version SGML de ce HOWTO estdisponible via CVS Jenvisage que dautres personnes puissent travailler dessus

Pour vous aider vous trouverez beaucoup de mentions FIXME (NdT A CORRIGER) Les corrections sonttoujours les bienvenues Si vous trouvez une mention FIXME vous saurez que vous ecirctes en territoire inconnuCela ne veut pas dire quil ny a pas derreurs ailleurs faites donc tregraves attention Si vous avez valideacute quelquechose faites-nous le savoir ce qui nous permettra de retirer la mention FIXME

Je prendrai quelques liberteacutes tout au long de cet HOWTO Par exemple je pars de lhypothegravese duneconnexion Internet agrave 10 Mbits bien que je sache tregraves bien que cela ne soit pas vraiment courant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

6 Connaissances preacutealables

Accegraves CVS et propositions de mises agrave jour

Ladresse canonique de cet HOWTO est Ici

Nous avons maintenant un CVS en accegraves anonyme disponible depuis le monde entier Cela est inteacuteressantpour plusieurs raisons Vous pouvez facilement teacuteleacutecharger les nouvelles versions de ce HOWTO et soumettredes mises agrave jour

En outre cela permet aux auteurs de travailler sur la source de faccedilon indeacutependante ce qui est une bonne choseaussi

$ export CVSROOT=pserveranonoutpostds9anlvarcvsroot$ cvs loginCVS password [enter cvs (sans les caractegraveres )]$ cvs co 24routingcvs server Updating 24routingU 24routinglartcdb

Si vous avez fait des changements et que vous vouliez contribuer au HOWTO exeacutecutez cvs -z3 diff-uBb et envoyez-nous le reacutesultat par courrier eacutelectronique de faccedilon agrave pouvoir facilement inteacutegrer lesmodifications Merci Au fait soyez sucircr que vous avez eacutediteacute le fichier db les autres documents eacutetant geacuteneacutereacutesagrave partir de celui-ci

Un fichier Makefile est fourni pour vous aider agrave creacuteer des fichiers PostScript dvi pdf html et texte Vouspouvez avoir agrave installer les docbook docbook-utils ghostscript et tetex pour obtenir tous les formats de sortie

Faites attention de ne pas eacutediter le fichier 24routingsgml Il contient une ancienne version du HOWTO Lebon fichier est lartcdb

Liste de diffusion

Les auteurs reccediloivent de plus en plus de courriers eacutelectroniques agrave propos de cet HOWTO Vu linteacuterecirct de lacommunauteacute il a eacuteteacute deacutecideacute la mise en place dune liste de diffusion ougrave les personnes pourront discuter duroutage avanceacute et du controcircle de trafic Vous pouvez vous abonner agrave la liste ici

Il devra ecirctre noteacute que les auteurs sont tregraves heacutesitants agrave reacutepondre agrave des questions qui nont pas eacuteteacute poseacutees sur laliste Nous aimerions que la liste devienne une sorte de base de connaissance Si vous avez une questionrecherchez sil vous plaicirct dabord dans larchive et ensuite postez-lagrave dans la liste de diffusion

Plan du document

Nous allons essayer de faire des manipulations inteacuteressantes degraves le deacutebut ce qui veut dire que tout ne sera pasexpliqueacute en deacutetail tout de suite Veuillez passer sur ces deacutetails et accepter de consideacuterer quils deviendrontclairs par la suite

Le routage et le filtrage sont deux choses distinctes Le filtrage est tregraves bien documenteacute dans le HOWTO deRusty disponible ici

Rustys Remarkably Unreliable Guidesbull

Nous nous focaliserons principalement sur ce quil est possible de faire en combinant netfilter et iproute2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Accegraves CVS et propositions de mises agrave jour 7

Chapitre 3 Introduction agrave iproute2

Pourquoi iproute2

La plupart des distributions Linux et des UNIX utilisent couramment les veacuteneacuterables commandes arp ifconfiget route Bien que ces outils fonctionnent ils montrent quelques comportements inattendus avec les noyauxLinux des seacuteries 22 et plus Par exemple les tunnels GRE font partie inteacutegrante du routage de nos jours maisils neacutecessitent des outils complegravetement diffeacuterents

Avec iproute2 les tunnels font partie inteacutegrante des outils

Les noyaux Linux des seacuteries 22 et plus ont un sous-systegraveme reacuteseau complegravetement reacuteeacutecrit Ce nouveau codagede la partie reacuteseau apporte agrave Linux des performances et des fonctionnaliteacutes qui nont pratiquement pasdeacutequivalent parmi les autres systegravemes dexploitation En fait le nouveau logiciel de filtrage routage et declassification possegravede plus de fonctionnaliteacutes que les logiciels fournis sur beaucoup de routeurs deacutedieacutes depare-feu et de produits de mise en forme (shaping) du trafic

Dans les systegravemes dexploitation existants au fur et agrave mesure que de nouveaux concepts reacuteseau apparaissaientles deacuteveloppeurs sont parvenus agrave les greffer sur les structures existantes Ce travail constant dempilage decouches a conduit agrave des codes reacuteseau aux comportements eacutetranges un peu comme les langues humaines Dansle passeacute Linux eacutemulait le mode de fonctionnement de SunOS ce qui neacutetait pas lideacuteal

La nouvelle structure diproute2 a permis de formuler clairement des fonctionnaliteacutes impossibles agraveimpleacutementer dans le sous-systegraveme reacuteseau preacuteceacutedent

Un tour dhorizon diproute2

Linux possegravede un systegraveme sophistiqueacute dallocation de bande passante appeleacute Controcircle de trafic (TrafficControl) Ce systegraveme supporte diffeacuterentes meacutethodes pour classer ranger par ordre de prioriteacute partager etlimiter le trafic entrant et sortant

Nous commencerons par un petit tour dhorizon des possibiliteacutes diproute2

Preacuterequis

Vous devez ecirctre sucircr que vous avez installeacute les outils utilisateur (NdT userland tools par opposition agrave la partieltlt noyau gtgt diproute2) Le paquet concerneacute sappelle iproute sur RedHat et Debian Autrement il peut ecirctretrouveacute agrave ftpftpinracruip-routingiproute2-224-now-sstargz

Vous pouvez aussi essayer iproute2-currenttargz pour la derniegravere version

Certains eacuteleacutements diproute vous imposent lactivation de certaines options du noyau Il devra eacutegalement ecirctrenoteacute que toutes les versions de RedHat jusquagrave la version 62 incluse nont pas les fonctionnaliteacutes du controcirclede trafic activeacutees dans le noyau fourni par deacutefaut

RedHat 72 contient tous les eacuteleacutements par deacutefaut

Soyez eacutegalement sucircr que vous avez le support netlink mecircme si vous devez choisir de compiler votrepropre noyau iproute2 en a besoin

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

8 Chapitre 3 Introduction agrave iproute2

Explorer votre configuration courante

Cela peut vous paraicirctre surprenant mais iproute2 est deacutejagrave configureacute Les commandes courantes ifconfig etroute utilisent deacutejagrave les appels systegraveme avanceacutes diproute2 mais essentiellement avec les options par deacutefaut(cest-agrave-dire ennuyeuses)

Loutil ip est central et nous allons lui demander de nous montrer les interfaces

ip nous montre nos liens

[ahuhome ahu]$ ip link list1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 0000000000002 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff4 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp

La sortie peut varier mais voici ce qui est afficheacute pour mon routeur NAT (NdT translation dadresse) chezmoi Jexpliquerai seulement une partie de la sortie dans la mesure ougrave tout nest pas directement pertinent

La premiegravere interface que nous voyons est linterface loopback Bien que votre ordinateur puissefonctionner sans je vous le deacuteconseille La taille de MTU (uniteacute maximum de transmission) est de 3924octets et loopback nest pas supposeacute ecirctre mis en file dattente ce qui prend tout son sens dans la mesure ougravecette interface est le fruit de limagination de votre noyau

Je vais passer sur linterface dummy pour linstant et il se peut quelle ne soit pas preacutesente sur votre ordinateurIl y a ensuite mes deux interfaces physiques lune du cocircteacute de mon modem cacircble lautre servant mon segmentethernet agrave la maison De plus nous voyons une interface ppp0

Notons labsence dadresses IP Iproute deacuteconnecte les concepts de ltlt liens gtgt et ltlt dadresses IP gtgt AveclIP aliasing le concept de ladresse IP canonique est devenu de toute faccedilon sans signification

ip nous montre bien cependant ladresse MAC lidentifiant mateacuteriel de nos interfaces ethernet

ip nous montre nos adresses IP

[ahuhome ahu]$ ip address show 1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue linkloopback 000000000000 brd 000000000000 inet 1270018 brd 127255255255 scope host lo2 dummy ltBROADCASTNOARPgt mtu 1500 qdisc noop linkether 000000000000 brd ffffffffffff3 eth0 ltBROADCASTMULTICASTPROMISCUPgt mtu 1400 qdisc pfifo_fast qlen 100 linkether 4854e82a4716 brd ffffffffffff inet 100018 brd 10255255255 scope global eth04 eth1 ltBROADCASTMULTICASTPROMISCUPgt mtu 1500 qdisc pfifo_fast qlen 100 linkether 00e04c392478 brd ffffffffffff3764 ppp0 ltPOINTOPOINTMULTICASTNOARPUPgt mtu 1492 qdisc pfifo_fast qlen 10 linkppp inet 2126494251 peer 2126494132 scope global ppp0

Cela contient plus dinformations ip montre toutes nos adresses et agrave quelles cartes elles appartiennent inetsignifie Internet (IPv4) Il y a beaucoup dautres familles dadresses mais elles ne nous concernent pas pour le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explorer votre configuration courante 9

moment

Examinons linterface eth0 de plus pregraves Il est dit quelle est relieacutee agrave ladresse internet 100018Quest-ce que cela signifie Le 8 deacutesigne le nombre de bits reacuteserveacutes agrave ladresse reacuteseau Il y a 32 bits donc ilreste 24 bits pour deacutesigner une partie de notre reacuteseau Les 8 premiers bits de 10001 correspondent agrave10000 notre adresse reacuteseau et notre masque de sous-reacuteseau est 255000

Les autres bits repegraverent des machines directement connecteacutees agrave cette interface Donc 10250313 estdirectement disponible sur eth0 comme lest 10001 dans notre exemple

Avec ppp0 le mecircme concept existe bien que les nombres soient diffeacuterents Son adresse est2126494251 sans masque de sous-reacuteseau Cela signifie que vous avez une liaison point agrave point et quetoutes les adresses agrave lexception de 2126494251 sont distantes Il y a cependant plus dinformationsEn effet on nous dit que de lautre cocircteacute du lien il ny a encore quune seule adresse 21264941 Le 32nous preacutecise quil ny a pas de ltlt bits reacuteseau gtgt

Il est absolument vital que vous compreniez ces concepts Reacutefeacuterez-vous agrave la documentation mentionneacutee audeacutebut de ce HOWTO si vous avez des doutes

Vous pouvez aussi noter qdisc qui deacutesigne la gestion de la mise en file dattente (Queueing Discipline)Cela deviendra vital plus tard

ip nous montre nos routes

Nous savons maintenant comment trouver les adresses 10xyz et nous sommes capables datteindre21264941 Cela nest cependant pas suffisant et nous avons besoin dinstructions pour atteindre lemonde LInternet est disponible via notre connexion PPP et il se trouve que 21264941 est precirct agravepropager nos paquets agrave travers le monde et agrave nous renvoyer le reacutesultat

[ahuhome ahu]$ ip route show21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Cela se comprend de soi-mecircme Les 4 premiegraveres lignes donnent explicitement ce qui eacutetait sous-entendu parip address show la derniegravere ligne nous indiquant que le reste du monde peut ecirctre trouveacute via21264941 notre passerelle par deacutefaut Nous pouvons voir que cest une passerelle agrave cause du motltlt via gtgt qui nous indique que nous avons besoin denvoyer les paquets vers 21264941 et que cestelle qui se chargera de tout

En reacutefeacuterence voici ce que lancien utilitaire route nous propose

[ahuhome ahu]$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref UseIface21264941 0000 255255255255 UH 0 0 0 ppp010000 0000 255000 U 0 0 0 eth0127000 0000 255000 U 0 0 0 lo0000 21264941 0000 UG 0 0 0 ppp0

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

10 ip nous montre nos adresses IP

ARP

ARP est le Protocole de Reacutesolution dAdresse (Address Resolution Protocol) Il est deacutecrit dans le RFC 826ARP est utiliseacute par une machine dun reacuteseau local pour retrouver ladresse mateacuterielle (la localisation) duneautre machine sur le mecircme reacuteseau Les machines sur Internet sont geacuteneacuteralement connues par leur nom auquelcorrespond une adresse IP Cest ainsi quune machine sur le reacuteseau foocom est capable de communiqueravec une autre machine qui est sur le reacuteseau barnet Une adresse IP cependant ne peut pas vous indiquerla localisation physique de la machine Cest ici que le protocole ARP entre en jeu

Prenons un exemple tregraves simple Supposons que jaie un reacuteseau composeacute de plusieurs machines dont lamachine foo dadresse IP 10001 et la machine bar qui a ladresse IP 10002 Maintenant fooveut envoyer un ping vers bar pour voir sil est actif mais foo na aucune indication sur la localisation debar Donc si foo deacutecide denvoyer un ping vers bar il a besoin denvoyer une requecircte ARP Cette requecircteARP est une faccedilon pour foo de crier sur le reacuteseau ltlt Bar (10002) Ougrave es-tu gtgt Par conseacutequent toutesles machines sur le reacuteseau entendront foo crier mais seul bar (10002) reacutepondra Bar enverra unereacuteponse ARP directement agrave foo ce qui revient agrave dire ltlt Foo (10001) je suis ici agrave ladresse006094E0812 gtgt Apregraves cette simple transaction utiliseacutee pour localiser son ami sur le reacuteseau foo estcapable de communiquer avec bar jusquagrave ce quil (le cache ARP de foo) oublie ougrave bar est situeacute(typiquement au bout de 15 minutes sur Unix)

Maintenant voyons comment cela fonctionne Vous pouvez consulter votre cache (table) ARP (neighbor)comme ceci

[rootespa041 homesrciputils] ip neigh show937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Comme vous pouvez le voir ma machine espa041 (937641) sait ougrave trouver espa042 (937642)et espagate (93761) Maintenant ajoutons une autre machine dans le cache ARP

[rootespa041 homepaulschgnome-desktop] ping -c 1 espa043PING espa043austinibmcom (937643) from 937641 56(84) bytes of data64 bytes from 937643 icmp_seq=0 ttl=255 time=09 ms

1 packets transmitted 1 packets received 0 packet lossround-trip minavgmax = 090909 ms

[rootespa041 homesrciputils] ip neigh show937643 dev eth0 lladdr 000629218020 nud reachable937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud reachable

Par conseacutequent lorsque espa041 a essayeacute de contacter espa043 ladresse mateacuterielle de espa043 (salocalisation) a alors eacuteteacute ajouteacutee dans le cache ARP Donc tant que la dureacutee de vie de lentreacutee correspondant agraveespa043 dans le cache ARP nest pas deacutepasseacutee espa041 sait localiser espa043 et na plus besoindenvoyer de requecircte ARP

Maintenant effaccedilons espa043 de notre cache ARP

[rootespa041 homesrciputils] ip neigh delete 937643 dev eth0[rootespa041 homesrciputils] ip neigh show937643 dev eth0 nud failed937642 dev eth0 lladdr 0060083fe9f9 nud reachable93761 dev eth0 lladdr 0006292173c8 nud stale

Maintenant espa041 a agrave nouveau oublieacute la localisation despa043 et aura besoin denvoyer une autrerequecircte ARP la prochaine fois quil voudra communiquer avec lui Vous pouvez aussi voir ci-dessus que leacutetat

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP 11

despagate (93761) est passeacute en stale Cela signifie que la localisation connue est encore valide maisquelle devra ecirctre confirmeacutee agrave la premiegravere transaction avec cette machine

Chapitre 4 Regravegles - bases de donneacutees des politiquesde routageSi vous avez un routeur important il se peut que vous vouliez satisfaire les besoins de diffeacuterentes personnesqui peuvent ecirctre traiteacutees diffeacuteremment Les bases de donneacutees des politiques de routage vous aident agrave fairecela en geacuterant plusieurs ensembles de tables de routage

Si vous voulez utiliser cette fonctionnaliteacute assurez-vous que le noyau est compileacute avec les options IP Advanced router et IP policy routing

Quand le noyau doit prendre une deacutecision de routage il recherche quelle table consulter Par deacutefaut il y a troistables Lancien outil route modifie les tables principale (main) et locale (local) comme le fait loutil ip (pardeacutefaut)

Les regravegles par deacutefaut

[ahuhome ahu]$ ip rule list0 from all lookup local 32766 from all lookup main 32767 from all lookup default

Ceci liste la prioriteacute de toutes les regravegles Nous voyons que toutes les regravegles sont appliqueacutees agrave tous les paquets(from all) Nous avons vu la table main preacuteceacutedemment sa sortie seffectuant avec ip route ls mais lestables local et default sont nouvelles

Si nous voulons faire des choses fantaisistes nous pouvons creacuteer des regravegles qui pointent vers des tablesdiffeacuterentes et qui nous permettent de redeacutefinir les regravegles de routage du systegraveme

Pour savoir exactement ce que fait le noyau en preacutesence dun assortiment de regravegles plus complet reacutefeacuterez-vousagrave la documentation ip-cref dAlexey amplsqbNdT dans le paquetage iproute2 de votre distribution]

Politique de routage simple par ladresse source

Prenons encore une fois un exemple reacuteel Jai 2 modems cacircble connecteacutes agrave un routeur Linux NAT(masquerading) Les personnes habitant avec moi me paient pour avoir accegraves agrave Internet Supposons quun demes co-locataires consulte seulement hotmail et veuille payer moins Cest daccord pour moi mais il utiliserale modem le plus lent

Le modem cacircble ltlt rapide gtgt est connu sous 2126494251 et est en liaison PPP avec 21264941Le modem cacircble ltlt lent gtgt est connu sous diverses adresses IP 2126478148 dans notre exemple avecun lien vers 1959698253

La table locale

[ahuhome ahu]$ ip route list table localbroadcast 127255255255 dev lo proto kernel scope link src 127001 local 10001 dev eth0 proto kernel scope host src 10001 broadcast 10000 dev eth0 proto kernel scope link src 10001 local 2126494251 dev ppp0 proto kernel scope host src 2126494251 broadcast 10255255255 dev eth0 proto kernel scope link src 10001 broadcast 127000 dev lo proto kernel scope link src 127001

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

12 Chapitre 4 Regravegles - bases de donneacutees des politiques de routage

local 2126478148 dev ppp2 proto kernel scope host src 2126478148 local 127001 dev lo proto kernel scope host src 127001 local 1270008 dev lo proto kernel scope host src 127001

Il y a beaucoup de choses eacutevidentes mais aussi des choses qui ont besoin decirctre preacuteciseacutees quelque peu ce quenous allons faire La table de routage par deacutefaut est vide

Regardons la table principale (main)

[ahuhome ahu]$ ip route list table main 1959698253 dev ppp2 proto kernel scope link src 2126478148 21264941 dev ppp0 proto kernel scope link src 2126494251 100008 dev eth0 proto kernel scope link src 10001 1270008 dev lo scope link default via 21264941 dev ppp0

Maintenant nous geacuteneacuterons une nouvelle regravegle que nous appellerons John pour notre hypotheacutetiqueco-locataire Bien que nous puissions travailler avec des nombres IP purs il est plus facile dajouter notre tabledans le fichier etciproute2rtamplowbartables

echo 200 John gtgt etciproute2rt_tables ip rule add from 100010 table John ip rule ls0 from all lookup local 32765 from 100010 lookup John32766 from all lookup main 32767 from all lookup default

Maintenant tout ce quil reste agrave faire est de geacuteneacuterer la table John et de vider le cache des routes

ip route add default via 1959698253 dev ppp2 table John ip route flush cache

Et voilagrave qui est fait Il ne reste plus comme exercice laisseacute au lecteur quagrave impleacutementer cela dans ip-up

Routage avec plusieurs accegraves Internetfournisseurs daccegraves

Une configuration classique est la suivante ougrave deux fournisseurs daccegraves permettent la connexion dun reacuteseaulocal (ou mecircme dune simple machine) agrave Internet

________ +--------------+ | | | +-------------+ Fournisseur 1+------- __ | | | ___ _ +------+-------+ +--------------+ | _ __ | if1 | | | || Reacuteseau Local -----+ Routeur Linux| | Internet _ __ | | | __ __ | if2 | ___ +------+-------+ +--------------+ | | | | +-------------+ Fournisseur 2+------- | | | +--------------+ ________

Il y a geacuteneacuteralement deux questions agrave se poser pour cette configuration

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de routage simple par ladresse source 13

Accegraves seacutepareacute

La premiegravere est de savoir comment router les reacuteponses aux paquets entrants par un fournisseur particulierdisons le Fournisseur 1 vers ce mecircme fournisseur

Commenccedilons par deacutefinir quelques symboles $IF1 sera le nom de la premiegravere interface (if1 sur la figureau-dessus) et $IF2 le nom de la deuxiegraveme interface $IP1 sera alors ladresse IP associeacutee agrave $IF1 et $IP2 seraladresse IP associeacutee agrave $IF2 $P1 sera ladresse IP de la passerelle du fournisseur daccegraves 1 et $P2 seraladresse IP de la passerelle du fournisseur daccegraves 2 Enfin $P1_NET sera ladresse reacuteseau agrave linteacuterieur duquelse situe $P1 et $P2_NET sera ladresse reacuteseau agrave linteacuterieur duquel se situe $P2

Deux tables de routage suppleacutementaires sont creacuteeacutees par exemple T1 et T2 Celles-ci sont ajouteacutees dansetciproute2rt_tables La configuration du routage dans ces tables seffectue de la faccedilonsuivante

ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2

Rien de vraiment spectaculaire Une route est simplement positionneacutee vers la passerelle et une route pardeacutefaut via cette passerelle est mise en place comme nous le ferions dans le cas dun seul fournisseur daccegravesIci les routes sont placeacutees dans des tables seacutepareacutees une par fournisseur daccegraves Il est agrave noter que la route versle reacuteseau suffit dans la mesure ougrave elle indique comment trouver nimporte quel hocircte dans ce reacuteseau ce quiinclut la passerelle

La table de routage principale est maintenant configureacutee Cest une bonne ideacutee de router les eacuteleacutements agravedestination dun voisin direct agrave travers linterface connecteacutee agrave ce voisin Notez les arguments src qui assurentque la bonne adresse IP source sera choisie

ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2

Indiquez maintenant votre preacutefeacuterence pour votre route par deacutefaut

ip route add default via $P1

Vous configurez ensuite les regravegles de routage Celles-ci deacutefinissent la table qui sera vraiment choisie pour leroutage Il faut sassurer que le routage seffectue agrave travers une interface donneacutee si vous avez ladresse sourcecorrespondante

ip rule add from $IP1 table T1 ip rule add from $IP2 table T2

Cet ensemble de commandes vous assure que toutes les reacuteponses au trafic entrant sur une interface particuliegravereseront envoyeacutees par cette interface

Avertissement

Notes dun lecteur si $P0_NET est le reacuteseau local et $IF0 est son interface alors les entreacutees suivantes sontdeacutesirables

ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

14 Accegraves seacutepareacute

ip route add 1270008 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 1270008 dev lo table T2

Nous avons maintenant une configuration tregraves basique Elle marchera pour tous les processus exeacutecuteacutes sur lerouteur lui-mecircme ainsi que pour le reacuteseau local si celui-ci est masqueacute Si ce nest pas le cas soit vous avezune plage dadresses IP pour chaque fournisseur daccegraves soit vous masquez vers lun des deux fournisseursdaccegraves Dans les deux cas vous ajouterez des regravegles indiquant en fonction de ladresse IP de la machine dureacuteseau local vers quel fournisseur vous allez router

Balance de charge

La seconde question concerne la balance de charge du trafic sortant vers les deux fournisseurs daccegraves Cecinest pas vraiment tregraves dur si vous avez deacutejagrave configureacute laccegraves seacutepareacute comme deacutecrit ci-dessus

Au lieu de choisir lun des deux fournisseurs daccegraves comme route par deacutefaut celle-ci peut ecirctre une routemulti-chemin Par deacutefaut le noyau reacutepartira les routes vers les deux fournisseurs daccegraves Ceci est reacutealiseacute de lafaccedilon suivante (construit eacutegalement sur lexemple de la section de laccegraves seacutepareacute)

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

Ceci reacutealisera la balance des routes vers les deux fournisseurs Les paramegravetres weight peuvent permettre defavoriser un fournisseur par rapport agrave un autre

Il est agrave noter que la balance de charge ne sera pas parfaite dans la mesure ougrave elle est baseacutee sur les routes et quecelles-ci sont mises dans des caches Ceci signifie que les routes vers les sites les plus souvent utiliseacutespasseront toujours par le mecircme fournisseur daccegraves

De plus si vous voulez vraiment mettre en oeuvre ceci vous devriez eacutegalement aller consulter les mises agrave jourde Julien Anastasov agrave httpwwwssibg~jaroutes Elles rendront le travail plus facile

Chapitre 5 GRE et autres tunnelsIl y a trois sortes de tunnels sous Linux lIP dans un tunnel IP le tunnel GRE et les tunnels qui existent endehors du noyau (comme PPTP par exemple)

Quelques remarques geacuteneacuterales agrave propos des tunnels

Les tunnels peuvent faire des choses tregraves inhabituelles et vraiment sympas Ils peuvent aussi absolument toutdeacutetraquer si vous ne les avez pas configureacutes correctement Ne deacutefinissez pas votre route par deacutefaut sur untunnel agrave moins que vous ne sachiez EXACTEMENT ce que vous faites

De plus le passage par un tunnel augmente le poids des en-tecirctes (overhead) puisquun en-tecircte IPsuppleacutementaire est neacutecessaire Typiquement ce surcoucirct est de 20 octets par paquet Donc si la taillemaximum de votre paquet sur votre reacuteseau (MTU) est de 1500 octets un paquet qui est envoyeacute agrave travers untunnel sera limiteacute agrave une taille de 1480 octets Ce nest pas neacutecessairement un problegraveme mais soyez sucircr davoirbien eacutetudieacute la fragmentation et le reacuteassemblage des paquets IP quand vous preacutevoyez de relier des reacuteseaux degrande taille par des tunnels Et bien sucircr la maniegravere la plus rapide de creuser un tunnel est de creuser des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 5 GRE et autres tunnels 15

cocircteacutes

IP dans un tunnel IP

Ce type de tunnel est disponible dans Linux depuis un long moment Il neacutecessite deux modules ipipo etnewamplowbartunnelo

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsInternet) Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C

et le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quel paquet de A vers B etvice-versa Il est eacutegalement possible dutiliser lInternet pour cela

Voici ce quil faut faire

Premiegraverement assurez-vous que les modules soient installeacutes

insmod ipipoinsmod new_tunnelo

Ensuite sur le routeur du reacuteseau A faites la chose suivante

ifconfig tunl0 10011 pointopoint 172192021route add -net 10020 netmask 2552552550 dev tunl0

et sur le routeur du reacuteseau B

ifconfig tunl0 10021 pointopoint 172161718route add -net 10010 netmask 2552552550 dev tunl0

Et quand vous aurez termineacute avec votre tunnel

ifconfig tunl0 down

Vite fait bien fait Vous ne pouvez pas transmettre les paquets de diffusion (broadcast) ni le trafic IPv6 agravetravers un tunnel IP-IP Vous ne pouvez connecter que deux reacuteseaux IPv4 qui normalement ne seraient pascapables de se ltlt parler gtgt cest tout Dans la mesure ougrave la compatibiliteacute a eacuteteacute conserveacutee ce code tournedepuis un bon moment et il reste compatible depuis les noyaux 13 Le tunnel Linux IP dans IP ne fonctionnepas avec dautres systegravemes dexploitation ou routeurs pour autant que je sache Cest simple ccedila marcheUtilisez-le si vous le pouvez autrement utilisez GRE

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

16 Quelques remarques geacuteneacuterales agrave propos des tunnels

Le tunnel GRE

GRE est un protocole de tunnel qui a eacuteteacute agrave lorigine deacuteveloppeacute par Cisco et qui peut reacutealiser plus de chosesque le tunnel IP dans IP Par exemple vous pouvez aussi transporter du trafic multi-diffusion (multicast) et delIPv6 agrave travers un tunnel GRE

Dans Linux vous aurez besoin du module ipamplowbargreo

Le tunnel IPv4

Dans un premier temps inteacuteressons-nous au tunnel IPv4

Disons que vous avez trois reacuteseaux 2 reacuteseaux internes A et B et un reacuteseau intermeacutediaire C (ou disonsinternet)

Les caracteacuteristiques du reacuteseau A sont

reacuteseau 10010masque de sous-reacuteseau 2552552550routeur 10011

Le routeur a ladresse 172161718 sur le reacuteseau C Appelons ce reacuteseau neta

Et pour le reacuteseau B

reacuteseau 10020masque de sous-reacuteseau 2552552550routeur 10021

Le routeur a ladresse 172192021 sur le reacuteseau C Appelons ce reacuteseau netb

En ce qui concerne le reacuteseau C nous supposerons quil transmettra nimporte quels paquets de A vers B etvice-versa Comment et pourquoi on sen moque

Sur le routeur du reacuteseau A nous faisons la chose suivante

ip tunnel add netb mode gre remote 172192021 local 172161718 ttl 255ip link set netb upip addr add 10011 dev netbip route add 1002024 dev netb

Discutons un peu de cela Sur la ligne 1 nous avons ajouteacute un peacuteripheacuterique tunnel que nous avons appeleacutenetb (ce qui est eacutevident dans la mesure ougrave cest lagrave que nous voulons aller) De plus nous lui avons ditdutiliser le protocole GRE (mode gre) que ladresse distante est 172192021 (le routeur de lautrecocircteacute) que nos paquets ltlt tunneleacutes gtgt devront ecirctre geacuteneacutereacutes agrave partir de 172161718 (ce qui autorise votreserveur agrave avoir plusieurs adresses IP sur le reacuteseau C et ainsi vous permet de choisir laquelle sera utiliseacutee pourvotre tunnel) et que le champ TTL de vos paquets sera fixeacute agrave 255 (ttl 255)

La deuxiegraveme ligne active le peacuteripheacuterique

Sur la troisiegraveme ligne nous avons donneacute agrave cette nouvelle interface ladresse 10011 Cest bon pour depetits reacuteseaux mais quand vous commencez une exploitation miniegravere (BEAUCOUP de tunnels ) vouspouvez utiliser une autre gamme dadresses IP pour vos interfaces ltlt tunnel gtgt (dans cet exemple vouspourriez utiliser 10030)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le tunnel GRE 17

Sur la quatriegraveme ligne nous positionnons une route pour le reacuteseau B Notez la notation diffeacuterente pour lemasque de sous-reacuteseau Si vous necirctes pas familiariseacute avec cette notation voici comment ccedila marche vouseacutecrivez le masque de sous-reacuteseau sous sa forme binaire et vous comptez tous les 1 Si vous ne savez pascomment faire cela rappelez-vous juste que 255000 est 8 25525500 est 16 et2552552550 est 24 Et 2552552540 est 23 au cas ougrave ccedila vous inteacuteresserait

Mais arrecirctons ici et continuons avec le routeur du reacuteseau B

ip tunnel add neta mode gre remote 172161718 local 172192021 ttl 255ip link set neta upip addr add 10021 dev netaip route add 1001024 dev neta

Et quand vous voudrez retirer le tunnel sur le routeur A

ip link set netb downip tunnel del netb

Bien sucircr vous pouvez remplacer netb par neta pour le routeur B

Le tunnel IPv6

Voir la section 6 pour une courte description des adresses IPv6

Agrave propos des tunnels

Supposons que vous ayez le reacuteseau IPv6 suivant et que vous vouliez le connecter agrave une dorsale IPv6 (6bone)ou agrave un ami

Reacuteseau 3ffe406515a2196

Votre adresse IPv4 est 172161718 et le routeur 6bone a une adresse IPv4 172222324

ip tunnel add sixbone mode sit remote 172222324 local 172161718 ttl 255ip link set sixbone upip addr add 3ffe406515a2196 dev sixboneip route add 3ffe15 dev sixbone

Voyons cela de plus pregraves Sur la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique tunnel appeleacute sixboneNous lui avons affecteacute le mode sit (qui est le tunnel IPv6 sur IPv4) et lui avons dit ougrave lon va (remote) etdougrave lon vient (local) TTL est configureacute agrave son maximum 255 Ensuite nous avons rendu le peacuteripheacuteriqueactif (up) Puis nous avons ajouteacute notre propre adresse reacuteseau et configureacute une route pour 3ffe15 agravetravers le tunnel

Les tunnels GRE constituent actuellement le type de tunnel preacutefeacutereacute Cest un standard qui est largementadopteacute mecircme agrave lexteacuterieur de la communauteacute Linux ce qui constitue une bonne raison de lutiliser

Tunnels dans lespace utilisateur

Il y a des dizaines dimpleacutementations de tunnels agrave lexteacuterieur du noyau Les plus connues sont bien sucircr PPP etPPTP mais il y en a bien plus (certaines proprieacutetaires certaines seacutecuriseacutes dautres qui nutilisent pas IP) quideacutepassent le cadre de ce HOWTO

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

18 Le tunnel IPv4

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsaleIPv6 (6bone)Par Marco Davids ltmarcosaranlgt

NOTE au mainteneur

En ce qui me concerne ce tunnel IPv6-IPv4 nest pas par deacutefinition un tunnel GRE Vous pouvez reacutealiser untunnel IPv6 sur IPv4 au moyen des peacuteripheacuteriques tunnels GRE (tunnels GRE NIMPORTE QUOI vers IPv4)mais le peacuteripheacuterique utiliseacute ici (sit) ne permet que des tunnels IPv6 sur IPv4 ce qui est quelque chose dediffeacuterent

Tunnel IPv6

Voici une autre application des possibiliteacutes de tunnels de Linux Celle-ci est populaire parmi les premiersadeptes dIPv6 ou les pionniers si vous preacutefeacuterez Lexemple pratique deacutecrit ci-dessous nest certainement pas laseule maniegravere de reacutealiser un tunnel IPv6 Cependant cest la meacutethode qui est souvent utiliseacutee pour reacutealiser untunnel entre Linux et un routeur Cisco IPv6 et lexpeacuterience ma appris que cest ce type deacutequipement quebeaucoup de personnes ont Dix contre un que ceci sappliquera aussi pour vous -)

De petites choses agrave propos des adresses IPv6

Les adresses IPv6 sont en comparaison avec les adresses IPv4 vraiment grandes 128 bits contre 32 bits Etceci nous fournit la chose dont nous avons besoin beaucoup beaucoup dadresses IP 340282266920938463463374607431768211465 pour ecirctre preacutecis A part ceci IPv6 (ou IPnggeacuteneacuteration suivante (Next Generation)) est supposeacute fournir des tables de routage plus petites sur les routeursdes dorsales Internet une configuration plus simple des eacutequipements une meilleure seacutecuriteacute au niveau IP etun meilleur support pour la Qualiteacute de Service (QoS)

Un exemple 2002836b9820000000000000836b9886

Ecrire les adresses IPv6 peut ecirctre un peu lourd Il existe donc des regravegles qui rendent la vie plus facile

Ne pas utiliser les zeacuteros de tecircte comme dans IPv4 bull Utiliser des double-points de seacuteparation tous les 16 bits ou 2 octets bull Quand vous avez beaucoup de zeacuteros conseacutecutifs vous pouvez eacutecrire Vous ne pouvez cependantfaire cela quune seule fois par adresse et seulement pour une longueur de 16 bits

bull

Ladresse 2002836b9820000000000000836b9886 peut ecirctre eacutecrite2002836b9820836b9886 ce qui est plus amical

Un autre exemple ladresse 3ffe0000000000000000000034A1F32C peut ecirctre eacutecrite3ffe2034A1F32C ce qui est beaucoup plus court

IPv6 a pour but decirctre le successeur de lactuel IPv4 Dans la mesure ougrave cette technologie est relativementreacutecente il ny a pas encore de reacuteseau natif IPv6 agrave leacutechelle mondiale Pour permettre un deacuteveloppement rapidela dorsale IPv6 (6bone) a eacuteteacute introduite

Les reacuteseaux natifs IPv6 sont interconnecteacutes gracircce agrave lencapsulation du protocole IPv6 dans des paquets IPv4qui sont envoyeacutes agrave travers linfrastructure IPv4 existante dun site IPv6 agrave un autre

Cest dans cette situation que lon monte un tunnel

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 6 Tunnel IPv6 avec Cisco etou une dorsale IPv6 (6bone) 19

Pour ecirctre capable dutiliser IPv6 vous devrez avoir un noyau qui le supporte Il y a beaucoup de bonsdocuments qui expliquent la maniegravere de reacutealiser cela Mais tout se reacutesume agrave quelques eacutetapes

Reacutecupeacuterer une distribution Linux reacutecente avec une glibc convenablebull Reacutecupeacuterer alors les sources agrave jour du noyaubull

Si tout cela est fait vous pouvez alors poursuivre en compilant un noyau supportant lIPv6

Aller dans usrsrclinux et tapez bull make menuconfigbull Choisir Networking Optionsbull Seacutelectionner The IPv6 protocol IPv6 enable EUI-64 token format IPv6disable provider based addresses

bull

ASTUCE Ne compiler pas ces options en tant que module Ceci ne marchera souvent pas bien

En dautres termes compilez IPv6 directement dans votre noyau Vous pouvez alors sauvegarder votreconfiguration comme dhabitude et entreprendre la compilation de votre noyau

ASTUCE Avant de faire cela modifier votre Makefile comme suit EXTRAVERSION = -x --gt EXTRAVERSION = -x-IPv6

Il y a beaucoup de bonnes documentations sur la compilation et linstallation dun noyau Cependant cedocument ne traite pas de ce sujet Si vous rencontrez des problegravemes agrave ce niveau allez et recherchez dans ladocumentation des renseignements sur la compilation du noyau Linux correspondant agrave vos propresspeacutecifications

Le fichier usrsrclinuxREADME peut constituer un bon deacutepart Apregraves avoir reacutealiseacute tout ceci etredeacutemarreacute avec votre nouveau noyau flambant neuf vous pouvez lancer la commande sbinifconfig -a etnoter un nouveau peacuteripheacuterique sit0 SIT signifie Transition Simple dInternet (Simple Internet Transition)Vous pouvez vous auto complimenter vous avez maintenant franchi une eacutetape importante vers IP laprochaine geacuteneacuteration -)

Passons maintenant agrave leacutetape suivante Vous voulez connecter votre hocircte ou peut-ecirctre mecircme tout votre reacuteseauLAN agrave dautres reacuteseaux IPv6 Cela pourrait ecirctre la dorsale IPv6 ltlt 6bone gtgt qui a eacuteteacute speacutecialement mise enplace dans ce but particulier

Supposons que vous avez le reacuteseau IPv6 suivant 3ffe6046864 et que vous vouliez le connecter agraveune dorsale IPv6 ou agrave un ami Notez sil vous plaicirct que la notation sous-reacuteseau 64 est similaire agrave celle desadresses IPv4

Votre adresse IPv4 est 14510024181 et le routeur 6bone a ladresse IPv4 14510015

ip tunnel add sixbone mode sit remote 14510015 [local 14510024181 ttl 225] ip link set sixbone up ip addr add 3FFE60467296 dev sixbone ip route add 3ffe015 dev sixbone

Discutons de ceci Dans la premiegravere ligne nous avons creacuteeacute un peacuteripheacuterique appeleacute sixbone Nous lui avonsdonneacute lattribut sit (mode sit) (qui est le tunnel IPv6 dans IPv4) et nous lui avons dit ougrave aller (remote)et dougrave nous venions (local) TTL est configureacute agrave son maximum 255

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

20 Tunnel IPv6

Ensuite nous avons rendu le peacuteripheacuterique actif (up) Apregraves cela nous avons ajouteacute notre propre adressereacuteseau et configureacute une route pour 3ffe15 (qui est actuellement la totaliteacute du 6bone) agrave travers le tunnelSi la machine sur laquelle vous mettez en place tout ceci est votre passerelle IPv6 ajoutez alors les lignessuivantes

echo 1 gtprocsysnetipv6confallforwarding usrlocalsbinradvd

En derniegravere instruction radvd est un deacutemon dannonce comme zebra qui permet de supporter lesfonctionnaliteacutes dautoconfiguration dIPv6 Recherchez le avec votre moteur de recherche favori Vous pouvezveacuterifier les choses comme ceci

sbinip -f inet6 addr

Si vous arrivez agrave avoir radvd tournant sur votre passerelle IPv6 et que vous deacutemarrez une machine avec IPv6sur votre reacuteseau local vous serez ravi de voir les beacuteneacutefices de lautoconfiguration IPv6

sbinip -f inet6 addr1 lo ltLOOPBACKUPgt mtu 3924 qdisc noqueue inet6 1128 scope host

3 eth0 ltBROADCASTMULTICASTUPgt mtu 1500 qdisc pfifo_fast qlen 100inet6 3ffe6046850544cfffe01e3d664 scope global dynamicvalid_lft forever preferred_lft 604646sec inet6 fe8050544cfffe01e3d610 scope link

Vous pouvez maintenant configurer votre serveur de noms pour les adresses IPv6 Le type A a un eacutequivalentpour IPv6 AAAA Leacutequivalent de in-addrarpa est ip6int Il y a beaucoup dinformationsdisponibles sur ce sujet

Il y a un nombre croissant dapplications IPv6 disponibles comme le shell seacutecuriseacute telnet inetd le navigateurMozilla le serveur web Apache et beaucoup dautres Mais ceci est en dehors du sujet de ce document deroutage -)

Du cocircteacute Cisco la configuration ressemblera agrave ceci

interface Tunnel1description IPv6 tunnelno ip addressno ip directed-broadcastipv6 address 3FFE60467196tunnel source Serial0tunnel destination 14510024181tunnel mode ipv6ipipv6 route 3FFE6046864 Tunnel1

Si vous navez pas un Cisco agrave votre disposition essayez un des prestataires de tunnel IPv6 disponible surInternet Ils sont precircts agrave configurer leur Cisco avec un tunnel suppleacutementaire pour vous le plus souvent aumoyen dune agreacuteable interface web Cherchez ipv6 tunnel broker avec votre moteur de recherche favori

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers InternetA ce jour deux versions dIPSEC sont disponibles pour Linux FreeSWAN qui fucirct la premiegravereimpleacutementation majeure existe pour les noyaux Linux 22 et 24 Ce projet a un site officiel et eacutegalement unsite non officiel qui est bien maintenu FreeSWAN na jamais eacuteteacute inteacutegreacute dans le noyau pour un certainnombre de raisons Celle qui est la plus souvent mentionneacutee concerne un problegraveme politique avec les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 7 IPSEC IP seacutecuriseacute agrave travers Internet 21

ameacutericains travaillant sur la cryptographie qui freinent son exportabiliteacute De plus la mise en place deFreeSWAN dans le noyau Linux est deacutelicate ce qui nen fait pas un bon candidat pour une reacuteelle inteacutegration

De plus des personnes se sont inquieacuteteacutees de la qualiteacute du code Pour configurer FreeSWAN de nombreusesdocumentations sont disponibles

Une impleacutementation native dIPSEC est preacutesente dans le noyau agrave partir de la version Linux 2547 Elle a eacuteteacuteeacutecrite par Alexey Kuznetsov et Dave Miller qui se sont inspireacutes des travaux du groupe USAGI IPv6 Aveccette fusion les CryptoAPI de James Morris deviennent eacutegalement une partie du noyau qui fait ainsi vraimentdu cryptage

Ce HOWTO ne documente que la version 25 dIPSEC FreeSWAN est recommandeacute pour linstant pour lesutilisateurs de Linux 24 Faicirctes cependant attention dans la mesure ougrave sa configuration est diffeacuterente delIPSEC natif Il y a maintenant une mise agrave jour qui permet au code FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux

A partir du noyau 2549 IPSEC fonctionne sans lajout de mises agrave jour suppleacutementaires

Note Les outils de lespace utilisateur sont disponibles ici Il y a plusieurs programmesdisponibles celui qui est proposeacute dans le lien est baseacute sur Racoon

Lors de la compilation du noyau soyez sucircr dactiver PF_KEY AH et tous les eacuteleacutements deCryptoAPI

Avertissement

Lauteur de ce chapitre est un complet nigaud en ce qui concerne IPSEC Si vous trouvez les ineacutevitableserreurs envoyez un courrier eacutelectronique agrave Bert Hubert ltahuds9anlgt

Tout dabord nous montrerons comment configurer manuellement une communication seacutecuriseacutee entre deuxhocirctes Une grande partie de ce processus peut ecirctre automatiseacutee mais nous le ferons ici agrave la main afin decomprendre ce qui se passe sous le capot

Passez agrave la section suivante si la seule gestion automatique des cleacutes vous inteacuteresse Soyez cependant conscientque la compreacutehension de la gestion manuelle des cleacutes est utile

Introduction sur la gestion manuelle des cleacutes

IPSEC est un sujet compliqueacute De nombreuses informations sont disponibles en ligne Ce HOWTO seconcentrera sur la mise en place et agrave lexplication des principes de base Tous les exemples sont baseacutes surRacoon dont le lien est donneacute au-dessus

Note Certaines configurations iptables rejettent les paquets IPSEC Pour transmettreIPSEC utilisez iptables -A xxx -p 50 -j ACCEPT et iptables -A xxx -p 51 -j ACCEPT

IPSEC offre une version seacutecuriseacutee de la couche IP (Internet Protocol) La seacutecuriteacute dans ce contexte prend deuxformes lencryptage et lauthentification Une vision naiumlve de la seacutecuriteacute ne propose que le cryptage On peutcependant montrer facilement que cest insuffisant il se peut que vous ayez une communication crypteacutee maisvous navez aucune garantie que lhocircte distant est bien celui auquel vous pensez

IPSEC supporte Encapsulated Security Payload (Encapsulation Seacutecuriseacutee de la Charge utile) (ESP) pour lecryptage et Authentication Header (Entecircte dAuthentification) (AH) pour authentifier le partenaire distantVous pouvez configurer les deux ou deacutecider de ne faire que lun des deux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

22 Introduction sur la gestion manuelle des cleacutes

ESP et AH sappuient tous les deux sur des Associations de Seacutecuriteacute (Security Associations (SA)) UneAssociation de Seacutecuriteacute (SA) consiste en une source une destination et une instruction Un exemple simpledAssociation de Seacutecuriteacute (SA) pour lauthentification peut ressembler agrave ceci

add 100011 1000216 ah 15700 -A hmac-md5 1234567890123456

Ceci indique que le trafic allant de 100011 vers 1000216 a besoin dun En-tecircte dAuthentification(AH) qui peut ecirctre signeacute en utilisant HMAC-MD et le secret 1234567890123456 Cette instruction estrepeacutereacutee par lidentificateur SPI (Security Parameter Index)15700 dont nous parlerons plus par la suite Lepoint inteacuteressant agrave propos des Associations de Seacutecuriteacute (SA) est quelles sont symeacutetriques Les deux coteacutes dela conversation partagent exactement la mecircme Association de Seacutecuriteacute (SA) qui nest pas recopieacutee sur lhocirctedistant Notez cependant quil ny a pas de regravegles dinversion automatique Cette Association de Seacutecuriteacute(SA) deacutecrit une authentification possible de 100011 vers 1000216 Pour un trafic bidirectionneldeux Associations de Seacutecuriteacute (SA) sont neacutecessaires

Un exemple dAssociation de Seacutecuriteacute (SA) pour le cryptage ESP

add 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012

Ceci signifie que le trafic allant de 100011 vers 1000216 est chiffreacute en utilisant 3des-cbc avec lacleacute 123456789012123456789012 Lidentificateur SPI est 15701

Jusquici nous avons vu que les Associations de Seacutecuriteacute (SA) deacutecrivent les instructions possibles mais pas lapolitique qui indique quand ces SA doivent ecirctre utiliseacutees En fait il pourrait y avoir un nombre arbitraire deSA presques identiques ne se diffeacuterenciant que par les identificateurs SPI Entre parenthegraveses SPI signifieSecurity Parameter Index ou Index du Paramegravetre de Seacutecuriteacute en franccedilais Pour faire vraiment du cryptagenous devons deacutecrire une politique Cette politique peut inclure des choses comme utiliser ipsec sil estdisponible ou rejeter le trafic agrave moins que vous ayez ipsec

Une Politique de Seacutecuriteacute (Security Policy (SP)) typique ressemble agrave ceci

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Si cette configuration est appliqueacutee sur lhocircte 1000216 cela signifie que tout le trafic allant vers100011 doit ecirctre encrypteacute et encapsuleacute dans un en-tecircte dauthentification AH Notez que ceci ne deacutecritpas quelle SA sera utiliseacutee Cette deacutetermination est un exercice laisseacute agrave la charge du noyau

En dautres termes une Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons une Association de Seacutecuriteacutedeacutecrit COMMENT nous le voulons

Les paquets sortants sont eacutetiqueteacutes avec le SPI SA (le comment) que le noyau utilise pour lencryptage etlauthentification et lhocircte distant peut consulter les instructions de veacuterification et de deacutecryptagecorrespondantes

Ce qui suit est une configuration tregraves simple permettant le dialogue de lhocircte 1000216 vers lhocircte100011 en utilisant lencryptage et lauthentification Notez que le trafic de retour de cette premiegravereversion est en clair et que cette configuration ne doit pas ecirctre deacuteployeacutee

Sur lhocircte 1000216

sbinsetkey -f

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Introduction sur la gestion manuelle des cleacutes 23

add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456 add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

Sur lhocircte 100011 nous donnons les mecircmes Associations de Seacutecuriteacute (SA) Nous ne donnons pas dePolitique de Seacutecuriteacute

sbinsetkey -fadd 1000216 100011 ah 24500 -A hmac-md5 1234567890123456add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

Avec la mise en place de la configuration ci-dessus (ces fichiers peuvent ecirctre exeacutecuteacutes si setkey est installeacutedans sbin) la commande ping 100011 exeacutecuteacutee sur 1000216 va donner la sortie suivante avec tcpdump

223752 1000216 gt 100011 AH(spi=0x00005fb4seq=0xa) ESP(spi=0x00005fb5seq=0xa) (DF)223752 100011 gt 1000216 icmp echo reply

Notez que le paquet de retour provenant de 100011 est en effet complegravetement visible Le paquet ping eacutemispar 1000216 ne peut eacutevidemment pas ecirctre lu par tcpdump mais celui-ci montre lIndex du Paramegravetre deSeacutecuriteacute (SPI) de lAH ainsi que lESP qui indique agrave 100011 comment veacuterifier lauthenticiteacute de notre paquetet comment le deacutecrypter

Quelques eacuteleacutements doivent ecirctre mentionneacutes La configuration ci-dessus est proposeacutee dans de nombreuxexemples dIPSEC mais elle est tregraves dangereuse Le problegraveme est quelle contient la politique indiquant agrave1000216 comment traiter les paquets allant vers 100011 et comment 100011 doit traiter ces paquetsmais ceci nINDIQUE pas agrave 100011 de rejeter le trafic non authentifieacute et non encrypteacute

Nimporte qui peut maintenant inseacuterer des donneacutees spoofeacutees (NdT usurpeacutees) et entiegraverement non crypteacuteesque 10001 acceptera Pour remeacutedier agrave ceci nous devons avoir sur 100011 une Politique de Seacutecuriteacute pourle trafic entrant

sbinsetkey -f spdadd 1000216 100011 any -P IN ipsec esptransportrequire ahtransportrequire

Ceci indique agrave 100011 que tout le trafic venant de 1000216 neacutecessite davoir un ESP et AH valide

Maintenant pour compleacuteter cette configuration nous devons eacutegalement renvoyer un trafic encrypteacute etauthentifieacute La configuration complegravete sur 1000216 est la suivante

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

24 Introduction sur la gestion manuelle des cleacutes

spdadd 1000216 100011 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire ahtransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

AHadd 100011 1000216 ah 15700 -A hmac-md5 1234567890123456add 1000216 100011 ah 24500 -A hmac-md5 1234567890123456

ESPadd 100011 1000216 esp 15701 -E 3des-cbc 123456789012123456789012add 1000216 100011 esp 24501 -E 3des-cbc 123456789012123456789012

spdadd 100011 1000216 any -P out ipsec esptransportrequire ahtransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire ahtransportrequire

Notez que dans cet exemple nous avons utiliseacute des cleacutes identiques pour les deux directions du trafic Cecinest cependant en aucun cas exigeacute

Pour examiner la configuration que nous venons de creacuteer exeacutecuter setkey -D qui montre les SA ou setkey-DP qui montre les politiques configureacutees

Gestion automatique des cleacutes

Dans la section preacuteceacutedente lencryptage eacutetait configureacute pour utiliser simplement le partage de secrets Endautres termes pour rester seacutecuriseacute nous devons transfeacuterer la configuration de notre encryptage agrave travers untunnel seacutecuriseacute Si nous avons configureacute lhocircte distant par telnet nimporte quel tiers pourrait avoir prisconnaissance de notre secret partageacute et ainsi notre configuration ne serait plus sucircre

De plus puisque le secret est partageacute ce nest pas un secret Lhocircte distant ne peut pas en faire grand chosemais nous devons ecirctre sucircrs dutiliser un secret diffeacuterent pour les communications avec tous nos partenairesCeci neacutecessite un grand nombre de cleacutes Pour 10 partenaires nous devrions avoir au moins 50 secretsdiffeacuterents

En plus du problegraveme des cleacutes symeacutetriques le renouvellement des cleacutes est eacutegalement neacutecessaire Si un tierseacutecoute suffisamment le trafic il peut ecirctre en position de retrouver la cleacute par reacutetro ingeacutenierie On peut senpreacutemunir en modifiant la cleacute de temps en temps mais ce processus a besoin decirctre automatiseacute

Un autre problegraveme est que la gestion manuelle des cleacutes deacutecrite au-dessus impose de deacutefinir preacuteciseacutement lesalgorithmes et les longueurs de cleacutes utiliseacutees ce qui neacutecessite une grande coordination avec lhocircte distant Il

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestion automatique des cleacutes 25

serait preacutefeacuterable davoir la capaciteacute agrave deacutecrire une politique des cleacutes plus large comme par exemple Nouspouvons faire du 3DES et du Blowfish avec les longueurs de cleacutes suivantes

Pour reacutesoudre ces problegravemes IPSEC fournit lEchange de Cleacute sur Internet (Internet Key Echange (IKE))permettant dautomatiser leacutechange de cleacutes geacuteneacutereacutees aleacuteatoirement Ces cleacutes sont transmises en utilisant unetechnologie dencryptage asymeacutetrique neacutegocieacutee

Limpleacutementation IPSEC de Linux 25 fonctionne avec le deacutemon IKE KAME racoon Depuis le 9novembre la version de racoon preacutesente la distribution iptools dAlexey peut ecirctre compileacutee en supprimant aupreacutealable include ltnetroutehgt dans deux fichiers Je fournis une version preacutecompileacutee

Note LEchange de Cleacute sur Internet (IKE) doit avoir accegraves au port UDP 500 Soyez sucircr queiptables ne le bloque pas

Theacuteorie

Comme expliqueacute avant la gestion automatique des cleacutes reacutealise beaucoup dopeacuterations pour nousSpeacutecifiquement il creacutee agrave la voleacutee les Associations de Seacutecuriteacute Il ne configure cependant pas la politique pournous ce qui est le fonctionnement attendu

Donc pour beacuteneacuteficier de IKE configurez une politique mais ne fournissez aucune Association de Seacutecuriteacute Sile noyau deacutecouvre quil y a une politique IPSEC mais pas dAssociation de Seacutecuriteacute il va le notifier au deacutemonIKE qui va chercher agrave en neacutegocier une

De nouveau rappelons que la Politique de Seacutecuriteacute speacutecifie CE QUE nous voulons tandis que lAssociation deSeacutecuriteacute deacutecrit COMMENT nous le voulons Lutilisation de la gestion automatique des cleacutes nous permet dene speacutecifier que ce que nous voulons

Exemple

Kame racoon possegravede un grand nombre doptions dont la plupart des valeurs par deacutefaut sont corrects nousnavons donc pas besoin de les modifier Comme nous lavons dit auparavant lopeacuterateur doit deacutefinir unePolitique de Seacutecuriteacute mais pas dAssociations de Seacutecuriteacute Nous laissons cette neacutegociation au deacutemon IKE

Dans cet exemple 10001 et 1000216 sont encore une fois sur le point deacutetablir des communicationsseacutecuriseacutees mais cette fois avec laide du deacutemon racoon Par soucis de simplification cette configurationutilisera des cleacutes preacute-partageacutees les redouteacutes secrets partageacutes Nous discuterons des certificats X509 dans unesection agrave part Voir la section intituleacutee Gestion automatique des cleacutes en utilisant les certificats X509gt

Nous allons agrave peu pregraves rester fidegravele agrave la configuration par deacutefaut qui est identique sur les deux hocirctes

path pre_shared_key usrlocaletcracoonpsktxt

remote anonymous exchange_mode aggressivemain doi ipsec_doi situation identity_only

my_identifier address

lifetime time 2 min secminhour initial_contact on proposal_check obey obey strict or claim

proposal encryption_algorithm 3des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

26 Theacuteorie

hash_algorithm sha1 authentication_method pre_shared_key dh_group 2

sainfo anonymous pfs_group 1 lifetime time 2 min encryption_algorithm 3des authentication_algorithm hmac_sha1 compression_algorithm deflate

Beaucoup de paramegravetres Je pense que lon peut encore en supprimer pour se rapprocher de la configurationpar deacutefaut Remarquons ici quelques eacuteleacutements notables Nous avons configureacute deux sections anonymous cequi convient pour tous les hocirctes distants Ceci va ainsi faciliter les configurations suppleacutementaires Il nest pasneacutecessaire davoir de sections speacutecifiques agrave une machine particuliegravere agrave moins que vous ne le vouliez vraiment

De plus la configuration preacutecise que nous nous identifions gracircce agrave notre adresse IP (my_identifier address) etque nous pouvons faire du 3des sha1 et que nous utiliserons une cleacute preacute-partageacutee se trouvant dans psktxt

Dans le fichier psktxt nous avons configureacute deux entreacutees qui sont diffeacuterentes suivant les hocirctes Sur100011

1000216 password2

Sur 1000216

100011 password2

Soyez sucircr que ces fichiers sont la proprieacuteteacute de root et quils ont le mode 0600 Dans le cas contraire racoonne pourra faire confiance agrave leur contenu Notez que ces fichiers sont symeacutetriques lun de lautre

Nous sommes maintenant precirct agrave configurer notre politique qui est assez simple Sur lhocircte 1000216

sbinsetkey -fflushspdflush

spdadd 1000216 100011 any -P out ipsec esptransportrequire

spdadd 100011 1000216 any -P in ipsec esptransportrequire

Et sur 100011

sbinsetkey -fflushspdflush

spdadd 100011 1000216 any -P out ipsec esptransportrequire

spdadd 1000216 100011 any -P in ipsec esptransportrequire

Noter que ces politiques sont encore une fois symeacutetriques

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exemple 27

Nous sommes maintenant precirct agrave lancer racoon Une fois lanceacute au moment ougrave nous essayons une connexionun telnet depuis 100011 vers 1000216 ou linverse racoon aura deacutemarreacute la neacutegociation

121844 INFO isakmpc1689isakmp_post_acquire() IPsec-SA request for 100011 queued due to no phase1 found121844 INFO isakmpc794isakmp_ph1begin_i() initiate new phase 1 negotiation 1000216[500]lt=gt100011[500]121844 INFO isakmpc799isakmp_ph1begin_i() begin Aggressive mode121844 INFO vendoridc128check_vendorid() received Vendor ID KAMEracoon121844 NOTIFY oakleyc2037oakley_skeyid() couldnt find the proper pskey try to get one by the peers address121844 INFO isakmpc2417log_ph1established() ISAKMP-SA established 1000216[500]-100011[500] spi044d25dede78a4d1ff01e5b4804f0680121845 INFO isakmpc938isakmp_ph2begin_i() initiate new phase 2 negotiation 1000216[0]lt=gt100011[0]121845 INFO pfkeyc1106pk_recvupdate() IPsec-SA established ESPTransport 100011-gt1000216 spi=44556347(0x2a7e03b)121845 INFO pfkeyc1318pk_recvadd() IPsec-SA established ESPTransport 1000216-gt100011 spi=15863890(0xf21052)

Lexeacutecution de la commande setkey -D qui nous montre les Associations de Seacutecuriteacute nous indique quellessont en effet preacutesentes

1000216 100011 esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000) E 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04 A hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99 seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last Nov 11 122912 2002 hard 0(s) soft 0(s) current 304(bytes) hard 0(bytes) soft 0(bytes) allocated 3 hard 0 soft 0 sadb_seq=1 pid=17112 refcnt=0100011 1000216 esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000) E 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a A hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f seq=0x00000000 replay=4 flags=0x00000000 state=mature created Nov 11 122845 2002 current Nov 11 122916 2002 diff 31(s) hard 600(s) soft 480(s) last hard 0(s) soft 0(s) current 231(bytes) hard 0(bytes) soft 0(bytes) allocated 2 hard 0 soft 0 sadb_seq=0 pid=17112 refcnt=0

Nous avons les Politiques de Seacutecuriteacute que nous avons nous-mecircme configureacutees

100011[any] 1000216[any] tcp in ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122912 2002 lifetime0(s) validtime0(s) spid=3616 seq=5 pid=17134 refcnt=31000216[any] 100011[any] tcp out ipsec esptransportrequire createdNov 11 122828 2002 lastusedNov 11 122844 2002 lifetime0(s) validtime0(s) spid=3609 seq=4 pid=17134 refcnt=3

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

28 Exemple

Problegravemes et deacutefauts connus

Si cela ne marche pas veacuterifiez que tous les fichiers de configuration sont la proprieacuteteacute de root et quils nepeuvent ecirctre lus que par celui-ci Pour deacutemarrer racoon en avant-plan utilisez -F Pour le forcer agrave lire unfichier de configuration agrave la place de celui preacuteciseacute lors de la compilation utilisez -f Pour obtenir denombreux deacutetails ajouter loption log debug dans le fichier racoonconf

Gestion automatique des cleacutes en utilisant les certificats X509

Comme nous lavons dit avant lutilisation de secrets partageacutes est compliqueacutee car ils ne peuvent pas ecirctrefacilement partageacutes et une fois quils le sont ils ne sont plus secrets Heureusement nous avons latechnologie dencryptage asymmeacutetrique pour nous aider agrave reacutesoudre ce problegraveme

Si chaque participant dune liaison IPSEC creacutee une cleacute publique et priveacutee des communications seacutecuriseacuteespeuvent ecirctre mises en place par les deux parties en publiant leur cleacute publique et en configurant leur politique

Creacuteer une cleacute est relativement facile bien que cela exige un peu de travail Ce qui suit est baseacute sur loutilopenssl

Construire un certificat X509 pour votre hocircte

OpenSSL dispose dune importante infrastructure de gestions des clefs capable de geacuterer des clefs signeacutees ounon par une autoriteacute de certification Pour linstant nous avons besoin de court-circuiter toute cetteinfrastructure et de mettre en place une seacutecuriteacute de charlatan et de travailler sans autoriteacute de certification

Nous allons tout dabord creacuteer une requecircte de certificat (certificate request) pour notre hocircte appeleacute laptop

$ openssl req -new -nodes -newkey rsa1024 -sha1 -keyform PEM -keyout laptopprivate -outform PEM -out requestpem

Des questions nous sont poseacutees

Country Name (2 letter code) [AU]NLState or Province Name (full name) [Some-State]Locality Name (eg city) []DelftOrganization Name (eg company) [Internet Widgits Pty Ltd]Linux AdvancedRouting amp Traffic ControlOrganizational Unit Name (eg section) []laptopCommon Name (eg YOUR name) []bert hubertEmail Address []ahuds9anl

Please enter the following extra attributesto be sent with your certificate requestA challenge password []An optional company name []

Vous avez toute liberteacute quant aux reacuteponses Vous pouvez ou non mettre le nom dhocircte en fonction de vosbesoins de seacutecuriteacute Cest ce que nous avons fait dans cet exemple

Nous allons maintenant auto signer cette requecircte

$ openssl x509 -req -in requestpem -signkey laptopprivate -out laptoppublicSignature oksubject=C=NLL=DelftO=Linux Advanced Routing amp Traffic ControlOU=laptopCN=bert hubertEmail=ahuds9anl

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Problegravemes et deacutefauts connus 29

Getting Private key

Le fichier requestpem peut maintenant ecirctre eacutelimineacute

Reacutepeacutetez cette proceacutedure pour tous les hocirctes qui ont besoin dune cleacute Vous pouvez distribuer le fichier publicen toute impuniteacute mais garder le fichier private priveacute

Configuration et lancement

Une fois que nous avons les cleacutes publiques et priveacutees pour nos hocirctes nous pouvons indiquer agrave racoon de lesutiliser

Reprenons notre configuration preacuteceacutedente et les deux hocirctes 100011 (upstairs) et 1000216 (laptop)

Dans le fichier racoonconf preacutesent sur 100011 nous ajoutons

path certificate usrlocaletcracooncerts

remote 1000216 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

certificate_type x509 upstairspublic upstairsprivate

peers_certfile laptoppublic proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Ceci indique agrave racoon que les certificats se trouvent dans usrlocaletcracooncerts De plusil contient des eacuteleacutements speacutecifiques pour lhocircte distant 1000216

La ligne asn1dn indique agrave racoon que lidentification pour lhocircte local et distant doit ecirctre extraite des cleacutespubliques Ceci correspond agrave la ligne subject=C=NLL=DelftO=Linux Advanced Routing amp TrafficControlOU=laptopCN=bert hubertEmail=ahuds9anl donneacute au-dessus

La ligne certificate_type preacutecise lemplacement des cleacutes publiques et priveacutees locales La deacuteclarationpeers_certfile preacutecise agrave racoon que la cleacute publique de lhocircte distant se trouve dans le fichierlaptoppublic

La section proposal reste inchangeacutee par rapport agrave ce que nous avons vu plus tocirct agrave lexception deauthentification_method qui est maintenant rsasig ce qui indique lutilisation de cleacute RSA publiquepriveacuteepour lauthentification

La configuration ajouteacutee sur 1000216 est presque identique exception faite de lhabituelle symeacutetrie

path certificate usrlocaletcracooncerts

remote 100011 exchange_mode aggressivemain my_identifier asn1dn peers_identifier asn1dn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

30 Construire un certificat X509 pour votre hocircte

certificate_type x509 laptoppublic laptopprivate

peers_certfile upstairspublic

proposal encryption_algorithm 3des hash_algorithm sha1 authentication_method rsasig dh_group 2

Maintenant que nous avons ajouteacute ces eacuteleacutements sur les deux hocirctes la seule chose qui reste agrave faire est de mettreen place les fichiers contenant les cleacutes La machine upstairs doit avoir les fichiers upstairsprivateupstairspublic et laptoppublic placeacutes dans usrlocaletcracooncerts Soyez sucircrque le reacutepertoire est la proprieacuteteacute de root et quil possegravede les droits 0700 Dans le cas contraire racoon pourraitrefuser de lire le contenu de ce reacutepertoire

La machine laptop doit avoir les fichiers upstairsprivate upstairspublic etlaptoppublic placeacutes dans usrlocaletcracooncerts Autrement dit chaque hocircte doitavoir ses propres cleacutes publique et priveacutee et de plus la cleacute publique de lhocircte distant

Veacuterifiez que la Politique de Seacutecuriteacute est en place (exeacutecutez la commande spdadd vue dans la section intituleacuteeExemplegt) Lancez alors racoon et tout devrait fonctionner

Comment configurer des tunnels seacutecuriseacutes

Pour configurer des communications seacutecuriseacutees avec un hocircte distant nous devons eacutechanger des cleacutespubliques Bien quil ne soit pas neacutecessaire que la cleacute publique reste secregravete il est important decirctre sucircr quecette cleacute na pas eacuteteacute modifieacutee En dautres termes vous devez ecirctre certain quil ny a pas de man in the middle[NdT man in the middle est le nom dune attaque qui consiste agrave se placer entre lhocircte eacutemetteur et lhocircte dedestination]

Pour faciliter ceci OpenSSL propose la commande digest

$ openssl dgst upstairspublic MD5(upstairspublic)= 78a3bddafb4d681c1ca8ed4d23da4ff1

La seule chose que nous devons faire est de veacuterifier que notre partenaire distant voit la mecircme empreinte Cecipeut ecirctre effectueacute en se rencontrant physiquement ou par teacuteleacutephone en sassurant que le numeacutero de teacuteleacutephonede lhocircte distant na pas eacuteteacute envoyeacute dans le mecircme courrier eacutelectronique que celui qui contenait la cleacute

Une autre maniegravere de faire ceci est dutiliser un tiers de confiance qui exeacutecute le service dautoriteacute decertification (Certificate Authority) Cette autoriteacute de certification (CA) peut alors signer votre cleacute celle quenous avons nous-mecircme creacuteeacute au-dessus

tunnels IPSEC

Jusquici nous navons seulement consideacutereacute IPSEC dans le mode appeleacute transport ougrave les points terminauxcomprennent directement IPSEC Comme ceci nest pas souvent le cas il peut ecirctre neacutecessaire davoir desrouteurs qui eux seuls comprennent IPSEC et qui reacutealisent le travail pour les hocirctes se trouvant derriegravere euxCeci est appeleacute le mode tunnel

Configurer ceci est tregraves rapide Pour tunneler tout le trafic vers 1301610016 agrave partir de 1000216 via100011 nous eacuteditons ce qui suit sur 1000216

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration et lancement 31

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P out ipsec esptunnel1000216-100011require

Notez que loption -m tunnel est vitale Ceci configure tout dabord une Association de Seacutecuriteacute ESP entreles points terminaux de notre tunnel agrave savoir 1000216 et 100011

Nous allons ensuite reacuteellement configurer le tunnel On doit indiquer au noyau dencrypter tout le trafic de1000024 vers 13016100 De plus ce trafic doit ecirctre envoyeacute vers 100011

100011 a eacutegalement besoin decirctre configureacute

sbinsetkey -fflushspdflush

add 1000216 100011 esp 34501 -m tunnel -E 3des-cbc 123456789012123456789012

spdadd 1000024 1301610016 any -P in ipsec esptunnel1000216-100011require

Notez que ceci est exactement identique agrave lexception du changement de -P out en -P in Les exemplespreacuteceacutedents nont configureacute le trafic que dans un seul sens Il est laisseacute comme exercice au lecteur le soin decompleacuteter lautre moitieacute du tunnel

Le nom de proxy ESP est eacutegalement donneacute pour cette configuration ce qui est un peu plus clair

Note Le tunnel IPSEC a besoin davoir la transmission IP activeacutee dans le noyau

Autre logiciel IPSEC

Thomas Walpuski preacutecise quil a eacutecrit une mise agrave jour pour que OpenBSD isakpmd puisse fonctionner avecLinux 25 IPSEC De plus la repository principale CVS de isakpmd contient maintenant le code Des notessont disponibles sur cette page

isakpmd est diffeacuterent de racoon mentionneacute au-dessus mais de nombreuses personnes lappreacutecient Il peut ecirctretrouveacute ici Dautres eacuteleacutements de lecture sur le CVS dOpenBSD ici Thomas a eacutegalement creacuteeacute un tarball pourceux qui ne sont pas habitueacutes agrave CVS ou patch

De plus des mises agrave jour sont disponibles pour permettre aux outils FreeSWAN de lespace utilisateur defonctionner avec lIPSEC natif de Linux 25 Vous pourrez les trouver ici

Interopeacuterabiliteacute dIPSEC avec dautres systegravemes

FIXME Ecrire ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

32 tunnels IPSEC

Windows

Andreas Jellinghaus ltajdungeoninkadegt rapporte win2k cela marche preacute-partage de cleacute et ladresse ippour lauthentification (je ne pense pas que windows supporte fdqn ou userfdqn) Les certificats devraienteacutegalement marcher mais cela na pas eacuteteacute essayeacute

Check Point VPN-1 NG

Peter Bieringer rapporte

Voici des reacutesultats (seul le mode tunnel a eacuteteacute testeacute auth=SHA1) DES ok 3DES ok AES-128 ok AES-192 non supporteacute par CP VPN-1 AES-256 ok CAST non supporteacute par le noyau Linux utiliseacute

Version Testeacutee FP4 aka R54 aka wAI

Plus dinformations ici

Chapitre 8 Routage multidistribution (multicast)FIXME Pas de reacutedacteur

Le Multicast-HOWTO est (relativement) ancien De ce fait il peut ecirctre impreacutecis ou induire en erreur agravecertains endroits

Avant que vous ne puissiez faire du routage multidistribution le noyau Linux a besoin decirctre configureacute poursupporter le type de routage multidistribution que vous voulez faire Ceci agrave son tour exige une deacutecision quantau choix du protocole de routage multidistribution que vous vous preacuteparez agrave utiliser Il y a essentiellementquatre types ltlt communs gtgt de protocoles DVMRP (la version multidistribution du protocole RIP unicast)MOSPF (la mecircme chose mais pour OSPF) PIM-SM (Protocol Independant Multicasting - Sparse Mode) quisuppose que les utilisateurs de nimporte quel groupe de multidistribution sont disperseacutes plutocirct que regroupeacutes)et PIM-DM (le mecircme mais Dense Mode) qui suppose quil y aura un regroupement significatif des utilisateursdun mecircme groupe de multidistribution

On pourra noter que ces options napparaissent pas dans le noyau Linux Ceci sexplique par le fait que leprotocole lui-mecircme est geacutereacute par une application de routage comme Zebra mrouted ou pind Cependant vousdevez avoir une bonne ideacutee de ce que vous allez utiliser de maniegravere agrave seacutelectionner les bonnes options dans lenoyau

Pour tout routage multidistribution vous avez forceacutement besoin de seacutelectionner les options multicastinget multicasting routing Ceci est suffisant pour DVMRP et MOSPF Dans le cas de PIM vous devezeacutegalement valider les options PIMv1 ou PIMv2 suivant que le reacuteseau que vous connectez utilise la version 1ou 2 du protocole PIM

Une fois que tout cela a eacuteteacute reacutealiseacute et que votre nouveau noyau a eacuteteacute compileacute vous verrez au deacutemarrage queIGMP est inclus dans la liste des protocoles IP Celui-ci est un protocole permettant de geacuterer les groupesmultidistribution Au moment de la reacutedaction Linux ne supportait que les versions 1 et 2 de IGMP bien quela version 3 existe et ait eacuteteacute documenteacutee Ceci ne va pas vraiment nous affecter dans la mesure ougrave IGMPv3 estencore trop reacutecent pour que ses fonctionnaliteacutes suppleacutementaires soient largement utiliseacutees Puisque IGMP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 8 Routage multidistribution (multicast) 33

soccupe des groupes seules les fonctionnaliteacutes preacutesentes dans la plus simple version de IGMP geacuterant ungroupe entier seront utiliseacutees IGMPv2 sera utiliseacute dans la plupart des cas bien que IGMPv1 puisse encoreecirctre rencontreacute

Jusque-lagrave cest bon Nous avons activeacute la multidistribution Nous devons dire au noyau de lutiliserconcregravetement Nous allons donc deacutemarrer le routage Ceci signifie que nous ajoutons un reacuteseau virtuel demultidistribution agrave la table du routeur

ip route add 2240004 dev eth0

(En supposant bien sucircr que vous diffusez agrave travers eth0 Remplacez-le par le peacuteripheacuterique de votre choix sineacutecessaire)

Maintenant dire agrave Linux de transmettre les paquets

echo 1 gt procsysnetipv4ipamplowbarforward

Arriveacute ici il se peut que vous vous demandiez si ceci va faire quelque chose Donc pour tester notreconnexion nous pinguons le groupe par deacutefaut 224001 pour voir si des machines sont preacutesentesToutes les machines du reacuteseau local avec la multidistribution activeacutee DEVRAIENT reacutepondre et aucune autreVous remarquerez quaucune des machines qui reacutepondent ne le fait avec ladresse IP 224001 Quellesurprise ) Ceci est une adresse de groupe (une ltlt diffusion gtgt pour les abonneacutes) et tous les membres dugroupe reacutepondront avec leur propre adresse et non celle du groupe

ping -c 2 224001

Maintenant vous ecirctes precirct agrave faire du vrai routage multidistribution Bien en supposant que vous ayez deuxreacuteseaux agrave router lun vers lautre

(A continuer )

Chapitre 9 Gestionnaires de mise en file dattentepour ladministration de la bande passanteQuand je lai deacutecouvert cela ma VRAIMENT souffleacute Linux 22 contient toutes les fonctionnaliteacutes pour lagestion de la bande passante de maniegravere comparable agrave un systegraveme deacutedieacute de haut niveau

Linux deacutepasse mecircme ce que lATM et le Frame peuvent fournir

Afin deacuteviter toute confusion voici les regravegles utiliseacutees par tc pour la speacutecification de la bande passante

mbps = 1024 kbps = 1024 1024 bps =gt bytes (octetss)mbit = 1024 kbit =gt kilo bitsmb = 1024 kb = 1024 1024 b =gt byte (octet)mbit = 1024 kbit =gt kilo bit

En interne les nombres sont stockeacutes en bps (octets) et b (octet)

Mais tc utilise luniteacute suivante lors de laffichage des deacutebits

1Mbit = 1024 Kbit = 1024 1024 bps =gt octetss

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

34 Chapitre 9 Gestionnaires de mise en file dattente pour ladministration de la bande passante

Explication sur les files dattente et la gestion de la mise en filedattente

Avec la mise en file dattente nous deacuteterminons la maniegravere dont les donneacutees sont ENVOYEES Il est importantde comprendre que nous ne pouvons mettre en forme que les donneacutees que nous transmettons

Avec la maniegravere dont Internet travaille nous navons pas de controcircle direct sur ce que les personnes nousenvoient Cest un peu comme votre boicircte aux lettres (physique ) chez vous Il ny a pas de faccedilon dinfluencerle nombre de lettres que vous recevez agrave moins de contacter tout le monde

Cependant lInternet est principalement baseacute sur TCPIP qui possegravede quelques fonctionnaliteacutes qui vontpouvoir nous aider TCPIP na pas daptitude agrave connaicirctre les performances dun reacuteseau entre deux hocirctes Ilenvoie donc simplement des paquets de plus en plus rapidement (ltlt slow start gtgt) et quand des paquetscommencent agrave se perdre il ralentit car il na plus la possibiliteacute de les envoyer En fait cest un peu plus eacuteleacutegantque cela mais nous en dirons plus par la suite

Cest comme si vous ne lisiez que la moitieacute de votre courrier en espeacuterant que vos correspondants arrecircteront devous en envoyer Agrave la diffeacuterence que ccedila marche sur Internet -)

Si vous avez un routeur et que vous souhaitez eacuteviter que certains hocirctes de votre reacuteseau aient des vitesses deteacuteleacutechargement trop grandes vous aurez besoin de mettre en place de la mise en forme de trafic sur linterfaceINTERNE de votre routeur celle qui envoie les donneacutees vers vos propres ordinateurs

Vous devez eacutegalement ecirctre sucircr que vous controcirclez le goulot deacutetranglement de la liaison Si vous avez unecarte reacuteseau agrave 100Mbit et un routeur avec un lien agrave 256kbit vous devez vous assurer que vous nenvoyez pasplus de donneacutees que ce que le routeur peut manipuler Autrement ce sera le routeur qui controcirclera le lien etqui mettra en forme la bande passante disponible Nous devons pour ainsi dire ltlt ecirctre le proprieacutetaire de la filedattente gtgt et ecirctre le lien le plus lent de la chaicircne Heureusement cest facilement reacutealisable

Gestionnaires de mise en file dattente simples sans classes

Comme nous lavons deacutejagrave dit la gestion de mise en file dattente permet de modifier la faccedilon dont les donneacuteessont envoyeacutees Les gestionnaires de mise en file dattente sans classes sont ceux qui en gros acceptent lesdonneacutees et qui ne font que les reacuteordonner les retarder ou les jeter

Ils peuvent ecirctre utiliseacutes pour mettre en forme le trafic dune interface sans aucune subdivision Il estprimordial que vous compreniez cet aspect de la mise en file dattente avant de continuer sur les gestionnairesde mise en files dattente baseacutes sur des classes contenant dautres gestionnaires de mise en file dattente

Le gestionnaire le plus largement utiliseacute est de loin pfifoamplowbarfast qui est celui par deacutefaut Ceciexplique aussi pourquoi ces fonctionnaliteacutes avanceacutees sont si robustes Elles ne sont rien de plus ltlt quuneautre file dattente gtgt

Chacune de ces files dattente a ses forces et ses faiblesses Toutes nont peut-ecirctre pas eacuteteacute bien testeacutees

pfifoamplowbarfast

Cette file dattente comme son nom lindique premier entreacute premier sorti (First In First Out) signifie queles paquets ne subissent pas de traitements speacuteciaux En fait ce nest pas tout agrave fait vrai Cette file dattente atrois ltlt bandes gtgt A linteacuterieur de chacune de ces bandes des regravegles FIFO sappliquent Cependant tant quily a un paquet en attente dans la bande 0 la bande 1 ne sera pas traiteacutee Il en va de mecircme pour la bande 1 et labande 2

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Explication sur les files dattente et la gestion de la mise en file dattente 35

Le noyau prend en compte la valeur du champ Type de Service des paquets et prend soin dinseacuterer dans labande 0 les paquets ayant le bit ltlt deacutelai minimum gtgt activeacute

Ne pas confondre ce gestionnaire de mise en file dattente sans classes avec celui baseacute sur des classes PRIO Bien quils aient des comportements similaires pfifoamplowbarfast ne possegravede pas de classes et vous nepourrez pas y ajouter de nouveaux gestionnaires avec la commande tc

Paramegravetres amp usage

Vous ne pouvez pas configurer le gestionnaire pfifoamplowbarfast dans la mesure ougrave cest celui pardeacutefaut Voici sa configuration par deacutefaut

priomapDeacutetermine comment les prioriteacutes des paquets sont relieacutees aux bandes telles que deacutefinies par le noyauLa relation est eacutetablie en se basant sur loctet TOS du paquet qui ressemble agrave ceci

0 1 2 3 4 5 6 7+-----+-----+-----+-----+-----+-----+-----+-----+| | | || PRECEDENCE | TOS | MBZ || | | |+-----+-----+-----+-----+-----+-----+-----+-----+

Les quatre bits TOS (le champ TOS) sont deacutefinis comme suit

Binaire Deacutecimal Signification-----------------------------------------1000 8 Minimise le Deacutelai (Minimize delay) (md)0100 4 Maximalise le Deacutebit (Maximize throughput) (mt)0010 2 Maximalise la Fiabiliteacute (Maximize reliability) (mr)0001 1 Minimalise le Coucirct Moneacutetaire (Minimize monetary cost) (mmc)0000 0 Service Normal

Comme il y a 1 bit sur la droite de ces quatre bits la valeur reacuteelle du champ TOS est le double de lavaleur des bits TOS tcpdump -v -v fournit la valeur de tout le champ TOS et non pas seulementla valeur des quatre bits Cest la valeur que lon peut voir dans la premiegravere colonne du tableausuivant

TOS Bits Signification Prioriteacute Linux Bande------------------------------------------------------------------------0x0 0 Service Normal 0 Best Effort 10x2 1 Minimise le Coucirct Moneacutetaire (mmc) 1 Filler 20x4 2 Maximalise la Fiabiliteacute (mr) 0 Best Effort 10x6 3 mmc+mr 0 Best Effort 10x8 4 Maximalise le Deacutebit (mt) 2 Masse 20xa 5 mmc+mt 2 Masse 20xc 6 mr+mt 2 Masse 20xe 7 mmc+mr+mt 2 Masse 20x10 8 Minimise le Deacutelai (md) 6 Interactive 00x12 9 mmc+md 6 Interactive 00x14 10 mr+md 6 Interactive 00x16 11 mmc+mr+md 6 Interactive 00x18 12 mt+md 4 Int Masse 10x1a 13 mmc+mt+md 4 Int Masse 10x1c 14 mr+mt+md 4 Int Masse 10x1e 15 mmc+mr+mt+md 4 Int Masse 1

amplsqbNdT par flux de masse (bulk flow) il faut entendre ltlt gros flot de donneacutees transmises encontinu gtgt comme un transfert FTP A lopposeacute un flux interactif (interactive flow) correspond agravecelui geacuteneacutereacute par des requecirctes SSH]

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

36 pfifoamplowbarfast

Beaucoup de nombres La seconde colonne contient la valeur correspondante des quatre bits TOSsuivi de leur signification Par exemple 15 repreacutesente un paquet voulant un coucirct moneacutetaire minimalune fiabiliteacute maximum un deacutebit maximum ET un deacutelai minimum Jappellerai ceci un ltlt paquetHollandais gtgt

La quatriegraveme colonne liste la maniegravere dont le noyau Linux interpregravete les bits TOS en indiquant agravequelle prioriteacute ils sont relieacutes

La derniegravere colonne montre la carte des prioriteacutes par deacutefaut Sur la ligne de commande la carte desprioriteacutes ressemble agrave ceci

1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Ceci signifie par exemple que la prioriteacute 4 sera relieacutee agrave la bande numeacutero 1 La carte des prioriteacutesvous permet eacutegalement de lister des prioriteacutes plus grandes (gt 7) qui ne correspondent pas agrave unerelation avec le champ TOS mais qui sont configureacutees par dautres moyens

Le tableau suivant provenant de la RFC 1349 (agrave lire pour plus de deacutetails) indique comment lesapplications devraient configurer leurs bits TOS pour fonctionner correctement

TELNET 1000 (minimise le deacutelai)FTP Controcircle 1000 (minimise le deacutelai) Donneacutees 0100 (maximalise le deacutebit)

TFTP 1000 (minimise le deacutelai)

SMTP phase de commande 1000 (minimise le deacutelai) phase DATA 0100 (maximalise le deacutebit)

Domain Name Service requecircte UDP 1000 (minimise le deacutelai) requecircte TCP 0000 Transfert de Zone 0100 (maximalise le deacutebit)

NNTP 0001 (minimise le coucirct moneacutetaire)

ICMP Erreurs 0000 Requecirctes 0000 (presque) Reacuteponses ltmecircme chose que requecirctegt (presque)

txqueuelenLa longueur de cette file dattente est fournie par la configuration de linterface que vous pouvez voiret configurer avec ifconfig et ip Pour configurer la longueur de la file dattente agrave 10 exeacutecuter ifconfig eth0 txqueuelen 10

Vous ne pouvez pas configurer ce paramegravetre avec tc

Filtre agrave seau de jetons (Token Bucket Filter)

Le Token Bucket Filter (TBF) est un gestionnaire de mise en file dattente simple Il ne fait que laisser passerles paquets entrants avec un deacutebit nexceacutedant pas une limite fixeacutee administrativement Lenvoi de courtesrafales de donneacutees avec un deacutebit deacutepassant cette limite est cependant possible

TBF est tregraves preacutecis et peu gourmand du point de vue reacuteseau et processeur Consideacuterez-le en premier si vousvoulez simplement ralentir une interface

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 37

Limpleacutementation TBF consiste en un tampon (seau) constamment rempli par des eacuteleacutements virtuelsdinformation appeleacutes jetons avec un deacutebit speacutecifique (deacutebit de jeton) Le paramegravetre le plus important dutampon est sa taille qui correspond au nombre de jetons quil peut stocker

Chaque jeton entrant laisse sortir un paquet de donneacutees de la file dattente de donneacutees et ce jeton est alorssupprimeacute du seau Lassociation de cet algorithme avec les deux flux de jetons et de donneacutees nous conduit agravetrois sceacutenarios possibles

Les donneacutees arrivent dans TBF avec un deacutebit EGAL au deacutebit des jetons entrants Dans ce cas chaquepaquet entrant a son jeton correspondant et passe la file dattente sans deacutelai

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS PETIT que le deacutebit des jetons Seule une partiedes jetons est supprimeacutee au moment ougrave les paquets de donneacutees sortent de la file dattente de sorte queles jetons saccumulent jusquagrave atteindre la taille du tampon Les jetons libres peuvent ecirctre utiliseacutespour envoyer des donneacutees avec un deacutebit supeacuterieur au deacutebit des jetons standard si de courtes rafales dedonneacutees arrivent

bull

Les donneacutees arrivent dans TBF avec un deacutebit PLUS GRAND que le deacutebit des jetons Ceci signifie quele seau sera bientocirct deacutepourvu de jetons ce qui provoque larrecirct de TBF pendant un moment Cecisappelle ltlt une situation de deacutepassement de limite gtgt (overlimit situation) Si les paquets continuentagrave arriver ils commenceront agrave ecirctre eacutelimineacutes

bull

Le dernier sceacutenario est tregraves important car il autorise la mise en forme administrative de la bande passantedisponible pour les donneacutees traversant le filtre

Laccumulation de jetons autorise leacutemission de courtes rafales de donneacutees sans perte en situation dedeacutepassement de limite mais toute surcharge prolongeacutee causera systeacutematiquement le retard des paquets puisleur rejet

Notez que dans limpleacutementation reacuteelle les jetons correspondent agrave des octets et non des paquets

Paramegravetres amp usage

Mecircme si vous naurez probablement pas besoin de les changer TBF a des paramegravetres Dabord ceux toujoursdisponibles sont

limit or latencyLimit est le nombre doctets qui peuvent ecirctre mis en file dattente en attendant la disponibiliteacute dejetons Vous pouvez eacutegalement indiquer ceci dune autre maniegravere en configurant le paramegravetrelatency qui speacutecifie le temps maximal pendant lequel un paquet peut rester dans TBF Ce dernierparamegravetre prend en compte la taille du seau le deacutebit et sil est configureacute le deacutebit de crecircte(peakrate)

burstbuffermaxburstTaille du seau en octets Cest la quantiteacute maximale en octets de jetons dont on disposerasimultaneacutement En geacuteneacuteral plus les deacutebits de mise en forme sont importants plus le tampon doit ecirctregrand Pour 10 Mbits sur plateforme Intel vous avez besoin dun tampon dau moins 10 kilo-octets sivous voulez atteindre la limitation configureacutee

Si votre tampon est trop petit les paquets pourront ecirctre rejeteacutes car il arrive plus de jetons par topdhorloge que ne peut en contenir le tampon

mpuUn paquet de taille nulle nutilise pas une bande passante nulle Pour ethernet la taille minimale dunpaquet est de 64 octets LUniteacute Minimale de Paquet (Minimun Packet Unit) deacutetermine le nombreminimal de jetons agrave utiliser pour un paquet

rateLe paramegravetre de la vitesse Voir les remarques au-dessus agrave propos des limites

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

38 Filtre agrave seau de jetons (Token Bucket Filter)

Si le seau contient des jetons et quil est autoriseacute agrave se vider alors il le fait par deacutefaut avec une vitesse infinieSi ceci vous semble inacceptable utilisez les paramegravetres suivants

peakrateSi des jetons sont disponibles et que des paquets arrivent ils sont immeacutediatement envoyeacutes par deacutefaut et pour ainsi dire agrave ltlt la vitesse de la lumiegravere gtgt Cela peut ne pas vous convenir speacutecialement sivous avez un grand seau

Le deacutebit de crecircte (peak rate) peut ecirctre utiliseacute pour speacutecifier la vitesse agrave laquelle le seau est autoriseacute agravese vider Si tout se passe comme eacutecrit dans les livres ceci est reacutealiseacute en libeacuterant un paquet puis enattendant suffisamment longtemps pour libeacuterer le paquet suivant Le temps dattente est calculeacute demaniegravere agrave obtenir un deacutebit eacutegal au deacutebit de crecircte

Cependant eacutetant donneacute que la reacutesolution du minuteur (timer) dUNIX est de 10 ms et que les paquetsont une taille moyenne de 10 000 bits nous sommes limiteacutes agrave un deacutebit de crecircte de 1mbits

mtuminburstLe deacutebit de crecircte de 1Mbs ne sert pas agrave grand chose si votre deacutebit habituel est supeacuterieur agrave cettevaleur Un deacutebit de crecircte plus eacuteleveacute peut ecirctre atteint en eacutemettant davantage de paquets par top duminuteur ce qui a pour effet de creacuteer un second seau

Ce second bucket ne prend par deacutefaut quun seul paquet et nest donc en aucun cas un seau

Pour calculer le deacutebit de crecircte maximum multipliez le mtu que vous avez configureacute par 100 (ou plusexactement par HZ qui est eacutegal agrave 100 sur Intel et agrave 1024 sur Alpha)

Configuration simple

Voici une configuration simple mais tregraves utile

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Pourquoi est-ce utile Si vous avez un peacuteripheacuterique reacuteseau avec une grande file dattente comme un modemDSL ou un modem cacircble et que le dialogue se fasse agrave travers une interface rapide comme une interfaceethernet vous observerez que teacuteleacutecharger vers lamont (uploading) deacutegrade complegravetement linteractiviteacute

amplsqbNdT uploading deacutesigne une opeacuteration qui consiste agrave transfeacuterer des donneacutees ou des programmesstockeacutes dans un ordinateur local vers un ordinateur distant agrave travers un reacuteseau La traduction officielle pour ceterme est ltlt teacuteleacutechargement vers lamont gtgt On parle alors de voie montante Le downloading deacutesignelopeacuteration inverse (transfert dun hocircte distant vers lordinateur local) et est traduit par ltlt teacuteleacutechargement gtgtou ltlt teacuteleacutechargement vers laval gtgt On parle alors de la voie descendante]

Le teacuteleacutechargement vers lamont va en effet remplir la file dattente du modem Celle-ci est probablementENORME car cela aide vraiment agrave obtenir de bon deacutebit de teacuteleacutechargement vers lamont Cependant ceci nestpas forceacutement ce que voulez Vous ne voulez pas forceacutement avoir une file dattente importante de maniegravere agravegarder linteractiviteacute et pouvoir encore faire des choses pendant que vous envoyez des donneacutees

La ligne de commande au-dessus ralentit lenvoi de donneacutees agrave un deacutebit qui ne conduit pas agrave une mise en filedattente dans le modem La file dattente reacuteside dans le noyau Linux ougrave nous pouvons lui imposer une taillelimite

Modifier la valeur 220kbit avec votre vitesse de lien REELLE moins un petit pourcentage Si vous avez unmodem vraiment rapide augmenter un peu le paramegravetre burst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 39

Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing)

Stochastic Fairness Queueing (SFQ) est une impleacutementation simple de la famille des algorithmes de mise enfile dattente eacutequitable Cette impleacutementation est moins preacutecise que les autres mais elle neacutecessite aussi moinsde calculs tout en eacutetant presque parfaitement eacutequitable

Le mot cleacute dans SFQ est conversation (ou flux) qui correspond principalement agrave une session TCP ou un fluxUDP Le trafic est alors diviseacute en un grand nombre de jolies files dattente FIFO une par conversation Letrafic est alors envoyeacute dans un tourniquet donnant une chance agrave chaque session denvoyer leurs donneacutees touragrave tour

Ceci conduit agrave un comportement tregraves eacutequitable et empecircche quune seule conversation eacutetouffe les autres SFQest appeleacute ltlt Stochastic gtgt car il nalloue pas vraiment une file dattente par session mais a un algorithme quidivise le trafic agrave travers un nombre limiteacute de files dattente en utilisant un algorithme de hachage

A cause de ce hachage plusieurs sessions peuvent finir dans le mecircme seau ce qui peut reacuteduire de moitieacute leschances dune session denvoyer un paquet et donc reacuteduire de moitieacute la vitesse effective disponible Pourempecirccher que cette situation ne devienne importante SFQ change tregraves souvent son algorithme de hachagepour que deux sessions entrantes en collision ne le fassent que pendant un nombre reacuteduit de secondes

Il est important de noter que SFQ nest seulement utile que dans le cas ougrave votre interface de sortie est vraimentsatureacutee Si ce nest pas le cas il ny aura pas de files dattente sur votre machine Linux et donc pas deffetsPlus tard nous deacutecrirons comment combiner SFQ avec dautres gestionnaires de mise en files dattente pourobtenir le meilleur des deux mondes

Configurer speacutecialement SFQ sur linterface ethernet qui est en relation avec votre modem cacircble ou votrerouteur DSL est vain sans dautres mises en forme du trafic

Paramegravetres amp usage

SFQ est presque configureacute de base

perturbReconfigure le hachage une fois toutes les pertub secondes Sil nest pas indiqueacute le hachage se serajamais reconfigureacute Ce nest pas recommandeacute 10 secondes est probablement une bonne valeur

quantumNombre doctets quun flux est autoriseacute agrave retirer de la file dattente avant que la prochaine file dattentene prenne son tour Par deacutefaut eacutegal agrave la taille maximum dun paquet (MTU) Ne le configurez pas endessous du MTU

Configuration simple

Si vous avez un peacuteripheacuterique qui a une vitesse identique agrave celle du lien et un deacutebit reacuteel disponible comme unmodem teacuteleacutephonique cette configuration aidera agrave promouvoir leacutequiteacute

tc qdisc add dev ppp0 root sfq perturb 10 tc -s -d qdisc lsqdisc sfq 800c dev ppp0 quantum 1514b limit 128p flows 1281024 perturb 10sec Sent 4812 bytes 62 pkts (dropped 0 overlimits 0)

Le nombre 800c est un descripteur (handle) automatiquement assigneacute et limit signifie que 128 paquetspeuvent attendre dans la file dattente Il y a 1024 ltlt seaux de hachage gtgt disponibles pour la comptabiliteacute128 pouvant ecirctre actifs agrave la fois (pas plus de paquets ne conviennent dans la file dattente) Le hachage est

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

40 Mise en file dattente stochastiquement eacutequitable (Stochastic Fairness Queueing)

reconfigureacute toutes les 10 secondes

Conseils pour le choix de la file dattente

Pour reacutesumer ces files dattente simples gegraverent le trafic en reacuteordonnant en ralentissant ou en supprimant lespaquets

Les astuces suivantes peuvent vous aider agrave choisir la file dattente agrave utiliser Elles mentionnent certaines filesdattente deacutecrites dans le chapitre Gestionnaires de mise en file dattente avanceacutesgt

Pour simplement ralentir le trafic sortant utilisez le Token Bucket Filter Il convient bien pour leseacutenormes bandes passantes si vous paramegravetrez en conseacutequence le seau

bull

Si votre lien est vraiment satureacute et que vous voulez ecirctre sucircr quaucune session ne va accaparer labande passante vers lexteacuterieur utilisez le Stochastical Fairness Queueing

bull

Si vous avez une grande dorsale et que vous voulez savoir ce que vous faites consideacuterez RandomEarly Drop (voir le chapitre Gestionnaires de mise en file dattente avanceacutesgt)

bull

Pour ltlt mettre en forme gtgt le trafic entrant qui nest pas transmis utilisez la reacuteglementation Ingress(Ingress Policier) La mise en forme du flux entrant est appeleacutee ltlt reacuteglementation gtgt (policing) etnon ltlt mise en forme gtgt (shaping)

bull

Si vous transmettez le trafic utilisez TBF sur linterface vers laquelle vous transmettez les donneacutees Sivous voulez mettre en forme un trafic pouvant sortir par plusieurs interfaces alors le seul facteurcommun est linterface entrante Dans ce cas utilisez la reacuteglementation Ingress

bull

Si vous ne voulez pas mettre en forme le trafic mais que vous vouliez voir si votre interface esttellement chargeacutee quelle a ducirc mettre en file dattente les donneacutees utilisez la file dattente pfifo (paspfifoamplowbarfast) Elle na pas de bandes internes mais assure le comptage de la taille de sonaccumulateur

bull

Finalement vous pouvez aussi faire de la ltlt mise en forme sociale gtgt La technologie nest pastoujours capable de reacutealiser ce que vous voulez Les utilisateurs sont hostiles aux contraintestechniques Un mot aimable peut eacutegalement vous aider agrave avoir votre bande passante correctementdiviseacutee

bull

terminologie

Pour comprendre correctement des configurations plus compliqueacutees il est dabord neacutecessaire dexpliquerquelques concepts A cause de la complexiteacute et de la relative jeunesse du sujet beaucoup de mots diffeacuterentssont utiliseacutes par les personnes mais ils signifient en fait la mecircme chose

Ce qui suit est lacircchement inspireacute du texte draft-ietf-diffserv-model-06txt An InformalManagement Model for Diffserv Routers Il peut ecirctre trouveacute agrave ladressehttpwwwietforginternet-draftsdraft-ietf-diffserv-model-04txt

Lisez-le pour les deacutefinitions strictes des termes utiliseacutes

Gestionnaire de mise en file dattente (qdisc) (Queueing Discipline)Un algorithme qui gegravere la file dattente dun peacuteripheacuterique soit pour les donneacutees entrantes (ingress)soit pour les donneacutees sortantes (egress)

Gestionnaire de mise en file dattente sans classes (Classless qdisc)Un gestionnaire de mise en file dattente qui na pas de subdivisions internes configurables

Gestionnaire de mise en file dattente baseacute sur des classes (Classful qdisc)Un gestionnaire de mise en file dattente baseacute sur des classes contient de multiples classes Certainesde ces classes contiennent un gestionnaire de mise en file dattente suppleacutementaire qui peut encoreecirctre baseacute sur des classes mais ce nest pas obligatoire Si lon sen tient agrave la deacutefinition strictepfifoamplowbarfast EST baseacute sur des classes dans la mesure ougrave il contient trois bandes qui sont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 41

en fait des classes Cependant dun point de vue des perspectives de configuration pour lutilisateur ilest sans classes dans la mesure ougrave ces classes ne peuvent ecirctre modifieacutees avec loutil tc

ClassesUn gestionnaire de mise en file dattente baseacute sur les classes peut avoir beaucoup de classes chacunedelles eacutetant internes au gestionnaire Une classe peut agrave son tour se voir ajouter plusieurs classes Uneclasse peut donc avoir comme parent soit un gestionnaire de mise en file dattente soit une autreclasse Une classe terminale est une classe qui ne possegravede de classes enfants Seul 1 gestionnaire demise en file dattente est attacheacute agrave cette classe Ce gestionnaire est responsable de lenvoi des donneacuteesde cette classe Quand vous creacuteez une classe un gestionnaire de mise en file dattente fifo est creacuteeacuteQuand vous ajoutez une classe enfant ce gestionnaire est supprimeacute Le gestionnaire fifo dune classeterminale peut ecirctre remplaceacute par un autre gestionnaire plus adapteacute Vous pouvez mecircme remplacer cegestionnaire fifo par un gestionnaire de mise en file dattente baseacute sur des classes de sorte que vouspourrez rajouter des classes suppleacutementaires

Classificateur (Classifier)Chaque gestionnaire de mise en file dattente baseacute sur des classes a besoin de deacuteterminer vers quellesclasses il doit envoyer un paquet Ceci est reacutealiseacute en utilisant le classificateur

Filtre (Filter)La classification peut ecirctre reacutealiseacutee en utilisant des filtres Un filtre est composeacute dun certain nombre deconditions qui si elles sont toutes veacuterifieacutees satisfait le filtre

Ordonnancement (Scheduling)Un gestionnaire de mise en file dattente peut avec laide dun classificateur deacutecider que des paquetsdoivent sortir plus tocirct que dautres Ce processus est appeleacute ordonnancement (scheduling) et estreacutealiseacute par exemple par le gestionnaire pfifoamplowbarfast mentionneacute plus tocirctLordonnancement est aussi appeleacute ltlt reclassement gtgt (reordering) ce qui peut precircter agrave confusion

Mise en forme (Shaping)Le processus qui consiste agrave retarder leacutemission des paquets sortants pour avoir un trafic conforme agrave undeacutebit maximum configureacute La mise en forme est reacutealiseacutee sur egress Familiegraverement rejeter despaquets pour ralentir le trafic est eacutegalement souvent appeleacute Mise en forme

Reacuteglementation (Policing)Retarder ou jeter des paquets dans le but davoir un trafic restant en dessous dune bande passanteconfigureacutee Dans Linux la reacuteglementation ne peut que jeter un paquet et non le retarder dans lamesure ougrave il ny a pas de ltlt file dattente dentreacutee gtgt (ingress queue)

Work-ConservingUn gestionnaire de mise en file dattente work-conserving deacutelivre toujours un paquet sil y en a un dedisponible En dautres termes il ne retarde jamais un paquet si ladaptateur reacuteseau est precirct agrave lenvoyer(dans le cas du gestionnaire egress)

non-Work-ConservingQuelques gestionnaire de mise en files dattente comme par exemple le Token Bucket Filter peuventavoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante Cecisignifie quils refusent parfois de libeacuterer un paquet bien quils en aient un de disponible

Maintenant que nous avons deacutefini notre terminologie voyons ougrave tous ces eacuteleacutements sont situeacutes

Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------gt Pile IP | | | | | | | Y | | | Y | | ^ | | | | ----------gt Transmission -gt | | ^ | | | | Y | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

42 terminologie

| ^ Y -qdisc1- | | | Classificateur --qdisc2-- | ---gt-gtGestionnaire de mise de sortie ---qdisc3---- | -gt | en file dattente (Egress) __qdisc4__ | | dentreacutee (Ingress) -qdiscN_ | | | +-----------------------------------------------------------+

Merci agrave Jamal Hadi Salim pour cette repreacutesentation ASCII

Le grand rectangle repreacutesente le noyau La flegraveche la plus agrave gauche repreacutesente le trafic du reacuteseau entrant dansvotre machine Celui-ci alimente alors le gestionnaire de mise en file dattente Ingress qui peut appliquer desfiltres agrave un paquet et deacutecider de le supprimer Ceci est appeleacute ltlt reacuteglementation gtgt (Policing)

Ce processus a lieu tregraves tocirct avant davoir beaucoup parcouru le noyau Cest par conseacutequent un tregraves bonendroit pour rejeter au plus tocirct du trafic sans pour autant consommer beaucoup de ressources CPU

Si le paquet est autoriseacute agrave continuer il peut ecirctre destineacute agrave une application locale et dans ce cas il entre dans lacouche IP pour ecirctre traiteacute et deacutelivreacute agrave un programme utilisateur Le paquet peut eacutegalement ecirctre transmis sansentrer dans une application et dans ce cas ecirctre destineacute agrave egress Les programmes utilisateurs peuventeacutegalement deacutelivrer des donneacutees qui sont alors transmises et examineacutees par le classificateur Egress

Lagrave il est examineacute et mis en file dattente vers un certain nombre de gestionnaire de mise en file dattente Pardeacutefaut il ny a quun seul gestionnaire egress installeacute pfifoamplowbarfast qui reccediloit tous les paquetsCeci correspond agrave ltlt la mise en file dattente gtgt (enqueueing)

Le paquet reacuteside maintenant dans le gestionnaire de mise en file dattente attendant que le noyau le reacuteclamepour le transmettre agrave travers linterface reacuteseau Ceci correspond au ltlt retrait de la file dattente gtgt(dequeueing)

Le scheacutema ne montre que le cas dun seul adaptateur reacuteseau Les flegraveches entrantes et sortantes du noyau nedoivent pas ecirctre trop prises au pied de la lettre Chaque adaptateur reacuteseau a un gestionnaire dentreacutee et desortie

Gestionnaires de file dattente baseacutes sur les classes

Les gestionnaires de mise en file dattente baseacutes sur des classes sont tregraves utiles si vous avez diffeacuterentes sortesde trafic qui doivent ecirctre traiteacutes diffeacuteremment Lun dentre eux est appeleacute CBQ pour Class Based QueueingIl est si souvent mentionneacute que les personnes identifient les gestionnaires de mise en file dattente baseacutes surdes classes uniquement agrave CBQ ce qui nest pas le cas

CBQ est le meacutecanisme le plus ancien ainsi que le plus compliqueacute Il naura pas forceacutement les effets que vousrecherchez Ceci surprendra peut-ecirctre ceux qui sont sous lemprise de ltlt leffet Sendmail gtgt qui nousenseigne quune technologie complexe non documenteacutee est forceacutement meilleure que toute autre

Nous eacutevoquerons bientocirct plus agrave propos CBQ et ses alternatives

Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

Quand le trafic entre dans un gestionnaire de mise en file dattente baseacute sur des classes il doit ecirctre envoyeacute verslune de ses classes il doit ecirctre ltlt classifieacute gtgt Pour deacuteterminer que faire dun paquet les eacuteleacutements appeleacutesltlt filtres gtgt sont consulteacutes Il est important de savoir que les filtres sont appeleacutes de linteacuterieur dungestionnaire et pas autrement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Gestionnaires de file dattente baseacutes sur les classes 43

Les filtres attacheacutes agrave ce gestionnaire renvoient alors une deacutecision que le gestionnaire utilise pour mettre en filedattente le paquet vers lune des classes Chaque sous-classe peut essayer dautres filtres pour voir si denouvelles instructions sappliquent Si ce nest pas le cas la classe met le paquet en file dattente dans legestionnaire de mise en file dattente quelle contient

En plus de contenir dautres gestionnaires la plupart des gestionnaires de mise en file dattente baseacutes sur desclasses reacutealisent eacutegalement de la mise en forme Ceci est utile pour reacutealiser agrave la fois lordonnancement (avecSFQ par exemple) et le controcircle de deacutebit Vous avez besoin de ceci dans les cas ougrave vous avez une interface agravehaut deacutebit (ethernet par exemple) connecteacutee agrave un peacuteripheacuterique plus lent (un modem cacircble)

Si vous nutilisez que SFQ rien ne devait se passer dans la mesure ougrave les paquets entrent et sortent du routeursans deacutelai linterface de sortie est de loin beaucoup plus rapide que la vitesse reacuteelle de votre liaison il ny aalors pas de files dattente agrave reacuteordonnancer

La famille des gestionnaires de mise en file dattente racines descripteursdescendances et parents

Chaque interface agrave ltlt un gestionnaire de mise en file dattente racine gtgt de sortie (egress root qdisc) Pardeacutefaut le gestionnaire de mise en file dattente sans classes mentionneacute plus tocirct pfifoamplowbarfastChaque gestionnaire et classe est repeacutereacute par un descripteur (handle) qui pourra ecirctre utiliseacute par les prochainesdeacuteclarations de configuration pour se reacutefeacuterer agrave ce gestionnaire En plus du gestionnaire de sortie une interfacepeut eacutegalement avoir un gestionnaire dentreacutee (ingress) qui reacuteglemente le trafic entrant

Ces descripteurs sont constitueacutes de deux parties un nombre majeur et un nombre mineur ltmajorgtltminorgtIl est habituel de nommer le gestionnaire racine 1 ce qui est eacutequivalent agrave 10 Le nombre mineur dungestionnaire de mise en file dattente est toujours 0

Les classes doivent avoir le mecircme nombre majeur que leur parent Le nombre majeur doit ecirctre unique agravelinteacuterieur dune configuration egress ou ingress Le nombre mineur doit ecirctre unique agrave linteacuterieur dungestionnaire de mise en file dattente et de ses classes

Comment les filtres sont utiliseacutes pour classifier le trafic

Pour reacutecapituler une hieacuterarchie typique pourrait ressembler agrave ceci

1 Gestionnaire de mise en file dattente racine | 11 classe enfant | | | | 110 111 112 classes enfants | | | | 11 | classe terminale | | 10 12 Gestionnaire de mise en file dattente 101 102 121 122 classes terminales

Mais ne laissez pas cet arbre vous abuser Vous ne devriez pas imaginer le noyau ecirctre au sommet de larbre etle reacuteseau en dessous ce qui nest justement pas le cas Les paquets sont mis et retireacutes de la file dattente agrave laracine du gestionnaire qui est le seul eacuteleacutement avec lequel le noyau dialogue

Un paquet pourrait ecirctre classifieacute agrave travers une chaicircne suivante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

44 Flux agrave linteacuterieur des gestionnaires baseacutes sur des classes amp agrave linteacuterieur desclasses

1 -gt 11 -gt 12 -gt 122

Le paquet reacuteside maintenant dans la file dattente du gestionnaire attacheacute agrave la classe 122 Dans cet exempleun filtre a eacuteteacute attacheacute agrave chaque noeud de larbre chacun choisissant la prochaine branche agrave prendre Cela estreacutealisable Cependant ceci est eacutegalement possible

1 -gt 122

Dans ce cas un filtre attacheacute agrave la racine a deacutecideacute denvoyer le paquet directement agrave 122

Comment les paquets sont retireacutes de la file dattente et envoyeacutes vers le mateacuteriel

Quand le noyau deacutecide quil doit extraire des paquets pour les envoyer vers linterface le gestionnaire racine1 reccediloit une requecircte dequeue qui est transmise agrave 11 et qui agrave son tour est passeacutee agrave 10 11 et 12chacune interrogeant leurs descendances qui essaient de retirer les paquets de leur file dattente Dans ce casle noyau doit parcourir lensemble de larbre car seul 122 contient un paquet

En reacutesumeacute les classes ltlt emboicircteacutees gtgt parlent uniquement agrave leur gestionnaire de mise en file dattenteparent jamais agrave une interface Seul la file dattente du gestionnaire racine est videacutee par le noyau

Ceci a pour reacutesultat que les classes ne retirent jamais les paquets dune file dattente plus vite que ce que leurparent autorise Et cest exactement ce que nous voulons de cette maniegravere nous pouvons avoir SFQ dans uneclasse interne qui ne fait pas de mise en forme mais seulement de lordonnancement et avoir un gestionnairede mise en file dattente exteacuterieur qui met en forme le trafic

Le gestionnaire de mise en file dattente PRIO

Le gestionnaire de mise en file dattente ne met pas vraiment en forme le trafic il ne fait que le subdiviser ense basant sur la maniegravere dont vous avez configureacute vos filtres Vous pouvez consideacuterer les gestionnaires PRIOcomme une sorte de super pfifoamplowbarfast dopeacute ougrave chaque bande est une classe seacutepareacutee au lieudune simple FIFO

Quand un paquet est mis en file dattente dans le gestionnaire PRIO une classe est choisie en fonction desfiltres que vous avez donneacutes Par deacutefaut trois classes sont creacuteeacutees Ces classes contiennent par deacutefaut de pursgestionnaires de mise en file dattente FIFO sans structure interne mais vous pouvez les remplacer parnimporte quels gestionnaires disponibles

Chaque fois quun paquet doit ecirctre retireacute dune file dattente la classe 1 est dabord testeacutee Les classes pluseacuteleveacutees ne sont utiliseacutees que si aucune des bandes plus faibles na pas fourni de paquets

Cette file dattente est tregraves utile dans le cas ougrave vous voulez donner la prioriteacute agrave certains trafics en utilisant toutela puissance des filtres tc et en ne se limitant pas seulement aux options du champ TOS Vous pouvezeacutegalement ajouter un autre gestionnaire de mise en file dattente aux trois classes preacutedeacutefinies tandis quepfifoamplowbarfast est limiteacute aux simples gestionnaires FIFO

Puisquil ne met pas vraiment en forme on applique le mecircme avertissement que pour SFQ Utilisez PRIOseulement si votre lien physique est vraiment satureacute ou inteacutegrez-le agrave linteacuterieur dun gestionnaire de mise enfile dattente baseacute sur des classes qui reacutealisent la mise en forme Ce dernier cas est valable pour pratiquementtous les modems-cacircbles et les peacuteripheacuteriques DSL

En termes formels le gestionnaire de mise en file dattente PRIO est un ordonnanceur Work-Conserving

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Comment les filtres sont utiliseacutes pour classifier le trafic 45

Paramegravetres PRIO amp usage

Les paramegravetres suivants sont reconnus par tc

bandsNombre de bandes agrave creacuteer Chaque bande est en fait une classe Si vous changez ce nombre vousdevez eacutegalement changer

priomapSi vous ne fournissez pas de filtres tc pour classifier le trafic le gestionnaire PRIO regarde la prioriteacuteTCamplowbarPRIO pour deacutecider comment mettre en file dattente le trafic

Ceci fonctionne comme le gestionnaire de mise en file dattente pfifoamplowbarfast mentionneacuteplus tocirct Voir la section correspondante pour plus de deacutetails

Les bandes sont des classes et sont appeleacutees par deacutefaut majeur1 agrave majeur3 Donc si votre gestionnaire demise en file dattente est appeleacute 12 tc filtre le trafic vers 121 pour lui accorder une plus grande prioriteacute

Par iteacuteration la bande 0 correspond au nombre mineur 1 la bande 1 au nombre mineur 2 etc

Configuration simple

Nous allons creacuteer cet arbre

racine 1 prio 1 Gestionnaire racine | | | 11 12 13 classes | | | 10 20 30 gestionnaire gestionnaire sfq tbf sfqbande 0 1 2

Le trafic de masse ira vers 30 tandis que le trafic interactif ira vers 20 ou 10

Les lignes de commande

tc qdisc add dev eth0 root handle 1 prio Ceci creacutee instantaneacutement les classes 11 12 13

tc qdisc add dev eth0 parent 11 handle 10 sfq tc qdisc add dev eth0 parent 12 handle 20 tbf rate 20kbit buffer 1600 limit 3000 tc qdisc add dev eth0 parent 13 handle 30 sfq

Regardons maintenant ce que nous avons creacuteeacute

tc -s qdisc ls dev eth0 qdisc sfq 30 quantum 1514b Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 0 bytes 0 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 132 bytes 2 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0 overlimits 0)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

46 Paramegravetres PRIO amp usage

Comme vous pouvez le voir la bande 0 a deacutejagrave reccedilu du trafic et un paquet a eacuteteacute envoyeacute pendant lexeacutecution decette commande

Nous allons maintenant geacuteneacuterer du trafic de masse avec un outil qui configure correctement les options TOSet regarder de nouveau

scp tc ahu100011ahu100011s password tc 100 || 353 KB 0000 tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 2230 bytes 31 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0 overlimits 0)

Comme vous pouvez le voir tout le trafic a eacuteteacute envoyeacute comme preacutevu vers le descripteur 30 qui est la bandede plus faible prioriteacute Maintenant pour veacuterifier que le trafic interactif va vers les bandes de plus grandeprioriteacute nous geacuteneacuterons du trafic interactif

tc -s qdisc ls dev eth0qdisc sfq 30 quantum 1514b Sent 384228 bytes 274 pkts (dropped 0 overlimits 0)

qdisc tbf 20 rate 20Kbit burst 1599b lat 6676ms Sent 2640 bytes 20 pkts (dropped 0 overlimits 0)

qdisc sfq 10 quantum 1514b Sent 14926 bytes 193 pkts (dropped 0 overlimits 0)

qdisc prio 1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0 overlimits 0)

Ca a marcheacute Tout le trafic suppleacutementaire a eacuteteacute vers 10 qui est notre gestionnaire de plus grande prioriteacuteAucun trafic na eacuteteacute envoyeacute vers les prioriteacutes les plus faibles qui avaient reccedilu au preacutealable tout le trafic venantde notre scp

Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Comme dit avant CBQ est le gestionnaire de mise en file dattente disponible le plus complexe celui qui a eule plus de publiciteacute qui est le moins compris et qui est probablement le plus farceur lors de sa mise au pointCe nest pas parce que les auteurs sont mauvais ou incompeacutetents loin de lagrave mais lalgorithme CBQ nest pasremarquablement preacutecis et il ne correspond pas vraiment agrave la faccedilon dont Linux fonctionne

En plus decirctre baseacute sur des classes CBQ sert eacutegalement agrave la mise en forme de trafic et cest sur cet aspect quilne fonctionne pas tregraves bien Il travaille comme ceci si vous essayez de mettre en forme une connexion de10mbits agrave 1mbitss le lien doit ecirctre inactif 90amppercnt du temps Si ce nest pas le cas nous devons limiter letaux de sorte quil soit inactif 90amppercnt du temps

Ceci est assez dur agrave mesurer et cest pour cette raison que CBQ deacuteduit le temps dinactiviteacute du nombre demicrosecondes qui seacutecoulent entre les requecirctes de la couche mateacuterielle pour avoir plus de donneacutees Cettecombinaison peut ecirctre utiliseacutee pour eacutevaluer si le lien est chargeacute ou non

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 47

Ceci est plutocirct leacuteger et lon arrive pas toujours agrave des reacutesultats convenables Par exemple quen est-il de lavitesse de liaison reacuteelle dune interface qui nest pas capable de transmettre pleinement les donneacutees agrave100mbits peut-ecirctre agrave cause dun mauvais pilote de peacuteripheacuterique Une carte reacuteseau PCMCIA ne pourrajamais atteindre 100mbits agrave cause de la conception du bus De nouveau comment calculons-nous le tempsdinactiviteacute

Cela devient mecircme pire quand on considegravere un peacuteripheacuterique reacuteseau pas-vraiment-reacuteel comme PPP OverEthernet ou PPTP over TCPIP La largeur de bande effective est dans ce cas probablement deacutetermineacutee parlefficaciteacute des tubes vers lespace utilisateur qui est eacutenorme

Les personnes qui ont effectueacute des mesures ont deacutecouvert que CBQ nest pas toujours tregraves exact et parfoismecircme tregraves eacuteloigneacute de la configuration

Cependant il marche bien dans de nombreuses circonstances Avec la documentation fournie ici vous devriezecirctre capable de le configurer pour quil fonctionne bien dans la plupart des cas

Mise en forme CBQ en deacutetail

Comme dit preacuteceacutedemment CBQ fonctionne en sassurant que le lien est inactif juste assez longtemps pourabaisser la bande passante reacuteelle au deacutebit configureacute Pour reacutealiser cela il calcule le temps qui devrait seacutecoulerentre des paquets de taille moyennne

En cours de fonctionnement le temps dinactiviteacute effectif (the effective idletime) est mesureacute en utilisantlalgorithme EWMA (Exponential Weighted Moving Average) qui considegravere que les paquets reacutecents sontexponentiellement plus nombreux que ceux passeacutes La charge moyenne UNIX (UNIX loadaverage) estcalculeacutee de la mecircme maniegravere

Le temps dinactiviteacute calculeacute est soustrait agrave celui mesureacute par EWMA et le nombre reacutesultant est appeleacuteavgidle Un lien parfaitement chargeacute a un avgidle nul un paquet arrive agrave chaque intervalle calculeacute

Une liaison surchargeacutee a un avgidle neacutegatif et sil devient trop neacutegatif CBQ sarrecircte un moment et se placealors en deacutepassement de limite (overlimit)

Inversement un lien inutiliseacute peut accumuler un avgidle eacutenorme qui autoriserait alors des bandespassantes infinies apregraves quelques heures dinactiviteacute Pour eacuteviter cela avgidle est borneacute agrave maxidle

En situation de deacutepassement de limite CBQ peut en theacuteorie bloquer le deacutebit pour une dureacutee eacutequivalente autemps qui doit seacutecouler entre deux paquets moyens puis laisser passer un paquet et bloquer de nouveau ledeacutebit Regardez cependant le paramegravetre minburst ci-dessous

Voici les paramegravetres que vous pouvez speacutecifier pour configurer la mise en forme

avpktTaille moyenne dun paquet mesureacutee en octets Neacutecessaire pour calculer maxidle qui deacuterive demaxburst qui est speacutecifieacute en paquets

bandwidthLa bande passante physique de votre peacuteripheacuterique neacutecessaire pour les calculs du temps de nonutilisation (idle time)

cellLa dureacutee de transmission dun paquet naugmente pas neacutecessairement de maniegravere lineacuteaire en fonctionde sa taille Par exemple un paquet de 800 octets peut ecirctre transmis en exactement autant de tempsquun paquet de 806 octets Ceci deacutetermine la granulariteacute Cette valeur est geacuteneacuteralement positionneacutee agrave8 et doit ecirctre une puissance de deux

maxburst

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

48 Le ceacutelegravebre gestionnaire de mise en file dattente CBQ

Ce nombre de paquets est utiliseacute pour calculer maxidle de telle sorte que quand avgidle est eacutegalagrave maxidle le nombre de paquets moyens peut ecirctre envoyeacute en rafale avant que avgidle neretombe agrave 0 Augmentez-le pour ecirctre plus toleacuterant vis agrave vis des rafales de donneacutees Vous ne pouvezpas configurer maxidle directement mais seulement via ce paramegravetre

minburstComme nous lavons deacutejagrave indiqueacute CBQ doit bloquer le deacutebit dans le cas dun deacutepassement de limiteLa solution ideacuteale est de le faire pendant exactement le temps dinutilisation calculeacute puis de laisserpasser un paquet Cependant les noyaux UNIX ont geacuteneacuteralement du mal agrave preacutevoir des eacuteveacutenementsplus courts que 10 ms il vaut donc mieux limiter le deacutebit pendant une peacuteriode plus longue puisenvoyer minburst paquets dun seul coup et dormir pendant une dureacutee de minburst

Le temps dattente est appeleacute offtime De plus grandes valeurs de minburst megravenent agrave une mise enforme plus preacutecise dans le long terme mais provoquent de plus grandes rafales de donneacutees pendantdes peacuteriodes de quelques millisecondes

minidleSi avgidle est infeacuterieur agrave 0 nous sommes en deacutepassement de limite et nous devons attendre jusquagravece que avgidle devienne suffisamment important pour envoyer un paquet Pour eacuteviter quunebrusque rafale de donneacutees nempecircche le lien de fonctionner pendant une dureacutee prolongeacutee avgidleest remis agrave minidle sil atteint une valeur trop basse

La valeur minidle est speacutecifieacutee en microsecondes neacutegatives 10 signifie alors que avgidle estborneacute agrave -10micros

mpuTaille minumum dun paquet Neacutecessaire car mecircme un paquet de taille nulle est encapsuleacute par 64octets sur ethernet et il faut donc un certain temps pour le transmettre CBQ doit connaicirctre ceparamegravetre pour calculer preacuteciseacutement le temps dinutilisation

rateDeacutebit du trafic sortant du gestionnaire Ceci est le ltlt paramegravetre de vitesse gtgt

En interne CBQ est finement optimiseacute Par exemple les classes qui sont connues pour ne pas avoir dedonneacutees preacutesentes dans leur file dattente ne sont pas interrogeacutees Les classes en situation de deacutepassement delimite sont peacutenaliseacutees par la diminution de leur prioriteacute effective Tout ceci est tregraves habile et compliqueacute

Le comportement CBQ classful

En plus de la mise en forme en utilisant les approximations idletime mentionneacutees ci-dessus CBQ peuteacutegalement agir comme une file dattente PRIO dans le sens ougrave les classes peuvent avoir diffeacuterentes prioriteacutesLes prioriteacutes de plus faible valeur seront examineacutees avant celles de valeurs plus eacuteleveacutees

Chaque fois quun paquet est demandeacute par la couche mateacuterielle pour ecirctre envoyeacute sur le reacuteseau un processusweighted round robin (WRR) deacutemarre en commenccedilant par les classes de plus faibles numeacuteros

Celles-ci sont regroupeacutees et interrogeacutees si elles ont des donneacutees disponibles Apregraves quune classe ait eacuteteacuteautoriseacutee agrave retirer de la file dattente un nombre doctets la classe de prioriteacute suivante est consulteacutee

Les paramegravetres suivants controcirclent le processus WRR

allotQuand le CBQ racine reccediloit une demande denvoi de paquets sur une interface il va essayer tous lesgestionnaires internes (dans les classes) tour agrave tour suivant lordre du paramegravetre priority Achaque passage une classe ne peut envoyer quune quantiteacute limiteacutee de donneacutees Le paramegravetre allotest luniteacute de base de cette quantiteacute Voir le paramegravetre weight pour plus dinformations

prioCBQ peut eacutegalement agir comme un peacuteripheacuterique PRIO Les classes internes avec les prioriteacutes les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Mise en forme CBQ en deacutetail 49

plus eacuteleveacutees sont consulteacutees en premier et aussi longtemps quelles ont du trafic les autres classes nesont pas examineacutees

weightLe paramegravetre weight assiste le processus Weighted Round Robin Chaque classe a tour agrave tour lapossibiliteacute denvoyer ses donneacutees Si vous avez des classes avec des bandes passantessignificativement plus importantes il est logique de les autoriser agrave envoyer plus de donneacutees agrave chaquetour que les autres

Vous pouvez utiliser des nombres arbitraires dans la mesure ougrave CBQ additionne tous les paramegravetresweight preacutesents sous une classe et les normalise La regravegle empirique qui consiste agrave prendrerate10 semble fonctionner correctement Le paramegravetre weight normaliseacute est multiplieacute par leparamegravetre allot pour deacuteterminer la quantiteacute de donneacutees agrave envoyer agrave chaque tour

Notez sil vous plaicirct que toutes les classes agrave linteacuterieur dune hieacuterarchie CBQ doivent avoir le mecircme nombremajeur

Paramegravetres CBQ qui deacuteterminent le partage amp le precirct du lien

En plus de purement limiter certains trafics il est eacutegalement possible de speacutecifier quelles classes peuventemprunter de la bande passante aux autres classes ou reacuteciproquement precircter sa bande passante

isolated sharingUne classe qui est configureacutee avec isolated ne precirctera pas sa bande passante agrave ses classes enfantsUtilisez ceci si vous avez sur votre lien deux agences concurrentes ou qui ne sappreacutecient pas et qui neveulent pas se precircter gratuitement de la bande passante

Le programme de controcircle tc connait eacutegalement sharing qui agit agrave linverse du paramegravetreisolated

bounded borrowUne classe peut aussi ecirctre borneacutee (bounded) ce qui signifie quelle nessaiera pas demprunter de labande passante agrave ses classes enfants tc connait eacutegalement borrow qui agit agrave linverse de bounded

Une situation typique pourrait ecirctre le cas ougrave vous avez deux agences preacutesentes sur votre lien qui sont agrave la foisisolated et bounded Ceci signifie quelles sont strictement limiteacutees agrave leur deacutebit et quelles ne precircterontpas aux autres leur bande passante

A linteacuterieur de ces classes dagence il pourrait y avoir dautres classes qui sont autoriseacutees agrave eacutechanger leurbande passante

Configuration simple

1 gestionnaire de mise en file dattente racine | 11 classe enfant 13 14 classes terminales | | 30 40 gestionnares de mise en file dattente (sfq) (sfq)

Cette configuration limite le trafic dun serveur web agrave 5 mbit et le trafic SMTP agrave 3 mbit Il est souhaitablequils noccupent pas plus de 6 mbit agrave eux deux Nous avons une carte reacuteseau agrave 100 mbit et les classes peuventsemprunter mutuellement de la bande passante

tc qdisc add dev eth0 root handle 10 cbq bandwidth 100Mbit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

50 Le comportement CBQ classful

avpkt 1000 cell 8 tc class add dev eth0 parent 10 classid 11 cbq bandwidth 100Mbit rate 6Mbit weight 06Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

Cette partie installe la racine et la classe 11 habituelle La classe 11 est borneacutee la bande passante totale nepourra donc pas exceacuteder 6 mbit

Comme dit avant CBQ a besoin de NOMBREUX paramegravetres Tous ces paramegravetres sont cependant expliqueacutesau-dessus La configuration HTB correspondante est beaucoup plus simple

tc class add dev eth0 parent 11 classid 13 cbq bandwidth 100Mbit rate 5Mbit weight 05Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 tc class add dev eth0 parent 11 classid 14 cbq bandwidth 100Mbit rate 3Mbit weight 03Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000

Ce sont nos deux classes Notez comment nous avons configureacute la valeur du paramegravetre weight en fonctiondu paramegravetre rate La bande passante de lensemble des deux classes ne pourra jamais deacutepasser 6 mbit Enfait les identifieurs de classe (classid) doivent avoir le mecircme numeacutero majeur que le gestionnaire de miseen file dattente parent

tc qdisc add dev eth0 parent 13 handle 30 sfq tc qdisc add dev eth0 parent 14 handle 40 sfq

Les deux classes ont par deacutefaut un gestionnaire de mise en file dattente FIFO Nous les remplaccedilons par unefile dattente SFQ de telle sorte que chaque flux de donneacutees soit traiteacute de maniegravere eacutegale

tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 13 tc filter add dev eth0 parent 10 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 14

Ces commandes directement attacheacutees agrave la racine envoient le trafic vers le bon gestionnaire de mise en filedattente

Notez que nous utilisons tc class add pour CREER des classes agrave linteacuterieur dun gestionnaire de mise enfile dattente et que nous utilisons tc qdisc add pour veacuteritablement configurer ces classes

Vous vous demandez peut-ecirctre ce qui arrive au trafic qui nest classifieacute par aucune des deux regravegles Dans cecas les donneacutees seront traiteacutees agrave linteacuterieur de 10 et le deacutebit ne sera pas limiteacute

Si le trafic SMTP+web tente de deacutepasser la limite de 6 mbits la bande passante sera diviseacutee selon leparamegravetre weight donnant 58 du trafic au serveur web et 38 au serveur smtp

Avec cette configuration vous pouvez eacutegalement dire que le trafic du serveur web sera au minimum de 58 6 mbit = 375 mbit

Dautres paramegravetres CBQ split amp defmap

Comme preacuteciseacute avant un gestionnaire de mise en file dattente baseacute sur des classes doit appeler des filtrespour deacuteterminer dans quelle classe un paquet sera mis en file dattente

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 51

En plus dappeler les filtres CBQ offre dautres options defmap amp split Cest plutocirct compliqueacute agravecomprendre et de plus ce nest pas vital Mais eacutetant donneacute que ceci est le seul endroit connu ougrave defmap ampsplit sont correctement expliqueacutes je vais faire de mon mieux

Etant donneacute que nous voulons le plus souvent reacutealiser le filtrage en ne consideacuterant que le champ TOS unesyntaxe speacuteciale est fournie Chaque fois que CBQ doit trouver ougrave le paquet doit ecirctre mis en file dattente ilveacuterifie si le noeud est un noeud daiguillage (split node) Si cest le cas un de ses sous-gestionnaires a indiqueacuteson souhait de recevoir tous les paquets configureacutes avec une certaine prioriteacute Celle ci peut ecirctre deacuteriveacutee duchamp TOS ou des options des sockets positionneacutees par les applications

Les bits de prioriteacutes des paquets subissent un ET logique avec le champ defmap pour voir si unecorrespondance existe En dautres termes cest un moyen pratique de creacuteer un filtre tregraves rapide qui ne seraactif que pour certaines prioriteacutes Un defmap de ff (en hexadeacutecimal) veacuterifiera tout tandis quune valeur de 0ne veacuterifiera rien Une configuration simple aidera peut-ecirctre agrave rendre les choses plus claires

tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 mpu 64

tc class add dev eth1 parent 10 classid 11 cbq bandwidth 10Mbit rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000

Preacuteambule standard de CBQ Je nai jamais pris lhabitude de la quantiteacute de nombres neacutecessaires

Le paramegravetre defmap se reacutefegravere aux bits TCamplowbarPRIO qui sont deacutefinis comme suit

TC_PRIO Num Correspond agrave TOS-------------------------------------------------BESTEFFORT 0 Maximalise la Fiabiliteacute FILLER 1 Minimalise le Coucirct BULK 2 Maximalise le Deacutebit (0x8) INTERACTIVE_BULK 4 INTERACTIVE 6 Minimise le Deacutelai (0x10) CONTROL 7

Les nombres TCamplowbarPRIO correspondent aux bits compteacutes agrave partir de la droite Voir la sectionpfifoamplowbarfast pour plus de deacutetails sur la faccedilon dont les bits TOS sont convertis en prioriteacutes

Maintenant les classes interactive et de masse

tc class add dev eth1 parent 11 classid 12 cbq bandwidth 10Mbit rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 10 defmap c0

tc class add dev eth1 parent 11 classid 13 cbq bandwidth 10Mbit rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 10 defmap 3f

La gestion de mise en file dattente daiguillage (split qdisc) est 10 et cest agrave ce niveau que le choix sera faitC0 correspond au nombre binaire 11000000 et 3F au nombre binaire 00111111 Ces valeurs sont choisiesde telle sorte quagrave elles deux elles veacuterifient tous les bits La premiegravere classe correspond aux bits 6 amp 7 ce quiest eacutequivalent aux trafics ltlt interactif gtgt et de ltlt controcircle gtgt La seconde classe correspond au reste

Le noeud 10 possegravede maintenant la table suivante

prioriteacute envoyer agrave0 131 132 13

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

52 Dautres paramegravetres CBQ split amp defmap

3 134 135 136 127 12

Pour dautres amusements vous pouvez eacutegalement donner un ltlt masque de changement gtgt qui indiqueexactement les prioriteacutes que vous souhaitez changer Nutilisez ceci quavec la commande tc classchange Par exemple pour ajouter le trafic best effort agrave la classe 12 nous devrons exeacutecuter ceci

tc class change dev eth1 classid 12 cbq defmap 0101

La carte des prioriteacutes au niveau de 10 ressemble maintenant agrave ceci

prioriteacute envoyer agrave0 121 132 133 134 135 136 127 12

FIXME tc class change na pas eacuteteacute testeacute mais simplement vu dans les sources

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket)

Martin Devera(ltdevikgt) reacutealisa agrave juste titre que CBQ est complexe et quil ne semble pas optimiseacute pour denombreuses situations classiques Son approche hieacuterarchique est bien adapteacutee dans le cas de configurations ougraveil y a une largeur de bande passante fixeacutee agrave diviser entre diffeacuterents eacuteleacutements Chacun de ces eacuteleacutements aura unebande passante garantie avec la possibiliteacute de speacutecifier la quantiteacute de bande passante qui pourra ecirctreemprunteacutee

HTB travaille juste comme CBQ mais il na pas recourt agrave des calculs de temps dinoccupation pour la mise enforme A la place cest un Token Bucket Filter baseacute sur des classes dougrave son nom Il na que quelquesparamegravetres qui sont bien documenteacutes sur ce site

Au fur et agrave mesure que votre configuration HTB se complexifie votre configuration sadapte bien Avec CBQelle est deacutejagrave complexe mecircme dans les cas simples HTB3 (voir sa page principale pour les deacutetails desversions HTB) fait maintenant parti des sources officielles du noyau (agrave partir des versions 2420-pre1 et2531 et supeacuterieures) Il est encore cependant possible que vous soyez obligeacute de reacutecupeacuterer la version mise agravejour de tc pour HTB3 Les programmes de lespace utilisateur et la partie HTB du noyau doivent avoir lemecircme numeacutero majeur Sans cela tc ne marchera pas avec HTB13

Si vous avez deacutejagrave un noyau reacutecent ou si vous ecirctes sur le point de mettre agrave jour votre noyau consideacuterez HTBcoucircte que coucircte

Configuration simple

Fonctionnellement presque identique agrave la configuration simple CBQ preacutesenteacutee ci-dessus

tc qdisc add dev eth0 root handle 1 htb default 30

tc class add dev eth0 parent 1 classid 11 htb rate 6mbit burst 15k

tc class add dev eth0 parent 11 classid 110 htb rate 5mbit burst 15k tc class add dev eth0 parent 11 classid 120 htb rate 3mbit ceil 6mbit burst 15k

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seau de jetons agrave controcircle hieacuterarchique (Hierarchical Token Bucket) 53

tc class add dev eth0 parent 11 classid 130 htb rate 1kbit ceil 6mbit burst 15k

Lauteur recommande SFQ sous ces classes

tc qdisc add dev eth0 parent 110 handle 10 sfq perturb 10 tc qdisc add dev eth0 parent 120 handle 20 sfq perturb 10 tc qdisc add dev eth0 parent 130 handle 30 sfq perturb 10

Ajouter les filtres qui dirigent le trafic vers les bonnes classes

U32=tc filter add dev eth0 protocol ip parent 10 prio 1 u32 $U32 match ip dport 80 0xffff flowid 110 $U32 match ip sport 25 0xffff flowid 120

Et cest tout Pas de vilains nombres non expliqueacutes pas de paramegravetres non documenteacutes

HTB semble vraiment merveilleux Si 10 et 20 ont atteint tous les deux leur bande passante garantie etquil en reste agrave partager ils lempruntent avec un rapport de 53 comme attendu

Le trafic non classifieacute est achemineacute vers 30 qui a une petite bande passante mais qui peut emprunter tout cequi est laisseacute libre Puisque nous avons choisi SFQ en interne on heacuterite naturellement de leacutequiteacute

Classifier des paquets avec des filtres

Pour deacuteterminer quelle classe traitera un paquet la ltlt chaicircne de classificateurs gtgt est appeleacutee chaque foisquun choix a besoin decirctre fait Cette chaicircne est constitueacutee de tous les filtres attacheacutes aux gestionnaires demise en file dattente baseacutes sur des classes qui doivent prendre une deacutecision

On reprend larbre qui nest pas un arbre

racine 1 | _11_ | | | 10 11 12 101 102 121 122

Quand un paquet est mis en file dattente linstruction approprieacutee de la chaicircne de filtre est consulteacutee agrave chaquebranche Une configuration typique devrait avoir un filtre en 11 qui dirige le paquet vers 12 et un filtre en12 qui lenvoie vers 122

Vous pourriez eacutegalement avoir ce dernier filtre en 11 mais vous pouvez gagner en efficaciteacute en ayant destests plus speacutecifiques plus bas dans la chaicircne

A ce propos vous ne pouvez pas filtrer un paquet ltlt vers le haut gtgt Donc avec HTB vous devrez attachertous les filtres agrave la racine

Encore une fois les paquets ne sont mis en file dattente que vers le bas Quand ils sont retireacutes de la filedattente ils montent de nouveau vers linterface Ils ne tombent PAS vers lextreacutemiteacute de larbre en direction deladaptateur reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

54 Configuration simple

Quelques exemples simples de filtrage

Comme expliqueacute dans le chapitre Filtres avanceacutes pour la classification des paquetsgt vous pouvez vraimentanalyser nimporte quoi en utilisant une syntaxe tregraves compliqueacutee Pour commencer nous allons montrercomment reacutealiser les choses eacutevidentes ce qui heureusement est plutocirct facile

Disons que nous avons un gestionnaire de mise en file dattente PRIO appeleacute 10 qui contient trois classes etque nous voulons assigner agrave la bande de plus haute prioriteacute tout le trafic allant et venant du port 22 Les filtresseraient les suivants

tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip dport 22 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 1 u32 match ip sport 80 0xffff flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Quest-ce que cela signifie Cela dit attacher agrave eth0 au noeud 10 un filtre u32 de prioriteacute 1 qui analysele port de destination ip 22 et qui lenvoie vers la bande 101 La mecircme chose est reacutepeacuteteacutee avec le port source80 La derniegravere commande indique que si aucune correspondance nest trouveacutee alors le trafic devra aller versla bande 102 la plus grande prioriteacute suivante

Vous devez ajouter eth0 ou nimporte laquelle de vos interfaces car chaque interface possegravede un espace denommage de ses descripteurs qui lui est propre

Pour seacutelectionner une adresse IP utilisez ceci

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip dst 432132 flowid 101 tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 123432 flowid 101 tc filter add dev eth0 protocol ip parent 10 prio 2 flowid 102

Ceci dirige le trafic allant vers 4321 et venant de 1234 vers la file dattente de plus haute prioriteacutetandis que le reste ira vers la prochaine plus haute prioriteacute

Vous pouvez rassembler ces deux veacuterifications pour reacutecupeacuterer le trafic venant de 1234 avec le portsource 80

tc filter add dev eth0 parent 100 protocol ip prio 1 u32 match ip src 432132 match ip sport 80 0xffff flowid 101

Toutes les commandes de filtres dont vous aurez normalement besoin

La plupart des commandes preacutesenteacutees ici commencent avec le preacuteambule suivant

tc filter add dev eth0 parent 10 protocol ip prio 1 u32

Ils sont appeleacutes filtres u32 et analysent NIMPORTE QUELLE partie dun paquet

Sur ladresse sourcedestinationMasque pour la source match ip src 123024 et masque pour la destination match ipdst 432024 Pour analyser un hocircte simple employez 32 ou omettez le masque

Sur le port sourcedestination tous les protocoles IPSource match ip sport 80 0xffff et destination match ip dport 0xffff

Sur le protocole ip (tcp udp icmp gre ipsec)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Quelques exemples simples de filtrage 55

Utilisez les nombres deacutefinis dans etcprotocols par exemple 1 pour icmp match ipprotocol 1 0xff

Sur fwmarkVous pouvez marquer les paquets avec ipchains ou iptables et voir cette marque preacuteserveacutee lors duroutage agrave travers les interfaces Ceci est vraiment utile pour mettre uniquement en forme le trafic sureth1 et venant de eth0 par exemple La syntaxe est la suivante

tc filter add dev eth1 protocol ip parent 10 prio 1 handle 6 fw flowid 11

Notez que ce nest pas une correspondance u32

Vous pouvez positionner une marque comme ceci

iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

Le nombre 6 est arbitraire

Si vous ne voulez pas assimiler la syntaxe complegravete de tc filter utilisez juste iptables et apprenezseulement la seacutelection baseacutee sur fwmark

Sur le champ TOSPour seacutelectionner le trafic interactif deacutelai minimum

tc filter add dev ppp0 parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 14

Utilisez 0x08 0xff pour le trafic de masse

Pour plus de commandes de filtrage voir le chapitre Filtres avanceacutes pour la classification des paquetsgt

Le peacuteripheacuterique de file dattente intermeacutediaire (The Intermediatequeueing device (IMQ))

Le peacuteripheacuterique IMQ nest pas un gestionnaire de mise en file dattente mais son utilisation est fortement lieacutee agraveceux-ci Au coeur de Linux les gestionnaires de mise en file dattente sont attacheacutes aux peacuteripheacuteriques reacuteseauxet tout ce qui est mis en file dattente dans ce peacuteripheacuterique lest dabord dans le gestionnaire Avec ce conceptil existe deux limitations

1 Seule la mise en forme du trafic sortant est possible (un gestionnaire dentreacutee existe mais ses possibiliteacutessont tregraves limiteacutees en comparaison des gestionnaires de mise en file baseacutes sur les classes)

2 Un gestionnaire de mise en file dattente ne voit le trafic que dune interface et des limitations globales nepeuvent pas ecirctre mises en place

IMQ est ici pour aider agrave reacutesoudre ces deux limitations En reacutesumeacute vous pouvez mettre tout ce que vousvoulez dans un gestionnaire de mise en file dattente Les paquets speacutecialement marqueacutes sont intercepteacutes parles points daccroche netfilter NF_IP_PRE_ROUTING et NF_IP_POST_ROUTING et sont transfeacutereacutes vers legestionnaire attacheacute au peacuteripheacuterique imq Une cible iptables est utiliseacutee pour le marquage des paquets

Ceci vous permet de reacutealiser de la mise en forme dentreacutee eacutetant donneacute que vous pouvez marquer les paquetsentrant par un peacuteripheacuterique quelconque etou traiter les interfaces comme des classes pour configurer deslimites globales Vous pouvez eacutegalement reacutealiser de nombreuses autres choses comme simplement mettrevotre trafic http dans un gestionnaire mettre les requecirctes de nouvelles connexions dans un gestionnaire

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

56 Toutes les commandes de filtres dont vous aurez normalement besoin

Configuration simple

La premiegravere chose qui devrait vous venir agrave lesprit est dutiliser la mise en forme du trafic entrant pour vousgarantir une grande passante ) La configuration se fait comme avec nimporte quelle autre interface

tc qdisc add dev imq0 root handle 1 htb default 20

tc class add dev imq0 parent 1 classid 11 htb rate 2mbit burst 15k

tc class add dev imq0 parent 11 classid 110 htb rate 1mbittc class add dev imq0 parent 11 classid 120 htb rate 1mbit

tc qdisc add dev imq0 parent 110 handle 10 pfifotc qdisc add dev imq0 parent 120 handle 20 sfq

tc filter add dev imq0 parent 100 protocol ip prio 1 u32 match ip dst 100023032 flowid 110

Dans cet exemple u32 est utiliseacute pour la classification Les autres classificateurs devraient marcher tout aussibien Le trafic doit ensuite ecirctre seacutelectionneacute et marqueacute pour ecirctre mis en file dattente vers imq0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0

ip link set imq0 up

Les cibles iptables IMQ sont valides dans les chaicircnes PREROUTING et POSTROUTING de la table mangleLa syntaxe est la suivante

IMQ [ --todev n ] n numeacutero du peacuteripheacuterique imq

Il existe aussi une cible ip6tables

Notez que le trafic nest pas mis en file dattente quand la cible est activeacutee mais apregraves La localisation exactede lentreacutee du trafic dans le peacuteripheacuterique imq deacutepend de la direction de ce trafic (entrantsortant) Ces entreacuteessont les points daccroche preacutedeacutefinis de netfilter et utiliseacutes par iptables

enum nf_ip_hook_priorities NF_IP_PRI_FIRST = INT_MIN NF_IP_PRI_CONNTRACK = -200 NF_IP_PRI_MANGLE = -150 NF_IP_PRI_NAT_DST = -100 NF_IP_PRI_FILTER = 0 NF_IP_PRI_NAT_SRC = 100 NF_IP_PRI_LAST = INT_MAX

Pour le trafic entrant imq se deacuteclare avec la prioriteacute NF_IP_PRI_MANGLE + 1 ce qui signifie que lespaquets entrent dans le peacuteripheacuterique imq juste apregraves la chaine PREROUTING de la table mangle

Pour le trafic sortant imq utilise NF_IP_PRI_LAST qui honore le fait que les paquets rejeteacutes par la table filternoccuperont pas de bande passante

Les mises agrave jour et de plus amples informations peuvent ecirctre trouveacutees sur le site imq

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration simple 57

Chapitre 10 Eacutequilibrage de charge sur plusieursinterfacesIl existe plusieurs maniegraveres pour le faire Une des plus faciles et des plus directes est TEQL (True (or Trivial)Link Equalizer Comme la plupart des eacuteleacutements en relation avec la gestion de file dattente leacutequilibrage decharge est bidirectionnel Les deux eacutequipements terminaux du lien ont besoin de participer pour obtenir uneefficaciteacute optimale

Imaginez la situation suivante

+-------+ eth1 +-------+ | |==========| | reacuteseau 1 -----| A | | B |---- reacuteseau 2 | |==========| | +-------+ eth2 +-------+

A et B sont des routeurs dont nous supposerons quils fonctionnent avec Linux pour le moment Si le trafic vadu reacuteseau 1 vers le reacuteseau 2 le routeur A a besoin de distribuer les paquets sur les deux liens allant vers B Lerouteur B a besoin decirctre configureacute pour laccepter On retrouve la mecircme chose dans le sens inverse pour lespaquets allant du reacuteseau 2 vers le reacuteseau 1 Le routeur B a besoin denvoyer les paquets agrave la fois sur eth1 eteth2

La reacutepartition est faite par un peacuteripheacuterique TEQL comme ceci (cela ne pouvait pas ecirctre plus simple)

tc qdisc add dev eth1 root teql0 tc qdisc add dev eth2 root teql0 ip link set dev teql0 up

Noubliez pas la commande ip link set up

Ceci a besoin decirctre fait sur les deux hocirctes Le peacuteripheacuterique teql0 est basiquement un distributeur tourniquetau-dessus de eth1 et eth2 pour lenvoi des paquets Aucune donneacutee narrive jamais agrave travers unpeacuteripheacuterique teql mais les donneacutees apparaissent sur eth1 et eth2

Nous navons pour le moment que les peacuteripheacuteriques et nous avons eacutegalement besoin dun routage correctLune des possibiliteacutes pour reacutealiser cela est dassigner un reacuteseau 31 sur chacun des liens ainsi que sur lepeacuteripheacuterique teql0

FIXME Avons nous besoin de quelque chose comme nobroadcast Un 31 est trop petit pour contenirune adresse reacuteseau et une adresse de diffusion Si cela ne marche pas comme preacutevu essayez un 30 etajustez les adresses IP Vous pouvez mecircme essayer sans attribuer dadresses agrave eth1 et eth2

Sur le routeur A

ip addr add dev eth1 1000031 ip addr add dev eth2 1000231 ip addr add dev teql0 1000431

Sur le routeur B

ip addr add dev eth1 1000131 ip addr add dev eth2 1000331 ip addr add dev teql0 1000531

Le routeur A devrait maintenant ecirctre capable de lancer un ping vers 10001 10003 et 10005 agrave

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

58 Chapitre 10 Eacutequilibrage de charge sur plusieurs interfaces

travers les deux liens physiques et le peacuteripheacuterique ltlt eacutegaliseacute gtgt Le routeur B devrait maintenant ecirctre capablede lancer un ping vers 10000 10002 et 10004 agrave travers les liens

Si cela marche le routeur A peut prendre 10005 comme route vers le reacuteseau 2 et le routeur B10004 comme route vers le reacuteseau 1 Pour le cas particulier ougrave le reacuteseau 1 est votre reacuteseau personnel etougrave le reacuteseau 2 est lInternet le routeur A peut prendre 10005 comme passerelle par deacutefaut

Avertissement

Rien nest aussi simple quil y paraicirct Les interfaces eth1 et eth2 sur les deux routeurs A et B ne doivent pasavoir la fonction de filtrage par chemin inverse activeacutee Dans le cas contraire ils rejetteront les paquetsdestineacutes agrave des adresses autres que les leurs

echo 0 gt procsysnetipv4confeth1rp_filter echo 0 gt procsysnetipv4confeth2rp_filter

Il y a un seacuterieux problegraveme avec le reacuteordonnancement des paquets Supposons que six paquets aient besoindecirctre envoyeacutes de A vers B Par exemple eth1 peut traiter les paquets 1 3 et 5 et eth2 les paquets 2 4 et 6Dans un monde ideacuteal le routeur B devrait recevoir ces paquets dans lordre 1 2 3 4 5 6 Mais il est plusprobable que le noyau les recevra comme ceci 2 1 4 3 6 5 Ce problegraveme va perturber TCPIP Alors quilny a pas de problegravemes pour les liens transportant diffeacuterentes sessions TCPIP vous ne serez pas capable deregrouper plusieurs liens et obtenir par ftp un simple fichier beaucoup plus rapidement agrave moins que lesystegraveme dexploitation envoyant ou recevant ne soit Linux En effet celui-ci nest pas facilement perturbeacute parde simples reacuteordonnancements

Cependant leacutequilibrage de charge est une bonne ideacutee pour de nombreuses applications

Chapitre 11 Netfilter et iproute - marquage depaquetsJusquagrave maintenant nous avons vu comment iproute travaille et netfilter a eacuteteacute mentionneacute plusieurs fois Vousne perdrez pas votre temps agrave consulter Rustys Remarkably Unreliable Guides Le logiciel Netfilter peut ecirctretrouveacute ici

Netfilter nous permet de filtrer les paquets ou de deacutesosser leurs en-tecirctes Une de ses fonctionnaliteacutesparticuliegraveres est de pouvoir marquer un paquet avec un nombre gracircce agrave loption --set-mark

Comme exemple la commande suivante marque tous les paquets destineacutes au port 25 en loccurrence lecourrier 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 chegravere au meacutegaoctet) et une qui est pluslente mais avec un tarif moins eacuteleveacute Nous souhaiterions que le courrier passe par la route la moins chegravere

Nous avons deacutejagrave marqueacute le paquet avec un 1 et nous allons maintenant renseigner la base de donneacutees de lapolitique de routage pour quelle agisse sur ces paquets marqueacutes

echo 201 mailout gtgt etciproute2rt_tables ip rule add fwmark 1 table mailout ip rule ls0 from all lookup local 32764 from all fwmark 1 lookup mailout

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 11 Netfilter et iproute - marquage de paquets 59

32766 from all lookup main 32767 from all lookup default

Nous allons maintenant geacuteneacuterer la table mailout avec une route vers la ligne lente mais peu coucircteuse

sbinip route add default via 1959698253 dev ppp0 table mailout

Voilagrave qui est fait Il se peut que nous voulions mettre en place des exceptions et il existe de nombreuxmoyens pour le faire Nous pouvons modifier la configuration de netfilter pour exclure certains hocirctes ou nouspouvons inseacuterer une regravegle avec une prioriteacute plus faible qui pointe sur la table principale pour nos hocirctes faisantexception

Nous pouvons aussi utiliser cette fonctionnaliteacute pour nous conformer aux bits TOS en marquant les paquetsavec diffeacuterents types de service et les nombres correspondants On creacutee ensuite les regravegles qui agissent sur cestypes de service De cette faccedilon on peut deacutedier une ligne RNIS aux connexions interactives

Inutile de le dire cela marche parfaitement sur un hocircte qui fait de la translation dadresse (NAT) autrementdit du masquerading

IMPORTANT Nous avons reccedilu une information selon laquelle MASQ et SNAT entrent en conflit avec lemarquage de paquets Rusty Russell lexplique dans ce courrier

Deacutesactivez le filtrage de chemin inverse pour que cela fonctionne correctement

Note pour marquer les paquets vous aurez besoin de valider quelques options du noyau

IP advanced router (CONFIG_IP_ADVANCED_ROUTER) [Yn]IP policy routing (CONFIG_IP_MULTIPLE_TABLES) [Yn]IP use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Yn]

Voir aussi la section intituleacutee Cache web transparent utilisant netfilter iproute2 ipchains et squid dansChapitre 15gt dans le chapitre Recettes de cuisinegt

Chapitre 12 Filtres avanceacutes pour la (re-)classificationdes paquetsComme expliqueacute dans la section sur les gestionnaires de mise en file dattente baseacutes sur des classes les filtressont neacutecessaires pour classifier les paquets dans nimporte laquelle des sous-files dattente Ces filtres sontappeleacutes agrave linteacuterieur des gestionnaires de mise en file dattente baseacutes sur des classes

Voici une liste incomplegravete des classificateurs disponibles

fwBase la deacutecision sur la faccedilon dont le pare-feu a marqueacute les paquets Ceci peut ecirctre un passage facile sivous ne voulez pas apprendre la syntaxe tc lieacutee aux filtres Voir le chapitre sur les gestionnaires demise en file dattente pour plus de deacutetails

u32Base la deacutecision sur les champs agrave linteacuterieur du paquet (cest-agrave-dire ladresse IP source etc)

routeBase la deacutecision sur la route que va emprunter le paquet

rsvp rsvp6Route les paquets en se basant sur RSVP Seulement utile sur les reacuteseaux que vous controcirclez Internetne respecte pas RSVP

tcindex

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

60 Chapitre 12 Filtres avanceacutes pour la (re-)classification des paquets

Utiliseacute par le gestionnaire de file dattente DSMARK Voir la section DSMARKgt

Notez quil y a geacuteneacuteralement plusieurs maniegraveres de classifier un paquet Cela deacutepend du systegraveme declassification que vous souhaitez utiliser

Les classificateurs acceptent en geacuteneacuteral quelques arguments communs Ils sont listeacutes ici pour des raisonspratiques

protocolLe protocole que ce classificateur acceptera Geacuteneacuteralement on nacceptera que le trafic IP Exigeacute

parentLe descripteur auquel ce classificateur est attacheacute Ce descripteur doit ecirctre une classe deacutejagrave existanteExigeacute

prioLa prioriteacute de ce classificateur Les plus petits nombres seront testeacutes en premier

handleCette reacutefeacuterence a plusieurs significations suivant les diffeacuterents filtres

Toutes les sections suivantes supposeront que vous essayez de mettre en forme le trafic allant vers HostACes sections supposeront que la classe racine a eacuteteacute configureacutee sur 1 et que la classe vers laquelle vousvoulez envoyer le trafic seacutelectionneacute est 11

Le classificateur u32

Le filtre u32 est le filtre le plus avanceacute dans limpleacutementation courante Il est entiegraverement baseacute sur des tablesde hachage ce qui le rend robuste quand il y a beaucoup de regravegles de filtrage

Dans sa forme la plus simple le filtre u32 est une liste denregistrements chacun consistant en deux champs un seacutelecteur et une action Les seacutelecteurs deacutecrits ci-dessous sont compareacutes avec le paquet IP traiteacute jusquagrave lapremiegravere correspondance et laction associeacutee est reacutealiseacutee Le type daction le plus simple serait de diriger lepaquet vers une classe CBQ deacutefinie

La ligne de commande du programme tc filter utiliseacutee pour configurer le filtre consiste en trois parties laspeacutecification du filtre un seacutelecteur et une action La speacutecification du filtre peut ecirctre deacutefinie comme

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

Le champ protocol deacutecrit le protocole sur lequel le filtre sera appliqueacute Nous ne discuterons que du cas duprotocole ip Le champ preference (priority peut ecirctre utiliseacute comme alternative) fixe la prioriteacute dufiltre que lon deacutefinit Cest important dans la mesure ougrave vous pouvez avoir plusieurs filtres (listes de regravegles)avec des prioriteacutes diffeacuterentes Chaque liste sera scruteacutee dans lordre dajout des regravegles Alors la liste avec laprioriteacute la plus faible (celle qui a le numeacutero de preacutefeacuterence le plus eacuteleveacute) sera traiteacutee Le champ parentdeacutefinit le sommet de larbre CBQ (par ex 10) auquel le filtre doit ecirctre attacheacute

Les options deacutecrites sappliquent agrave tous les filtres pas seulement agrave u32

Le seacutelecteur U32

Le seacutelecteur U32 contient la deacutefinition dun modegravele qui sera compareacute au paquet traiteacute Plus preacuteciseacutement ildeacutefinit quels bits doivent correspondre dans len-tecircte du paquet et rien de plus mais cette meacutethode simple esttregraves puissante Jetons un oeil sur lexemple suivant directement tireacute dun filtre assez complexe reacuteellementexistant

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le classificateur u32 61

tc filter parent 1 protocol ip pref 10 u32 fh 800800 order 2048 key ht 800 bkt 0 flowid 13 match 0010000000ff0000 at 0

Pour linstant laissons de cocircteacute la premiegravere ligne tous ces paramegravetres deacutecrivent les tables de hachage du filtreFocalisons-nous sur la ligne de seacutelection contenant le mot-cleacute match Ce seacutelecteur fera correspondre lesen-tecirctes IP dont le second octet sera 0x10 (0010) Comme nous pouvons le deviner le nombre 00ff est lemasque de correspondance disant au filtre quels bits il doit regarder Ici cest 0xff donc loctetcorrespondra si cest exactement 0x10 Le mot-cleacute at signifie que la correspondance doit deacutemarrer audeacutecalage speacutecifieacute (en octets) - dans notre cas cest au deacutebut du paquet Traduisons tout cela en langagehumain le paquet correspondra si son champ Type de Service (TOS) a le bit ltlt faible deacutelai gtgt positionneacuteAnalysons une autre regravegle

tc filter parent 1 protocol ip pref 10 u32 fh 800803 order 2051 key ht 800 bkt 0 flowid 13 match 000000160000ffff at nexthdr+0

Loption nexthdr deacutesigne len-tecircte suivant encapsuleacute dans le paquet IP cest agrave dire celui du protocole de lacouche supeacuterieure La correspondance commencera eacutegalement au deacutebut du prochain en-tecircte Elle devrait avoirlieu dans le deuxiegraveme mot de 32 bits de len-tecircte Dans les protocoles TCP et UDP ce champ contient le portde destination du paquet Le nombre est donneacute dans le format big-endian cest-agrave-dire les bits les plussignificatifs en premier Il faut donc lire 0x0016 comme 22 en deacutecimal qui correspond au service SSH dans lecas de TCP Comme vous le devinez cette correspondance est ambigueuml sans un contexte et nous endiscuterons plus loin

Ayant compris tout cela nous trouverons le seacutelecteur suivant tregraves facile agrave lire matchc0a80100ffffff00 at 16 Ce que nous avons ici cest une correspondance de trois octets au 17egravemeoctet en comptant agrave partir du deacutebut de len-tecircte IP Cela correspond aux paquets qui ont une adresse dedestination quelconque dans le reacuteseau 192168124 Apregraves avoir analyseacute les exemples nous pouvonsreacutesumer ce que nous avons appris

Seacutelecteurs geacuteneacuteraux

Les seacutelecteurs geacuteneacuteraux deacutefinissent le modegravele le masque et le deacutecalage qui seront compareacutes au contenu dupaquet En utilisant les seacutelecteurs geacuteneacuteraux vous pouvez rechercher des correspondances sur nimporte quelbit de len-tecircte IP (ou des couches supeacuterieures) Ils sont quand mecircme plus difficiles agrave eacutecrire et agrave lire que lesseacutelecteurs speacutecifiques deacutecrits ci-dessus La syntaxe geacuteneacuterale des seacutelecteurs est

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

Un des mots-cleacutes u32 u16 ou u8 doit speacutecifier la longueur du modegravele en bits PATTERN et MASK serapporteront agrave la longueur deacutefinie par ce mot-cleacute Le paramegravetre OFFSET est le deacutecalage en octets pour ledeacutemarrage de la recherche de correspondance Si le mot-clef nexthdr+ est preacutesent le deacutecalage sera relatif agravelen-tecircte de la couche reacuteseau supeacuterieure

Quelques exemples

tc filter add dev ppp14 parent 10 prio 10 u32 match u8 64 0xff at 8 flowid 14

Un paquet correspondra agrave cette regravegle si sa ltlt dureacutee de vie gtgt (TTL) est de 64 TTL est le champ deacutemarrantjuste apregraves le 8egraveme octet de len-tecircte IP

Correspond agrave tous les paquets TCP ayant le bit ACK activeacute

tc filter add dev ppp14 parent 10 prio 10 u32 match ip protocol 6 0xff

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

62 Le seacutelecteur U32

match u8 0x10 0xff at nexthdr+13 flowid 13

Utilisez ceci pour deacuteterminer la preacutesence du bit ACK sur les paquets dune longueur infeacuterieure agrave 64 octets

Veacuterifie la preacutesence dun ACK protocol IP 6 longueur de len-tecircte IP 0x5(mots de 32 bits) longueur total IP 0x34 (ACK + 12 octets doptions TCP) TCP ack actif (bit 5 offset 33) tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 13

Seuls les paquets TCP sans charge utile et avec le bit ACK positionneacute veacuterifieront cette regravegle Ici nouspouvons voir un exemple dutilisation de deux seacutelecteurs le reacutesultat final eacutetant un ET logique de leur reacutesultatSi nous jetons un coup doeil sur un scheacutema de len-tecircte TCP nous pouvons voir que le bit ACK est le secondbit (0x10) du 14egraveme octet de len-tecircte TCP (at nexthdr+13) Comme second seacutelecteur si nous voulonsnous compliquer la vie nous pouvons eacutecrire match u8 0x06 0xff at 9 agrave la place du seacutelecteurspeacutecifique protocol tcp puisque 6 est le numeacutero du protocole TCP speacutecifieacute au 10egraveme octet de len-tecircteIP Dun autre cocircteacute dans cet exemple nous ne pourrons pas utiliser de seacutelecteur speacutecifique pour la premiegraverecorrespondance simplement parce quil ny a pas de seacutelecteur speacutecifique pour deacutesigner les bits TCP ACK

Le filtre ci dessous est une version modifieacutee du filtre preacutesenteacute au-dessus La diffeacuterence est quil ne veacuterifie pasla longueur de len-tecircte ip Pourquoi Car le filtre au-dessus ne marche que sur les systegravemes 32 bits

tc filter add dev ppp14 parent 10 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 match u16 0x0000 0xffc0 at 2 flowid 13

Les seacutelecteurs speacutecifiques

La table suivante contient la liste de tous les seacutelecteurs speacutecifiques que les auteurs de cette section ont trouveacutesdans le code source du programme tc Ils rendent simplement la vie plus facile en accroissant la lisibiliteacute de laconfiguration du filtre

FIXME emplacement de la table - la table est dans un fichier seacutepareacute selectorhtml

FIXME Cest encore en Polonais -(

FIXME doit ecirctre sgmliseacute

Quelques exemples

tc filter add dev ppp0 parent 10 prio 10 u32 match ip tos 0x10 0xff flowid 14

FIXME tcp dport match ne fonctionne pas comme deacutecrit ci-dessous

La regravegle ci-dessus correspondra agrave des paquets qui ont le champ TOS eacutegal agrave 0x10 Le champ TOS commenceau deuxiegraveme octet du paquet et occupe 1 octet ce qui nous permet deacutecrire un seacutelecteur geacuteneacuteral eacutequivalent match u8 0x10 0xff at 1 Cela nous donne une indication sur limpleacutementation du filtre u32 Les

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Seacutelecteurs geacuteneacuteraux 63

regravegles speacutecifiques sont toujours traduites en regravegles geacuteneacuterales et cest sous cette forme quelles sont stockeacutees enmeacutemoire par le noyau Cela amegravene agrave une autre conclusion les seacutelecteurs tcp et udp sont exactement lesmecircmes et cest la raison pour laquelle vous ne pouvez pas utiliser un simple seacutelecteur match tcp dport53 0xffff pour deacutesigner un paquet TCP envoyeacute sur un port donneacute Ce seacutelecteur deacutesigne aussi les paquetsUDP envoyeacutes sur ce port Vous devez eacutegalement speacutecifier le protocole avec la regravegle suivante

tc filter add dev ppp0 parent 10 prio 10 u32 match tcp dport 53 0xffff match ip protocol 0x6 0xff flowid 12

Le classificateur route

Ce classificateur filtre en se basant sur les informations des tables de routage Quand un paquet passant agravetravers les classes et en atteint une qui est marqueacutee avec le filtre route il divise le paquet en se basant surlinformation de la table de routage

tc filter add dev eth1 parent 10 protocol ip prio 100 route

Ici nous ajoutons un classificateur route sur le noeud parent 10 avec la prioriteacute 100 Quand un paquetatteint ce noeud (ce qui arrive immeacutediatement puisquil est racine) il consulte la table de routage et si uneentreacutee de la table correspond il envoie le paquet vers la classe donneacutee et lui donne une prioriteacute de 100Ensuite vous ajoutez lentreacutee de routage approprieacutee pour finalement activer les choses

Lastuce ici est de deacutefinir realm en se basant soit sur la destination soit sur la source Voici la faccedilon deproceacuteder

ip route add HostNetwork via Gateway dev Device realm RealmNumber

Par exemple nous pouvons deacutefinir notre reacuteseau de destination 192168100 avec le nombre realm eacutegalagrave 10

ip route add 19216810024 via 192168101 dev eth1 realm 10

Quand on ajoute des filtres route on peut utiliser les nombres realm pour repreacutesenter les reacuteseaux ou leshocirctes et speacutecifier quelle est la correspondance entre les routes et les filtres

tc filter add dev eth1 parent 10 protocol ip prio 100 route to 10 classid 110

La regravegle ci-dessus indique que les paquets allant vers le reacuteseau 192168100 correspondent agrave la classe110

Le filtre route peut aussi ecirctre utiliseacute avec les routes sources Par exemple il y a un sous-reacuteseau attacheacute agravenotre routeur Linux sur eth2

ip route add 1921682024 dev eth2 realm 2 tc filter add dev eth1 parent 10 protocol ip prio 100 route from 2 classid 12

Ici le filtre speacutecifie que les paquets venant du reacuteseau 19216820 (realm 2) correspondront agrave la classe12

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

64 Les seacutelecteurs speacutecifiques

Les filtres de reacuteglementation (Policing filters)

Pour reacutealiser des configurations encore plus compliqueacutees vous pouvez avoir des filtres qui analysent le traficagrave hauteur dune certaine bande passante Vous pouvez configurer un filtre pour quil cesse complegravetementlanalyse de tout le trafic au-dessus dun certain deacutebit ou pour quil nanalyse pas la bande passante deacutepassantun certain deacutebit

Ainsi si vous deacutecidez de reacuteglementer agrave 4mbits mais quun trafic de 5mbits est preacutesent vous pouvez cesserdanalyser lensemble des 5mbits ou seulement cesser danalyser le 1 mbits suppleacutementaire et envoyer 4mbits agrave la classe correspondante

Si la bande passante deacutepasse le deacutebit configureacute vous pouvez rejeter un paquet le reclassifier ou voir si unautre filtre y correspond

Techniques de reacuteglementation

Il y a essentiellement deux faccedilons de reacuteglementer Si vous avez compileacute le noyau avec Estimators celui-cipeut mesurer plus ou moins pour chaque filtre le trafic qui est passeacute Ces estimations ne sont pas coucircteuses entemps CPU eacutetant donneacute quil ne compte que 25 fois par seconde le nombre de donneacutees qui sont passeacutees etquil calcule le deacutebit agrave partir de lagrave

Lautre maniegravere utilise encore le Token Bucket Filter qui reacuteside agrave linteacuterieur du filtre cette fois Le TBF analyseseulement le trafic A HAUTEUR de la bande passante que vous avez configureacutee Si cette bande passante estdeacutepasseacutee seul lexcegraves est traiteacute par laction de deacutepassement de limite configureacutee

Avec lestimateur du noyau

Ceci est tregraves simple et il ny a quun seul paramegravetre avrate Soit le flux demeure sous avrate et le filtreclassifie le trafic vers la classe approprieacutee soit votre deacutebit le deacutepasse et laction indiqueacutee par deacutefaut laltlt reclassification gtgt est reacutealiseacutee dans ce cas

Le noyau utilise lalgorithme EWMA pour votre bande passante ce qui la rend moins sensible aux courtesrafales de donneacutees

Avec le Token Bucket Filter

Utilisez les paramegravetres suivants

buffermaxburstbull mtuminburstbull mpubull ratebull

Ceux-ci se comportent la plupart du temps de maniegravere identique agrave ceux deacutecrits dans la section Filtre agrave seau dejetonsgt Notez cependant que si vous configurez le mtu du filtre de reacuteglementation TBF trop bas aucunpaquet ne passera et le gestionnaire de mise en file dattente de sortie TBF ne fera que les ralentir

Une autre diffeacuterence est que la reacuteglementation ne peut que laisser passer ou jeter un paquet Il ne peut pas leretenir dans le but de le retarder

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Les filtres de reacuteglementation (Policing filters) 65

Actions de deacutepassement de limite (Overlimit actions)

Si votre filtre deacutecide quun deacutepassement de limite est atteint il peut mettre en oeuvre des ltlt actions gtgtActuellement trois actions sont disponibles

continueProvoque larrecirct de lanalyse du filtre bien que dautres filtres aient la possibiliteacute de le faire

dropCeci est une option tregraves feacuteroce qui supprime simplement le trafic exceacutedant un certain deacutebit Elle estsouvent employeacutee dans le Ingress policer et a des utilisations limiteacutees Par exemple si vous avez unserveur de noms qui seacutecroule sil traite plus de 5mbits de paquets alors vous pourrez dans ce casutiliser un filtre dentreacutee pour ecirctre sucircr quil ne traitera jamais plus de 5mbits

PassOKTransmettre le trafic Peut ecirctre utiliseacute pour mettre hors service un filtre compliqueacute tout en le laissanten place

reclassifyPermet le plus souvent une reclassification vers Best Effort Ceci est laction par deacutefaut

Exemples

Le seul vrai exemple connu est mentionneacute dans la section Proteacuteger votre machine des inondations SYNgt

FIXME Si vous avez deacutejagrave utiliseacute ceci partagez sil vous plaicirct votre expeacuterience avec nous

Filtres hacheacutes pour un filtrage massif tregraves rapide

Si vous avez besoin de milliers de regravegles par exemple dans le cas ougrave vous avez beaucoup de clients oudordinateurs tous avec des speacutecifications QoS diffeacuterentes vous pourrez constater que le noyau passebeaucoup de temps agrave analyser toutes ces regravegles

Par deacutefaut tous les filtres reacutesident dans une grande chaicircne qui est analyseacutee par ordre deacutecroissant des prioriteacutesSi vous avez 1000 regravegles 1000 controcircles peuvent ecirctre neacutecessaires pour deacuteterminer ce quil faut faire dunpaquet

La veacuterification irait plus vite sil y avait 256 chaicircnes avec chacune quatre regravegles et si vous pouviez reacutepartir lespaquets sur ces 256 chaicircnes afin que la bonne regravegle soit preacutesente

Ceci est rendu possible par le hachage Imaginons que vous ayez sur votre reacuteseau 1024 clients avec desmodems cacircble avec des adresses IP allant de 1200 agrave 123255 et que chacun doit avoir unclassement particulier par exemple ltlt pauvre gtgt ltlt moyen gtgt et ltlt bourrage gtgt Cela vous ferait alors1024 regravegles dans le genre

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123254 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 123255 classid 12

Pour aller plus vite nous pouvons utiliser la derniegravere partie de ladresse IP comme ltlt cleacute de hachage gtgtNous obtenons alors 256 tables la premiegravere ressemblant agrave ceci

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

66 Actions de deacutepassement de limite (Overlimit actions)

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1200 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1210 classid 11 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1220 classid 13 tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1230 classid 12

La suivante commence comme ceci

tc filter add dev eth1 parent 10 protocol ip prio 100 match ip src 1201 classid 11

De cette maniegravere seules quatre recherches au plus sont neacutecessaires et deux en moyenne

La configuration est plutocirct compliqueacutee mais elle en vaut vraiment la peine du fait des nombreuses regraveglesNous creacuteons dabord un filtre racine puis une table avec 256 entreacutees

tc filter add dev eth1 parent 10 prio 5 protocol ip u32 tc filter add dev eth1 parent 10 prio 5 handle 2 u32 divisor 256

Nous ajoutons maintenant des regravegles dans la table preacuteceacutedemment creacuteeacutee

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 120123 flowid 11 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 121123 flowid 12 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 123123 flowid 13 tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 27b match ip src 124123 flowid 12

Ceci est lentreacutee 123 qui contient les correspondances pour 12013 121123 122123 et123123 qui les envoient respectivement vers 11 12 13 et 12 Notez que nous devons speacutecifiernotre seau de hachage en hexadeacutecimal 0x7b pour 123

Nous creacuteons ensuite un ltlt filtre de hachage gtgtqui dirige le trafic vers la bonne entreacutee de la table de hachage

tc filter add dev eth1 protocol ip parent 10 prio 5 u32 ht 800 match ip src 120016 hashkey mask 0x000000ff at 12 link 2

Ok certains nombres doivent ecirctre expliqueacutes La table de hachage par deacutefaut est appeleacutee 800 et tous lesfiltres deacutemarrent de lagrave Nous seacutelectionnons alors ladresse source qui est en position 12 13 14 et 15 danslen-tecircte IP et indiquons que seule la derniegravere partie nous inteacuteresse Ceci est envoyeacute vers la table de hachage2 qui a eacuteteacute creacuteeacutee plus tocirct

Cest plutocirct compliqueacute mais cela marche en pratique et les performances seront eacutepoustouflantes Notez quecet exemple pourrait ecirctre ameacutelioreacute pour que chaque chaicircne contienne un filtre ce qui repreacutesenterait le casideacuteal

Filtrer le trafic IPv6

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Filtres hacheacutes pour un filtrage massif tregraves rapide 67

Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

La base de donneacutees des politiques de routage (RPDB) a remplaceacute le routage IPv4 et la structure dadressage agravelinteacuterieur du noyau Linux ce qui a permis les merveilleuses fonctionnaliteacutes deacutecrites dans ce HOWTOMalheureusement la pile IPv6 agrave linteacuterieur de Linux a eacuteteacute impleacutementeacutee en dehors de cette structure principaleBien quils partagent des fonctionnaliteacutes la structure RPDB de base ne participe pas dans ou avec lesstructures dadressage et de routage de IPv6

Ceci va sucircrement changer nous devons juste attendre un peu plus longtemps

FIXME Des ideacutees sur des personnes travaillant sur ce sujet Planifications

Marquer les paquets IPv6 en utilisant ip6tables

ip6tables est capable de marquer un paquet et de lui assigner un numeacutero

ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Ceci ne va cependant pas nous aider dans la mesure ougrave le paquet ne passera pas par la structure RPDB

Utiliser le seacutelecteur u32 pour repeacuterer le paquet IPv6

IPv6 est normalement encapsuleacute dans un tunnel SIT et transporteacute agrave travers les reacuteseaux IPv4 Voir la sectionsur le tunnel IPv6 pour de plus amples informations quant agrave la configuration dun tel tunnel Ceci nous permetde filtrer les paquets IPv4 en consideacuterant les paquets IPv6 comme la charge utile

Le filtre suivant repegravere tous les paquets IPv6 encapsuleacutes dans des paquets IPv4

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff flowid 4242

Continuons Supposons que les paquets IPv6 soient envoyeacutes gracircce agrave des paquets IPv4 et que ces paquets nontpas doptions On pourrait utiliser le filtre suivant pour repeacuterer ICMPv6 dans IPv6 dans IPv4 nayant aucuneoption 0x3a (58) est le type du champ en-tecircte suivant pour ICMPv6

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3a 0xff at 26 flowid 4242

Repeacuterer ladresse de destination IPv6 neacutecessite un peu plus de travail Le filtre suivant repegravere ladresse dedestination 3ffe202cffff322304ffffe08358d

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x3f 0xff at 44 match u8 0xfe 0xff at 45 match u8 0x20 0xff at 46 match u8 0x2c 0xff at 47 match u8 0xff 0xff at 48 match u8 0xff 0xff at 49 match u8 0x00 0xff at 50 match u8 0x32 0xff at 51 match u8 0x02 0xff at 52

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

68 Comment se fait-il que ces filtres tc IPv6 ne fonctionnent pas

match u8 0x30 0xff at 53 match u8 0x4f 0xff at 54 match u8 0xff 0xff at 55 match u8 0xfe 0xff at 56 match u8 0x08 0xff at 57 match u8 0x35 0xff at 58 match u8 0x8d 0xff at 59 flowid 1013

La mecircme technique peut ecirctre utiliseacutee pour repeacuterer les reacuteseaux Par exemple 2001

tc filter add dev $DEV parent 100 protocol ip prio 10 u32 match ip protocol 41 0xff match u8 0x05 0x0f at 0 match u8 0x20 0xff at 28 match u8 0x01 0xff at 29 flowid 1013

Chapitre 13 Paramegravetres reacuteseau du noyauLe noyau utilise de nombreux paramegravetres qui peuvent ecirctre ajusteacutes en diffeacuterentes circonstances Bien quecomme dhabitude les paramegravetres par deacutefaut conviennent agrave 99amppercnt des installations nous ne pourrionspas appeler ce document ltlt HOWTO avanceacute gtgt sans en dire un mot

Les eacuteleacutements inteacuteressants sont dans procsysnet jetez-y un oeil Tout ne sera pas documenteacute ici audeacutepart mais nous y travaillons

En attendant vous pouvez jeter un oeil dans les sources du noyau Linux et lire le fichierDocumentationfilesystemsproctxt La plupart des fonctionnaliteacutes y sont expliqueacutees

Filtrage de Chemin Inverse (Reverse Path Filtering)

Par deacutefaut les routeurs routent tout mecircme les paquets qui visiblement nappartiennent pas agrave votre reacuteseau Unexemple courant est lespace des adresses IP priveacutees seacutechappant sur Internet Si vous avez une interface avecune route pour 1959696024 dessus vous ne vous attendrez pas agrave voir arriver des paquets venant de21264941

Beaucoup dutilisateurs veulent deacutesactiver cette fonctionnaliteacute Les deacuteveloppeurs du noyau ont permis de lefaire facilement Il y a des fichiers dans proc ougrave vous pouvez ordonner au noyau de le faire pour vous Lameacutethode est appeleacutee ltlt Filtrage par Chemin Inverse gtgt (Reverse Path Filtering) Pour faire simple si lareacuteponse agrave ce paquet ne sort pas par linterface par laquelle il est entreacute alors cest un paquet ltlt bogueacute gtgt et ilsera ignoreacute

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

for i in procsysnetipv4confrp_filter dogt echo 2 gt $i gt done

En reprenant lexemple du deacutebut si un paquet arrivant sur le routeur Linux par eth1 preacutetend venir du reacuteseauBureau+FAI il sera eacutelimineacute De mecircme si un paquet arrivant du reacuteseau Bureau preacutetend ecirctre de quelque part agravelexteacuterieur du pare-feu il sera eacutegalement eacutelimineacute

Ce qui est preacutesenteacute ci-dessus est le filtrage de chemin inverse complet Le parameacutetrage par deacutefaut filtreseulement sur les adresses IP des reacuteseaux directement connecteacutes Ce parameacutetrage par deacutefaut est utiliseacute parceque le filtrage complet eacutechoue dans le cas dun routage asymeacutetrique (ougrave il y a des paquets arrivant par un

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 13 Paramegravetres reacuteseau du noyau 69

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 reacuteseau Les donneacutees descendent vers la parabole satellite et les reacuteponses repartentpar des lignes terrestres normales)

Si cette exception sapplique dans votre cas (vous devriez ecirctre au courant) vous pouvez simplement deacutesactiverle rpamplowbarfilter sur linterface darriveacutee des donneacutees satellite Si vous voulez voir si des paquetssont eacutelimineacutes le fichier logamplowbarmartians du mecircme reacutepertoire indiquera au noyau de les enregistrerdans votre syslog

echo 1 gtprocsysnetipv4confltinterfacenamegtlog_martians

FIXME Est-ce que la configuration des fichiers dans confamplcubdefaultallamprcub suffit - martijn

Configurations obscures

Bon il y a beaucoup de paramegravetres qui peuvent ecirctre modifieacutes Nous essayons de tous les lister Voir aussi unedocumentation partielle dans Documentationip-sysctltxt

Certaines de ces configurations ont des valeurs par deacutefaut diffeacuterentes suivant que vous reacutepondez Yes ou No agravela question Configure as router and not host lors de la compilation du noyau

Oskar Andreasson a une page sur ces options et il apparaicirct quelle soit meilleure que la notre De ce fait allezeacutegalement voir httpipsysctl-tutorialfrozentuxnet

ipv4 geacuteneacuterique

En remarque geacuteneacuterale les fonctionnaliteacutes de limitation de deacutebit ne fonctionnent pas sur linterfaceloopback Nessayez donc pas de les tester localement Les limites sont exprimeacutees en ltlt tic-tac gtgt (jiffies)et elles utilisent obligatoirement le Token Bucket Filter mentionneacute plus tocirct

amplsqbNdT le terme jiffies deacutesigne un mouvement reacutegulier faisant reacutefeacuterence au ltlt tic-tac gtgt dune horlogeDans le noyau lui-mecircme une variable globale nommeacutee jiffies est increacutementeacutee agrave chaque interruptiondhorloge]

Le noyau a une horloge interne qui tourne agrave HZ impulsions (ou jiffies) par seconde Sur Intel HZ est la plupartdu temps eacutegale agrave 100 Donc configurer un fichier amplowbarrate agrave disons 50 autorise 2 paquets parseconde Le Token Bucket Filter est eacutegalement configureacute pour autoriser une rafale de donneacutees de 6 paquets auplus si suffisamment de jetons ont eacuteteacute gagneacutes

Plusieurs eacuteleacutements de la liste suivante proviennent du fichierusrsrclinuxDocumentationnetworkingip-sysctltxt eacutecrit par Alexey Kuznetsovltkuznetms2inracrugt et Andi Kleen ltakmucdegt

procsysnetipv4icmpamplowbardestunreachamplowbarrateSi le noyau deacutecide quil ne peut pas deacutelivrer un paquet il le rejettera et enverra agrave la source du paquetun ICMP notifiant ce rejet

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarallNagit en aucun cas comme eacutecho pour les paquets Ne configurez pas ceci par deacutefaut Cependant sivous ecirctes utiliseacute comme relais dans une attaque de Deacuteni de Services cela peut ecirctre utile

procsysnetipv4icmpamplowbarechoamplowbarignoreamplowbarbroadcastsamplsqbUtileamprsqb

Si vous pinguez ladresse de diffusion dun reacuteseau tous les hocirctes sont senseacutes reacutepondre Cela permet decoquettes attaques de deacuteni de service Mettez cette valeur agrave 1 pour ignorer ces messages de diffusion

procsysnetipv4icmpamplowbarechoreplyamplowbarrate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

70 Filtrage de Chemin Inverse (Reverse Path Filtering)

Le deacutebit auquel les reacuteponses echo sont envoyeacutees aux destinatairesprocsysnetipv4icmpamplowbarignoreamplowbarbogusamplowbarerroramplowbarresponses

Configurer ceci pour ignorer les erreurs ICMP dhocirctes du reacuteseau reacuteagissant mal aux trames envoyeacuteesvers ce quils perccediloivent comme ladresse de diffusion

procsysnetipv4icmpamplowbarparamprobamplowbarrateUn message ICMP relativement peu connu qui est envoyeacute en reacuteponse agrave des paquets qui ont desen-tecirctes IP ou TCP erroneacutes Avec ce fichier vous pouvez controcircler le deacutebit auquel il est envoyeacute

procsysnetipv4icmpamplowbartimeexceedamplowbarrateVoici la ceacutelegravebre cause des ltlt eacutetoiles Solaris gtgt dans traceroute Limite le nombre de messages ICMPTime Exceeded envoyeacutes

procsysnetipv4igmpamplowbarmaxamplowbarmembershipsNombre maximal de sockets igmp (multidistribution) en eacutecoute sur lhocircte FIXME Est-ce vrai

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmaxtimeFIXME Ajouter une petite explication sur le stockage des partenaires internet (inet peer) Intervallede temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris en compte lorsdune faible (voire inexistante) utilisation du pool Mesureacute en jiffies amplsqbNdT Le pool deacutesigne icila liste des adresses IP des partenaires internet]

procsysnetipv4inetamplowbarpeeramplowbargcamplowbarmintimeIntervalle de temps minimum entre deux passages du ramasse-miettes Cet intervalle est pris encompte lors dune utilisation intensive du pool Mesureacute en jiffies

procsysnetipv4inetamplowbarpeeramplowbarmaxttlDureacutee de conservation maximale des enregistrements Les entreacutees non utiliseacutees expireront au bout decet intervalle de temps (cest-agrave-dire quand le nombre dentreacutees dans le pool est tregraves petit) Mesureacute enjiffies

procsysnetipv4inetamplowbarpeeramplowbarminttlDureacutee de conservation minimale des enregistrements Devrait ecirctre suffisante pour prendre en comptele temps de vie des fragments sur lhocircte qui doit reacuteassembler les paquets Cette dureacutee minimale estgarantie si le nombre deacuteleacutements dans le pool est infeacuterieur au seuil fixeacute parinetamplowbarpeeramplowbarthreshold

procsysnetipv4inetamplowbarpeeramplowbarthresholdTaille approximative de lespace de stockage des partenaires internet A partir de ce seuil les entreacuteessont effaceacutees Ce seuil deacutetermine la dureacutee de vie des entreacutees ainsi que les intervalles de temps entredeux deacuteclenchements du ramasse-miettes Plus il y a dentreacutees plus le temps de vie est faible et pluslintervalle du ramasse-miettes est faible

procsysnetipv4ipamplowbarautoconfigCe fichier contient la valeur 1 si lhocircte a reccedilu sa configuration IP par RARP BOOTP DHCP ou unmeacutecanisme similaire Autrement il contient la valeur zeacutero

procsysnetipv4ipamplowbardefaultamplowbarttlDureacutee de vie (TTL) des paquets Fixer agrave la valeur sucircre de 64 Augmentez-la si vous avez un reacuteseauimmense mais pas ltlt pour samuser gtgt les boucles sans fin dun mauvais routage sont plusdangereuses si le TTL est eacuteleveacute Vous pouvez mecircme envisager de diminuer la valeur dans certainescirconstances

procsysnetipv4ipamplowbardynaddrVous aurez besoin de positionner cela si vous utilisez la connexion agrave la demande avec une adressedinterface dynamique Une fois que votre interface a eacuteteacute configureacutee toutes les sockets TCP locauxqui nont pas eu de paquets de reacuteponse seront retraiteacutees pour avoir la bonne adresse Cela reacutesout leproblegraveme poseacute par une connexion deacutefectueuse ayant configureacute une interface suivie par une deuxiegravemetentative reacuteussie (avec une adresse IP diffeacuterente)

procsysnetipv4ipamplowbarforwardLe noyau doit-il essayer de transmettre les paquets Deacutesactiveacute par deacutefaut

procsysnetipv4ipamplowbarlocalamplowbarportamplowbarrangeIntervalle des ports locaux pour les connexions sortantes En fait assez petit par deacutefaut 1024 agrave 4999

procsysnetipv4ipamplowbarnoamplowbarpmtuamplowbardiscConfigurez ceci si vous voulez deacutesactiver la deacutecouverte du MTU de chemin une technique pour

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 71

deacuteterminer le plus grand MTU possible sur votre chemin Voir aussi la section sur la deacutecouverte duMTU de chemin dans le chapitre Recettes de cuisinegt

procsysnetipv4ipfragamplowbarhighamplowbarthreshMeacutemoire maximum utiliseacutee pour reacuteassembler les fragments IP Quandipfragamplowbarhighamplowbarthresh octets de meacutemoire sont alloueacutes pour cela legestionnaire de fragments rejettera les paquets jusquagrave ce queipfragamplowbarlowamplowbarthresh soit atteint

procsysnetipv4ipamplowbarnonlocalamplowbarbindConfigurez ceci si vous voulez que vos applications soient capables de se lier agrave une adresse quinappartient pas agrave une interface de votre systegraveme Ceci peut ecirctre utile quand votre machine est sur unlien non-permanent (ou mecircme permanent) Vos services sont donc capables de deacutemarrer et de se lier agraveune adresse speacutecifique quand votre lien est inactif

procsysnetipv4ipfragamplowbarlowamplowbarthreshMeacutemoire minimale utiliseacutee pour reacuteassembler les fragments IP

procsysnetipv4ipfragamplowbartimeTemps en secondes du maintien dun fragment IP en meacutemoire

procsysnetipv4tcpamplowbarabortamplowbaronamplowbaroverflowUne option booleacuteenne controcirclant le comportement dans le cas de nombreuses connexions entrantesQuand celle-ci est activeacutee le noyau envoie rapidement des paquets RST quand un service estsurchargeacute

procsysnetipv4tcpamplowbarfinamplowbartimeoutTemps de maintien de leacutetat FIN-WAIT-2 pour un socket dans le cas ougrave il a eacuteteacute fermeacute de notre cocircteacuteLe partenaire peut ecirctre deacutefectueux et ne jamais avoir fermeacute son cocircteacute ou mecircme mourir de maniegravereinattendue La valeur par deacutefaut est de 60 secondes La valeur usuelle utiliseacutee dans le noyau 22 eacutetaitde 180 secondes Vous pouvez la remettre mais rappelez vous que si votre machine a un serveurWEB surchargeacute vous risquez de deacutepasser la meacutemoire avec des kilotonnes de sockets morts Lessockets FIN-WAIT2 sont moins dangereux que les sockets FIN-WAIT1 parce quils consomment aumaximum 15K de meacutemoire mais ils ont tendance agrave vivre plus longtemps Cftcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarkeepaliveamplowbartimeDureacutee entre lenvoi de deux messages keepalive quand loption keepalive est activeacutee Par deacutefaut 2heures

procsysnetipv4tcpamplowbarkeepaliveamplowbarintvlA quelle freacutequence les sondes sont retransmises lorsquil ny a pas eu acquittement de sonde Pardeacutefaut 75 secondes

procsysnetipv4tcpamplowbarkeepaliveamplowbarprobesCombien de sondes TCP keepalive seront envoyeacutees avant de deacutecider que la connexion est briseacutee Pardeacutefaut 9 En multipliant par tcpamplowbarkeepaliveamplowbarintvl cela donne le tempspendant lequel un lien peut ecirctre actif sans donner de reacuteponses apregraves lenvoi dun keepalive

procsysnetipv4tcpamplowbarmaxamplowbarorphansNombre maximum de sockets TCP qui ne sont pas relieacutes agrave un descripteur de fichier utilisateur geacutereacutepar le systegraveme Si ce nombre est deacutepasseacute les connexions orphelines sont immeacutediatement reacuteinitialiseacuteeset un avertissement est envoyeacute Cette limite existe seulement pour preacutevenir des attaques de deacuteni deservices simples Vous ne devez pas compter sur ceci ou diminuer cette limite artificiellement maisplutocirct laugmenter (probablement apregraves avoir augmenteacute la meacutemoire) si les conditions du reacuteseaureacuteclament plus que cette valeur par deacutefaut et reacutegler vos services reacuteseau pour quils deacutetruisent sanstarder ce type deacutetat Laissez-moi vous rappeler encore que chaque orphelin consomme jusquagraveenviron 64K de meacutemoire non swappable

procsysnetipv4tcpamplowbarorphanamplowbarretriesCombien dessais avant de deacutetruire une connexion TCP fermeacutee par notre cocircteacute La valeur par deacutefaut de7 correspond agrave un temps denviron 50s agrave 16 min suivant le RTO Si votre machine supporte un serveurWeb vous pouvez envisager de baisser cette valeur dans la mesure ougrave de tels sockets peuventconsommer des ressources significatives Cf tcpamplowbarmaxamplowbarorphans

procsysnetipv4tcpamplowbarmaxamplowbarsynamplowbarbacklog

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

72 ipv4 geacuteneacuterique

Nombre maximum de requecirctes dune connexion meacutemoriseacutee qui navait pas encore reccedilu daccuseacute dereacuteception du client connecteacute La valeur par deacutefaut est de 1024 pour des systegravemes avec plus de 128 Mode meacutemoire et 128 pour des machines avec moins de meacutemoire Si un serveur souffre de surchargeessayez daugmenter ce nombre Attention Si vous positionnez une valeur supeacuterieure agrave 1024 il seraitpreacutefeacuterable de changer TCPamplowbarSYNQamplowbarHSIZE dans le fichierincludenettcph pour garder TCPamplowbarSYNQamplowbarHSIZE16 lt=tcpamplowbarmaxamplowbarsynamplowbarbacklog et de recompiler de noyau

procsysnetipv4tcpamplowbarmaxamplowbartwamplowbarbucketsNombre maximum de sockets timewait geacutereacutees par le systegraveme simultaneacutement Si ce nombre estdeacutepasseacute le socket timewait est immeacutediatement deacutetruit et un message davertissement est envoyeacuteCette limite nexiste que pour preacutevenir des attaques de deacuteni de services simples Vous ne devez pasdiminuer cette limite artificiellement mais plutocirct laugmenter (probablement apregraves avoir augmenteacute lameacutemoire) si les conditions du reacuteseau reacuteclament plus que cette valeur par deacutefaut

procsysnetipv4tcpamplowbarretransamplowbarcollapseCompatibiliteacute bug agrave bug avec certaines imprimantes deacutefectueuses Tentative denvoi de plus grospaquets lors de la retransmission pour contourner le bug de certaines piles TCP

procsysnetipv4tcpamplowbarretries1Combien dessais avant de deacutecider que quelque chose est erroneacute et quil est neacutecessaire dinformer decette suspicion la couche reacuteseau La valeur minimale du RFC est de 3 Cest la valeur par deacutefaut ellecorrespond agrave un temps denviron 3 sec agrave 8 min suivant le RTO

procsysnetipv4tcpamplowbarretries2Combien dessais avant de deacutetruire une connexion TCP active Le RFC 1122 preacutecise que la limite nedevrait pas deacutepasser 100 secondes Cest un nombre trop petit La valeur par deacutefaut de 15 correspond agraveun temps de environ 13 agrave 30 minutes suivant le RTO

procsysnetipv4tcpamplowbarrfc1337Ce booleacuteen active un rectificatif pour ltlt lassassinat hasardeux des time-wait dans tcp gtgt deacutecrit dansle RFC 1337 Sil est activeacute le noyau rejette les paquets RST pour les sockets agrave leacutetat de time-waitPar deacutefaut 0

procsysnetipv4tcpamplowbarsackUtilise un ACK seacutelectif qui peut ecirctre utiliseacute pour signifier que des paquets speacutecifiques sont manquantFacilite ainsi une reacutecupeacuteration rapide

procsysnetipv4tcpamplowbarstdurgUtilise linterpreacutetation du RFC Host Requirements du champ TCP pointeur urgent La plupart deshocirctes utilisent la vieille interpreacutetation BSD Donc si vous activez cette option il se peut que Linux necommunique plus correctement avec eux Par deacutefaut FALSE (FAUX)

procsysnetipv4tcpamplowbarsynamplowbarretriesNombre de paquets SYN que le noyau enverra avant de tenter leacutetablissement dune nouvelleconnexion

procsysnetipv4tcpamplowbarsynackamplowbarretriesPour ouvrir lautre cocircteacute de la connexion le noyau envoie un SYN avec un ACK superposeacute(piggyback) pour accuser reacuteception du SYN preacuteceacutedemment envoyeacute Cest la deuxiegraveme partie de lapoigneacutee de main agrave trois voies (threeway handshake) Cette configuration deacutetermine le nombre depaquets SYN+ACK agrave envoyer avant que le noyau nabandonne la connexion

procsysnetipv4tcpamplowbartimestampsLes estampillages horaires sont utiliseacutes entre autres pour se proteacuteger du rebouclage des numeacuteros deseacutequence On peut concevoir quun lien agrave 1 gigabit puisse de nouveau rencontrer un numeacutero deseacutequence preacuteceacutedent avec une valeur hors-ligne parcequil eacutetait dune geacuteneacuteration preacuteceacutedenteLestampillage horaire permet de reconnaicirctre cet ltlt ancien paquet gtgt

procsysnetipv4tcpamplowbartwamplowbarrecycleMise en place du recyclage rapide des sockets TIME-WAIT La valeur par deacutefaut est 1 Celle-ci nedevrait pas ecirctre changeacutee sans le conseildemande dexperts techniques

procsysnetipv4tcpamplowbarwindowamplowbarscalingTCPIP autorise normalement des fenecirctres jusquagrave une taille de 65535 octets Pour des reacuteseauxvraiment rapides cela peut ne pas ecirctre assez Les options windows scaling autorisent des

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ipv4 geacuteneacuterique 73

fenecirctres jusquau gigaoctet ce qui est adapteacute pour les produits agrave grande bande passante

Configuration des peacuteripheacuteriques

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4confDEVacceptamplowbarredirectsSi un routeur deacutecide que vous lutilisez agrave tort (cest-agrave-dire quil a besoin de reacute-envoyer votre paquet surla mecircme interface) il vous enverra un message ICMP Redirect Cela preacutesente cependant un petitrisque pour la seacutecuriteacute et vous pouvez le deacutesactiver ou utiliser les redirections seacutecuriseacutees

procsysnetipv4confDEVacceptamplowbarsourceamplowbarroutePlus vraiment utiliseacute On lutilisait pour ecirctre capable de donner agrave un paquet une liste dadresses IP agravevisiter Linux peut ecirctre configureacute pour satisfaire cette option IP

procsysnetipv4confDEVbootpamplowbarrelayAccepte les paquets avec une adresse source 0bcd et des adresses destinations qui ne correspondentni agrave cet hocircte ni au reacuteseau local On suppose quun deacutemon de relais BOOTP interceptera et transmettrade tels paquets

La valeur par deacutefaut est 0 puisque cette fonctionnaliteacute nest pas encore impleacutementeacutee (noyau 2212)procsysnetipv4confDEVforwarding

Active ou deacutesactive la transmission IP sur cette interfaceprocsysnetipv4confDEVlogamplowbarmartians

Voir la section sur le Filtrage de Chemin Inversegtprocsysnetipv4confDEVmcamplowbarforwarding

Si vous faites de la transmission multidistribution (multicast) sur cette interfaceprocsysnetipv4confDEVproxyamplowbararp

Si vous configurez ceci agrave 1 cet interface reacutepondra aux requecirctes ARP pour les adresses que le noyaudoit router Peut ecirctre tregraves utile si vous mettez en place des ltlt pseudo ponts ip gtgt Prenez bien gardedavoir des masques de sous-reacuteseau corrects avant dactiver cette option Faites eacutegalement attentionque le rp_filter agisse aussi sur le requecirctes ARP

procsysnetipv4confDEVrpamplowbarfilterVoir la section sur le Filtrage de Chemin Inversegt

procsysnetipv4confDEVsecureamplowbarredirectsAccepte les messages de redirection ICMP seulement pour les passerelles indiqueacutees dans la liste despasserelles par deacutefaut Activeacute par deacutefaut

procsysnetipv4confDEVsendamplowbarredirectsActive la possibiliteacute denvoyer les messages de redirections mentionneacutees ci-dessus

procsysnetipv4confDEVsharedamplowbarmediaSi cela nest pas activeacute le noyau ne considegravere pas que diffeacuterents sous-reacuteseaux peuvent communiquerdirectement sur cette interface La configuration par deacutefaut est Yes

procsysnetipv4confDEVtagFIXME agrave remplir

Politique de voisinage

DEV peut deacutesigner soit une interface reacuteelle soit all soit default Default change eacutegalement lesparamegravetres des interfaces qui seront creacuteeacutees par la suite

procsysnetipv4neighDEVanycastamplowbardelayValeur maximum du deacutelai aleacuteatoire de reacuteponse exprimeacute en jiffies (1100 sec) aux messages desollicitation des voisins Nest pas encore impleacutementeacute (Linux ne possegravede pas encore le supportanycast)

procsysnetipv4neighDEVappamplowbarsolicit

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

74 Configuration des peacuteripheacuteriques

Deacutetermine le nombre de requecirctes agrave envoyer au deacutemon ARP de lespace utilisateur Utilisez 0 pourdeacutesactiver

procsysnetipv4neighDEVbaseamplowbarreachableamplowbartimeUne valeur de base utiliseacutee pour le calcul du temps aleacuteatoire daccegraves comme speacutecifieacute dans leRFC2461

procsysnetipv4neighDEVdelayamplowbarfirstamplowbarprobeamplowbartimeDeacutelai avant de tester pour la premiegravere fois si le voisin peut ecirctre atteint (voirgcamplowbarstaleamplowbartime)

procsysnetipv4neighDEVgcamplowbarstaleamplowbartimeDeacutetermine la freacutequence agrave laquelle on doit veacuterifier les vieilles entreacutees ARP Si une entreacutee est obsolegraveteelle devra de nouveau ecirctre reacutesolue (ce qui est utile quand une adresse IP a eacuteteacute attribueacutee agrave une autremachine) Si ucastamplowbarsolicit est supeacuterieur agrave 0 alors on essaie dabord denvoyer unpaquet ARP directement agrave lhocircte connu Si cela eacutechoue et que mcastamplowbarsolicit estsupeacuterieur agrave 0 alors une requecircte ARP est multidiffuseacutee

procsysnetipv4neighDEVlocktimeUne entreacutee ARP nest remplaceacutee par une nouvelle que si lancienne est au moins preacutesente depuislocktime Cela eacutevite trop deacutecriture dans le cache

procsysnetipv4neighDEVmcastamplowbarsolicitNombre maximum dessais conseacutecutifs pour une sollicitation multicast

procsysnetipv4neighDEVproxyamplowbardelayTemps maximum (le temps reacuteel est aleacuteatoire et compris entre 0 et proxytime) avant de reacutepondre agraveune requecircte ARP pour laquelle nous avons une entreacutee de proxy ARP Peut ecirctre utiliseacute dans certainscas pour se preacutemunir des inondations reacuteseaux

procsysnetipv4neighDEVproxyamplowbarqlenLongueur maximale de la file dattente du temporisateur de cache arp en attente (Voirproxyamplowbardelay)

procsysnetipv4neighDEVretransamplowbartimeLe temps exprimeacute en jiffies (1100 sec) entre deux requecirctes ARP Utiliseacute pour la reacutesolutiondadresses et pour deacuteterminer si un voisin est inaccessible

procsysnetipv4neighDEVucastamplowbarsolicitNombre maximum de requecirctes ARP unicast

procsysnetipv4neighDEVunresamplowbarqlenLongueur maximum de la file dattente pour la requecircte ARP en cours le nombre de paquets qui sontaccepteacutes des autres couches pendant la reacutesolution ARP dune adresse

Internet QoS Architectures and Mechanisms for Quality of Service Zheng Wang ISBN 1-55860-608-4Livre traitant des sujets lieacutes agrave la qualiteacute de service Bien pour comprendre les concepts de base

Configuration du routage

procsysnetipv4routeerroramplowbarburstCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarburst est grand moins il yaura de messages Erroramplowbarburst controcircle le moment ougrave les messages seront supprimeacutesLes configurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeerroramplowbarcostCes paramegravetres sont utiliseacutes pour limiter le nombre de messages davertissement eacutecrits dans le journaldu noyau par le code de routage Plus le paramegravetre erroramplowbarcost est grand moins il yaura de messages erroramplowbarburst controcircle le moment ougrave les messages seront jeteacutes Lesconfigurations par deacutefaut se limitent agrave un message davertissement toutes les cinq secondes

procsysnetipv4routeflushLeacutecriture dans ce fichier provoque la vidange du cache du routage

procsysnetipv4routegcamplowbarelasticityValeurs qui controcirclent la freacutequence et le comportement de lalgorithme garbage collection du cachede routage Ceci peut ecirctre important en cas de deacutefaut Au moins gcamplowbartimeout secondes

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Politique de voisinage 75

seacutecouleront avant que le noyau ne passe agrave une autre route si la preacuteceacutedente nest plus opeacuterationnelleConfigureacute par deacutefaut agrave 300 Diminuez cette valeur si vous voulez passer plus rapidement ce type deproblegraveme

Voir aussi ce message par Ard van Breemenprocsysnetipv4routegcamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarminamplowbarinterval

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbarthresh

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routegcamplowbartimeout

Voir procsysnetipv4routegcamplowbarelasticityprocsysnetipv4routemaxamplowbardelay

Deacutelai dattente pour la vidange du cache du routageprocsysnetipv4routemaxamplowbarsize

Taille maximum du cache de routage Les vieilles entreacutees seront purgeacutees quand le cache aura atteintcette taille

procsysnetipv4routeminamplowbaradvamplowbarmssFIXME agrave remplir

procsysnetipv4routeminamplowbardelayDeacutelai dattente pour vider le cache de routage

procsysnetipv4routeminamplowbarpmtuFIXME agrave remplir

procsysnetipv4routemtuamplowbarexpiresFIXME agrave remplir

procsysnetipv4routeredirectamplowbarloadFacteurs qui deacuteterminent si plus de redirections ICMP doivent ecirctre envoyeacutees agrave un hocircte speacutecifiqueAucune redirection ne sera envoyeacutee une fois que la limite de charge (load limit) ou que le nombremaximum de redirections aura eacuteteacute atteint

procsysnetipv4routeredirectamplowbarnumberVoir procsysnetipv4routeredirectamplowbarload

procsysnetipv4routeredirectamplowbarsilenceTemporisation pour les redirections Au dela de cette peacuteriode les redirections seront de nouveauenvoyeacutees mecircme si elles ont eacuteteacute stoppeacutees parce que la charge ou le nombre limite a eacuteteacute atteint

Chapitre 14 Gestionnaires de mise en file dattenteavanceacutes amp moins communsSi vous constatez que vous avez des besoins qui ne sont pas geacutereacutes par les files dattente citeacutees preacuteceacutedemmentle noyau contient quelques autres files dattente plus speacutecialiseacutees mentionneacutees ici

bfifopfifo

Ces files dattente sans classes sont plus simples que pfifoamplowbarfast dans la mesure ougrave elles nontpas de bandes internes tout le trafic eacutetant vraiment eacutequivalent Elles ont cependant lavantage important dereacutealiser des statistiques Donc mecircme si vous navez pas besoin de mise en forme ou de donner une prioriteacutevous pouvez employer ce gestionnaire pour deacuteterminer larrieacutereacute (backlog) de votre interface

pfifo mesure en paquets et bfifo en octets

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

76 Chapitre 14 Gestionnaires de mise en file dattente avanceacutes amp moins communs

Paramegravetres amp usage

limitSpeacutecifie la taille de la file dattente Mesureacutee en octets pour bfifo et en paquets pour pfifo Pardeacutefaut correspond agrave des paquets de taille eacutegale au paramegravetre txqueuelen de linterface (voir lechapitre pfifo_fastgt) ou txqueuelenmtu octets pour bfifo

Algorithme Clark-Shenker-Zhang (CSZ)

Ceci est si theacuteorique que mecircme Alexey (lauteur principal de CBQ) preacutetend ne pas le comprendre De sonpropre avis

David D Clark Scott Shenker and Lixia Zhang Supporting Real-Time Applications in anIntegrated Services Packet Network Architecture and Mechanism

Comme je le comprends lideacutee principale est de creacuteer des flux WFQ pour chaque servicegaranti et dallouer le reste de la bande passante au flux factice appeleacute flow-0 Le Flux-0inclut le trafic de service preacutedictif et le trafic best-effort Il est traiteacute par un ordonnanceur deprioriteacute qui alloue la bande passante de plus grande prioriteacute aux services preacutedictifs et le resteaux paquets best-effort

Notez que dans CSZ les flux ne sont PAS limiteacutes agrave leur bande passante On suppose que leflux a passeacute le controcircle dadmission agrave la frontiegravere du reacuteseau QoS et quil na pas besoin demises en forme suppleacutementaires Nimporte quelles autres tentatives pour ameacuteliorer le flux oupour le mettre en forme gracircce agrave un seau de jetons lors deacutetapes intermeacutediaires introduiront desretards non deacutesireacutes et augmenteront la gigue

A lheure actuelle CSZ est le seul ordonnanceur qui fournit un veacuteritable service garanti Lesautres impleacutementations (incluant CBQ) nassurent pas un deacutelai garanti et rendent la giguealeacuteatoire

Ne semble pas actuellement un bon candidat agrave utiliser agrave moins que vous nayez lu et comprislarticle mentionneacute

DSMARK

Esteve Camps

ltmarvingrnesgtltestevehadesudgesgt

Ce texte est un extrait de ma thegravese sur le support QoS dans Linux Septembre 2000

Documents sources

Draft-almesberger-wajhak-diffserv-linux-01txtbull Exemples de la distribution iproute2bull White Paper-QoS protocols and architectures et Foires Aux Questions IP QoS les deux par Qualityof Service Forum

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Paramegravetres amp usage 77

Introduction

Avant tout il serait preacutefeacuterable de lire les RFC eacutecrits sur ce sujet (RFC2474 RFC2475 RFC2597 et RFC2598)sur le site web du groupe de travail DiffServ IETF et sur le site web de Werner Almesberger (Il a eacutecrit lecode permettant le support des Services Diffeacuterencieacutes sous Linux)

A quoi DSMARK est-il relieacute

DSMARK est un gestionnaire de mise en file dattente qui offre les fonctionnaliteacutes dont ont besoin les servicesdiffeacuterencieacutes (Differentiated Services) (eacutegalement appeleacutes DiffServ ou tout simplement DS) DiffServ est lunedes deux architectures actuelles de la Qualiteacute de Services (QoS Quality of Services) (lautre est appeleacuteeservices inteacutegreacutes (Integrated Services) Elle se base sur la valeur du champ DS contenu dans len-tecircte IP dupaquet

Une des premiegraveres solutions dans IP pour offrir des niveaux de qualiteacute de services eacutetait le champ Type deService (octet TOS) de len-tecircte IP En modifiant la valeur de ce champ nous pouvions choisir un niveaueacuteleveacutefaible du deacutebit du deacutelai ou de la fiabiliteacute Cependant cela ne fournissait pas une flexibiliteacute suffisantepour les besoins de nouveaux services (comme les applications temps reacuteel les applications interactives etautres) Par la suite de nouvelles architectures sont apparues Lune delle a eacuteteacute DiffServ qui a gardeacute les bitsTOS et les a renommeacutes champ DS

Guide des services diffeacuterencieacutes

Les services diffeacuterencieacutes sont orienteacutes groupes Cela signifie que nous ne savons rien des flux (ce sera le butdes services inteacutegreacutes (integrated Services)) Nous connaissons par contre les agreacutegations de flux et nousadopterons des comportements diffeacuterents suivant lagreacutegation agrave laquelle appartient le paquet

Quand un paquet arrive agrave un noeud frontalier (noeud dentreacutee du domaine DiffServ) et entre dans un domaineDiffServ nous devrons avoir une politique une mise en forme etou un marquage de ces paquets (le marquagefait reacutefeacuterence agrave la mise en place dune valeur dans le champ DS Comme on le ferait pour des vaches -)) Cesera cette marquevaleur que les noeuds internes de votre domaine DiffServ regarderons pour deacuteterminer quelcomportement ou niveau de qualiteacute de service appliquer

Comme vous pouvez le deacuteduire les Services Diffeacuterencieacutes impliquent un domaine sur lequel toutes les regraveglesDS devront ecirctre appliqueacutees Vous pouvez raisonner de la faccedilon suivante ltlt Je classifierai tous les paquetsentrant dans mon domaine Une fois quils seront entreacutes dans mon domaine ils seront soumis aux regravegles quema classification impose et chaque noeud traverseacute appliquera son niveau de qualiteacute de service gtgt

En fait vous pouvez appliquer vos propres politiques dans vos domaines locaux mais des autorisations auniveau service devront ecirctre consideacutereacutees lors de la connexion agrave dautres domaines DS

En ce moment vous vous posez peut-ecirctre beaucoup de questions DiffServ est plus vaste que ce que jaiexpliqueacute En fait vous pouvez comprendre que je ne peux pas reacutesumer plus de trois RFC en 50 lignes -)

Travailler avec DSMARK

Comme le speacutecifie la bibliographie concernant DiffServ nous diffeacuterencions les noeuds frontaliers et lesnoeuds inteacuterieurs Ce sont deux eacuteleacutements importants dans le chemin quemprunte le trafic Les deux reacutealisentune classification quand un paquet arrive Le reacutesultat peut ecirctre utiliseacute agrave diffeacuterents endroits lors du processusDS avant que le paquet ne soit libeacutereacute vers le reacuteseau Cela est possible car le nouveau code DiffServ fournit unestructure appeleacutee skamplowbarbuff incluant un nouveau champ appeleacute skb-gttcindex Ce champmeacutemorisera le reacutesultat de la classification initiale et pourra ecirctre utiliseacute agrave plusieurs reprises dans le traitementDS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

78 Introduction

La valeur skb-gttcamplowbarindex sera initialement configureacutee par le gestionnaire de mise en filedattente DSMARK Cette valeur sera extraite du champ DS de len-tecircte IP de tous les paquets reccedilus En outrele classificateur clsamplowbartcindex lira tout ou une partie de la valeur skb-gttcindex et lutiliserapour seacutelectionner les classes

Mais avant tout regardons la commande qdisc DSMARK et ses paramegravetres

dsmark indices INDICES [ default_index DEFAULT_INDEX ] [ set_tc_index ]

Que signifient ces paramegravetres

indices taille de la table des couples (masquevaleur) La valeur maximum est 2ˆn ougrave ngt=0bull defaultamplowbarindex index dentreacutee par deacutefaut de la table si aucune correspondance nesttrouveacutee

bull

setamplowbartcamplowbarindex indique au gestionnaire DSMARK de reacutecupeacuterer le champs DSet de lenregistrer dans skb-gttcamplowbarindex

bull

Regardons DSMARK proceacuteder

Comment SCHamplowbarDSMARK travaille

Ce gestionnaire de mise en file dattente reacutealisera les eacutetapes suivantes

Si vous avez deacuteclareacute loption setamplowbartcamplowbarindex dans la commande qdisc lechamp DS est reacutecupeacutereacute et meacutemoriseacute dans la variable skb-gttcamplowbarindex

bull

Le classificateur est invoqueacute Celui-ci sera exeacutecuteacute et retournera un identificateur de classe (class ID)qui sera enregistreacute dans la variable skb-gttcamplowbarindex Si aucun filtre correspondant nesttrouveacute nous consideacuterons loption defaultamplowbarindex comme eacutetant lidentificateur de classeagrave enregistrer Si ni setamplowbartcamplowbarindex ni defaultamplowbarindex nont eacuteteacutedeacuteclareacutes alors les reacutesultats peuvent ecirctre non preacutedictifs

bull

Apregraves avoir eacuteteacute envoyeacute dans le gestionnaire de file dattente interne ougrave le reacutesultat du filtre peut ecirctrereacuteutiliseacute lidentificateur de classe retourneacute par le gestionnaire est stockeacute dans la variableskb-gttcamplowbarindex Cette valeur sera utiliseacutee plus tard pour indexer la table masque-valeurLe reacutesultat de lopeacuteration suivante sera assigneacute au paquet

Nouveau_champ_DS = ( Ancien_champ_DS amp masque ) | valeur

bull

La nouvelle valeur reacutesultera donc dun ET logique entre les valeurs du champamplowbarDS et dumasque suivi dun OU logique avec le paramegravetre valeur Regardez la figure suivante pourcomprendre tout ce processus

bull

skb-gtihp-gttos- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gt | | ^ | -- Si vous deacuteclarez set_tc_index nous configurons | | lt-----Peut changer | la valeur DS dans la variable skb-gttc_index | |O le champ DS | A| |R +-|-+ +------+ +---+-+ File dattente-+ +---N|-----|----+ | | | |filtre|---gt| | |--gt --gt| | | D| | | | | |-----gt| tc |---gt| | | interne | |----gt| v | | | | | |index |---gt| | | +---------------+ | ----gt(masquevaleur)|--gt| O | +------+ +-|-+--------------^----+ | ( ) | | | | ^ | | | | ( ) | | | +----------|---------|----------------|-------|--+ ( ) | | | sch_dsmark | | | | | +-|------------|---------|----------------|-------|------------------+ | | | lt- tc_index -gt | | | |(lecture)| peut changer | | lt--------------Index de la table

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Travailler avec DSMARK 79

| | | | | des couples v | v v | (masquevaleur)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -gt skb-gttc_index

Comment faire le marquage Il suffit de modifier le masque et la valeur associeacutes agrave la classe que vous voulezmarquer Regardez la ligne de code suivante

tc class change dev eth0 classid 11 dsmark mask 0x3 value 0xb8

Cela modifie le couple (masquevaleur) dans la table de hachage et re-marque les paquets appartenant agrave laclasse 11 Vous devez changer ces valeurs en raison des valeurs par deacutefaut que le couple (masque valeur)obtient initialement (voir le tableau ci-dessous)

Nous allons maintenant expliquer comment le filtre TCamplowbarINDEX travaille et comment il sintegravegredans tout cela En outre le filtre TCamplowbarINDEX peut ecirctre utiliseacute dans des configurations autres que cellesincluant les services DS

Le filtre TCamplowbarINDEX

Voici la commande de base pour deacuteclarer un filtre TCamplowbarINDEX

tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ] [ pass_on | fall_through ] [ classid CLASSID ] [ police POLICE_SPEC ]

Ensuite nous montrons lexemple utiliseacute pour expliquer le mode opeacuteratoire de TCamplowbarINDEX Soyezattentif aux mots en gras tc qdisc add dev eth0 handle 10 root dsmark indices 64setamplowbartcamplowbarindex tc filter add dev eth0 parent 10 protocol ip prio 1 tcindex mask 0xfc shift 2 tcqdisc add dev eth0 parent 10 handle 20 cbq bandwidth 10Mbit cell 8 avpkt 1000 mpu 64 ampnum Classe dutrafic EF tc class add dev eth0 parent 20 classid 21 cbq bandwidth 10Mbit rate 1500Kbit avpkt 1000 prio 1bounded isolated allot 1514 weight 1 maxburst 10 ampnum Gestionnaire de file dattente fifo pour le trafic EFtc qdisc add dev eth0 parent 21 pfifo limit 5 tc filter add dev eth0 parent 20 protocol ip prio 1 handle 0x2etcindex classid 21 passamplowbaron (Ce code nest pas complet Ce nest quun extrait de lexemple EFCBQinclus dans la distribution iproute2)

Avant tout supposons que nous recevons un paquet marqueacute comme EF Si vous lisez le RFC2598 vousverrez que DSCP recommande une valeur de 101110 pour le trafic EF Cela signifie que le champ DS seraeacutegal agrave 10111000 (rappelez- vous que les bits les moins significatifs de loctet TOS ne sont pas utiliseacutes dansDS) ou 0xb8 en notation hexadeacutecimale

FILTRE TC INDEX +---+ +-------+ +---+-+ +------+ +-+ +-------+ | | | | | | | |FILTRE| +-+ +-+ | | | | | |-----gt| MASK | -gt | | | -gt |HANDLE|-gt| | | | -gt | | -gt | | | | | =0xfc | | | | |0x2E | | +----+ | | | | | | | | | | | | +------+ +--------+ | | | | | | | | | | | | | | |--gt| | | SHIFT | | | | | | | |--gt | | | =2 | | | +----------------------------+ | | | | | | | | | CBQ 20 | | | | | +-------+ +---+--------------------------------+ | | | | | | | +-------------------------------------------------------------+ | | DSMARK 10 |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

80 Comment SCHamplowbarDSMARK travaille

+-------------------------------------------------------------------------+

Le paquet arrive alors avec la valeur du champ DS configureacutee agrave 0xb8 Comme je lai expliqueacute auparavant legestionnaire de mise en file dattente dsmark identifieacute par 10 dans cet exemple reacutecupegravere le champ DS etlenregistre dans la variable skb-gttcamplowbarindex Leacutetape suivante consistera agrave associer un filtre agrave cegestionnaire de mise en file dattente (la seconde ligne dans cet exemple) Les opeacuterations suivantes serontreacutealiseacutees

Valeur1 = skb-gttc_index amp MASKCleacute = Valeur1 gtgt SHIFT

Dans cet exemple MASK=0xFC et SHIFT=2

Valeur1 = 10111000 amp 11111100 = 10111000Cleacute = 10111000 gtgt 2 = 00101110 -gt 0x2E en hexadeacutecimal

La valeur retourneacutee correspondra agrave un identificateur de filtre du gestionnaire de file dattente interne (danslexemple identifier par 20) Si un filtre avec cet identificateur (id) existe les conditions de controcircle et deperformance seront veacuterifieacutees (au cas ougrave le filtre inclurait ceci) et lidentificateur de classe sera retourneacute (dansnotre exemple classid 21) et stockeacute dans la variable skb-gttcamplowbarindex

Si aucun filtre avec cet identificateur nest trouveacute le reacutesultat deacutependra de la deacuteclaration de loptionfallamplowbarthrough Si tel est le cas la valeur Cleacute est retourneacutee comme identificateur de classe Si cela nestpas le cas une erreur est retourneacutee et le traitement continue avec les filtres restant Faites attention si vousutilisez loption fallamplowbarthrough ceci ne peut ecirctre fait que si une relation existe entre les valeurs de lavariable skb-gttcamplowbarindex et les identificateurs de classe

Les derniers paramegravetres agrave commenter sont hash et passamplowbaron Le premier est relieacute agrave la taille de la tablede hachage Passamplowbaron sera utiliseacute pour indiquer dessayer le filtre suivant dans le cas ougrave aucunidentificateur de classe eacutegal au reacutesultat du filtre ne serait trouveacute Laction par deacutefaut est fallamplowbarthrough(regarder la table suivante)

Finalement regardons quelles sont les valeurs possibles pour la configuration de tous ces paramegravetresTCINDEX

Nom TC Valeur Deacutefaut-----------------------------------------------------------------Hash 10x10000 Deacutependant de limpleacutementationMask 00xffff 0xffffShift 015 0Fall through Pass_on Flag Fall_throughClassid Majorminor RienPolice Rien

Ce type de filtre est tregraves puissant Il est neacutecessaire dexplorer toutes les possibiliteacutes En outre ce filtre nest passeulement utiliseacute dans les configurations DiffServ Vous pouvez lutiliser comme nimporte quel autre filtre

Je vous recommande de regarder les exemples DiffServ inclus dans la distribution iproute2 Je vous prometsque jessaierai de compleacuteter ce texte degraves que possible Tout ce que jai expliqueacute est le reacutesultat de nombreux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le filtre TCamplowbarINDEX 81

tests Merci de me dire si je me suis trompeacute quelque part

Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

Tous les gestionnaires de mise en file dattente dont nous avons discuteacute jusquici sont des gestionnaires desortie Chaque interface peut eacutegalement avoir un gestionnaire de mise en file dattente dentreacutee qui nest pasutiliseacute pour envoyer les paquets agrave lexteacuterieur du peacuteripheacuterique reacuteseau Au lieu de cela il vous autorise agraveappliquer des filtres tc aux paquets entrants par linterface indeacutependamment de sils ont une destination localeou sils sont destineacutes agrave ecirctre transmis

Etant donneacute que les filtres tc contiennent une impleacutementation complegravete du Filtre agrave Seau de Jetons et quilssont eacutegalement capables de sappuyer sur lestimation du flux fourni par le noyau il y a beaucoup defonctionnaliteacutes disponibles Ceci vous permet de reacuteglementer le trafic entrant de faccedilon efficace avant mecircmequil nentre dans la pile IP

Paramegravetres amp usage

Le gestionnaire de mise en file dattente dentreacutee ne neacutecessite pas de paramegravetres Il diffegravere des autresgestionnaires dans le fait quil noccupe pas la racine du peacuteripheacuterique Attachez-le comme ceci

tc qdisc add dev eth0 ingress

Ceci vous autorise agrave avoir dautres gestionnaires de sortie sur votre peacuteripheacuterique en plus du gestionnairedentreacutee

Pour un exemple inventeacute sur la faccedilon dont le gestionnaire dentreacutee peut ecirctre utiliseacute voir le chapitre Recettes decuisine

Random Early Detection (RED)

Ce chapitre est conccedilu comme une introduction au routage de dorsales (backbones) Ces liaisons impliquentsouvent des bandes passantes supeacuterieures agrave 100 meacutegabitss ce qui neacutecessite une approche diffeacuterente de cellede votre modem ADSL agrave la maison

Le comportement normal des files dattente de routeurs est appeleacute tail-drop (NdT eacutelimine le reste) Letail-drop consiste agrave mettre en file dattente un certain volume de trafic et agrave eacuteliminer tout ce qui deacuteborde Cenest pas du tout eacutequitable et cela conduit agrave des retransmissions de synchronisation Quand une retransmissionde synchronisation a lieu la brusque rafale de rejet dun routeur qui a atteint sa limite entraicircnera une rafale deretransmissions retardeacutee qui inondera agrave nouveau le routeur congestionneacute

Dans le but den finir avec les congestions occasionnelles des liens les routeurs de dorsales integravegrent souventdes files dattente de grande taille Malheureusement bien que ces files dattente offrent un bon deacutebit ellespeuvent augmenter sensiblement les temps de latence et entraicircner un comportement tregraves saccadeacute desconnexions TCP pendant la congestion

Ces problegravemes avec le tail-drop deviennent de plus en plus preacuteoccupants avec laugmentation de lutilisationdapplications hostiles au reacuteseau Le noyau Linux nous offre la technique RED abreacuteviation de Random EarlyDetect ou deacutetection preacutecoce directe

RED nest pas la solution miracle agrave tous ces problegravemes Les applications qui nintegravegrent pas correctement latechnique de lexponential backoff obtiennent toujours une part trop grande de bande passante Cependantavec la technique RED elles ne provoquent pas trop de deacutegacircts sur le deacutebit et les temps de latence des autresconnexions

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

82 Gestionnaire de mise en file dattente dentreacutee (Ingress qdisc)

RED eacutelimine statistiquement des paquets du flux avant quil natteigne sa limite dure (hard) Sur une dorsalecongestionneacutee cela entraicircne un ralentissement en douceur de la liaison et eacutevite les retransmissions desynchronisation La technique RED aide aussi TCP agrave trouver une vitesse eacutequitable plus rapidement enpermettant deacuteliminer des paquets plus tocirct il conserve une file dattente plus courte et des temps de latencemieux controcircleacutes La probabiliteacute quun paquet soit eacutelimineacute dune connexion particuliegravere est proportionnelle agrave labande passante utiliseacutee par cette connexion plutocirct quau nombre de paquets quelle envoie

La technique RED est une bonne gestion de file dattente pour les dorsales ougrave vous ne pouvez pas vouspermettre le coucirct dune meacutemorisation deacutetat par session qui est neacutecessaire pour une mise en file dattentevraiment eacutequitable

Pour utiliser RED vous devez reacutegler trois paramegravetres Min Max et burst Min est la taille minimum de la filedattente en octets avant que les rejets naient lieu Max est le maximum doux (soft) en dessous duquellalgorithme sefforcera de rester et burst est le nombre maximum de paquets envoyeacutes en rafale

Vous devriez configurer Min en calculant le plus grand temps de latence acceptable pour la mise en filedattente multiplieacute par votre bande passante Par exemple sur mon lien ISDN agrave 64 Kbitss je voudrais avoirun temps de latence de base de mise en file dattente de 200 ms Je configure donc Min agrave 1600 octets (= 02 x64000 8) Imposer une valeur Min trop petite va deacutegrader le deacutebit et une valeur Min trop grande va deacutegraderle temps de latence Sur une liaison lente choisir un coefficient Min petit ne peut pas remplacer une reacuteductiondu MTU pour ameacuteliorer les temps de reacuteponse

Vous devriez configurer Max agrave au moins deux fois Min pour eacuteviter les synchronisations Sur des liens lentsavec de petites valeurs de Min il peut ecirctre prudent davoir Max quatre fois plus grand que Min ou plus

Burst controcircle la reacuteponse de lalgorithme RED aux rafales Burst doit ecirctre choisi plus grand que minavpkt(paquet moyen) Expeacuterimentalement jai trouveacute que (min+min+max)(3avpkt) marche bien

De plus vous devez configurer limit et avpkt Limit est une valeur de seacutecuriteacute sil y a plus de Limit octetsdans la file RED reprend la technique tail-drop Je choisis une valeur typique eacutegale agrave 8 fois Max Avpktdevrait ecirctre fixeacute agrave la taille moyenne dun paquet 1000 fonctionne correctement sur des liaisons Internet hautdeacutebit ayant un MTU de 1500 octets

Lire larticle sur la file dattente RED par Sally Floyd et Van Jacobson pour les informations techniques

Generic Random Early Detection

Il ny a pas grand chose de connu sur GRED Il ressemble agrave GRED avec plusieurs files dattente internescelles-ci eacutetant choisies en se basant sur le champ tcindex de Diffserv Selon une diapositive trouveacutee ici ilpossegravede les capaciteacutes Distributed Weighted RED de Cisco ainsi que les capaciteacutes RIO de Clark

Chaque file dattente virtuelle peut avoir ses propres Drop Parameters

FIXME Demandez agrave Jamal or Werner de nous en dire plus

Emulation VCATM

Ceci est leffort principal de Werner Almesberger pour vous autoriser agrave construire des circuits virtuelsau-dessus des sockets TCPIP Le circuit virtuel est un concept venant de la theacuteorie des reacuteseaux ATM

Pour plus dinformations voir la page ATM sur Linux

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Random Early Detection (RED) 83

Weighted Round Robin (WRR)

Ce gestionnaire de mise en file dattente nest pas inclus dans les noyaux standards mais peut ecirctre teacuteleacutechargeacuteeagrave partir de ce lien Ce gestionnaire de mise en file dattente na eacuteteacute testeacute quavec les noyaux 22 mais marcheraprobablement eacutegalement avec les noyaux 2425

La file dattente WRR partage la bande passante entre ses classes en utilisant la technique du tourniquetpondeacutereacute Ceci est similaire agrave la file dattente CBQ qui contient des classes sur lesquelles lon peut associerarbitrairement des files dattente Toutes les classes qui ont suffisamment de demandes obtiendront la bandepassante proportionnellement au poids associeacute des classes Les poids peuvent ecirctre configureacutes manuellement enutilisant le programme tc Ils peuvent eacutegalement ecirctre configureacutes pour deacutecroicirctre automatiquement pour lesclasses transfeacuterant moins de donneacutees

La file dattente a un classificateur inteacutegreacute qui assigne les paquets venant ou allant vers diffeacuterentes machines agravediffeacuterentes classes On peut utiliser soit ladresse MAC soit ladresse IP de ladresse source ou de destinationLadresse MAC ne peut cependant ecirctre utiliseacutee que quand la boite Linux est un pont ethernet Les classes sontautomatiquement assigneacutees aux machines en fonction des paquets vus

Ce gestionnaire de mise en file dattente peut ecirctre tregraves utile au site comme les reacutesidences eacutetudiantes ougrave desindividus sans liens particuliers partagent une connexion Internet Un ensemble de scripts pour configurer untel cas de figure pour ce genre de site est proposeacute dans la distribution WRR

Chapitre 15 Recettes de cuisineCette section contient des ltlt recettes de cuisine gtgt qui peuvent vous aider agrave reacutesoudre vos problegravemes Un livrede cuisine ne remplace cependant pas une reacuteelle compreacutehension essayez donc dassimiler ce qui suit

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations)

Vous pouvez faire cela de plusieurs maniegraveres Apache possegravede un module qui permet de le supporter maisnous montrerons comment Linux peut le faire pour dautres services Les commandes ont eacuteteacute reprises dunepreacutesentation de Jamal Hadi dont la reacutefeacuterence est fournie ci-dessous

Disons que nous avons deux clients avec http ftp et du streaming audio Nous voulons leur vendre unelargeur de bande passante limiteacutee Nous le ferons sur le serveur lui-mecircme

Le client A doit disposer dau moins 2 meacutegabits et le client B a payeacute pour 5 meacutegabits Nous seacuteparons nosclients en creacuteant deux adresses IP virtuelles sur notre serveur

ip address add 1881771661 dev eth0 ip address add 1881771662 dev eth0

Cest agrave vous dassocier les diffeacuterents serveurs agrave la bonne adresse IP Tous les deacutemons courants supportent cela

Nous pouvons tout dabord attacher une mise en file dattente CBQ agrave eth0

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

Nous creacuteons ensuite les classes pour nos clients

tc class add dev eth0 parent 10 classid 11 cbq bandwidth 10Mbit rate

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

84 Chapitre 15 Recettes de cuisine

2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21 tc class add dev eth0 parent 10 classid 12 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 Quest-ce quundiviseur FIXME Un diviseur est lieacute agrave une table de hachage et au nombre deseaux -ahu tc filter add dev eth0 parent 10 protocol ip prio 5 handle 1 u32 divisor 1 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771661 flowid 11 tc filter add dev eth0 parent 10 prio 5 u32 match ip src 1881771662 flowid 12

Et voilagrave qui est fait

FIXME Pourquoi pas un filtre token bucket Y a t-il un retour par deacutefaut agrave pfifoamplowbarfast quelquepart

Proteacuteger votre machine des inondations SYN

Dapregraves la documentation iproute dAlexey adapteacutee agrave netfilter Si vous utilisez ceci prenez garde dajuster lesnombres avec des valeurs raisonnables pour votre systegraveme

Si vous voulez proteacuteger tout un reacuteseau oubliez ce script qui est plus adapteacute agrave un hocircte seul

Il apparaicirct que la toute derniegravere version de loutil iproute2 est neacutecessaire pour que ceci fonctionne avec lenoyau 240

binsh -x script simple utilisant les capaciteacutes 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 beacuteneacuteficier de puissantes fonctionnaliteacutes sur les SYN chemins vers les divers utilitaires Agrave changer en fonction des vocirctresTC=sbintcIP=sbinipIPTABLES=sbiniptablesINDEV=eth2 marque tous les paquets SYN entrant agrave travers $INDEV avec la valeur 1 $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn -j MARK --set-mark 1 installe la file dattente ingress sur linterface associeacutee $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 agrave 3 par seconde (pas vraiment utile mais sert agrave montrer ce point -JHS

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Faire tourner plusieurs sites avec diffeacuterentes SLA(autorisations) 85

$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 $INDEVecho ---- Class parameters Ingress ----------$TC class ls dev $INDEVecho ---- filter parameters Ingress ----------$TC filter ls dev $INDEV parent ffff

supprime la file dattente ingress $TC qdisc del $INDEV ingress

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service

Reacutecemment les attaques distribueacutees de deacuteni de service sont devenues une nuisance importante sur InternetEn filtrant proprement et en limitant le deacutebit de votre reacuteseau vous pouvez agrave la fois eacuteviter de devenir victimeou source de ces attaques

Vous devriez filtrer vos reacuteseaux de telle sorte que vous nautorisiez pas les paquets avec une adresse IP sourcenon locale agrave quitter votre reacuteseau Cela empecircche les utilisateurs denvoyer de maniegravere anonyme descochonneries sur Internet

La limitation de deacutebit peut faire encore mieux comme vu plus haut Pour vous rafraicircchir la meacutemoire revoicinotre diagramme ASCII

[Internet] ---ltE3 T3 nimporte quoigt--- [routeur Linux] --- [Bureau+FAI] eth1 eth0

Nous allons dabord configurer les parties preacute-requises

tc qdisc add dev eth0 root handle 10 cbq bandwidth 10Mbit avpkt 1000 tc class add dev eth0 parent 100 classid 101 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 deacuteterminercombien de trafic ICMP vous voulez autoriser Vous pouvez reacutealiser des mesures avec tcpdump en eacutecrivantles reacutesultats dans un fichier pendant un moment et regarder combien de paquets ICMP passent par votrereacuteseau Ne pas oublier daugmenter la longueur du snapshot Si la mesure nest pas possible vous pouvezconsacrer par exemple 5amppercnt de votre bande passante disponible Configurons notre classe

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

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

86 Proteacuteger votre machine des inondations SYN

Cela limite le deacutebit agrave 100 Kbits sur la classe Maintenant nous avons besoin dun filtre pour assigner le traficICMP agrave cette classe

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

Donner la prioriteacute au trafic interactif

Si beaucoup de donneacutees arrivent agrave votre lien ou en partent et que vous essayez de faire de la maintenance viatelnet ou ssh cela peut poser problegraveme dautres paquets bloquent vos frappes clavier Cela ne serait-il pasmieux si vos paquets interactifs pouvaient se faufiler dans le trafic de masse Linux peut faire cela pour vous

Comme preacuteceacutedemment nous avons besoin de manipuler le trafic dans les deux sens Evidemment celamarche mieux sil y a des machines Linux aux deux extreacutemiteacutes du lien bien que dautres UNIX soientcapables de faire la mecircme chose Consultez votre gourou local SolarisBSD pour cela

Le gestionnaire standard pfifoamplowbarfast a trois bandes diffeacuterentes Le trafic de la bande 0 est transmis enpremier le trafic des bandes 1 et 2 eacutetant traiteacute apregraves Il est vital que votre trafic interactif soit dans la bande 0 Ce qui suit est adapteacute du (bientocirct obsolegravete) Ipchains-HOWTO

Il y a quatre bits rarement utiliseacutes dans len-tecircte IP appeleacutes bits de Type de Service (TOS) Ils affectent lamaniegravere dont les paquets sont traiteacutes Les quatre bits sont Deacutelai Minimum Deacutebit Maximum FiabiliteacuteMaximum et Coucirct Minimum Seul un de ces bits peut ecirctre positionneacute Rob van Nieuwkerk lauteur ducode TOS-mangling dans ipchains le configure comme suit

Le Deacutelai Minimum est particuliegraverement important pour moi Je lepositionne agrave 1 pour les paquets interactifs sur mon routeur (Linux)qui envoie le trafic vers lexteacuterieur Je suis derriegravere un modem agrave336 Kbps Linux reacutepartit les paquets dans trois filesdattente De cette maniegravere jobtiens des performances acceptablespour le trafic interactif tout en teacuteleacutechargeant en mecircme temps

Lutilisation la plus commune est de configurer les connexions telnet et ftp agrave Deacutelai Minimum et les donneacuteesFTP agrave Deacutebit 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 donneacutees venant dun telnet exteacuterieur vers votre ordinateur local Danslautre sens ccedila se fait tout seul telnet ssh et consorts configurent le champ TOS automatiquement pour lespaquets sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limiter le deacutebit ICMP pour empecirccher les deacutenis de service 87

Si vous avez un client incapable de le faire vous pouvez toujours le faire avec netfilter Sur votre machinelocale

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

Cache web transparent utilisant netfilter iproute2 ipchains etsquid

Cette section a eacuteteacute envoyeacutee par le lecteur Ram Narula de Internet for Education (Internet pour leacuteducation)(Thailande)

La technique habituelle pour reacutealiser ceci dans Linux est probablement lutilisation dipchains APRES secirctreassureacute que le trafic sortant du port 80 (web) est routeacute agrave travers le serveur faisant fonctionner squid

Il y a 3 meacutethodes communes pour ecirctre sucircr que le trafic sortant du port 80 est routeacute vers le serveur faisantfonctionner squid et une quatriegraveme est introduite ici

La passerelle le faitSi vous pouvez dire agrave votre passerelle que les paquets sortants agrave destination du port 80 doivent ecirctreenvoyeacutes vers ladresse IP du serveur squid

MAIS

Ceci amegravenerait une charge suppleacutementaire sur le routeur et des routeurs commerciaux peuvent mecircmene pas supporter ceci

Utiliser un commutateur Couche 4Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problegraveme

MAIS

Le coucirct pour un tel eacutequipement est en geacuteneacuteral tregraves eacuteleveacute Typiquement un commutateur couche 4coucircte normalement plus cher quun serveur classique + un bon serveur linux

Utiliser le serveur cache comme passerelle reacuteseauVous pouvez forcer TOUT le trafic agrave travers le serveur cache

MAIS

Ceci est plutocirct risqueacute dans la mesure ougrave Squid utilise beaucoup de ressources CPU ce qui peutconduire agrave une baisse des performances de tout le reacuteseau Le serveur peut eacutegalement ne plusfonctionner et personne sur le reacuteseau ne pourra acceacuteder agrave Internet si cela a lieu

Routeur Linux+NetFilterEn utilisant Netfilter une autre technique peut ecirctre impleacutementeacutee Celle-ci consiste agrave utiliser Netfilterpour marquer les paquets agrave destination du port 80 et agrave utiliser iproute2 pour router les paquetsmarqueacutes vers le serveur Squid

|----------------|

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

88 Donner la prioriteacute au trafic interactif

| Impleacutementation ||----------------|

Adresses utiliseacutees 10001 naret (serveur NetFilter) 10002 silom (serveur Squid) 10003 donmuang (routeur connecteacute agrave Internet) 10004 kaosarn (un autre serveur sur le reacuteseau) 10005 RAS 1000024 reacuteseau principal 1000019 reacuteseau total

|----------------||Scheacutema du reacuteseau||----------------|

Internet|donmuang|------------hubcommutateur----------| | | |naret silom kaosarn RAS etc

Premiegraverement faire en sorte que tout le trafic passe par naret en eacutetant sucircr que cest la passerelle par deacutefaut agravelexception de silom La passerelle par deacutefaut de silom doit ecirctre donmuang (10003) ou ceci creacuteerait uneboucle du trafic web

(Tous les serveurs sur mon reacuteseau avaient 10001 comme passerelle par deacutefaut qui eacutetait lancienne adresse durouteur donmuang Cela ma conduit agrave attribuer 10003 comme adresse IP agrave donmuang et agrave donner 10001comme adresse IP agrave naret)

Silom------configurer squid et ipchains

Pour la configuration du serveur Squid sur silom soyez sucircr que celui-ci supporte le cacheproxy transparent(transparent cachingproxying) Le port par deacutefaut pour squid est en geacuteneacuteral 3128 Tout le trafic pour le port80 doit donc ecirctre redirigeacute localement vers le port 3128 Ceci peut ecirctre fait en utilisant ipchains comme suit

silom ipchains -N allow1silom ipchains -A allow1 -p TCP -s 1000019 -d 00 80 -j REDIRECT 3128silom ipchains -I input -j allow1

Ou avec netfilter

silom iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(note vous pouvez avoir eacutegalement dautres entreacutees)

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Cache web transparent utilisant netfilter iproute2 ipchains etsquid 89

Pour plus dinformations sur la configuration du serveur Squid se reacutefeacuterer agrave la page FAQ Squid surhttpsquidnlanrnet)

Soyez sucircr que lip forwarding est actif sur votre serveur et que la passerelle par deacutefaut pour ce serveur estdonmuand (PAS naret)

Naret------ configurer squid et ipchains - deacutesactiver les messages icmp REDIRECT (si besoin)

Marquer les paquets agrave destination du port 80 avec la valeur 2

naret iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 2

1

Configurer iproute2 de sorte quil route les paquets avec la marque 2 vers silom

naret echo 202 wwwout gtgt etciproute2rt_tablesnaret ip rule add fwmark 2 table wwwoutnaret ip route add default via 10002 dev eth0 table wwwoutnaret ip route flush cache

Si donmuang et naret sont sur le mecircme reacuteseau naret ne doit pas envoyer de messages icmpREDIRECT Ceux-ci doivent ecirctre deacutesactiveacutes par

naret echo 0 gt procsysnetipv4confallsend_redirectsnaret echo 0 gt procsysnetipv4confdefaultsend_redirectsnaret echo 0 gt procsysnetipv4confeth0send_redirects

2

La configuration est termineacutee veacuterifions-la

Sur naret

naret iptables -t mangle -LChain PREROUTING (policy ACCEPT)target prot opt source destination MARK tcp -- anywhere anywhere tcp dptwww MARK set 0x2

Chain OUTPUT (policy ACCEPT)target prot opt source destination

naret ip rule ls0 from all lookup local 32765 from all fwmark 2 lookup wwwout 32766 from all lookup main

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

90 Cache web transparent utilisant netfilter iproute2 ipchains etsquid

32767 from all lookup default

naret ip route list table wwwoutdefault via 2031142248 dev eth0

naret ip route 10001 dev eth0 scope link 1000024 dev eth0 proto kernel scope link src 100011270008 dev lo scope link default via 10003 dev eth0

(soyez sucircr que silom appartiens agrave lune des lignes ci-dessus Dans ce cascest la ligne avec 1000024)

|------||-FAIT-||------|

Scheacutema du trafic apregraves limpleacutementation

|---------------------------------------||Scheacutema du trafic apregraves limpleacutementation||---------------------------------------|

INTERNET||-----------------routeur donmuang--------------------- |||| || |||| ||naret silom ||trafic agrave destination du port 80=====gt(cache) || || |||| ===================================kaosarn RAS etc

Noter que le reacuteseau est asymeacutetrique car il y a un saut suppleacutementaire sur le chemin sortant

Voici le cheminement dun paquet traversant le reacuteseau de kaosarn allant etvenant dInternet

Pour le trafic webhttp requecircte http kaosarn-gtnaret-gtsilom-gtdonmuang-gtInternetreacuteponse http de Internet-gtdonmuang-gtsilom-gtkaosarn

Pour les requecirctes non webhttp (par ex telnet) donneacutees sortantes kaosarn-gtnaret-gtdonmuang-gtInternetdonneacutees entrantes dInternet-gtdonmuang-gtkaosarn

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Scheacutema du trafic apregraves limpleacutementation 91

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen configurant un MTU par routes

Pour envoyer de grande quantiteacute de donneacutees Internet fonctionne geacuteneacuteralement mieux quand de grandspaquets sont utiliseacutes Chaque paquet implique une deacutecision de routage Le transfert dun fichier de 1Mo peutentraicircner soit lenvoi de 700 paquets en maximisant la taille des paquets soit de 4000 paquets en utilisant laplus petite taille possible

Cependant tous les eacuteleacutements dInternet ne supportent pas une capaciteacute utile (payload) de 1460 octets parpaquet Il est de plus neacutecessaire dessayer de trouver le plus grand paquet qui conviendra le mieux dans lebut doptimiser la connexion

Ce processus est appeleacute Deacutecouverte du MTU de chemin ougrave MTU signifie Maximum Transfert Unit (Uniteacutede transfert maximum)

Quand un routeur rencontre un paquet qui est trop gros pour ecirctre envoyeacute en un seul morceau ET que celui-cia eacuteteacute marqueacute avec le bit Dont Fragment il retourne un message ICMP indiquant quil a eacuteteacute obligeacute de rejeterle paquet Lhocircte eacutemetteur prend acte de cette indication en envoyant des paquets plus petits et par iteacuterationpeut trouver la taille optimum du paquet pour une connexion agrave travers un chemin particulier

Ceci fonctionnait correctement jusquagrave ce que Internet soit deacutecouvert par des vandales qui sefforcent deperturber les communications Ceci a conduit les administrateurs agrave soit bloquer soit mettre en forme le traficICMP lors dessais malencontreux dans le but dameacuteliorer la seacutecuriteacute ou la robustesse de leurs servicesInternet

La conseacutequence maintenant est que la deacutecouverte du MTU de chemin fonctionne de moins en moins bien eteacutechoue pour certaines routes conduisant agrave deacutetranges sessions TCPIP qui tombent peu de temps apregraves

Bien que je naie pas de preuves de ceci deux sites avec qui javais lhabitude davoir des problegravemes faisaientfonctionner agrave la fois Alteon et Acedirectors avant les systegravemes affecteacutes Peut-ecirctre quelquun avec plus deconnaissances peut fournir des indices quant agrave la raison de ce qui se passe

Solution

Quand vous rencontrez des sites qui preacutesentent ce problegraveme vous pouvez deacutesactiver la deacutecouverte du MTUde chemin en le configurant manuellement Koos van den Hout a agrave peu pregraves eacutecrit

Le problegraveme suivant jai configureacute le mtu et mru de ma ligne deacutedieacutee fonctionnant avec ppp agrave296 dans la mesure ougrave le deacutebit est de seulement 33k6 et que je ne peux pas influencer la filedattente de lautre cocircteacute A 296 la reacuteponse agrave lappui dune touche intervient dans un deacutelairaisonnable

Et de mon cocircteacute jai un routeur avec translation dadresse (masquage) fonctionnant (bien sucircr)sous Linux

Reacutecemment jai seacutepareacute le serveur du routeur de sorte que la plupart des applicationsfonctionnent sur une machine diffeacuterente de celle qui reacutealise le routage

Jai alors eu des problegravemes en me connectant sur lirc Grosse panique Je vous assure quecertains essais trouvaient que jeacutetais connecteacute agrave lirc me montrant mecircme comme connecteacute surlirc mais je ne recevais pas le motd (message of the day message du jour) de lirc Jai

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

92Circonvenir aux problegravemes de la deacutecouverte du MTU de chemin en configurant un MTU par routes

veacuterifieacute ce qui pouvait ecirctre erroneacute et ai noteacute que javais deacutejagrave eu des soucis lieacutes au MTU encontactant certains sites web Je navais aucun souci pour les atteindre quand le MTU eacutetait agrave1500 le problegraveme napparaissant que lorsque le MTU eacutetait configureacute agrave 296 Puisque lesserveurs irc bloquent tout le trafic dont il nont pas besoin pour leurs opeacuterations immeacutediatesils bloquent aussi licmp

Jai manoeuvreacute pour convaincre les responsables dun serveur web que ceci eacutetait la cause dunproblegraveme mais les responsables du serveur irc navaient pas lintention de reacuteparer ceci

Donc je devais ecirctre sucircr que le trafic masqueacute sortant partait avec le mtu faible du lien externeMais je voulais que le trafic ethernet local ait le MTU normal (pour des choses comme letrafic nfs)

Solution

ip route add default via 10001 mtu 296

(10001 eacutetant ma passerelle par deacutefaut ladresse interne de mon routeur masquant)

En geacuteneacuteral il est possible doutrepasser la deacutecouverte du MTU de chemin en configurant des routesspeacutecifiques Par exemple si seuls certains reacuteseaux posent problegravemes ceci devrait aider

ip route add 1959696024 via 10001 mtu 1000

Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

Comme expliqueacute au-dessus la deacutecouverte du MTU de chemin ne marche pas aussi bien que cela devrait ecirctreSi vous savez quun saut de votre reacuteseau a un MTU limiteacute (lt1500) vous ne pouvez pas compter sur ladeacutecouverte du MTU de chemin pour le deacutecouvrir

Outre le MTU il y a encore un autre moyen de configurer la taille maximum du paquet par ce qui est appeleacutele MSS (Maximum Segment Size Taille Maximum du Segment) Cest un champ dans les options TCP dupaquet SYN

Les noyaux Linux reacutecents et quelques pilotes de peacuteripheacuterique PPPoE (notamment lexcellent RoaringPenguin) impleacutementent la possibiliteacute de fixer le MSS

Le bon cocircteacute de tout ceci est que en positionnant la valeur MSS vous dicirctes agrave lhocircte distant de maniegravereeacutequivoque nessaie pas de menvoyer des paquets plus grands que cette valeur Aucun trafic ICMP nestneacutecessaire pour faire fonctionner cela

Malheureusement cest de la bidouille eacutevidente -- ccedila deacutetruit la proprieacuteteacute laquobout-en-boutraquo de la connexion enmodifiant les paquets Ayant dit cela nous utilisons cette astuce dans beaucoup dendroit et cela fonctionnecomme un charme

Pour que tout ceci fonctionne vous aurez besoin au moins de iptables-121a et de Linux 243 ou plus Laligne de commande basique est

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --clamp-mss-to-pmtu

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Solution 93

Ceci calcule le MSS approprieacute pour votre lien Si vous vous sentez courageux ou que vous pensez ecirctre lemieux placeacute pour juger vous pouvez aussi faire quelque chose comme ceci

iptables -A FORWARD -p tcp --tcp-flags SYNRST SYN -j TCPMSS --set-mss 128

Ceci configure le MSS du paquet SYN agrave 128 Utilisez ceci si vous avez de la voix sur IP (VoIP) avec de touspetits paquets et de grands paquets http qui provoquent des coupures dans vos communications vocales

Le Conditionneur de Trafic Ultime Faible temps de latenceTeacuteleacutechargement vers lamont et laval rapide

Note ce script a reacutecemment eacuteteacute mis agrave niveau et il ne marchait avant quavec les clients Linux de votrereacuteseau Vous devriez donc le mettre agrave jour si vous avez des machines Windows ou des Macs dans votrereacuteseau qui neacutetaient pas capables de teacuteleacutecharger plus rapidement pendant que dautres eacutetaient en train deteacuteleacutecharger vers lamont

Jai essayeacute de creacuteer le Saint Graal

Maintenir agrave tout moment un faible temps de latence pour le trafic interactifCeci signifie que la reacutecupeacuteration ou la transmission de fichiers ne doivent pas perturber SSH ou mecircmetelnet Ceci est la chose la plus importante car mecircme un temps de latence de 200ms est importantpour pouvoir travailler confortablement

Autoriser le surf agrave des vitesses raisonnables pendant que lon teacuteleacutecharge vers lamont ou vers lavalMecircme si http est un trafic de masse les autres trafics ne doivent pas trop le noyer

Etre sucircr que le teacuteleacutechargement vers lamont ne va pas faire du tort aux teacuteleacutechargements vers laval et aux autreseacuteleacutements autour

Le principal pheacutenomegravene observeacute est la forte reacuteduction de la vitesse de teacuteleacutechargement vers lavalquand il y a du trafic montant

Il savegravere que tout ceci est possible au prix dune minuscule reacuteduction de la bande passante La preacutesence degrandes files dattente sur les dispositifs daccegraves domestiques comme le cacircble ou les modems DSL expliquepourquoi les teacuteleacutechargements vers lamont vers laval et ssh se peacutenalisent mutuellement

La prochaine partie explique en profondeur ce qui provoque les retards et comment nous pouvons lescorriger Vous pouvez sans danger la passer et aller directement au script si vous vous fichez de la faccedilon dontla magie opegravere

Pourquoi cela ne marche t-il pas bien par deacutefaut

Les FAI savent que leurs performances ne sont seulement jugeacutees que sur la vitesse agrave laquelle les personnespeuvent teacuteleacutecharger vers laval En plus de la bande passante disponible la vitesse de teacuteleacutechargement estlourdement influenceacutee par la perte des paquets qui gecircne seacuterieusement les performances de TCPIP Lesgrandes files dattente peuvent aider agrave preacutevenir la perte des paquets et augmenter les teacuteleacutechargements LesFAI configurent donc de grandes files dattente

Ces grandes files dattente endommagent cependant linteractiviteacute Une frappe doit dabord parcourir la filedattente du flux montant ce qui peut prendre plusieurs secondes et aller jusquagrave lhocircte distant Elle est alors

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

94Circonvenir aux problegravemes de la deacutecouverte du MTU de cheminen imposant le MSS (pour les utilisateurs de lADSL du cacircblede PPPoE amp PPtP)

traiteacutee conduisant agrave un paquet de retour qui doit traverser la file dattente du flux descendant localiseacutee chezvotre FAI avant quelle napparaisse sur leacutecran

Cet HOWTO nous enseigne plusieurs maniegraveres de modifier et traiter la file dattente mais malheureusementtoutes les files dattente ne nous sont pas accessibles Les files dattente du FAI sont sans limites et la filedattente du flux montant reacuteside probablement dans votre modem cacircble ou votre peacuteripheacuterique DSL Il se peutque vous soyez capable ou non de le configurer La plupart du temps ce ne sera pas le cas

Et apregraves Etant donneacute que nous ne pouvons pas controcircler ces files dattente elles doivent disparaicirctre et ecirctretransfeacutereacutees sur notre routeur Linux Heureusement ceci est possible

Limiter la vitesse de teacuteleacutechargement vers lamont (upload)En limitant notre vitesse de teacuteleacutechargement vers lamont agrave une vitesse leacutegegraverement plus faible que lavitesse reacuteelle disponible il ny a pas de files dattente mises en place dans notre modem La filedattente est maintenant transfeacutereacutee vers Linux

Limiter la vitesse de teacuteleacutechargement vers laval (download)Ceci est leacutegegraverement plus ruseacute dans la mesure ougrave nous ne pouvons pas vraiment influencer la vitesse agravelaquelle Internet nous envoie les donneacutees Nous pouvons cependant rejeter les paquets qui arriventtrop vite ce qui provoque le ralentissement de TCPIP jusquau deacutebit deacutesireacute Comme nous ne voulonspas supprimer inutilement du trafic nous configurons une vitesse de rafale (burst) plus grande

Maintenant que nous avons fait ceci nous avons eacutelimineacute totalement la file dattente du flux descendant (saufpour de courtes rafales de donneacutees) et obtenu la possibiliteacute de geacuterer la file dattente du flux montant avectoute la puissance Linux

Il nous reste agrave nous assurer que le trafic interactif se retrouve au deacutebut de la file dattente du flux montantPour ecirctre sucircr que le flux montant ne va pas peacutenaliser le flux descendant nous deacuteplaccedilons eacutegalement les paquetsACK au deacutebut de la file dattente Cest ce qui provoque normalement un eacutenorme ralentissement quand dutrafic de masse est geacuteneacutereacute dans les deux sens Les paquets ACK du trafic descendant rentrent en concurrenceavec le trafic montant et sont donc ralentis

Si nous avons fait tout ceci nous obtenons les mesures suivantes en utilisant lexcellente connexion ADSL dexs4all en Hollande

Temps de latence de base round-trip minavgmax = 144171217 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers laval round-trip minavgmax = 560957365864 ms

Sans le conditionneur de trafic lors dun teacuteleacutechargement vers lamont round-trip minavgmax = 204142332124276 ms

Avec le conditionneur lors dun teacuteleacutechargement vers lamont agrave 220kbits round-trip minavgmax = 157518799 ms

Avec le conditionneur lors dun teacuteleacutechargement vers laval agrave 850kbits round-trip minavgmax = 204469740 ms

Lors dun teacuteleacutechargement vers lamont les teacuteleacutechargements vers laval seffectuent agrave environ80 de la vitesse maximale disponible et 90 pour les teacuteleacutechargements verslamont Le temps de latence augmente alors jusquagrave 850 ms je nai pas encoredeacutetermineacute la raison de ce pheacutenomegravene

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Pourquoi cela ne marche t-il pas bien par deacutefaut 95

Ce que vous pouvez attendre de ce script deacutepend largement de votre vitesse de lien reacuteelle Quand vousteacuteleacutechargez vers lamont agrave pleine vitesse il y aura toujours un paquet devant votre frappe de clavier Ceci estla limite basse de votre temps de latence Pour la calculer divisez votre MTU par la vitesse du flux montantLes valeurs classiques seront un peu plus eacuteleveacutees que ccedila Diminuez votre MTU pour un meilleur effet

Voici deux versions de ce script une avec lexcellent HTB de Devik et lautre avec CBQ qui est preacutesent danschaque noyau Linux contrairement agrave HTB Les deux ont eacuteteacute testeacutes et marchent correctement

Le script (CBQ)

Marche avec tous les noyaux A linteacuterieur du gestionnaire de mise en file dattente CBQ nous placcedilons deuxSFQ pour ecirctre sucircr que de multiples flux de masse ne vont pas mutuellement se peacutenaliser

Le trafic descendant est reacuteglementeacute en utilisant un filtre tc contenant un Token Bucket Filter

Vous pourriez ameacuteliorer ce script en ajoutant bounded aux lignes qui deacutemarrent avec tc class add classid120 Si vous avez diminueacute votre MTU diminuez aussi les nombres allot amp avpkt

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobitsDOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe CBQ agrave la racine

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence Classe principale

tc class add dev $DEV parent 1 classid 11 cbq rate $UPLINKkbit allot 1500 prio 5 bounded isolated

classe de prioriteacute supeacuterieure 110

tc class add dev $DEV parent 11 classid 110 cbq rate $UPLINKkbit allot 1600 prio 1 avpkt 1000

la classe par deacutefaut et pour le trafic de masse 120 Reccediloit leacutegegraverement moins que le trafic et a une prioriteacute plus faible bulk and default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 cbq rate $[9$UPLINK10]kbit allot 1600 prio 2 avpkt 1000

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

96 Le script (CBQ)

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

Deacutemarrage des filtres le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110 ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

tc filter add dev $DEV parent 1 protocol ip prio 13 u32 match ip dst 00000 flowid 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacuteelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Le script (HTB)

Le script suivant nous permet datteindre tous nos buts en utilisant la merveilleuse file dattente HTB Voir lechapitre correspondant Cela vaut la peine de mettre agrave jour votre noyau

binbash

La configuration ultime pour votre connexion Internet domestique Configurez les valeurs suivantes avec des valeurs leacutegegraverement infeacuterieures que vos vitesses de flux montant et descendant Exprimeacute en kilobits

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Le script (HTB) 97

DOWNLINK=800UPLINK=220DEV=ppp0

Nettoie les gestionnaires de sortie et dentreacutes cache les erreurstc qdisc del dev $DEV root 2gt devnull gt devnulltc qdisc del dev $DEV ingress 2gt devnull gt devnull

Flux montant (uplink)

installe HTB agrave la racine le trafic ira par deacutefaut vers 120

tc qdisc add dev $DEV root handle 1 htb default 20

Le trafic est mis en forme agrave une vitesse de $UPLINK Ceci eacutevite deacutenormes files dattente dans votre modem DSL qui peacutenalisent le temps de latence

tc class add dev $DEV parent 1 classid 11 htb rate $UPLINKkbit burst 6k

la classe de haute prioriteacute 110

tc class add dev $DEV parent 11 classid 110 htb rate $UPLINKkbit burst 6k prio 1

bulk amp default class 120 - gets slightly less traffic and a lower priority

tc class add dev $DEV parent 11 classid 120 htb rate $[9$UPLINK10]kbit burst 6k prio 2

Les deux sont geacutereacutees par SFQ tc qdisc add dev $DEV parent 110 handle 10 sfq perturb 10tc qdisc add dev $DEV parent 120 handle 20 sfq perturb 10

le bit Deacutelai Minimum du champ TOS (ssh PAS scp) est dirigeacute vers 110 tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 110

ICMP (ip protocol 1) est dirigeacute vers la classe interactive 110 de telle sorte que nous pouvons reacutealiser des mesures et impressionner nos amis tc filter add dev $DEV parent 10 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 110

Pour acceacuteleacuterer les teacuteleacutechargements vers laval lors de la preacutesence dun flux montant les paquets ACK sont placeacutes dans la classe interactive

tc filter add dev $DEV parent 1 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 110

Le reste est consideacutereacute non-interactif cad de masse et fini dans 120

Flux descendant (downlink) Ralentir le flux descendant agrave une valeur leacutegegraverement plus faible que votre vitesse reacutelle de maniegravere agrave eacuteviter la mise en file dattente chez notre FAI Faites des tests pour voir la vitesse maximum agrave laquelle vous pouvez le configurer Les FAI ont tendance agrave avoir deacutenormes files dattente pour sassurer de la rapiditeacute des gros teacuteleacutechargements

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

98 Le script (HTB)

attache la reacuteglementation dentreacutee (ingress policer)

tc qdisc add dev $DEV handle ffff ingress

Filtre tout (00000) rejette tout ce qui arrive trop rapidement

tc filter add dev $DEV parent ffff protocol ip prio 50 u32 match ip src 00000 police rate $DOWNLINKkbit burst 10k drop flowid 1

Si vous voulez que ce script soit exeacutecuteacute par ppp agrave la connexion copiez-le dans etcpppip-upd

Si les deux derniegraveres lignes conduisent agrave une erreur mettez agrave jour loutil tc avec la derniegravere version

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau

Bien que ceci soit deacutecrit en deacutetail ailleurs et dans nos pages de manuel cette question est souvent poseacuteeHeureusement il y a une reacuteponse simple qui ne neacutecessite pas la compreacutehension complegravete du controcircle de trafic

Ce script de trois lignes met en place la limitation du deacutebit

tc qdisc add dev $DEV root handle 1 cbq avpkt 1000 bandwidth 10mbit

tc class add dev $DEV parent 1 classid 11 cbq rate 512kbit allot 1500 prio 5 bounded isolated

tc filter add dev $DEV parent 1 protocol ip prio 16 u32 match ip dst 195969697 flowid 11

La premiegravere ligne installe un gestionnaire de mise en file dattente baseacute sur des classes sur votre interface etindique au noyau que pour ses calculs il peut la consideacuterer comme une interface agrave 10 Mbitss Cependant ilny aura pas de grands dommages si vous indiquez une valeur erroneacutee Donner la vraie valeur permettradavoir des choses plus preacutecises

La seconde ligne creacutee une classe de 512kbits avec des valeurs par deacutefaut raisonnables Pour les deacutetails voirles pages de manuel cbq et Chapitre 9gt

La derniegravere ligne indique quel trafic devra passer par la classe reacutealisant la mise en forme Le trafic qui nestseacutelectionneacute par cette regravegle nest PAS mis en forme Pour avoir des seacutelections plus compliqueacutees (sous-reacuteseauxports sources ou de destinations) voir la section intituleacutee Toutes les commandes de filtres dont vous aureznormalement besoin dans Chapitre 9gt

Si vous avez changeacute quelque chose et que vous vouliez recharger le script exeacutecutez la commande tc qdisc deldev $DEV root pour supprimer votre configuration actuelle

Le script peut ecirctre ameacutelioreacute en ajoutant une derniegravere ligne optionnelle tc qdisc add dev $DEV parent 11 sfqperturb 10 Voir la section intituleacutee Mise en file dattente stochastiquement eacutequitable (Stochastic FairnessQueueing) dans Chapitre 9gt pour savoir ce que cela fait

Exemple dune solution de translation dadresse avec de la QoS

Je mappelle Pedro Larroy

ltpiotrmemberfsforggt

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Limitation du deacutebit pour un hocircte ou un masque de sous-reacuteseau 99

Je deacutecris ici une configuration dans le cas ougrave de nombreux utilisateurs seraient connecteacutes agrave Internet agrave traversun routeur Linux qui possegravede une adresse publique et qui reacutealise de la translation dadresse (NAT) Jutilisecette configuration QoS pour fournir laccegraves agrave 198 utilisateurs dans une citeacute universitaire dans laquelle je vis etougrave jadministre le reacuteseau Les utilisateurs sont de gros consommateurs de programmes peer to peer et uncontrocircle de trafic correct est neacutecessaire Jespegravere que ceci servira dexemples pratiques agrave tous les lecteursinteacuteresseacutes par le lartc

Dans un premier temps la configuration sera reacutealiseacutee pas agrave pas et agrave la fin jexpliquerai comment rendre ceprocessus automatique au deacutemarrage Le reacuteseau utiliseacute pour cet exemple est un reacuteseau local connecteacute agraveInternet agrave travers un routeur Linux ayant une adresse publique Lajout dun ensemble de regravegles iptablespermettrait facilement lextension agrave plusieurs adresses IP publiques Les eacuteleacutements suivants sont neacutecessaires

Linux 2418 ou une version du noyau supeacuterieure installeacuteeSi vous utilisez le noyau 2418 vous devrez appliquer la mise agrave jour HTB

iprouteSoyez eacutegalement sucircr que le binaire tc est compatible avec HTB Un binaire preacute compileacute estdistribueacute avec HTB

iptables

Commenccedilons loptimisation de cette rare bande passante

Tout dabord nous allons configurer des gestionnaires de mise en file dattente dans lesquels nous allonsclassifier le trafic Nous creacuteons un gestionnaire htb composeacute de 6 classes avec des prioriteacutes croissantes Nousavons alors des classes qui obtiendront le deacutebit alloueacute et qui pourront de plus utiliser la bande passante dontles autres classes nont pas besoin Rappelons que les classes de plus hautes prioriteacutes (correspondant auxnombres prio les plus faibles) obtiendront en premier lexcegraves de bande passante Notre liaison ADSL agrave un fluxdescendant de 2Mbitss et un flux montant de 300 kbitss Jutilise un deacutebit de seuil (ceil rate) de 240 kbitsscar au-delagrave de cette limite les problegravemes de latence commence agrave prendre de lampleur Ceci est ducirc auremplissage dun tampon placeacute quelque part entre nous et les hocirctes distants

Ajuster la variable CEIL agrave 75 de votre bande passante montante maximum et ajuster le nom de linterface(eth0 dans la suite) agrave celle qui a ladresse publique Internet Exeacutecutez ce qui suit dans un shell root

CEIL=240 tc qdisc add dev eth0 root handle 1 htb default 15 tc class add dev eth0 parent 1 classid 11 htb rate $CEILkbit ceil $CEILkbit tc class add dev eth0 parent 11 classid 110 htb rate 80kbit ceil 80kbit prio 0 tc class add dev eth0 parent 11 classid 111 htb rate 80kbit ceil $CEILkbit prio 1 tc class add dev eth0 parent 11 classid 112 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 113 htb rate 20kbit ceil $CEILkbit prio 2 tc class add dev eth0 parent 11 classid 114 htb rate 10kbit ceil $CEILkbit prio 3 tc class add dev eth0 parent 11 classid 115 htb rate 30kbit ceil $CEILkbit prio 3 tc qdisc add dev eth0 parent 112 handle 120 sfq perturb 10 tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Nous avons juste creacuteeacute une arborescence htb avec un seul niveau de profondeur Quelque chose comme ceci

+-----------+ | racine 1 | +-----------+ | +---------------------------------------+ | classe 11 | +---------------------------------------+ | | | | | |

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

100 Exemple dune solution de translation dadresse avec de la QoS

+----+ +----+ +----+ +----+ +----+ +----+ |110| |111| |112| |113| |114| |115| +----+ +----+ +----+ +----+ +----+ +----+

classid 110 htb rate 80kbit ceil 80kbit prio 0Ceci est la classe de prioriteacute la plus eacuteleveacutee Les paquets de cette classe auront le plus faible deacutelai etobtiendront en premier lexcegraves de bande passante Cest donc une bonne ideacutee de limiter le deacutebit deseuil de cette classe Nous enverrons dans cette classe les paquets qui ont un avantage agrave avoir unfaible deacutelai tel que le trafic interactif ssh telnet dns quake3 irc et les paquets avec le bit SYNactiveacute

classid 111 htb rate 80kbit ceil $CEILkbit prio 1Nous avons ici la premiegravere classe dans laquelle nous commenccedilons agrave mettre du trafic de masse Dansmon exemple jai le trafic provenant de mon serveur web local et les requecirctes pour les pages web respectivement le port source 80 et le port destination 80

classid 112 htb rate 20kbit ceil $CEILkbit prio 2Dans cette classe je mettrai le trafic configureacute avec le champ TOS Deacutebit Maximum activeacute ainsique le reste du trafic provenant des processus locaux de mon routeur vers Internet Les classessuivantes ne recevront donc que du trafic routeacute par cette machine

classid 113 htb rate 20kbit ceil $CEILkbit prio 2Cette classe est pour le trafic des autres machines NATeacutees (NdT beacuteneacuteficiant du service detranslation dadresse) qui ont besoin dune prioriteacute plus grande dans leur trafic de masse

classid 114 htb rate 10kbit ceil $CEILkbit prio 3Le trafic mail (SMTP pop3) et les paquets configureacutes avec le champ TOS Coucirct Minimum serontenvoyeacutes dans cette classe

classid 115 htb rate 30kbit ceil $CEILkbit prio 3Finalement nous avons ici le trafic de masse des machines NATeacutees se trouvant derriegravere le routeurLes paquets lieacutes agrave kazaa edonkey et autres iront ici pour ne pas interfeacuterer avec les autres services

Classification des paquets

Nous avons configureacute le gestionnaire de mise en file dattente mais aucune classification de paquets naencore eacuteteacute faite Pour linstant tous les paquets sortants passent par la classe 115 (car nous avons utiliseacute tcqdisc add dev eth0 root handle 1 htb default 15) Nous devons donc maintenant indiquer ougrave doivent aller lespaquets Ceci est la partie la plus importante

Nous allons maintenant configurer les filtres de tel sorte que nous puissions classifier les paquets aveciptables Je preacutefegravere vraiment le faire avec iptables car celui-ci est tregraves souple et que nous avons un compteurde paquets pour chaque regravegle De plus avec la cible RETURN les paquets nont pas besoin de traverser toutesles regravegles Nous exeacutecutons les commandes suivantes

tc filter add dev eth0 parent 10 protocol ip prio 1 handle 1 fw classid 110 tc filter add dev eth0 parent 10 protocol ip prio 2 handle 2 fw classid 111 tc filter add dev eth0 parent 10 protocol ip prio 3 handle 3 fw classid 112 tc filter add dev eth0 parent 10 protocol ip prio 4 handle 4 fw classid 113 tc filter add dev eth0 parent 10 protocol ip prio 5 handle 5 fw classid 114 tc filter add dev eth0 parent 10 protocol ip prio 6 handle 6 fw classid 115

Nous indiquons simplement au noyau que les paquets qui ont une valeur FWMARK speacutecifique (handle x fw)vont dans la classe speacutecifieacutee (classid xx) Voyons maintenant comment marquer les paquets avec iptables

Tout dabord nous devons comprendre comment les paquets traversent les filtres avec iptables

+------------+ +---------+ +-------------+ Paquets-| PREROUTING |--- Deacutecision----| FORWARD |-------+-------| POSTROUTING |- Paquets entrant +------------+ de routage +-minus-------+ | +-------------+ sortants

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Commenccedilons loptimisation de cette rare bande passante 101

| | +-------+ +--------+ | INPUT |-- Processus locaux-| OUTPUT | +-------+ +--------+

Je suppose que toutes vos tables ont leur politique par deacutefaut configureacutee agrave ACCEPT (-P ACCEPT) ce quidevrait ecirctre le cas si vous navez pas encore toucheacute agrave iptables Notre reacuteseau priveacute est une classe B avecladresse 172170016 et notre adresse publique est 21217021172

Nous indiquons au noyau de faire de la translation dadresse NAT les clients du reacuteseau priveacute peuvent alorscommencer agrave dialoguer avec lexteacuterieur

echo 1 gt procsysnetipv4ip_forward iptables -t nat -A POSTROUTING -s 172170025525500 -o eth0 -j SNAT --to-source 21217021172

Veacuterifions maintenant que les paquets transitent bien agrave travers 115

tc -s class show dev eth0

Vous pouvez commencer agrave marquer les paquets en ajoutant les regravegles dans la chaicircne PREROUTING de latable mangle

iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p icmp -j RETURN

Vous devriez maintenant ecirctre capable de voir leacutevolution du compteur de paquets quand vous pinguez des sitessur Internet depuis les machines du reacuteseau priveacute Veacuterifiez que le compteur de paquets augmente dans 110

tc -s class show dev eth0

Nous avons mis -j RETURN de maniegravere agrave ce que les paquets ne traversent pas toutes les regravegles Les paquetsicmp ne scruteront pas les autres regravegles deacutefinies sous RETURN Gardez ceci agrave lesprit Nous commenccedilonsmaintenant agrave ajouter dautres regravegles pour geacuterer les champs TOS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5 iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6 iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

Donnons la prioriteacute aux paquets SSH

iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

Une bonne ideacutee est de donner la prioriteacute aux paquets initiant une connexion tcp agrave savoir ceux qui ont le bitSYN activeacute

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j MARK --set-mark 0x1 iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYNRSTACK SYN -j RETURN

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

102 Classification des paquets

Et ainsi de suite Apregraves la mise en place des regravegles dans la chaicircne PREROUTING de la table mangle nousterminons par

iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

Ainsi le trafic non marqueacute est dirigeacute vers 115 En fait cette derniegravere eacutetape nest pas neacutecessaire puisque laclasse par deacutefaut est 115 Un marquage est quand mecircme reacutealiseacute de maniegravere agrave avoir une coheacuterence pourlensemble de la configuration De plus il est utile davoir une comptabiliteacute pour cette regravegle

Cest une bonne ideacutee de faire de mecircme avec la chaicircne OUTPUT Reacutepeacutetez ces commandes avec -A OUTPUT agravela place de PREROUTING (sPREROUTINGOUTPUT) Le trafic geacuteneacutereacute localement (sur le routeur Linux)sera alors eacutegalement classifieacute Je termine la chaicircne OUTPUT par -j MARK --set-mark 0x3 de tel sorte que letrafic local ait une prioriteacute plus grande

Ameacuteliorer notre configuration

Toute notre configuration est maintenant opeacuterationnelle Prenez du temps pour regarder les graphes etobserver ougrave votre bande passante est la plus utiliseacutee et cela correspond agrave vos souhaits Jai fait ceci pendant denombreuses heures ce qui ma permis davoir une connexion Internet fonctionnant tregraves bien Autrement vousserez confronteacute en permanence agrave des timeout et des allocations de bande passante presque nulles pour lesnouvelles connexions tcp

Si vous repeacuterez des classes qui sont pleines la plupart du temps ce peut ecirctre une bonne ideacutee de leur attacherun autre gestionnaire de mise en file dattente de maniegravere agrave ce que le partage de la bande passante soit pluseacutequitable

tc qdisc add dev eth0 parent 113 handle 130 sfq perturb 10 tc qdisc add dev eth0 parent 114 handle 140 sfq perturb 10 tc qdisc add dev eth0 parent 115 handle 150 sfq perturb 10

Rendre tout ceci actif au deacutemarrage

Il est certain que ceci peut ecirctre fait de diffeacuterentes faccedilons Dans mon cas jai un shell scriptetcinitdpacketfilter qui accepte les arguments [start | stop | stop-tables | start-tables |reload-tables] Celui-ci configure les gestionnaires de mise en file dattente et charge les modules du noyauneacutecessaires et se comporte donc comme une deacutemon Le mecircme script charge les regravegles iptables agrave partir deetcnetworkiptables-rules Je vais lembellir un peu et le rendrait disponible sur ma page webici

Chapitre 16 Construire des ponts et des pseudoponts avec du Proxy ARPLes ponts sont des peacuteripheacuteriques qui peuvent ecirctre installeacutes dans un reacuteseau sans aucune reconfiguration Uncommutateur reacuteseau est basiquement un pont multi-ports Un pont est souvent un commutateur avec 2 portsCependant Linux supporte tregraves bien plusieurs interfaces dans un pont le conduisant agrave fonctionner comme unvrai commutateur

Les ponts sont souvent deacuteployeacutes quand on est confronteacute agrave un reacuteseau deacutefaillant qui a besoin decirctre reacutepareacute sansaucune modification Dans la mesure ougrave un pont est un eacutequipement de niveau 2 la couche sous la couche IP

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 16 Construire des ponts et des pseudo ponts avec du Proxy ARP 103

les routeurs et serveurs ne sont pas conscients de son existence Ceci signifie que vous pouvez bloquer oumodifier certains paquets de maniegravere transparente ou mettre en forme le trafic

Un autre eacuteleacutement positif est quun pont peut souvent ecirctre remplaceacute par un cacircble croiseacute ou un hub quand iltombe en panne

Laspect neacutegatif est que la mise en place dun pont peut engendrer beaucoup de confusion agrave moins quil ne soittregraves bien configureacute Le pont napparaicirct pas dans les traceroute mais pourtant des paquets disparaissent sansraison ou sont changeacutes en allant dun point A agrave un point B (ce reacuteseau est HANTE ) Vous devriez eacutegalementvous demander si une organisation qui ne veut rien changer fait le bon choix

Le pont Linux 2425 est documenteacute sur cette page

Etat des ponts et iptables

Au moment de Linux 2420 le pont et iptables ne se voient pas lun lautre sans une aide Si vous pontezles paquets de eth0 agrave eth1 ils ne passent pas par iptables Ceci signifie que vous ne pouvez pas faire defiltrage de translation dadresse (NAT) de deacutesossage ou quoique ce soit dautres Ceci a eacuteteacute corrigeacute dans lesversions 2545 et supeacuterieures

Vous devriez eacutegalement regarder ebtables qui est encore un autre projet Il vous permettra de faire deschoses vraiment terribles comme MACNAT et brouting Cest vraiment effroyable

Pont et mise en forme

Ca marche comme dans les reacuteclames Soyez sucircr du cocircteacute attribueacute agrave chaque interface Autrement il se peut quevous mettiez en forme le trafic sortant au niveau de votre interface interne ce qui ne marchera pas Utiliseztcpdump si neacutecessaire

Pseudo-pont avec du Proxy-ARP

Si vous voulez juste impleacutementer un pseudo pont allez jusquagrave la section Impleacutementez-le Cependant il estsage de lire un peu la faccedilon dont il fonctionne en pratique

Un pseudo pont travaille de maniegravere un peu diffeacuterente Par deacutefaut un pont transmet les paquets sans les alteacutererdune interface agrave une autre Il ne regarde que ladresse mateacuterielle des paquets pour deacuteterminer ougrave ils doiventaller Ceci signifie que vous pouvez pontez un trafic que Linux ne comprend pas aussi longtemps quil y aune adresse mateacuterielle

Un pseudo pont travaille diffeacuteremment et ressemble plus agrave un routeur cacheacute quagrave un pont Mais comme unpont il a un impact faible sur larchitecture du reacuteseau

Le fait quil ne soit pas un pont preacutesente lavantage que les paquets traversent reacuteellement le noyau et peuventecirctre filtreacutes modifieacutes redirigeacutes ou rerouteacutes

Un pont reacuteel peut eacutegalement reacutealiser ces tours de force mais il a besoin dun code speacutecial comme le EthernetFrame Diverter ou la mise agrave jour mentionneacutee au-dessus

Un autre avantage dun pseudo pont est quil ne transmet pas les paquets quil ne comprend pas nettoyant ainsivotre reacuteseau de beaucoup de cochonneries Dans le cas ougrave vous auriez besoin de ces cochonneries (comme lespaquets SAP ou Netbeui) utilisez un vrai pont

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

104 Etat des ponts et iptables

ARP amp Proxy-ARP

Quand un hocircte veut dialoguer avec un autre hocircte sur le mecircme segment physique il envoie un paquet duProtocole de Reacutesolution dAdresse (ARP) qui en simplifiant quelque peu est lu comme ceci Qui a 10001le dire agrave 10007 En reacuteponse agrave ceci 10001 renvoie un petit paquet ici

10007 envoie alors des paquets agrave ladresse mateacuterielle mentionneacutee dans le paquet ici Il met dans un cachecette adresse mateacuterielle pour un temps relativement long et apregraves lexpiration du cache repose sa question

Quand on construit un pseudo pont on configure le pont pour quil reacuteponde agrave ces paquets ARP les hocirctes dureacuteseau envoyant alors leurs paquets au pont Le pont traite alors ces paquets et les envoie agrave linterface adapteacutee

Donc en reacutesumeacute quand un hocircte dun cocircteacute du pont demande ladresse mateacuterielle dun hocircte se situant de lautrecocircteacute le pont reacutepond avec un paquet qui dit transmets le moi

De cette faccedilon tout le trafic de donneacutees est transmis agrave la bonne place et il traverse toujours le pont

Impleacutementez-le

Les versions anciennes du noyau linux permettait de faire du proxy ARP uniquement agrave une granulariteacute sousreacuteseaux Ainsi pour configurer un pseudo pont il fallait speacutecifier les bonnes routes vers les deux cocircteacutes dupont et eacutegalement creacuteer les regravegles proxy-ARP correspondantes Ceacutetait peacutenible deacutejagrave par la quantiteacute de textequil fallait taper puis parce quil eacutetait facile de se tromper et creacuteer des configurations erroneacutees ougrave le pontreacutepondait agrave des requecirctes pour des reacuteseaux quil ne savait pas router

Avec Linux 24 (et peut-ecirctre bien le 22) cette possibiliteacute a eacuteteacute retireacutee et a eacuteteacute remplaceacutee par une option dansle reacutepertoire proc appeleacutee proxy-arp La proceacutedure pour construire un pseudo pont est maintenant

Assigner une adresse agrave chaque interface la gauche et la droite1 Creacuteer des routes pour que votre machine connaisse quels hocirctes reacutesident agrave gauche et quels hocirctesreacutesident agrave droite

2

Activer le proxy-ARP sur chaque interface echo 1 gt procsysnetipv4confethLproxyamplowbararpecho 1 gt procsysnetipv4confethRproxyamplowbararp ougrave L et R deacutesignent les numeacuteros delinterface du cocircteacute gauche (Left) et de celle du cocircteacute droit (Right)

3

Noubliez pas eacutegalement dactiver loption ipamplowbarforwarding Quand on convertit un vrai pont il se peutque vous trouviez cette option deacutesactiveacutee dans la mesure ougrave il ny en a pas besoin pour un pont

Une autre chose que vous devriez consideacuterer lors de la conversion est que vous aurez besoin deffacer le cachearp des ordinateurs du reacuteseau Le cache arp peut contenir danciennes adresses mateacuterielles du pont qui ne sontplus correctes

Sur un Cisco ceci est reacutealiseacute en utilisant la commande clear arp-cache et sous linux en utilisant arp -dipadresse Vous pouvez aussi attendre lexpiration manuelle du cache ce qui peut ecirctre plutocirct long

Il se peut que vous deacutecouvriez eacutegalement que votre reacuteseau eacutetait mal configureacute si vous avezaviez lhabitude despeacutecifier les routes sans les masques de sous-reacuteseau Dans le passeacute certaines versions de route pouvaientcorrectement deviner le masque ou au contraire se tromper sans pour autant vous le notifier Quand vousfaites du routage chirurgical comme deacutecrit plus haut il est vital que vous veacuterifiez vos masques desous-reacuteseau

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

ARP amp Proxy-ARP 105

Chapitre 17 Routage Dynamique - OSPF et BGPSi votre reacuteseau commence agrave devenir vraiment gros ou si vous commencez agrave consideacuterer Internet comme votrepropre reacuteseau vous avez besoin doutils qui routent dynamiquement vos donneacutees Les sites sont souvent relieacutesentre eux par de multiples liens et de nouveaux liens surgissent en permanence

LInternet utilise la plupart du temps les standards OSPF (RFC 2328) et BGP4 (RFC 1771) Linux supporteles 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 travauxde reacutefeacuterence

Vue densemble

Cisco Systems Cisco Systems Designing large-scale IP Internetworks

Pour OSPF

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

Halabi a aussi eacutecrit un tregraves bon guide sur la conception du routage OSPF mais il semble avoir eacuteteacute effaceacute dusite 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

Bien que les exemples soient speacutecifiques agrave Cisco ils sont remarquablement semblables au langage deconfiguration de Zebra -)

Configurer OSPF avec Zebra

Contactez-moi si les informations qui suivent ne sont pas exactes ou si vous avez des suggestions Zebra estun formidable logiciel de routage dynamique eacutecrit par Kunihiro Ishiguro Toshiaki Takada et Yasuhiro OharaConfigurer OSPF avec zebra est simple et rapide mais en pratique il y a de nombreux paramegravetres dans le casougrave vous auriez des besoins speacutecifiques OSPF est labreacuteviation de Open Shortest Path First et quelques une deses fonctionnaliteacutes sont

hieacuterarchiqueLes reacuteseaux sont regroupeacutes par zones (areas) qui sont interconnecteacutees par une zone eacutepine dorsale quisera appeleacutee zone 0 Tout le trafic passe par la zone 0 et tous les routeurs de cette zone ont lesinformations de routage de toutes les autres zones

convergence rapideLes routes sont propageacutees tregraves rapidement compareacute agrave RIP par exemple

eacuteconomie de bande passanteUtilise la multi-distribution agrave la place de la diffusion ce qui eacutevite de submerger les autres hocirctes avecdes informations de routage sans inteacuterecirct pour eux La multi-distribution reacuteduit ainsi le deacutebit sur le

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

106 Chapitre 17 Routage Dynamique - OSPF et BGP

reacuteseau De mecircme les routeurs internes (ceux dont toutes les interfaces sont situeacutees dans la mecircmezone) nobtiennent pas dinformations sur les autres zones Les routeurs avec des interfaces dans plusdune zone sont appeleacutes Area Border Routers Ils possegravedent les informations de topologie sur leszones auxquelles ils sont connecteacutes

Utilisation intensive de CPUOSPF est baseacute sur lalgorithme de Dijkstra Shortest Path First qui est coucircteux en temps de calculcompareacute aux autres algorithmes de routage Ce nest pas forceacutement mauvais dans la mesure ougrave le pluscourt chemin est calculeacute uniquement pour chaque zone Donc pour les reacuteseaux de petite agrave moyennetaille ce ne sera pas un problegraveme vous ne vous en rendrez pas compte

Information deacutetat de lienOSPF prend en compte les caracteacuteristiques speacutecifiques des reacuteseaux et interfaces telles que la bandepassante les deacutefauts de liens et le coucirct moneacutetaire

Protocole ouvert et logiciel sous license GPLOSPF est un protocole ouvert et Zebra est un logiciel sous license GPL ce qui repreacutesente un avantageeacutevident par rapport aux protocoles et logiciels proprieacutetaires

Preacuterequis

Noyau Linux Compileacute avec CONFIG_NETLINK_DEV and CONFIG_IP_MULTICAST (Je ne sais pas si dautreseacuteleacutements sont eacutegalement neacutecessaires)

IprouteZebra

Reacutecupeacuterez-le avec votre gestionnaire de paquet favori ou agrave partir de httpwwwzebraorg

Configurer Zebra

Prenons le reacuteseau suivant comme exemple

---------------------------------------------------- | 1921680024 | | | | Zone 0 100BaseTX Commuteacute | | Epine dorsale Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |1 |2 |253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSLATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172170016 Zone 1 | | 1921681024 wlan Zone 2 | ------------ | Reacuteseau etudiant (dortoir) | | Sans fil de Barcelone | ------------------------------------ -------------------------------

Ne soyez pas effrayeacute par ce diagramme Zebra reacutealise la plus grande partie du travail automatiquement cequi ne demandera aucun travail de saisie des routes avec Zebra Il serait peacutenible de maintenir toutes ces routesagrave la main au quotidien La chose la plus importante agrave maicirctriser clairement cest la topologie du reacuteseau Faitesparticuliegraverement attention agrave la zone 0 puisque cest la plus importante Dans un premier temps configurezZebra en eacuteditant zebraconf et en ladaptant agrave vos besoins

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configurer OSPF avec Zebra 107

hostname omega password xxx enable password xxx Interfaces description interface lo description test of desc interface eth1 multicast Static default route ip route 00000 21217021129 log file varlogzebrazebralog

Debian neacutecessite eacutegalement leacutedition de etczebradaemons pour quils soient lanceacutes au deacutemarrage

zebra=yes ospfd=yes

Nous devons maintenant editer ospfdconf si vous utilisez encore IPV4 ou ospf6dconf si vous travaillez avecIPV6 Mon fichier ospfdconf ressemble agrave ceci

hostname omega password xxx enable password xxx router ospf network 1921680024 area 0 network 172170016 area 1 log stdout log file varlogzebraospfdlog

Ceci indique agrave ospf la topologie de notre reacuteseau

Exeacutecuter Zebra

Nous devons maintenant deacutemarrer Zebra soit agrave la main en tapant zebra -d soit avec un script commeetcinitdzebra start En regardant attentivement les logs de ospdfd on peut voir les eacuteleacutements suivants

20021213 224624 OSPF interface 19216801 join AllSPFRouters Multicast group 20021213 224634 OSPF SMUX_CLOSE with reason 5 20021213 224644 OSPF SMUX_CLOSE with reason 5 20021213 224654 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF SMUX_CLOSE with reason 5 20021213 224704 OSPF DR-Election[1st] Backup 19216801 20021213 224704 OSPF DR-Election[1st] DR 19216801 20021213 224704 OSPF DR-Election[2nd] Backup 0000 20021213 224704 OSPF DR-Election[2nd] DR 19216801 20021213 224704 OSPF interface 19216801 join AllDRouters Multicast group 20021213 224706 OSPF DR-Election[1st] Backup 19216802 20021213 224706 OSPF DR-Election[1st] DR 19216801 20021213 224706 OSPF Packet[DD] Negotiation done (Slave) 20021213 224706 OSPF nsm_change_status() scheduling new router-LSA origination 20021213 224711 OSPF ospf_intra_add_router Start

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

108 Configurer Zebra

Ignorez le message SMUX_CLOSE pour linstant dans la mesure ougrave il concerne SNMP Nous pouvons voirque 19216801 est routeur deacutesigneacute (Designated Router) et que 19216802 est le le routeur deacutesigneacute desauvegarde (Backup Designated Router)

Nous pouvons eacutegalement interagir avec zebra et ospfd en exeacutecutant

$ telnet localhost zebra$ telnet localhost ospfd

Voyons comment les routes se sont propageacutees en se connectant agrave zebra

rootatlantis~ telnet localhost zebra Trying 127001 Connected to atlantis Escape character is ^]

Hello this is zebra (version 092a) Copyright 1996-2001 Kunihiro Ishiguro

User Access Verification

Password atlantisgt show ip route Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Kgt 00000 via 19216801 eth1 Cgt 1270008 is directly connected lo O 172170016 [11010] is directly connected eth0 062153 Cgt 172170016 is directly connected eth0 O 1921680024 [11010] is directly connected eth1 062153 Cgt 1921680024 is directly connected eth1 atlantisgt show ip ospf border-routers ============ OSPF router routing table ============= R 1921680253 [10] area (0000) ABR via 1921680253 eth1 [10] area (0001) ABR via 1721702 eth0

ou directement avec iproute

rootomega~ ip route 2121702112826 dev eth0 proto kernel scope link src 21217021172 1921680024 dev eth1 proto kernel scope link src 19216801 172170016 via 19216802 dev eth1 proto zebra metric 20 default via 21217021129 dev eth0 proto zebra rootomega~

Nous pouvons voir les routes Zebra qui neacutetaient pas preacutesentes auparavant Il est vraiment agreacuteable de voirapparaicirctre les routes quelques secondes apregraves le lancement de zebra et ospfd Vous pouvez veacuterifier laconnectiviteacute avec les autres hocirctes en utilisant ping Les routes zebra sont automatiques Vous pouvez ajouterun autre routeur au reacuteseau configurez Zebra et voilagrave

Astuce vous pouvez utiliser

tcpdump -i eth1 ip[9] == 89

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Exeacutecuter Zebra 109

pour analyser les paquets OSPF Le numeacutero du protocole OSPF est 89 et le champ du protocole est le 9iegravemeoctet de len-tecircte ip

OSPF possegravede de nombreux paramegravetres speacutecialement pour les grands reacuteseaux Dans de prochainsdeacuteveloppements du HOWTO nous montrerons des meacutethodes de reacuteglages fins dOSPF

Configurer BGP4 avec Zebra

Le Border Gateway Protocol Version 4 (BGP4) est un protocole de routage dynamique deacutecrit dans la RFC1771 Il permet la distribution des informations de connectiviteacute cest agrave dire les tables de routage vers dautresnoeuds BGP4 actifs Il peut ecirctre utiliseacute comme un EGP ou un IGP Dans le mode EGP chaque noeud doitavoir son propre numeacutero de systegraveme autonome ( utonomous System (AS)) BGP4 supporte etlaggreacutegation de routes (reacuteunir plusieurs routes en une seule) gt The Border Gateway Protocol Version 4(BGP4) is a dynamic routing gt protocol described in RFC 1771 It allows the distribution of gt reachabilityinformation ie routing tables to other BGP4 gt enabled nodes It can either be used as EGP or IGP in EGPmode gt each node must have its own Autonomous System (AS) number gt BGP4 supports Classless InterDomain Routing (CIDR) and route gt aggregation (merge multiple routes into one)

scheacutema reacuteseau (Exemple)

Le scheacutema reacuteseau suivant est utiliseacute pour les exemples agrave suivre AS 1 et 50 ont plusieurs voisins mais nousavons seulement besoin de configurer 1 et 50 comme nos voisins Les noeuds communiquent entre eux pardes tunnels dans cet exemple mais ce nest pas une obligation

Note les numeacuteros AS utiliseacutes dans cet exemple sont reacuteserveacutes Veuillez obtenir vos propres numeacuteros AS duRIPE si vous installez des liens officiels

-------------------- | 192168231224 | | AS 23 | -------------------- ------------------ ------------------ | 1921681124 |-------| 10101116 | | AS 1 | | AS 50 | ------------------ ------------------

Configuration (Exemple)

La configuration suivante est eacutecrite pour le noeud 192168231224 et elle sera facile agrave adapter pour les autresnoeuds

Elle commence par des eacuteleacutements geacuteneacuteraux comme le nom de lhocircte les mots de passe et les options de debug

hostname hostname anakin

login password password xxx

enable password (super user mode) enable password xxx

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

110 Configurer BGP4 avec Zebra

path to logfile log file varlogzebrabgpdlog

debugging be verbose (can be removed afterwards) debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates

La liste de controcircle daccegraves (Access list) est utiliseacutee pour limiter la redistribution aux reacuteseaux priveacutes (RFC1918)

RFC 1918 networks access-list local_nets permit 1921680016 access-list local_nets permit 172160012 access-list local_nets permit 100008 access-list local_nets deny any

Letape suivante consiste agrave configurer chaque AS

Own AS number router bgp 23

IP address of the router bgp router-id 1921682312

announce our own network to other neighbors network 19216823024

advertise all connected routes (= directly attached interfaces) redistribute connected

advertise kernel routes (= manually inserted routes) redistribute kernel

Chaque section router bgp contient une liste de voisins auquels le routeur est connecteacute

neighbor 19216811 remote-as 1 neighbor 19216811 distribute-list local_nets in neighbor 101011 remote-as 50 neighbor 101011 distribute-list local_nets in

Veacuterification de la configuration

Note vtysh est un multiplexeur qui connecte toutes les interfaces utilisateur de zebra ensemble

anakin sh ip bgp summary BGP router identifier 1921682312 local AS number 23 2 BGP AS-PATH entries 0 BGP community entries

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd 101001 4 50 35 40 0 0 0 002840 1 19216811 4 1 27574 27644 0 0 0 032604 14

Total number of neighbors 2 anakin anakin sh ip bgp neighbors 101001 BGP neighbor is 101001 remote AS 50 local AS 23 external link

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Configuration (Exemple) 111

BGP version 4 remote router ID 101001 BGP state = Established up for 002901 anakin

Voyons quelles routes nous avons obtenues de nos voisins

anakin sh ip ro bgp Codes K - kernel route C - connected S - static R - RIP O - OSPF B - BGP gt - selected route - FIB route

Bgt 172160014 [200] via 19216811 tun0 2d10h19m Bgt 172300016 [200] via 19216811 tun0 100924 Bgt 19216851032 [200] via 19216811 tun0 2d10h27m Bgt 19216852632 [200] via 19216811 tun0 100924 Bgt 19216853632 [200] via 19216811 tun0 2d10h19m Bgt 19216817024 [200] via 19216811 tun0 3d05h07m Bgt 19216817132 [200] via 19216811 tun0 3d05h07m Bgt 19216832024 [200] via 19216811 tun0 2d10h27m anakin

Chapitre 18 Autres possibiliteacutesCe chapitre est une liste des projets ayant une relation avec le routage avanceacute et la mise en forme du traficsous Linux Certains de ces liens meacuteriteraient des chapitres speacutecifiques dautres sont tregraves bien documenteacutes etnont pas besoin de HOWTO en plus

Impleacutementation VLAN 8021Q pour Linux (site)VLAN est une faccedilon tregraves sympa de diviser vos reacuteseaux dune maniegravere plus virtuelle que physique Debonnes informations sur les VLAN pourront ecirctre trouveacutees ici Avec cette impleacutementation votre boiteLinux pourra dialoguer VLAN avec des machines comme les Cisco Catalyst 3ComamplcubCorebuilder Netbuilder II SuperStack II switch 630amprcub Extreme Ntwks Summit 48Foundry amplcubServerIronXL FastIronamprcub

Impleacutementation alternative VLAN 8021Q pour Linux(site)Une impleacutementation alternative de VLAN pour Linux Ce projet a deacutemarreacute suite au deacutesaccord aveclarchitecture et le style de codage du projet VLAN eacutetabli avec comme reacutesultat une structure delensemble plus clair Mise agrave jour a eacuteteacute inclus dans le noyau 2414 (peut-ecirctre dans le 2413)

Un bon HOWTO agrave propos des VLAN peut ecirctre trouveacute ici

Mise agrave jour a eacuteteacute inclue dans le noyau agrave partir de la version 2414 (peut-ecirctre 13)Serveur Linux Virtuel (Linux Virtual Server )(site)

Ces personnes sont tregraves talentueuses Le Serveur Virtuel Linux est un serveur agrave haute disponibiliteacutehautement eacutevolutif construit autour dune grappe (cluster) de serveurs avec un eacutequilibreur de chargetournant sur le systegraveme dexploitation Linux Larchitecture du cluster est transparente pour lesutilisateurs finaux qui ne voient quun simple serveur virtuel

En reacutesumeacute que vous ayez besoin deacutequilibrer votre charge ou de controcircler votre trafic LVS aura unemaniegravere de le faire Certaines de leurs techniques sont positivement diaboliques Par exemple ilspermettent agrave plusieurs machines davoir une mecircme adresse IP mais en deacutesactivant lARP dessusSeule la machine LVS qui a elle lARP actif deacutecide de lhocircte qui manipulera le paquet entrantCelui-ci est envoyeacute avec la bonne adresse MAC au serveur choisi Le trafic sortant passe directementpar le routeur et non par la machine LVS qui par conseacutequent na pas besoin de voir vos 5Gbits dedonneacutees allant sur Internet Cette machine LVS ne peut alors pas ecirctre un goulot deacutetranglement

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

112 Chapitre 18 Autres possibiliteacutes

Limpleacutementation de LVS neacutecessite une mise agrave jour pour les noyaux 20 et 22 alors quun moduleNetfilter est disponible dans le 24 Il ny a donc pas besoin de mise agrave jour pour cette version dunoyau Le support 24 est encore en deacuteveloppement Battez-vous donc avec et envoyez voscommentaires ou vos mises agrave jour

CBQinit (site)Configurer CBQ peut ecirctre un peu intimidant speacutecialement si votre seul souhait est de mettre en formele trafic dordinateurs placeacutes derriegravere un routeur CBQinit peut vous aider agrave configurer Linux agrave laidedune syntaxe simplifieacutee

Par exemple si vous voulez que tous les ordinateurs de votre reacuteseau 1921681024 (sur eth110 Mbits) aient leur vitesse de teacuteleacutechargement limiteacutee agrave 28 Kbits remplissez le fichier deconfiguration de CBQinit avec ce qui suit

DEVICE=eth110Mbit1MbitRATE=28KbitWEIGHT=2KbitPRIO=5RULE=1921681024

Utiliser simplement ce programme si le comment et pourquoi ne vous inteacuteresse pas Nous utilisonsCBQinit en production et il marche tregraves bien On peut mecircme faire des choses plus avanceacutees commela mise en forme deacutependant du temps La documentation est directement inteacutegreacutee dans le script ce quiexplique labsence dun fichier README

Scripts faciles de mise en forme Chronox(site)Stephan Mueller (smuellerchronoxde) a eacutecrit deux scripts utiles limitconn et shaper Lepremier vous permet de maicirctriser une session de teacuteleacutechargement comme ceci

limitconn -s SERVERIP -p SERVERPORT -l LIMIT

Il fonctionne avec Linux 22 et 24

Le second script est plus compliqueacute et peut ecirctre utiliseacute pour mettre en place des files dattentediffeacuterentes baseacutees sur les regravegles iptables Celles-ci sont utiliseacutees pour marquer les paquets qui sontalors mis en forme

Impleacutementation du Protocole Redondant Routeur Virtuel (site)Ceci est purement pour la redondance Deux machines avec leurs propres adresses IP et MAC creacuteentune troisiegraveme adresse IP et MAC virtuelle Bien que destineacute agrave lorigine uniquement aux routeurs quiont besoin dadresses MAC constantes cela marche eacutegalement pour les autres serveurs

La beauteacute de cette approche est lincroyable faciliteacute de la configuration Pas de compilation de noyauou de neacutecessiteacute de mise agrave jour tout se passe dans lespace utilisateur

Lancer simplement ceci sur toutes les machines participant au service

vrrpd -i eth0 -v 50 100022

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 18 Autres possibiliteacutes 113

Et vous voilagrave opeacuterationnel 100022 est maintenant geacutereacute par lun de vos serveurs probablement lepremier agrave avoir lanceacute le deacutemon vrrp Deacuteconnectez maintenant cet ordinateur du reacuteseau et tregravesrapidement ladresse 100022 et ladresse MAC seront geacutereacutees par lun des autres ordinateurs

Jai essayeacute ceci et il a eacuteteacute actif et opeacuterationnel en 1 minute Pour une raison eacutetrange ma passerelle pardeacutefaut a eacuteteacute supprimeacutee Cependant loption -n permet de preacutevenir cela

Voici une deacutefaillance en direct

64 bytes from 100022 icmp_seq=3 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=4 ttl=255 time=02 ms64 bytes from 100022 icmp_seq=5 ttl=255 time=168 ms64 bytes from 100022 icmp_seq=6 ttl=255 time=18 ms64 bytes from 100022 icmp_seq=7 ttl=255 time=17 ms

Pas un paquet ping na eacuteteacute perdu Apregraves 4 paquets jai deacuteconnecteacute mon P200 du reacuteseau et mon 486a pris le relais ce qui est visible par laugmentation du temps de latence

Chapitre 19 Lectures suppleacutementaireshttpsnafufreedomorglinux22iproute-noteshtml

Contient beaucoup dinformations techniques et de commentaires sur le noyauhttpwwwdavinottawaoncaols

Transparents de Jamal Hadi Salim un des auteurs du controcircleur de trafic de Linuxhttpdefiantcoinetcomiproute2ip-cref

Version HTML de la documentation LaTeX dAlexeys explique une partie diproute2 en deacutetailshttpwwwaciriorgfloydcbqhtml

Sally Floyd a une bonne page sur CBQ incluant ses publications originales Aucune nest speacutecifique agraveLinux mais il y a un travail de discussion sur la theacuteorie et lutilisation de CBQ Contenu tregravestechnique mais une bonne lecture pour ceux qui sont inteacuteresseacutes

Differentiated Services on LinuxThis document par Werner Almesberger Jamal Hadi Salim et Alexey Kuznetsov Deacutecrit les fonctionsDiffServ du noyau Linux entre autres les gestionnaires de mise en file dattente TBF GREDDSMARK et le classificateur tcindex

httpcetipl~ekravietzcbqNET4_tchtmlUn autre HOWTO en polonais Vous pouvez cependant copiercoller les lignes de commandes ellesfonctionnent de la mecircme faccedilon dans toutes les langues Lauteur travaille en collaboration avec nouset sera peut ecirctre bientocirct un auteur de sections de cet HOWTO

IOS Committed Access RateDes gens de Cisco qui ont pris la louable habitude de mettre leur documentation en ligne La syntaxede Cisco est diffeacuterente mais les concepts sont identiques sauf quon fait mieux et sans mateacuterielcoutant le prix dune voiture -)

TCPIP Illustrated volume 1 W Richard Stevens ISBN 0-201-63346-9Sa lecture est indispensable si vous voulez reacuteellement comprendre TCPIP et de plus elle estdivertissante

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

114 Chapitre 19 Lectures suppleacutementaires

Chapitre 20 RemerciementsNotre but est de faire la liste de toutes les personnes qui ont contribueacute agrave ce HOWTO ou qui nous ont aideacutes agraveexpliquer le fonctionnement des choses Alors quil nexiste pas actuellement de tableau dhonneur Netfilternous souhaitons saluer les personnes qui apportent leur aide

Junk Alins

ltjuanjomatupcesgt

bull

Joe Van Andelbull Michael T Babcock

ltmbabcockfibrespeednetgt

bull

Christopher Barton

ltcpbartonuiucedugt

bull

Peter Bieringer

ltpbbieringerdegt

bull

Ard van Breemen

ltardkwaaknetgt

bull

Ron Brinker

ltserviceemciscomgt

bull

ukasz Bromirski

ltlbromirskimr0vkaeuorggt

bull

Lennert Buytenhek

ltbuytenhgnuorggt

bull

Esteve Camps

ltestevehadesudgesgt

bull

Ricardo Javier Cardenes

ltricardoconysiscomgt

bull

Stef Coene

ltstefcoenedocumorggt

bull

Don Cohen

ltdon-lartcisiscs3-inccomgt

bull

Jonathan Corbet

ltlwnlwnnetgt

bull

Gerry N5JXS Creager

ltgerrycstamuedugt

bull

Marco Davids

ltmarcosaranlgt

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 115

Jonathan Day

ltjd9812my-dejacomgt

bull

Martin aka devik Devera

ltdevikcdiczgt

bull

Hannes Ebner

lthefli4ldegt

bull

Derek Fawcus

ltdfawcusciscocomgt

bull

David Fries

ltdfriesmailwinorggt

bull

Stephan Kobold Gehring

ltStephanGehringbechtledegt

bull

Jacek Glinkowski

ltjglinkowhnscomgt

bull

Andrea Glorioso

ltsamaperchetopiorggt

bull

Thomas Graaf

lttgrafsuugchgt

bull

Sandy Harris

ltsandystormcagt

bull

Nadeem Hasan

ltnhasanusanetgt

bull

Erik Hensema

lterikhensemaxs4allnlgt

bull

Vik Heyndrickx

ltvikheyndrickxedchqcomgt

bull

Spauldo Da Hippie

ltspauldousanetgt

bull

Koos van den Hout

ltkooskzdoosxs4allnlgt

bull

Stefan Huelbrock ltshuelbrockdatasystemsdegtbull Ayotunde Itayemi

ltaitayemimetrongcomgt

bull

Alexander W Janssen ltyallaynfonaticdegtbull Andreas Jellinghaus ltajdungeoninkadegtbull Gareth John ltgdjohnzeplerorggtbull Dave Johnsonbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

116 Chapitre 20 Remerciements

ltdjwwwuklinuxorggtMartin Josefsson ltgandalfwlugwestbosegtbull Andi Kleen ltaksusedegtbull Andreas J Koenig ltandreaskoeniganimadegtbull Pawel Krawczyk ltkravietzalfacetiplgtbull Amit Kucheria ltamitkittckuedugtbull Edmund Lau ltedlauucficsuciedugtbull Philippe Latu ltphilippelatulinux-franceorggtbull Arthur van Leeuwen ltarthurvlscikunnlgtbull Jose Luis Domingo Lopez

ltjdomingo24x7linuxcomgt

bull

Robert Lowe

ltroberthlowelawrenceedugt

bull

Jason Lunz ltjccgatechedugtbull Stuart Lynne ltslfireplugnetgtbull Alexey Mahotkin ltalexmformulabezrugtbull Predrag Malicevic ltpmalicieeeorggtbull Patrick McHardy ltkabertrashnetgtbull Andreas Mohr ltandilisasdegtbull James Morris ltjmorrisintercodecomaugtbull Andrew Morton ltakpmzipcomaugtbull Wim van der Mostbull Stephan Mueller ltsmuellerchronoxdegtbull Togan Muftuoglu lttoganmyahoocomgtbull Chris Murray ltcmurraystargatecagtbull Patrick Nagelschmidt ltdtogmxnetgtbull Ram Narula ltramprincess1netgtbull Jorge Novo ltjnovoeducanetnetgtbull Patrik ltphkurdnugtbull Pl Osgyny ltoplabwestel900netgtbull Lutz Preszligler ltLutzPresslerSerNetDEgtbull Jason Pyeron ltjasonpyeroncomgtbull Rod Roark ltrodsunsetsystemscomgtbull Pavel Roskin ltproskignuorggtbull Rusty Russell ltrustyrustcorpcomaugtbull Mihai RUSU ltdizzyroedunetgtbull Rob Pitman ltrobpitmancozagtbull Jamal Hadi Salim lthadicyberuscagtbull Ren Serral ltrserralacupcesgtbull David Sauer ltdavidspenguinczgtbull Sheharyar Suleman Shaikh ltsss23drexeledugtbull Stewart Shields ltMourningBladebigfootcomgtbull Nick Silberstein ltnhsilberyahoocomgtbull Konrads Smelkov ltkonradsinterbaltikacomgtbull William Stearns

ltwstearnspoboxcomgt

bull

Andreas Steinmetz ltastdomdvdegtbull Matthew Strait ltstraitmmathcscarletonedugtbull Jason Tackaberry lttacklinuxcomgtbull Charles Tassell ltctassellisnnetgtbull Glen Turner ltglenturneraarneteduaugtbull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

Chapitre 20 Remerciements 117

Tea Sponsor Eric Veldhuyzen ltericterranugtbull Thomas Walpuski ltthomasbenderthinknerddegtbull Song Wang ltwsongeceuciedugtbull Chris Wilson

ltchrisnetserverscoukgt

bull

Lazar Yanackiev

ltLyanackievgmxnetgt

bull

Pedro Larroy

ltpiotrmemberfsforggt

Chaptitre 15 section 10 Exemple dune solution de translation dadresse avec de la QoSdiams Chaptitre 17 section 1 Configurer OSPF avec Zebradiams

bull

HOWTO du routage avanceacute et du controcircle de trafic sous Linux

118 Chapitre 20 Remerciements

  • HOWTO du routage avanceacute et du controcircle de trafic sous Linux
Page 7: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 8: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 9: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 10: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 11: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 12: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 13: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 14: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 15: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 16: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 17: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 18: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 19: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 20: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 21: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 22: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 23: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 24: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 25: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 26: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 27: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 28: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 29: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 30: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 31: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 32: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 33: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 34: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 35: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 36: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 37: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 38: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 39: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 40: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 41: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 42: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 43: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 44: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 45: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 46: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 47: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 48: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 49: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 50: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 51: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 52: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 53: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 54: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 55: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 56: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 57: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 58: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 59: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 60: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 61: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 62: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 63: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 64: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 65: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 66: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 67: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 68: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 69: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 70: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 71: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 72: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 73: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 74: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 75: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 76: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 77: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 78: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 79: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 80: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 81: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 82: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 83: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 84: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 85: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 86: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 87: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 88: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 89: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 90: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 91: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 92: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 93: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 94: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 95: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 96: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 97: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 98: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 99: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 100: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 101: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 102: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 103: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 104: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 105: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 106: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 107: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 108: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 109: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 110: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 111: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 112: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 113: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 114: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 115: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 116: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 117: HOWTO du routage avanc© et du contr´le de trafic sous Linux
Page 118: HOWTO du routage avanc© et du contr´le de trafic sous Linux