Load Balance e QOS com HTB

De Wiki NOC


Meu link: 2 megas
Eth0 interface externa
Eth1 rede interna

  1. !/bin/sh


  1. TOS (digo que todos os pacotes marcados com 10 devem ter espera mínima)

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 10

  1. CONNMARK (patch-o-matic)

iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT

  1. MARCA P2P (marco com 13 p2p usando layer7)

iptables -A PREROUTING -t mangle -m layer7 --l7proto fasttrack -j MARK --set-mark 13
iptables -A PREROUTING -t mangle -m layer7 --l7proto ares -j MARK --set-mark 13
… tem mais, mas a lista é meio longa

    1. OUTROS SIPS e skype-out

iptables -A PREROUTING -t mangle -d ! 65.70.177.88 -m layer7 --l7proto sip -j MARK --set-mark 12 (todos os SIPs que não o meu marco com 12)
iptables -A PREROUTING -t mangle -m layer7 --l7proto skypeout -j MARK --set-mark 12 (skype para fone fixo tb com 12)

    1. MEU SIP (marco com 12 todos os pacotes vindos e destinados ao servidor SIP de onde compro minutos)

iptables -A PREROUTING -t mangle -p tcp -d 65.70.177.88 -j MARK --set-mark 10
iptables -A PREROUTING -t mangle -p udp -d 65.70.177.88 -j MARK --set-mark 10
iptables -A PREROUTING -t mangle -p tcp -s 65.70.177.88 -j MARK --set-mark 10
iptables -A PREROUTING -t mangle -p udp -s 65.70.177.88 -j MARK --set-mark 10


  1. syn flags (marco com 10 tambem os pacotes syn flags)

iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 10

  1. HTTP (marco com 11 o que for HTTP)

iptables -A PREROUTING -t mangle -m layer7 --l7proto http -j MARK --set-mark 11

  1. CONNMARK

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

AI COMECO O HTB:

    1. CONTROLE DE UPLOAD ETH0


  1. Criando o ROOT

tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate 2048kbit ceil 2048kbit

  1. MEU SIP e syn flags (prioridade maxima para o meu SIP e syn flags)

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 256kbit ceil 512kbit prio 0
tc filter add dev eth0 parent 1:0 protocol ip prio 0 handle 10 fw classid 1:10
tc qdisc add dev eth0 parent 1:10 handle 100: sfq perturb 10

    1. OUTROS SIPS e skype-out (pequena prioridade para outros SIPs e skypeout)

tc class add dev eth0 parent 1:1 classid 1:12 htb rate 64kbit ceil 64kbit prio 5
tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 12 fw classid 1:12
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10

  1. P2P (menor prioridade de todas e pouquissima banda)

tc class add dev eth0 parent 1:1 classid 1:13 htb rate 128kbit ceil 128kbit prio 6
tc filter add dev eth0 parent 1:1 protocol ip prio 6 handle 13 fw classid 1:13
tc qdisc add dev eth0 parent 1:13 handle 130: sfq perturb 10

  1. resto (o que nao for das demais regras é para cair aqui)

tc class add dev eth0 parent 1:1 classid 1:15 htb rate 1600kbit ceil 2048kbit prio 1
tc qdisc add dev eth0 parent 1:15 handle 150: sfq perturb 10


    1. CONTROLE DE DOWNLOAD ETH1


  1. Criando o ROOT

tc qdisc add dev eth1 root handle 1: htb default 25
tc class add dev eth1 parent 1: classid 1:1 htb rate 2048kbit ceil 2048kbit

  1. MEU SIP e syn flags (maior prioridade)

tc class add dev eth1 parent 1:1 classid 1:20 htb rate 256kbit ceil 512kbit prio 0
tc filter add dev eth1 parent 1:0 protocol ip prio 0 handle 10 fw classid 1:20
tc qdisc add dev eth1 parent 1:20 handle 200: sfq perturb 10

  1. HTTP E HTTPS (segunda maior prioridade)

tc class add dev eth1 parent 1:1 classid 1:21 htb rate 1024kbit ceil 2048kbit prio 1
tc filter add dev eth1 parent 1:0 protocol ip prio 1 handle 11 fw classid 1:21
tc qdisc add dev eth1 parent 1:21 handle 210: sfq perturb 10

  1. resto (o que nao for das demais regras cai aqui)

tc class add dev eth1 parent 1:1 classid 1:25 htb rate 512kbit ceil 2048kbit prio 2
tc qdisc add dev eth1 parent 1:25 handle 250: sfq perturb 10


  1. P2P (maximo 512 e com baixa prioridade)

tc class add dev eth1 parent 1:1 classid 1:23 htb rate 256kbit ceil 512kbit prio 6
tc filter add dev eth1 parent 1:1 protocol ip prio 6 handle 13 fw classid 1:23



Uma coisa: vi em alguns tutoriais que depois de cada regra de marca colocam um –j RETURN assim:

iptables -A PREROUTING -t mangle -m layer7 --l7proto http -j MARK --set-mark 11
iptables -A PREROUTING -t mangle -m layer7 --l7proto http –j RETURN


Ferramentas pessoais