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