Quality of Service

!=Begriffstutzig

Notwendigkeiten

Grundgedanken

Umsetzung

Pakete Sortieren

iptables -t mangle -A OUTPUT -m length --length 0:500 -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -m length --length 500:1500 -j MARK --set-mark 2

iptables -t mangle -A FORWARD -o $DEV -m length --length 0:500 -j MARK --set-mark 1 iptables -t mangle -A FORWARD -o $DEV -m length --length 500:1500 -j MARK --set-mark 2

iptables -t mangle -A FORWARD -o $DEV -m tos --tos 0x10 -j MARK --set-mark 1

iptables -t mangle -A FORWARD -o $DEV -s PRIVILEG_IP -j MARK --set-mark 1

iptables -t mangle -A FORWARD -o $DEV -p tcp --tcp-flags ACK ACK -j MARK --set-mark 1

iptables -t mangle -A FORWARD -o $DEV -p icmp -j MARK --set-mark 1

Warteschlangen konfigurieren

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

tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 6k

tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit burst 6k prio 1 tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[9*$UPLINK/10]kbit burst 6k prio 2

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 filter add dev $DEV parent 1: protocol ip handle 1 fw flowid 1:10 tc filter add dev $DEV parent 1: protocol ip handle 2 fw flowid 1:20

kurz & fertig

<nowiki>

UPLINK=120 DOWNLINK=980 OUTDEV=eth0

  1. bisherige Warteschlangen loeschen

tc qdisc del dev $OUTDEV root &>/dev/null tc qdisc del dev $OUTDEV ingress &>/dev/null

  1. neu anlegen

tc qdisc add dev $OUTDEV root handle 1: htb default 14

  1. die Gesamtwarteschlange verhindert, dass die Queue des ISP voll wird

tc class add dev $OUTDEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 6k

  1. Warteschlangen erzeugen

tc class add dev $OUTDEV parent 1:1 classid 1:11 htb rate ${UPLINK}kbit burst 6k prio 1

  1. fuer die wichtigen Pakete (ssh und ack)

tc class add dev $OUTDEV parent 1:1 classid 1:12 htb rate $[UPLINK*19/20]kbit burst 6k prio 2

  1. das Labor-Netz

tc class add dev $OUTDEV parent 1:1 classid 1:13 htb rate $[UPLINK*19/20]kbit burst 6k prio 3

  1. das WG-Netz

tc class add dev $OUTDEV parent 1:1 classid 1:14 htb rate $[UPLINK*19/20]kbit burst 6k prio 4

  1. alle anderen da draussen
  2. stochastische Fairness aktivieren, damit alle Sitzungen in einer Schlange "gut" durchkommen

tc qdisc add dev $OUTDEV parent 1:11 handle 11: sfq perturb 10 tc qdisc add dev $OUTDEV parent 1:12 handle 12: sfq perturb 10 tc qdisc add dev $OUTDEV parent 1:13 handle 13: sfq perturb 10 tc qdisc add dev $OUTDEV parent 1:14 handle 14: sfq perturb 10

  1. die iptables-Markierungen zum Filtern verwenden

tc filter add dev $OUTDEV parent 1: protocol ip handle 1 fw flowid 1:11 tc filter add dev $OUTDEV parent 1: protocol ip handle 2 fw flowid 1:12 tc filter add dev $OUTDEV parent 1: protocol ip handle 3 fw flowid 1:13 tc filter add dev $OUTDEV parent 1: protocol ip handle 4 fw flowid 1:14

  1. etwas verlangsamen, um die Queue beim ISP nicht zu fuellen

tc qdisc add dev $OUTDEV handle ffff: ingress tc filter add dev $OUTDEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $[DOWNLINK/2]kbit burst 1 0k drop flowid :1 </nowiki>

<nowiki>

  1. die drei Quellen mit Prioritaten versehen

iptables -t mangle -A FORWARD -i $WLAN_LABOR -o $WORLD -s ! $THORAX -j MARK --set-mark 4 iptables -t mangle -A FORWARD -i $WG_NETZ -o $WORLD -j MARK --set-mark 3 iptables -t mangle -A FORWARD -i $WLAN_LABOR -o $WORLD -s $THORAX -j MARK --set-mark 2

  1. die schnellen Pakete nach vorn schicken (vorherige Markierungen werden ueberschrieben)

iptables -t mangle -A FORWARD -o $WORLD -m length --length 0:500 -j MARK --set-mark 1 iptables -t mangle -A FORWARD -o $WORLD -m tos --tos 0x10 -j MARK --set-mark 1 iptables -t mangle -A FORWARD -o $WORLD -p icmp -j MARK --set-mark 1 iptables -t mangle -A FORWARD -o $WORLD -p tcp --tcp-flags ACK ACK -j MARK --set-mark 1

  1. der Rest (nur um zu gucken, ob was uebrigbleibt)

iptables -t mangle -A FORWARD -o $WORLD -m mark --mark 0 -j MARK --set-mark 5 </nowiki>

Quellen


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.