Eeegw – part III – Quality Of Service aka QOS
Voici mon tout premier script de QOS, ill date un peu et est loin de bien fonctionner 🙂
Je vous le montre afin que vous voyez un peu à quoi on s’attaque en parlant de QOS :
Script de QOS exemple1 basé sur HTB
#!/bin/bash #Constantes LOCALNET="213.41.xx.xx/255.255.255.255" MARKPRIO1="1" MARKPRIO2="2" MARKPRIO3="3" MARKPRIO4="4" MARKPRIO5="5" MARKPRIO6="6" MARKPRIO7="7" IFACE=eth0 UPRATE="8mbit" DOWNRATE="0.8mbit" PRIORATE1="5mbit" PRIORATE2="3mbit" PRIORATE3="2mbit" PRIORATE4="0.5mbit" QUANTUM1="12187" QUANTUM2="8625" QUANTUM3="5062" QUANTUM4="1500" BURST1="1000k" BURST2="400k" BURST3="200k" BURST4="10k" CBURST1="300k" CBURST2="200k" CBURST3="10k" CBURST4="1k" iptables -t mangle -F OUTPUT iptables -t mangle -F FORWARD iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A INPUT -p icmp -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A INPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p tcp --dport 687 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p tcp --dport 687 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A INPUT -p tcp --dport 687 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p udp --dport 687 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p udp --dport 687 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A INPUT -p udp --dport 687 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p tcp --dport 5060 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p tcp --dport 5060 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A INPUT -p tcp --dport 5060 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p udp --dport 5060 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p udp --dport 5060 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A INPUT -p udp --dport 5060 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A FORWARD -p tcp --dport 143 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A OUTPUT -p tcp --dport 143 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A FORWARD -p tcp --dport 80 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A INPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A INPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A FORWARD -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A INPUT -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3 ifconfig $IFACE txqueuelen 128 tc qdisc add dev $IFACE root handle 1:0 htb default 103 r2q 1 tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1 tc class add dev $IFACE parent 1:1 classid 1:101 htb rate $PRIORATE1 ceil $UPRATE quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0 tc class add dev $IFACE parent 1:1 classid 1:102 htb rate $PRIORATE2 ceil $UPRATE quantum $QUANTUM2 burst $BURST2 cburst $CBURST2 prio 1 tc class add dev $IFACE parent 1:1 classid 1:103 htb rate $PRIORATE3 ceil $UPRATE quantum $QUANTUM3 burst $BURST3 cburst $CBURST3 prio 2 tc class add dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4 ceil $P2PRATE quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3 tc filter add dev $IFACE parent 1:0 protocol ip prio 0 handle $MARKPRIO1 fw classid 1:101 tc filter add dev $IFACE parent 1:0 protocol ip prio 1 handle $MARKPRIO2 fw classid 1:102 tc filter add dev $IFACE parent 1:0 protocol ip prio 2 handle $MARKPRIO3 fw classid 1:103 tc filter add dev $IFACE parent 1:0 protocol ip prio 3 handle $MARKPRIO4 fw classid 1:104 tc qdisc add dev $IFACE parent 1:101 sfq perturb 16 quantum $QUANTUM1 tc qdisc add dev $IFACE parent 1:102 sfq perturb 16 quantum $QUANTUM2 tc qdisc add dev $IFACE parent 1:103 sfq perturb 16 quantum $QUANTUM3 tc qdisc add dev $IFACE parent 1:104 sfq perturb 16 quantum $QUANTUM4
Ce script est loin d’être optimisé.
Son but était de marquer via iptables certain type de flux, afin de les faire passer via des règles de tc/qdisc pour en limiter la bande passante. il utilise HTB (voir plus loin)
Ce script manque clairement de flexibilité.
Le saviez vous ?
“QoS” veut aussi dire “être désolé” en klingon.