HTB: Porovnání verzí
Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání
Bez shrnutí editace |
Bez shrnutí editace |
||
Řádek 1: | Řádek 1: | ||
Aktuální skript pro základní QoSy na centrálním routeru (bráně do internetu) vypadá takto: | Aktuální skript pro základní QoSy na centrálním routeru (bráně do internetu) vypadá takto: | ||
modprobe sch_htb | modprobe sch_htb | ||
modprobe xt_connmark | modprobe xt_connmark | ||
modprobe xt_dscp | modprobe xt_dscp | ||
modprobe xt_mark | modprobe xt_mark | ||
DEV=eth0 | DEV=eth0 | ||
AddClass="tc class add dev $DEV parent" | AddClass="tc class add dev $DEV parent" | ||
AddFilter="tc filter add dev $DEV parent 1:0" | AddFilter="tc filter add dev $DEV parent 1:0" | ||
# VOIP budem QoSovat pomoci DSCP.HW krabicky jej nastavuji 0x68(SIP) a 0xb8(RTP) | # VOIP budem QoSovat pomoci DSCP.HW krabicky jej nastavuji 0x68(SIP) a 0xb8(RTP) | ||
# Bohuzel ustredny operatoru DSCP nechavaji = 0 | # Bohuzel ustredny operatoru DSCP nechavaji = 0 | ||
# Reseni = nasadime Connmark a DSCP obnovime, QoSovat pak budeme dle DSCP. | # Reseni = nasadime Connmark a DSCP obnovime, QoSovat pak budeme dle DSCP. | ||
# Obnova DSCP: If DSCP==0 pak nastav DSCP na hodnotu, jakou dava krabicka | # Obnova DSCP: If DSCP==0 pak nastav DSCP na hodnotu, jakou dava krabicka | ||
#Nova tabulka "marking", ve ktere budeme znackovat VOIP packety: | #Nova tabulka "marking", ve ktere budeme znackovat VOIP packety: | ||
iptables -t mangle -N marking | iptables -t mangle -N marking | ||
iptables -t mangle -N checkDSCP | iptables -t mangle -N checkDSCP | ||
#Nejdrive se podivame, jestli packet ma pridelenou nejakou Connmark: | #Nejdrive se podivame, jestli packet ma pridelenou nejakou Connmark: | ||
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark | iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark | ||
#pokud packet ma Connmark, tak zkontrolujeme jeho DSCP: | #pokud packet ma Connmark, tak zkontrolujeme jeho DSCP: | ||
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j checkDSCP | iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j checkDSCP | ||
#pokud packet nema mark, tak ho zkusime oznacit v tabulce marking: | #pokud packet nema mark, tak ho zkusime oznacit v tabulce marking: | ||
iptables -t mangle -A PREROUTING -m mark --mark 0 -j 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 | |||
#Inicializace Traffic Controlu: nejdriv vse smazeme | #Inicializace Traffic Controlu: nejdriv vse smazeme | ||
tc qdisc del dev $DEV root | tc qdisc del dev $DEV root | ||
#pak pridame zakladni root tridu | #pak pridame zakladni root tridu | ||
tc qdisc add dev $DEV root handle 1 htb r2q 100 default 10 | tc qdisc add dev $DEV root handle 1 htb r2q 100 default 10 | ||
#hlavni trida definuje konektivitu, kterou mame k dispozici | #hlavni trida definuje konektivitu, kterou mame k dispozici | ||
$AddClass 1: classid 1:1 htb rate 29.5mbit | $AddClass 1: classid 1:1 htb rate 29.5mbit | ||
#VOIP trida - nejvyssi priorita | #VOIP trida - nejvyssi priorita | ||
$AddClass 1:1 classid 1:30 htb rate 2mbit prio 0 | $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 0xb8 0xff | ||
$AddFilter protocol ip prio 0 u32 match ip tos 0x68 0xff | $AddFilter protocol ip prio 0 u32 match ip tos 0x68 0xff | ||
#slavicin bude mit id=1:10, linka nepusti vic nez 23.5Mbps | #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 | $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 | $AddFilter protocol ip prio 1 u32 match ip dst 10.143.0.0/16 flowid 1:10 | ||
#provodov bude mit id=1:20, linka nepusti vic nez 15.5Mbps | #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 | $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 | $AddFilter protocol ip prio 2 u32 match ip dst 192.168.2.0/24 flowid 1:20 | ||
Verze z 19. 11. 2007, 04:32
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" # VOIP budem QoSovat pomoci DSCP.HW krabicky jej nastavuji 0x68(SIP) a 0xb8(RTP) # Bohuzel ustredny operatoru DSCP nechavaji = 0 # Reseni = nasadime Connmark a DSCP obnovime, QoSovat pak budeme dle DSCP. # Obnova DSCP: If DSCP==0 pak nastav DSCP na hodnotu, jakou dava krabicka
#Nova tabulka "marking", ve ktere budeme znackovat VOIP packety: iptables -t mangle -N marking iptables -t mangle -N checkDSCP
#Nejdrive se podivame, jestli packet ma pridelenou nejakou Connmark: iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark #pokud packet ma Connmark, tak zkontrolujeme jeho DSCP: iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j checkDSCP #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
#Inicializace Traffic Controlu: nejdriv vse smazeme tc qdisc del dev $DEV root #pak pridame zakladni root tridu tc qdisc add dev $DEV root handle 1 htb r2q 100 default 10
#hlavni trida definuje konektivitu, kterou mame k dispozici $AddClass 1: classid 1:1 htb rate 29.5mbit
#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
#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
#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