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
|