HTB

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání

Aktuální skript pro základní QoSy na centrálním routeru (bráně do internetu) vypadá takto:

modprobe sch_htb modprobe xt_connmark modprobe xt_dscp modprobe xt_mark DEV=eth0 AddClass="tc class add dev $DEV parent" AddFilter="tc filter add dev $DEV parent 1:0"

  1. VOIP budem QoSovat pomoci DSCP.HW krabicky jej nastavuji 0x68(SIP) a 0xb8(RTP)
  2. Bohuzel ustredny operatoru DSCP nechavaji = 0
  3. Reseni = nasadime Connmark a DSCP obnovime, QoSovat pak budeme dle DSCP.
  4. Obnova DSCP: If DSCP==0 pak nastav DSCP na hodnotu, jakou dava krabicka
  1. Nova tabulka "marking", ve ktere budeme znackovat VOIP packety:

iptables -t mangle -N marking iptables -t mangle -N checkDSCP

  1. Nejdrive se podivame, jestli packet ma pridelenou nejakou Connmark:

iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark

  1. pokud packet ma Connmark, tak zkontrolujeme jeho DSCP:

iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j checkDSCP

  1. pokud packet nema mark, tak ho zkusime oznacit v tabulce marking:

iptables -t mangle -A PREROUTING -m mark --mark 0 -j marking

 ######################## Tabulka checkDSCP #################
 #pokud ma packet Connmark i DSCP, pak nemame co resit - koncime!
 iptables -t mangle -A checkDSCP -m dscp ! --dscp 0 -j ACCEPT
 #jinak dle Connmarku nastavime DSCP (0x1a = 0x68>>2, 0x2e = 0xB8>>2)
 iptables -t mangle -A checkDSCP -m mark --mark 0x1a -j DSCP --set-dscp 0x1a
 iptables -t mangle -A checkDSCP -m mark --mark 0x2e -j DSCP --set-dscp 0x2e
 ######################## Tabulka marking ###################
 #pokud nema mark ale ani DSCP, neni to VOIP packet = koncime!
 iptables -t mangle -A marking -m dscp --dscp 0 -j ACCEPT
 #jinak zkusime DSCP==0x68? (SIP protokol)
 iptables -t mangle -A marking -m dscp --dscp 0x1a -j MARK --set-mark 0x1a
 #DSCP==0xB8? (RTP protokol = hlas)
 iptables -t mangle -A marking -m dscp --dscp 0x2e -j MARK --set-mark 0x2e
 #pridelenou znacku nakonec ulozime do connmarku
 iptables -t mangle -A marking -j CONNMARK --save-mark
  1. Inicializace Traffic Controlu: nejdriv vse smazeme

tc qdisc del dev $DEV root

  1. pak pridame zakladni root tridu

tc qdisc add dev $DEV root handle 1 htb r2q 100 default 10

  1. hlavni trida definuje konektivitu, kterou mame k dispozici

$AddClass 1: classid 1:1 htb rate 29.5mbit

  1. VOIP trida - nejvyssi priorita

$AddClass 1:1 classid 1:30 htb rate 2mbit prio 0 $AddFilter protocol ip prio 0 u32 match ip tos 0xb8 0xff $AddFilter protocol ip prio 0 u32 match ip tos 0x68 0xff

  1. slavicin bude mit id=1:10, linka nepusti vic nez 23.5Mbps

$AddClass 1:1 classid 1:10 htb rate 23.5mbit ceil 23.5mbit prio 7 $AddFilter protocol ip prio 1 u32 match ip dst 10.143.0.0/16 flowid 1:10

  1. provodov bude mit id=1:20, linka nepusti vic nez 15.5Mbps

$AddClass 1:1 classid 1:20 htb rate 4mbit ceil 15.5mbit prio 7 $AddFilter protocol ip prio 2 u32 match ip dst 192.168.2.0/24 flowid 1:20


Reference:

IPP2P - Kladivo na stahovače (ipp2p už nepoužíváme, ale Connmark jo!) http://www.linuxexpres.cz/praxe/ipp2p-kladivo-na-stahovace

Kompletní materiál o QoS v Linuxu: http://wiki.hkfree.org/wiki/index.php/QoS#ToS

Nejlepší stránky o HTB, které jsem našel jsou zde: http://www.mrak.cz/veci/htb_princip_detaily_priklad.php

Pěkné obrázky k jednotlivým qos disciplínám: http://dada.panelnet.cz/qos/

Jak na filtry v TC: http://lartc.org/howto/lartc.qdisc.filters.html