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 #################
    ######################## Tabulka checkDSCP #################
  #pokud ma packet Connmark i DSCP, pak nemame co resit - koncime!
    #pokud ma packet Connmark i DSCP, pak nemame co resit - koncime!
  iptables -t mangle -A checkDSCP -m dscp ! --dscp 0 -j ACCEPT
    iptables -t mangle -A checkDSCP -m dscp ! --dscp 0 -j ACCEPT
  #jinak dle Connmarku nastavime DSCP (0x1a = 0x68>>2, 0x2e = 0xB8>>2)
    #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 0x1a -j DSCP --set-dscp 0x1a
  iptables -t mangle -A checkDSCP -m mark --mark 0x2e -j DSCP --set-dscp 0x2e
    iptables -t mangle -A checkDSCP -m mark --mark 0x2e -j DSCP --set-dscp 0x2e


  ######################## Tabulka marking ###################
    ######################## Tabulka marking ###################
  #pokud nema mark ale ani DSCP, neni to VOIP packet = koncime!
    #pokud nema mark ale ani DSCP, neni to VOIP packet = koncime!
  iptables -t mangle -A marking -m dscp --dscp 0 -j ACCEPT
    iptables -t mangle -A marking -m dscp --dscp 0 -j ACCEPT
  #jinak zkusime DSCP==0x68? (SIP protokol)
    #jinak zkusime DSCP==0x68? (SIP protokol)
  iptables -t mangle -A marking -m dscp --dscp 0x1a -j MARK --set-mark 0x1a
    iptables -t mangle -A marking -m dscp --dscp 0x1a -j MARK --set-mark 0x1a
  #DSCP==0xB8? (RTP protokol = hlas)
    #DSCP==0xB8? (RTP protokol = hlas)
  iptables -t mangle -A marking -m dscp --dscp 0x2e -j MARK --set-mark 0x2e
    iptables -t mangle -A marking -m dscp --dscp 0x2e -j MARK --set-mark 0x2e
  #pridelenou znacku nakonec ulozime do connmarku
    #pridelenou znacku nakonec ulozime do connmarku
  iptables -t mangle -A marking -j CONNMARK --save-mark
    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