Exercício
QoS Linux
Edgard Jamhour
2008, Edgard Jamhour
Avaliação
• Uma empresa tem um SLA com o provedor, definindo um
link com 500 Kbps garantindo, com rajadas eventuais de
1000 Kbps.
empresa
provedor
192.168.A.0/24
192.168.B.0/24
192.168.A.3
B
rede 2
rede 1
192.168.A.1
A
192.168.A.2
192.168.B.1
G1
500 Kbps
1000 Kbps
10.26.135.x/17
G2
C
192.168.B.2
10.26.135.y/17
2008, Edgard Jamhour
Configuração da Bancada
EMPRESA
A
eth0
192.168.A.3/24
B
PROVEDOR
G1i
eth0
192.168.A.2/24
G1
G1o
G2o
eth0:1
192.168.A.1/24
eth0
10.26.135.x/17
G2
G2i
eth0:1
192.168.B.1/24
eth0
10.26.135.y/17
C
eth0
192.168.B.2/24
Sentido do controle de banda
SUBSTITUA:
• A pelo número da sua equipe
• B pelo número da sua equipe + 10
• x e y são os números da etiqueta do computador
2008, Edgard Jamhour
Exemplo: Bancada 1
# Variaveis
RE=192.168.1.0; ME=255.255.255.0
A=192.168.1.3; B=192.168.1.2; G1i=192.168.1.1; G1o=10.26.135.17;
RP=192.168.11.0; MP=255.255.255.0
G2i=192.168.11.1; G2o=10.26.135.18; C=192.168.11.2
Mo=255.255.128.0
# HOST A
ifconfig eth0 $A netmask $ME
route add -net $RP netmask $MP gw $G1i
# HOST B
ifconfig eth0 $B netmask $ME
route add -net $RP netmask $MP gw $G1i
# G1
ifconfig eth0:1 $G1i netmask $ME
ifconfig eth0 $G1o netmask $Mo
route add -net $RP netmask $MP gw $G2o
# G2
ifconfig eth0:1 $G2i netmask $MP
ifconfig eth0 $G2o netmask $Mo
route add -net $RE netmask $ME gw $G1o
# HOST C
ifconfig eth0 $C netmask $MP
route add -net $RE netmask $ME gw $G2i
2008, Edgard Jamhour
Estrutura do Script
#!/bin/bash
if [ $# -eq 0 ]; then
echo " Digite a opcao após o script "
echo "1=A, 2=B, 3=G1, 4=G2, 5=C"
exit
fi
if [ $1 -eq 1 ]; then
echo "Configuracao do host A"
elif [ $1 -eq 2 ]; then
echo "Configuracao do host B"
elif [ $1 -eq 3 ]; then
echo "Configuracao do Gateway G1"
elif [ $1 -eq 4 ]; then
echo "Configuracao do Gateway G2"
elif [ $1 -eq 5 ]; then
echo "Configuracao do host C"
else
echo "Opcao invalida"
fi
2008, Edgard Jamhour
Redirecionamento ICMP
• Quando um roteador recebe um pacote, ele pode enviar uma
mensagem de redirecionamento (ICMP redirect) para o transmissor,
caso ele conheça um outro roteador que possa fazer a entrega com
menor custo.
– Isso acontece por exemplo, quando o transmissor, o receptor e o
roteador estão conectados na mesma rede local.
– A mensagem de redirecionamento cria uma nova rota no
transmissor.
SWITCH
2. Redirecionamento
B
A
3. Nova rota criada em A
1. Pacote destinado a B
4. Pacote entregue diretamente a B
2008, Edgard Jamhour
Roteamento sem Redirecionamento
• Nos roteadores:
• sysctl -w net.ipv4.ip_forward=1
• sysctl -w net.ipv4.conf.eth0.accept_redirects=0
• sysctl -w net.ipv4.conf.eth0.send_redirects=0
• sysctl -w net.ipv4.conf.all.accept_redirects=0
• sysctl -w net.ipv4.conf.all.send_redirects=0
• Nos clientes:
• sysctl -w net.ipv4.conf.eth0.accept_redirects=0
• sysctl -w net.ipv4.conf.all.accept_redirects=0
• OBS. As variáveis sysctl também são acessíveis através do diretório
/proc/sys/net
2008, Edgard Jamhour
Regras para o Gateway G1
• A empresa deseja controlar o aproveitamento do seu link,
criando uma árvore HTB com as seguintes características.
class 1:1
LINK
1000 Kbps
class 1:11
class 1:12
UDP
100 Kbps
400 Kbps
TCP
300 Kbps
1000 Kbps
class 1:111
192.168.A.2
200 Kbps
800 Kbps
class 1:13
Default
100 Kbps
400 Kbps
class 1:112
192.168.A.3
100 Kbps
200 Kbps
2008, Edgard Jamhour
Exemplo de Script para o Gateway 1 (Incompleto)
#!/bin/bash
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1:0 htb default 0
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1Mbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 300Kbit ceil 1000kbit
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 100kbit ceil 400kbit
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 100kbit ceil 400kbit
# criar as classes 1:111 e 1:112
tc qdisc add dev eth0 parent 1:111 handle 100: pfifo limit 10
tc qdisc add dev eth0 parent 1:112 handle 100: pfifo limit 10
tc qdisc add dev eth0 parent 1:12 handle 200: pfifo limit 10
tc qdisc add dev eth0 parent 1:13 handle 300: pfifo limit 10
tc filter add dev eth0 parent 1:0 prio 1 protocol ip u32 \
match ip protocol 0x06 0xff match ip src 192.168.A.2/32 flowid 1:111
# criar filtro para a classe 1:112
tc filter add dev eth0 parent 1:0 prio 1 protocol ip u32 \
match ip protocol 0x11 0xff flowid 1:12
tc filter add dev eth0 parent 1:0 prio 2 protocol ip u32 \
match ip protocol 0x00 0x00 flowid 1:13
2008, Edgard Jamhour
Regras para o Gateway G2
• O provedor irá aplicar as regras de policiamento para o
tráfego recebido de G1, de modo a garantir que o tráfego
não será excedido.
capacidade do link
DESCARTAR
policiamento
Classe PRIO 2
Marcar AF12
1000 kbs
Classe PRIO 1
Marcar AF11
policiamento
tráfego vindo de G1
500 kbs
0 kbs
policiamento
G
2
tráfego indo para G1
2008, Edgard Jamhour
Regras para G2
• O balde 1 é projetado para suportar rajadas de 1Mbps
(500Kbps excedentes) durante 1s.
• O balde 2 recebe o excesso do balde 1. Também pode
absorver 1s de rajadas de 1Mbps, mas descarta todo o
tráfego excedente.
rate 500 kbps
tráfego
indo/vindo G1
rate 500 kbps
balde 2
(62,5kbytes)
balde 1
(62,5kbytes)
tráfego
excedente
X
drop
tráfego
da rajada
2008, Edgard Jamhour
Exemplo de Script para G2 (incompleto com dmsark)
#!/bin/bash
tc qdisc del dev eth0 root
# cria as classes 1:1, 1:2, 1:3 e 1:4
tc qdisc add dev eth0 root handle 1:0 dsmark indices 4
# configuração da class 1:1: marcar AF11
tc class change dev eth0 classid 1:1 dsmark mask 0x0 value 0x28
# alterar a configuração da classe 1:2 para marcar AF12 0x30
...
tc filter add dev eth0 parent 1:0 protocol ip u32 \
match ip src 192.168.A.0/24 \
police rate 500kbit burst 62.5K continue flowid 1:1
tc filter add dev eth0 parent 1:0 protocol ip u32 \
match ip src 192.168.A.0/24 \
police rate 500kbit burst 62.5K drop flowid 1:2
2008, Edgard Jamhour
Entrega do Trabalho
• 1) Script de configuração completo
• 2) Estatísticas coletadas quando um arquivo é transferido de A para
C.
• 3) Estatísticas coletadas quando um arquivo é transferido de B para
C.
• OBS.
– estatísticas de G1: tc -s class show dev eth0
– estatísticas de G2: tc -s filter show dev eth0
• 4) Capturar alguns pacotes no Ethereal quando um arquivo é
transferido de A para C.
2008, Edgard Jamhour
SCRIP G2:
apenas se a versão de linux não suportar DSMARK
• #!/bin/bash
• tc qdisc del dev eth0 root
• tc qdisc add dev eth0 root handle 1:0 prio
• # criou as classes 1:1, 1:2 e 1:3
• tc filter add dev eth0 parent 1:0 protocol ip u32 match ip src
192.168.A.0/24 police rate 500kbit burst 62.5K continue flowid 1:1
•
tc filter add dev eth0 parent 1:0 protocol ip u32 match ip src
192.168.A.0/24 police rate 500kbit burst 62.5K drop flowid 1:2
2008, Edgard Jamhour
Comandos adicionais
• Reinicializar a configuração de rede
service network restart
• Apagar rotas acumuladas
read rota
route -n | grep $rota
if [ $? eq 0 ]; then
route del $rota
fi
2008, Edgard Jamhour
Download

Cenário prático com QoS