Je suis un novice en matière de QoS sous Linux et j'essaie d'apprendre comment cela fonctionne en utilisant les documents de lartc.org comme référence.
Mon premier objectif est modeste : Je veux attribuer une priorité plus élevée au trafic sortant UDP, mais pour une raison quelconque, cela ne fonctionne pas.
Voici mes progrès actuels :
#!/bin/bash
IPTABLES=/usr/sbin/iptables
TC=/usr/sbin/tc
# All traffic is given an iptables MARK depending on its type:
# * 10 for low latency traffic (all UDP traffic)
# * 20 anything else
# all traffic
$IPTABLES -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 20
# udp
$IPTABLES -t mangle -A PREROUTING -i eth0 -p udp -j MARK --set-mark 10
# root qdisc
$TC qdisc add dev eth0 root handle 1: htb
# overall rate limits (1Mbps outgoing)
$TC class add dev eth0 parent 1: classid 1:1 htb rate 1Mbit
# UDP
$TC class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbit ceil 1Mbit prio 0
# everything else
$TC class add dev eth0 parent 1:1 classid 1:20 htb rate 512kbit ceil 1Mbit prio 1
# do fair shaping in each class
$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 10
# divert traffic marked by iptables into each class
$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
Les règles iptables semblent correctes :
$ sudo /usr/sbin/iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK all -- anywhere anywhere MARK set 0x14
MARK udp -- anywhere anywhere MARK set 0xa
Mais pour autant que je puisse dire, je n'obtiens pas le résultat escompté. Voici comment je vérifie :
$ sudo /usr/sbin/tc -s qdisc show
qdisc htb 1: dev eth0 root refcnt 2 r2q 10 default 0 direct_packets_stat 190646
Sent 73059945 bytes 190646 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 10: dev eth0 parent 1:10 limit 127p quantum 1514b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 20: dev eth0 parent 1:20 limit 127p quantum 1514b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
Vérifiez que les compteurs d'octets envoyés sont à 0.
Donc soit mon script a des problèmes, soit il fonctionne, mais j'utilise une mauvaise façon d'afficher les statistiques.
Voici mes questions :
- Quel est le problème avec mon script ?
- Y a-t-il d'autres moyens de déboguer les règles htb que d'utiliser "tc show" pour afficher les statistiques ?