Chapitre 15. Recettes de cuisine

Table des matières

Faire tourner plusieurs sites avec différentes SLA (autorisations)
Protéger votre machine des inondations SYN
Limiter le débit ICMP pour empêcher les dénis de service
Donner la priorité au trafic interactif
Cache web transparent utilisant netfilter, iproute2, ipchains et squid
Schéma du trafic après l'implémentation
Circonvenir aux problèmes de la découverte du MTU de chemin en configurant un MTU par routes
Solution
Circonvenir aux problèmes de la découverte du MTU de chemin en imposant le MSS (pour les utilisateurs de l'ADSL, du câble, de PPPoE & PPtP)
Le Conditionneur de Trafic Ultime : Faible temps de latence, Téléchargement vers l'amont et l'aval rapide
Pourquoi cela ne marche t-il pas bien par défaut ?
Le script (CBQ)
Le script (HTB)
Limitation du débit pour un hôte ou un masque de sous-réseau
Exemple d'une solution de traduction d'adresse avec de la QoS
Commençons l'optimisation de cette rare bande passante
Classification des paquets
Améliorer notre configuration
Rendre tout ceci actif au démarrage

Cette section contient des « recettes de cuisine » qui peuvent vous aider à résoudre vos problèmes. Un livre de cuisine ne remplace cependant pas une réelle compréhension, essayez donc d'assimiler ce qui suit.

Vous pouvez faire cela de plusieurs manières. Apache possède un module qui permet de le supporter, mais nous montrerons comment Linux peut le faire pour d'autres services. Les commandes ont été reprises d'une présentation de Jamal Hadi, dont la référence est fournie ci-dessous.

Disons que nous avons deux clients avec : http, ftp et du streaming audio. Nous voulons leur vendre une largeur de bande passante limitée. Nous le ferons sur le serveur lui-même.

Le client A doit disposer d'au moins 2 mégabits, et le client B a payé pour 5 mégabits. Nous séparons nos clients en créant deux adresses IP virtuelles sur notre serveur.

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

C'est à vous d'associer les différents serveurs à la bonne adresse IP. Tous les démons courants supportent cela.

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

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

Nous créons ensuite les classes pour nos clients :

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

Nous ajoutons les filtres pour nos deux classes :

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

Et voilà qui est fait.

FIXME: Pourquoi pas un filtre token bucket ? Y a t-il un retour par défaut à pfifo_fast quelque part ?