[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: QoS : qqun a déjà essayé sur des petits debits ?



Le Mon, 06 Jun 2005 09:19:07 +0200
Emmanuel Doguet <ml@doguet.com> a écrit:

>    Salut à tous,
> 
> N'ayant une qu'une connectivité RNIS chez moi ( 64 Kbits symetrique ),
> j'aurais voulu mettre un système de QoS afin d'avoir tjrs SSH/ICMP de 
> rapide meme si les emails se telechargent.
> 
> J'ai essayé plusieurs script (wondershaper, htb, etc...) qui se lance 
> sans erreurs, voir me donne des stats ... mais je ne ressent aucune 
> difference.
> 
> Ma debit est trop petit peut etre pour  la QoS ?
> 

Deux choses, l'estimation de l'upload est moins fiable avec le ppp, par
ailleurs, pour que ça soit efficace, il faut réserver une bande
passante en marge de sécurité de 10% (peut être + en ppp mais dans la
pratique ça marchait). Donc avec 64Kbits symétrique, cela fait un upload
max de 8K, il faut faire tes scripts pour gérer une bande maximale de
7K. Je suggère un script comme suit(adapté d'un de mes scripts). Bien
évidemment, il faut adapter avec la fonction affecte qui est de la forme

affecte Nom_du_service type_du_port port priorité

avec

Nom_du_service = chaine de caractères pour l'affichage lors du lancement
type_du_port = d ou s suivant que le port spécifié soit celui en
    réception (sur la machine distante) où émission (sur la machine
    locale)
port = numéro du port (si)
priorité = numéro de la file de priorité


J'avais des scripts découpant la bande passante en deux étanches mais si
en fait, si tes paramètres sont bien fait, la gestion des priorités peut
suffire: Avec 3 téléchargement sur le serveur, le ping ne bouge pas d'un
iota sur «Counter Strike», ce qui est le meilleur des tests. Par contre
si tu essayes de te passer de la marge de sécurité de 10%, ça devient
moins efficace.

--------- le script ----------
#!/bin/sh
#    Limiteur de bande passante inspiré du travail de
#    Dan Singletary lui meme inspiré de
#    Inspiré de WonderShaper (www.lartc.org)
#    François Boisson (2003-2005)

DEV=ppp0
P0=2
P1=5
P2=5
P3=2
P4=6
P5=6
P6=2
PART=$[$P0+$P1+$P2+$P3+$P4+$P5+$P6]
UNITE=2
RATEUP=$[$PART*$UNITE]
# ça doit faire 56Kbits/s


affecte()
{
   iptables -t mangle -A MONLIMITEUR-OUT -p $4 --$2port $3 \
 -j MARK--set-mark 2$5}


if [ "$1" = "status" ]
then
        echo "[qdisc]"
        tc -s qdisc show dev $DEV
        echo "[class]"
        tc -s class show dev $DEV
        echo "[filter]"
        tc -s filter show dev $DEV
        echo "[iptables]"
        iptables -t mangle -L MONLIMITEUR-OUT -v -x 2> /dev/null
        exit
fi

tc qdisc del dev $DEV root    2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV -j MONLIMITEUR-OUT \
 2> /dev/null > /dev/null
iptables -t mangle -F MONLIMITEUR-OUT \ 
2>/dev/null> /dev/null
iptables -t mangle -X MONLIMITEUR-OUT 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
        echo "Limitation de débit désactivée sur $DEV."
        exit
fi


ip link set dev $DEV qlen 30

tc qdisc add dev $DEV root handle 1: htb default 26

tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit

tc class add dev $DEV parent 1:1 classid 1:20 htb \
        rate $[($RATEUP*$P0)/$PART]kbit \
        ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb \
        rate $[($RATEUP*$P1)/$PART]kbit \
        ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb \
        rate $[($RATEUP*$P2)/$PART]kbit \
        ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb \
        rate $[($RATEUP*$P3)/$PART]kbit \
        ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb \
        rate $[($RATEUP*$P4)/$PART]kbit \
        ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb \
        rate $[($RATEUP*$P5)/$PART]kbit \
        ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb \
        rate $[($RATEUP*$P6)/$PART]kbit \
        ceil ${RATEUP}kbit prio 6

tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10

tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 20 fw flowid 1:20
tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 21 fw flowid 1:21
tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 22 fw flowid 1:22
tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 23 fw flowid 1:23
tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 24 fw flowid 1:24
tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 25 fw flowid 1:25
tc filter add dev $DEV parent 1:0 prio 0 \
   protocol ip handle 26 fw flowid 1:26


iptables -t mangle -N MONLIMITEUR-OUT
iptables -t mangle -I POSTROUTING -o $DEV -j MONLIMITEUR-OUT

        # Trafic sur les ports bas
affecte "port bas" s 0:1024 tcp 3
affecte "port bas" d 0:1024 tcp 3

        # Petits paquets (des ACK probablement)
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length :64 -j
MARK \        --set-mark 21
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 65:128 \
        -j MARK --set-mark 22

        # Port ftp-data, faible priorité
affecte "FTP data" s 20 tcp 4
affecte "FTP data" d 20 tcp 4
affecte "FTP" s 21 tcp 3
affecte "FTP" d 21 tcp 3

        # Messagerie Immédiate AOL
affecte AOL d 5190 tcp 3
        # Messagerie Immédiate MSN

affecte "MSN" d 1863 tcp 3
affecte "MSN" d 6891 udp 4
affecte "MSN" d 6891 tcp 4
affecte "MSN" s 1863 tcp 3
affecte "MSN" s 6891 udp 4
affecte "MSN" s 6891 tcp 4
        # ICMP (ping) - forte priorité (impressionnez vos amis)
iptables -t mangle -A MONLIMITEUR-OUT -p icmp -j MARK \
        --set-mark 20
        # DNS (petits paquets)
affecte "DNS" d 53 udp 1
        # shell sécurisé
affecte "SSH" d ssh tcp 2
affecte "SSH" s ssh tcp 2
        # telnet 
affecte "telnet" d telnet tcp 2
affecte "telnet" s telnet tcp 2

        # Serveur WWW local
affecte "Apache" s http tcp 5

        # Serveur WWW local
affecte "Apache jury agreg" s 344 tcp 3
affecte "X11" d 6000 tcp 2
affecte "X11" d 6000 udp 2
affecte "VNC" s 5901:5905 tcp 2
affecte "VNC" s 5901:5905 udp 2
affecte "BattleNet" d 6112:6119 tcp 1
affecte "BattleNet" d 6112:6119 udp 1
affecte "BattleNet" s 6112:6119 tcp 1
affecte "BattleNet" s 6112:6119 udp 1
affecte "BattleNet" s 4000 tcp 1
affecte "BattleNet" d 4000 tcp 1
affecte "BattleNet" d 4000 udp 1
affecte "BattleNet" s 4000 udp 1
affecte "CounterStrike" d 27000:27045 udp 0
affecte "CounterStrike" s 27000:27030 udp 0
affecte "Quake3" d 27960 udp 1
affecte "Quake3" s 27960 udp 1
affecte "Xmule" s 3662 tcp 6
affecte "Xmule" s 3672 udp 6
affecte "Xmule" d 5259 udp 2
# reste
iptables -t mangle -A MONLIMITEUR-OUT -m mark --mark 0 -j MARK \
        --set-mark 26

echo "Limitation de trafic sortant activé sur $DEV.\
  Débit: ${RATEUP}kbit/sec."


François Boisson



Reply to: