Académique Documents
Professionnel Documents
Culture Documents
1. INTRODUCTION ....................................................................................................................................................................................... 3
2. TOPOLOGIE DE LA TABLE N°5 ......................................................................................................................................................... 4
2.1 EXPLICATION .................................................................................................................................................................................. 4
2.2 SCHEMA D’ARCHITECTURE .................................................................................................................................................... 4
3. MANIPULATIONS .................................................................................................................................................................................... 5
3.1 CONFIGURATION DES MACHINES ....................................................................................................................................... 5
3.2 SCRIPTS POUR LA REPARTITION DES CHARGES ........................................................................................................ 6
3.3 TEST DE LA MANIPULATION.................................................................................................................................................. 8
3.4 LIMITATION DE VITESSE ET GESTION DE QOS............................................................................................................ 8
3.4.1 SCRIPTS DE MISE EN ŒUVRE AUTOMATIQUE ........................................................................................................ 9
3.4.2 RESULTATS DE LA MANIPULATION........................................................................................................................... 10
4. REFERENCES .......................................................................................................................................................................................... 10
• lisser le trafic réseau, c'est-à-dire de répartir la charge globale vers différents équipements ;
Premiers essais :
Nous avions tout d’abord pensé à permettre à plusieurs machines de se connecter sur internet et, de manière
invisible (à l’aide d’un bridge), utiliser en fait deux connexions internet différentes. Cela aurait permis de
tester plusieurs choses telles que :
1. Faire du load balancing, c'est-à-dire dans ce cas-ci répartir le débit utilisé sur les deux connexions.
2. Utiliser la deuxième connexion comme connexion de secours au cas où la première ne répondrait plus.
3. Garder une des deux connexions pour certains services (afin d’assurer une bonne qualité de service).
Nous avons donc mis en place une machine avec trois cartes Ethernet que nous avons configurées avec ce
script :
Nous sommes restés dans l’idée de faire du load balancing, mais cette fois-ci du côté serveur. L’idée était de
mettre deux serveurs web sur deux machines différentes (avec un contenu identique) et de répartir la
charge sur chacun des serveurs. Dans notre exemple la « charge » est basée sur la bande passante (de
l’upload) utilisée sur l’un et l’autre des serveurs. On pourrait donc considérer qu’il s’agit de serveurs de
téléchargement. Mais on pourrait très bien imaginer, via un principe similaire, répartir par exemple la
charge de travail d’un programme multithreads sur différente des machines.
Nous avons aussi décidé aussi de faire de la limitation de bande passante et de la gestion de QoS à l’aide du
marquage avec iptables et des files d’attente.
2.1 EXPLICATION
Les manipulations s'effectuent sur notre répartiteur qui relie notre passerelle « Karnaugt » sur l'interface
eth0 et nos deux serveurs web sur l'interface eth1 et eth2. Tous les détails sont repris sur le schéma ci-
dessous :
• Configuration du répartiteur :
Script configCartes :
Comme indiqué sur le schéma d’architecture plus haut, nous avons configuré les différentes cartes
réseaux. Il a été nécessaire de rajouter des routes pour les adresses 10.0.0.1 et 10.0.0.2 car, les deux
cartes ethernet se trouvent dans le même réseau et il faut qu’il sache par quelle carte passer :
#!/bin/bash
Afin de permettre aux serveurs web de répondre aux requêtes qui leur seront envoyées, il faut modifier leur
passerelle par défaut pour l’adresse de celle du répartiteur (10.0.0.2) pour la machine de Wiam et 10.0.0.1
pour celle de Fabian
Script defaultPolitique :
Premièrement, nous allons mettre toutes les politiques d’iptable à Accept par défaut et nous effaçons les
règles actuelles :
#!/bin/bash
iptables -F
iptables -t nat –F
iptables –t mangle -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Nous allons lancer un script qui permet de regarder sur 10 secondes quelle est la carte réseau qui envoie le
plus de données entre eth1 et eth2. Pour se faire elle enregistre la valeur de TX de la carte eth1 et eth2, on
patiente 10 secondes et enregistre à nouveau cette valeur pour les deux cartes. On fait pour chaque carte la
soustraction entre la seconde valeur enregistrée et la première. Ensuite on regarde laquelle obtient la plus
grande différence : c’est celle qui émet le plus de trafic. En fonction de la carte qui a le plus de trafic, on lance
le script 1 ou le script2
Script trafic :
#!/bin/sh
teth11=`ifconfig eth1 | grep RX.*TX | cut -d ":" -f 3 | cut -d " " -f 1`
teth21=`ifconfig eth2 | grep RX.*TX | cut -d ":" -f 3 | cut -d " " -f 1`
sleep 10
teth12=`ifconfig eth1 | grep RX.*TX | cut -d ":" -f 3 | cut -d " " -f 1`
teth22=`ifconfig eth2 | grep RX.*TX | cut -d ":" -f 3 | cut -d " " -f 1`
if test $((($teth12-$teth11)-($teth22-$teth21))) -gt 0
then /root/LoadBalancing/script2
else /root/LoadBalancing/script1
fi
Script Script1
#!/bin/sh
#Fichier script1
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -d 172.16.0.105 --dport 80 -j DNAT --to-destination
10.0.0.3
iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.3 -j SNAT --to-source 172.16.0.105
Script Script2
#!/bin/sh
#Fichier script2
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -d 172.16.0.105 --dport 80 -j DNAT --to-destination
10.0.0.4
iptables -t nat -A POSTROUTING -o eth2 -s 10.0.0.4 -j SNAT --to-source 172.16.0.105
Le script boucle va permettre de lancer en boucle, à une seconde d’intervalle, le script trafic. On aura donc à
chaque seconde, un équilibrage de la charge sur les 10 secondes antérieures.
Script boucle
while true; do
sleep 1
/root/LoadBalancing/trafic &
done
Pour tester le bon fonctionnement des scripts, nous avons utilisé deux serveurs web avec du contenu
différent. Lorsqu’on actualise plusieurs fois la page d’index sur laquelle on atterrit, elle change. Si on lance un
téléchargement sur l’un des serveurs et qu’on continue à actualiser la page d’index, on n’atterrit plus que sur
le serveur sur lequel il n’y a pas le téléchargement en cours. Une fois le téléchargement terminé les deux
pages s’affichent à nouveau.
Nous avons mis en place 3 files d’attente configurées selon les modalités suivantes :
• Une file de discipline SFQ avec un trafic limité à 2mb/s et un trafic normal à 2mb/s
• Une file de discipline SFQ avec un trafic limité à 40 mb/s et un trafic normal à 40 mb/s
• L’ensemble de ces files sont limitées à 60 mb/s au total, toutes files confondues. La discipline de cette
file de sortie est HTB.
Par conséquent, le trafic sortant de la machine sera limité à 60 mb/s au total, et le traitement par files
d’attentes séparées permettra de répartir le trafic selon son importance.
Quelques définitions :
HTB :
Hierarchical Token Bucket :HTB permet de gérer des files
d’attente pour une connexion donnée. Il est une alternative
plus simple et intuitive que les listes de type CBQ (Class based
queuing).
SFQ :
Stochastic Fairness Queueing : Va permettre un partage
équitable (même priorité) entre les données des différentes
files.
Rate :
Le débit moyen.
Ceil :
Le débit maximal autorisé.
Jusqu'à maintenant, nous avons vu comment iptables travaille, et netfilter a été mentionné plusieurs fois.
Netfilter nous permet de filtrer les paquets. Une de ses fonctionnalités particulières est de pouvoir marquer
un paquet avec un nombre, grâce à l'option --set-mark. Les files d’attente peuvent lire cette marque et agir en
conséquence.
Script FileAttente
#!/bin/sh
./no_firewall
tc class add dev eth1 parent 100: classid 100:1 htb rate 60000Kbit
tc class add dev eth1 parent 100:1 classid 100:10 htb rate 2000Kbit ceil 2000Kbit
tc class add dev eth1 parent 100:1 classid 100:20 htb rate 40000Kbit ceil 40000Kbit
Nous avons modifié ce script pour limiter la vitesse à 20 kbits et 40 kbits et nous l’avons lancé sur la
gateway . Nous avons ensuite téléchargé un fichier se trouvant sur le serveur web (en local donc) depuis la
machine client et depuis la dmz pour vérifier que la limitation fonctionnait bien. L’utilitaire iptraff nous a
permis de voir avec précision que les limites étaient bien effectives.
Il suffit maintenant de manipuler iptables pour marquer les paquets pour certains services particuliers
(voir résumé sur iptables du premier bi-mestre) et de les affecter à des classes qui répondront aux besoins
de ceux-ci (priorité, débit minimal, etc …).
4. REFERENCES
- http://www.netfilter.org/
- http://www.nbs-system.com/dossiers/howto-iptables.html
- http://www.linux-sottises.net/iptables/iptables
- http://www.linux-france.org/
- http://lea-linux.org/cached/index/Reseau-secu-iptables.html#
- http://fr.wikipedia.org/