HTBWondershaper Traffic Shaping adapté a la voip

 

mkdir -p /opt/scripts/htbw
cd /opt/scripts/htbw

pico -w /opt/scripts/htbw/HTBWondershaper

#---------a copier coller --------

#!/bin/bash -x


#

# Reglage de la ligne adsl a gérer.

##adsl 1MB up et 2MB down.
DOWNLINK=1920
UPLINK=930
DEV=eth1

NOPRIOPORTSRC="20 25 989 1080 1194 1214 1412 2086 2234 3364 4444 4662 4666 4672 4949 6346 6347 6699 6881 6882 8436 9001 9030 9050 9100 9999 44646"

# low priority destination ports
#NOPRIOPORTDST=""
# petite facilité dst=src.
NOPRIOPORTDST=$NOPRIOPORTSRC


#
HIGHPRIOPORTSRC="2427 4569 5004 5060 5061"
# 2427 mgcp
# 4569 iax
# 5004 rtp
# 5060 sip
# 5061 sip-tls
#reglage specifique a la voip

#HIGHPRIOPORTDST=""
# petite facilité dst=src.
HIGHPRIOPORTDST=$HIGHPRIOPORTSRC


# Now remove the following two lines :-)


#########################################################

if [ "$1" = "status" ]
then
    tc -s qdisc ls dev $DEV
    tc -s class ls dev $DEV
    exit
fi


# Nettoie les gestionnaires de sortie et d'entrés, cache les erreurs

tc qdisc del dev $DEV root    2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
    exit
fi

###### Flux montant (uplink)


# install root CBQ mise en forme de trafic. On a une carte réseau à 100 Mbits/s

tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit

# Le trafic est mis en forme à une vitesse de $UPLINK. Ceci évite
# d'énormes files d'attente dans votre modem DSL qui pénalisent le temps de
# latence.
# Classe principale


tc class add dev $DEV parent 1: classid 1:1 cbq rate ${UPLINK}kbit \
allot 1500 prio 5 bounded isolated

# classe de priorité supérieure 1:10:


tc class add dev $DEV parent 1:1 classid 1:10 cbq rate ${UPLINK}kbit \
   allot 1600 prio 1 avpkt 1000
# la classe par défaut et pour le trafic de masse 1:20. Reçoit légèrement
# moins que le trafic et a une priorité plus faible :


tc class add dev $DEV parent 1:1 classid 1:20 cbq rate $[9*$UPLINK/10]kbit \
   allot 1600 prio 2 avpkt 1000

# 'traffic non desiré'

tc class add dev $DEV parent 1:1 classid 1:30 cbq rate $[8*$UPLINK/10]kbit \
   allot 1600 prio 2 avpkt 1000

# all get Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10


#voip prioritisation
# 'match ip protocol 0x11 0xff' means UDP

#petite routine pour accelerer le codage

U32rootfilter="tc filter add dev $DEV parent 1: protocol ip"

# high priority for VoIP traffic (by TOS)
$U32rootfilter prio 1 u32 \
   match ip tos 0x68 0xff \
   match ip protocol 0x11 0xff \
   flowid 1:10
$U32rootfilter prio 1 u32 \
   match ip tos 0xb8 0xff \
   match ip protocol 0x11 0xff \
   flowid 1:10

# high priority for VoIP traffic (by source port)
for port in $HIGHPRIOPORTSRC
do
   $U32rootfilter prio 1 u32 \
      match ip sport $port 0xffff \
      match ip protocol 0x11 0xff \
      flowid 1:10
done

# high priority for VoIP traffic (by destination port)
for port in $HIGHPRIOPORTDST
do
   $U32rootfilter prio 1 u32 \
      match ip dport $port 0xffff \
      match ip protocol 0x11 0xff \
      flowid 1:10
done


# Démarrage des filtres
# le bit Délai Minimum du champ TOS (ssh, PAS scp) est dirigé vers
# 1:10 :
$U32rootfilter prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:10

# ICMP (ip protocol 1) est dirigé vers la classe interactive 1:10 de telle
# sorte que nous pouvons réaliser des mesures et impressionner nos
# amis :
$U32rootfilter prio  11 u32 \
        match ip protocol 1 0xff flowid 1:10
# Pour accélérer les téléchargements vers l'aval lors de la présence d'un
# flux montant, les paquets ACK sont placés dans la classe
# interactive :


$U32rootfilter 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 1:10

   #match u8 0x10 0xff at 33 \ added by hansces.com
   #see
   #http://lartc.org/howto/lartc.adv-filter.html#LARTC.ADV-FILTER.U32

#  add some ports that are high prio
#HIGHPRIOPORTDST=voip by libertalia
for a in $HIGHPRIOPORTDST
do
   $U32rootfilter prio 1 u32 \
      match ip dport $port 0xffff flowid 1:30
done

for port in $NOPRIOPORTSRC
do
   $U32rootfilter prio 1 u32 \
      match ip sport $port 0xffff flowid 1:30
done

for port in $NOPRIOHOSTSRC
do
   $U32rootfilter prio 1 u32 \
      match ip src $port flowid 1:30
done

for port in $NOPRIOHOSTDST
do
   $U32rootfilter prio 1 u32 \
      match ip dst $port flowid 1:30
done


# Le reste est considéré 'non-interactif' cad 'de masse' et fini dans 1:20
$U32rootfilter prio 1 u32 \
   match ip dst 0.0.0.0/0 flowid 1:20

########## Flux descendant (downlink) #############
# Ralentir le flux descendant à une valeur légèrement plus faible que votre
# vitesse réelle de manière à éviter la mise en file d'attente chez notre
# FAI. Faites des tests pour voir la vitesse maximum à laquelle vous pouvez
# le configurer. Les FAI ont tendance à avoir *d'énormes* files d'attente
# pour s'assurer de la rapidité des gros téléchargements.
#
# attache la réglementation d'entrée (ingress policer) :



tc qdisc add dev $DEV handle ffff: ingress


# Filtre *tout* (0.0.0.0/0), rejette tout ce qui arrive trop
# rapidement :

tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
   0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1

   logger "wshaper finished"

 

#------fin du copier/coller

sauvegarder le fichier 
Ctrl o
Ctrl x
rendez le executable
chmod +x HTBWondershaper  

 

integration dans le démarrage du serveur

pico -w /etc/rc.d/rc.local

 ajouter la ligne suivante qui lancera le script

/opt/scripts/htbw/HTBWondershaper
sauvegarder le fichier

Ctrl o
Ctrl x
 

 pour le lancer a la main

/opt/scripts/htbw/HTBWondershaper

 

/opt/scripts/htbw/HTBWondershaper status

un coup d'oeil sur

tc -s class show dev eth1

Suppression 

/opt/scripts/htbw/HTBWondershaper stop
rm /opt/scripts/htbw/HTBWondershaper

pico -w /etc/rc.d/rc.local
supprimer la ligne  
/opt/scripts/htbw/HTBWondershaper
sauvegarder le fichier

Ctrl o
Ctrl x

 Merci au site qui a servis de support  http://www.hanscees.com/sme7/wondershaperbeefedup.html

 

 
-   //// -      //// appels //// archivage //// archivista //// brother //// comme //// complete //// document //// documents //// données //// entreprise //// externe //// flowid //// gestion //// good //// interface //// jour //// leur //// match //// oneofficejet //// onephotosmart //// open //// pass //// peut //// port //// prestataire //// prio //// réseau //// scsi //// series //// serveur //// site //// solution //// système //// téléphonie //// untested ////       ////         //// 1200