Précédent   Forum des professionnels en informatique > Systèmes > Linux > Réseau
Réseau Vos questions autour des réseaux et télécoms sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/03/2011, 16h09   #1
Invité de passage
 
Nicolas
Inscription : mars 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Nicolas

Informations forums :
Inscription : mars 2011
Messages : 2
Points : 3
Points : 3
Par défaut [PROXY+bandwidth shaping]: iptables et connbytes

Bonjour a tous,

Je dois installer un serveur proxy sur le réseau. Tous les utilisateurs devront utilisé le proxy pour pouvoir surfer sur Internet. La raison de l'installation de ce serveur est de pouvoir empêché qu'un utilisateur ne monopolisé la bande passante vers Internet pour des téléchargements inutiles.

EXISTANT:
- Serveur proxy Squid tournant sur un serveur Linux Centos.
- iptables 5.3.2.el5 fraichement installer avec le fichier .so pour connbytes qui va bien dans le dossier /lib64/iptables.

OBJECTIF:
Réduire le débits de téléchargements des utilisateurs qui télécharge un fichier de plus de 100MB. Le reste n'a pas de limite.

PRINCIPE:
Après de longue recherche j'ai trouvé que la meilleur façon de le faire était la suivante:
1- Marqué tous les paquets en 0x10.
2- Marqué tous les paquets issue d'un téléchargement de plus de 100MB en 0x20.
3- En utilisant la commande tc, faire deux classes, une avec un débits trés grand, l'autre avec un débits plus petit.
4- Faire en sorte que tous les paquets marqué 0x10 soit appliqué à la classe 10 (pas de limite) et tous les paquets marqué 0x20 à l'autre classe 20.

SOURCES:
C'est quoi connbytes ? ici
Commandes tc ici

CONFIG:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$IPTABLES -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 10
# 50Mb = 52428800
#$IPTABLES -t mangle -A OUTPUT -p tcp -o eth0 --sport 3128 -j MARK --set-mark 20
$IPTABLES -t mangle -A OUTPUT -p tcp -o eth0 --sport 3128 -m connbytes --connbytes 5242880: --connbytes-dir both  --connbytes-mode bytes -j MARK --set-mark 20
 
tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1:1  classid 1:10 htb \
	rate 99999kbit ceil 9999999999kbit prio 1
tc class add dev eth0 parent 1:1  classid 1:20 htb \
	rate 80kbit ceil 80kbit prio 2
#tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
#tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 20
tc filter add dev eth0 parent 1:0 protocol ip handle 10 fw flowid 1:10
tc filter add dev eth0 parent 1:0 protocol ip handle 20 fw flowid 1:20
RESULTAT:
Aucune limitation ne se fait quand un utilisateur télécharge. Quand j'essaye la règle iptables sans les options connbytes, tous le trafic est réduit a +/- 80kbits. Ce qui n'est pas ce que je veux.
Donc a priori, les commande tc fonctionne correctement mais les options connbytes ne semble pas fonctionné

Donc,
Est ce que la logique est correct ?
Est ce que la règles iptables est correctement utilisé ?
Est ce que c'est bien en OUPUT ?

En espérant avoir des nouvelles, bon week-end
nico002 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 15h58   #2
Invité de passage
 
Nicolas
Inscription : mars 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Nicolas

Informations forums :
Inscription : mars 2011
Messages : 2
Points : 3
Points : 3
Finalement grâce a ce lien j'ai trouvé la solution: lien

Le problème était que j'utilisait pas la bonne file apparement

Voici mon script final:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh
 
start(){
    stop
    echo -e "    [TC]      : DEFAULT CLASS ROOT";
    tc qdisc add dev eth0 root handle 1: hfsc default 10
 
    tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate \
        999999999kbit ul rate 999999999kbit
 
    echo -e "    [TC]      : CLASS 10 SET SPEED 999999999kbit/s";
    tc class add dev eth0 parent 1:1  classid 1:10 hfsc \
    sc rate 999999999kbit ul rate 999999999kbit
 
    echo -e "    [IPTABLES]: DOWNLOAD > 100MB ==> MARK 0x14";
    echo -e "    [TC]      : CLASS 20 SET SPEED 9000kbit/s";
    tc class add dev eth0 parent 1:1  classid 1:20 hfsc \
        sc rate 9000kbit ul rate 9000kbit
 
    echo -e "    [TC]      : ASSOCIATE PKT MARK 0xa TO CLASS 10";
    tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10
    echo -e "    [TC]      : ASSOCIATE PKT MARK 0x14 TO CLASS 20"; 
    tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
}
stop(){
    tc qdisc del dev eth0 root    2> /dev/null > /dev/null;
    tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null;
} 
 
case "$1" in
    start)
        echo -e "\033[1;31mStarting bandwidth shaping ...\033[00m";
        start
        echo -e "\033[1;31m[DONE]\033[00m";
        ;;
    stop)
        echo -e "\033[1;31mStopping bandwidth shaping ...\033[00m";
        echo -e "    [TC]      : DELETE THE ROOT QDISC";
        stop
        echo -e "\033[1;31m[DONE]\033[00m";
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        ;;
esac
 
exit 0;
J'ai mis la règle iptables dans /etc/sysconfig/iptables, c'est une meilleur pratique.
nico002 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h19.


 
 
 
 
Partenaires

Hébergement Web