Aqui está o exemplo de trabalho baseado em tc e iptables.
Etapa 1:
Substitua a fila padrão pfifo_fast pela fila PRIO.
A fila PRIO é uma fila de classe e nos permite anexar filtros mais tarde para classificar diferentes tipos de tráfego.
Verifique a fila existente
tc -s qdisc ls dev eth0
Substitua por PRIO. Isto irá criar 3 bandas padrão.
tc qdisc add dev eth0 root handle 1: prio
Que pode ser visualizado como abaixo
1: root qdisc
/ | \
/ | \
/ | \
1:1 1:2 1:3 classes
E agora vamos adicionar filas classful. Vamos anexá-los às bandas 1: 1, 1: 2 e 1: 3
tc qdisc add dev eth0 parent 1:1 handle 10: sfq
tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000
tc qdisc add dev eth0 parent 1:3 handle 30: sfq
Que pode ser visualizado como abaixo
1: root qdisc
/ | \
/ | \
/ | \
1:1 1:2 1:3 classes
| | |
10: 20: 30: qdiscs qdiscs
sfq tbf sfq
0 1 2 bands
Com base no tráfego de pacote de TOS, você acessará
- 1:10 - tráfego interativo
- 1:20 - Tráfego interativo
- 1:30 - Tráfego em massa
Mas isso não é exatamente o que queremos, considerando que algumas aplicações realmente irão definir valores de TOS |
Queremos classificar o tráfego iniciado da porta 80 (sport = 80) para ir para 1: 2 (que moldamos e limitamos a taxa) e o restante do tráfego para 1: 1.
Desta forma, o resto do tráfego não terá que esperar pelo tráfego http e terá uma prioridade. Caso contrário, o tráfego http lento bloqueará outros tráfegos não interativos.
Então, como fazer isso?
Nós marcaremos nossos pacotes iniciados a partir da porta de origem 80 com a marca 2 via iptables e o tráfego não http com a marca 1
iptables -t mangle -A OUTPUT -m tcp -p tcp --sport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -m tcp -p tcp ! --sport 80 -j MARK --set-mark 1
E usaremos o filtro tc, que roteará os pacotes marcados com uma tag para uma determinada banda
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 2 fw flowid 1:2 ### Send traffic from source port 80 to tbf queue
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 1 fw flowid 1:1 ### Send all other traffic to sfq queue 1:1
E agora estamos prontos para testar. Vou iniciar o download do CentOS iso do servidor http e ao mesmo tempo vou iniciar a transferência do sftp da mesma imagem do mesmo servidor. Na imagem abaixo, podemos ver que, enquanto a transferência do sftp é de cerca de 13MB / s, a transferência http é limitada a 20kbit / s.
Comesteexemplo,abanda1:3neméusada.
Então,talvezfossemelhorusartbfnabanda1:3eter1:1e1:2comprioridadessfqedefault.Noentanto,estefoiapenasumtesterápidoedevesersuficienteparaesclarecerumpoucomelhoradocumen-taçãocomplicada.
Recursosusados: