Exercício cio QoS Linux Edgard Jamhour
Cenário Uma empresa tem um SLA com o provedor, definindo um link com 500 Kbps garantindo, com rajadas eventuais de 1000 Kbps. empresa provedor B ipb rede 1 rede 2 G3 ipg1i ipg2i A ipa G1 ipg1e 500 Kbps 1000 Kbps ipg2e G2 C ipc
Configuração do Cenário EMPRESA (eth2) LINK (eth3) PROVEDOR (eth0) ipg1i ipg1e ipg2e ipg2i A B G 1 G 2 C ipa ipb ipb Empresa: rede: 192.168.$EQ.0/24 ipa: 192.168.$EQ.2/24 ipb: 192.168.$EQ.3/24 ipg1i: 192.168.$EQ.1/24 Link ipg2e: 10.0.$EQ.1/30 ipg2i: 10.0.$EQ.2/30 Provedor: Rede: 20.0.0.0/8 ipg2i: 20.10.$EQ.1/24 ipc: 20.10.$EQ.2/24
Configuracao de Rede (COMANDOS) #!/bin/bash -x echo Entre com o número da equipe read Equipe #VARIAVEIS ife=eth2 ifl=eth3 ifp=eth0 if [ $# -eq 0 ]; then echo "Digite a opcao apos o script" echo "1=A, 2=B, 3=G1, 4=G2, 5=C" exit fi >> chmod +x confrede.sh >> confrede.sh 1 #EMPRESA RE=192.168.$Equipe.0/24 ipa=192.168.$equipe.2/24 ipb=192.168.$equipe.3/24 ipg1i=192.168.$equipe.1 #LINK ipg1e=10.0.$equipe.1 ipg2e=10.0.$equipe.2 #PROVEDOR ipg2i=20.33.$equipe.1 ipc=20.33.$equipe.2/8
Configuracao de Rede (COMANDOS) if [ $1 -eq 1 ]; then echo "Configurando o host A" ifconfig $ife $ipa route add default gw $ipg1i elif [ $1 -eq 2 ]; then echo "Configurando o host B" ifconfig $ife $ipb route add default gw $ipg1i elif [ $1 -eq 3 ]; then echo "Configurando G1" ifconfig $ife $ipg1i/24 ifconfig $ifl $ipg1e/30 route add default gw $ipg2e sysctl -w net.ipv4.ip_forward=1 elif [ $1 -eq 4 ]; then echo "Configurando G2" ifconfig $ife $ipg2e/30 ifconfig $ifp $ipg2i/8 route add default gw 20.0.0.1 route add -net $RE gw $ipg1e sysctl -w net.ipv4.ip_forward=1 elif [ $1 -eq 5 ]; then echo "Configurando C" ifconfig $ifp $ipc route add -net $RE gw $ipg2i else echo "Opcao Invalida" fi
PARTE 1 1) Crie o cenário de rede conforme indicado 2) Verifique se existe conectividade entre os hosts A e C 3) Verifique se existe conectividade entre os hosts B e C
Regras para o Provedor O provedor irá aplicar as regras de policiamento para o tráfego recebido ou destinado a empresa, de modo a garantir que o tráfego não será excedido. DESCARTAR capacidade do link Classe PRIO 2 Marcar AF12 (D)/AF 22(U) Classe PRIO 1 Marcar AF11(D)/AF21 (U) 1000 kbps 500 kbs 0 kbs policiamento policiamento tráfego de UPLOAD $ifl G2 $ifp tráfego de DOWLOAD
Regras para DownLoad Token Bucket 1: taxa média até 500Kbps = 62.5Kbytes/s Balde de 62.5Kbytes (suporta uma rajada de 1Mbps por um 1s) Token Bucket 2: Taxa média de 500Kbps a 1000Kbps Transmite como AF11 Transmite como AF12 rate 500 kbps rate 500 kbps tráfego download balde 1 (62,5kbytes) balde 2 (62,5kbytes) tráfego excedente X drop
Regras para UpLoad Token Bucket 1: taxa média até 500Kbps = 62.5Kbytes/s balde: 62.5Kbytes (suporta uma rajada de 1Mbps por um 1s) Token Bucket 2: Taxa média de 500Kbps a 1000Kbps Transmite como AF21 Transmite como AF22 rate 500 kbps rate 500 kbps tráfego upload balde 1 (62,5kbytes) balde 2 (62,5kbytes) tráfego excedente X drop
Script para o Provedor (Download) #!/bin/bash -x echo "Entre com o Numero da Equipe" read Equipe #VARIAVEIS ife=eth2 ifl=eth3 ifp=eth0 #EMPRESA RE=192.168.$Equipe.0/24 ipa=192.168.$equipe.2 ipb=192.168.$equipe.3 #Limpa a configuração anterior tc qdisc del root dev $ifl
Script para o Provedor (Download) #cria as classes 1:1, 1:2, 1:3 e 1:4 tc qdisc add dev $ifl root handle 1:0 dsmark indices 4 # confira a classe 1:1 para marcar AF11 tc class change dev $ifl classid 1:1 dsmark mask 0x0 value 0x28 # confira a classe 1:1 para marcar AF12 tc class change dev $ifl classid 1:2 dsmark mask 0x0 value 0x30 # cria os filtros com policiamento tc filter add dev $ifl parent 1:0 protocol ip prio 1 u32 \ match ip dst $RE \ police rate 500kbit burst 62.5k continue flowid 1:1 tc filter add dev $ifl parent 1:0 protocol ip prio 2 u32 \ match ip dst $RE \ police rate 500kbit burst 62.5k drop flowid 1:2
PARTE 2 1) Crie um script para fazer o controle de upload, fazendo as marcações AF21 e AF22 2) Configure os scripts de donwload e upload no roteador G2 3) Efetue um download de A para C, e verifique o efeito da marcação dos pacotes com o TCP dump ( A captura dos pacotes precisa se iniciada antes do download) tcpdump i $ifl vv > provdown.txt tcpdump i $ifp vv > provup.txt 4) Verifique as estatísticas geradas pelo roteador ( As estatísicas devem ser tomadas após o término do download) tc s show filters dev $ifl > sprovup.txt tc s show filters dev $ifp > sprovdown.txt 4) Entregar todos os arquivos txt gerados no passo 3 e 4 (entrega por equipe)
Regras para a Empresa 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 class 1:13 TCP 300 Kbps 1000 Kbps UDP 100 Kbps 400 Kbps Default 100 Kbps 400 Kbps class 1:111 class 1:112 192.168.E.2 200 Kbps 800 Kbps 192.168.E.3 100 Kbps 200 Kbps
Exemplo de Script para a Empresa (UpLoad( UpLoad) #!/bin/bash -x echo "Entre com o Numero da Equipe" read Equipe #VARIAVEIS ife=eth2 ifl=eth3 ifp=eth0 #EMPRESA RE=192.168.$Equipe.0/24 ipa=192.168.$equipe.2/24 ipb=192.168.$equipe.3/24 ipg1i=192.168.$equipe.1 # 0 - Limpa a configuracao anterior tc qdisc del root dev $ifl
Exemplo de Script para a Empresa (UpLoad( UpLoad) # 1 - Cria a qdisc principal tc qdisc add dev $ifl root handle 1:0 htb #2 - Crias as classes tc class add dev $ifl parent 1:0 classid 1:1 htb rate 1Mbit # classe para TCP tc class add dev $ifl parent 1:0 classid 1:11 htb rate 300kbit ceil 1000kbit tc class add dev $ifl parent 1:0 classid 1:111 htb rate 200kbit ceil 800kbit tc class add dev $ifl parent 1:0 classid 1:112 htb rate 100kbit ceil 200kbit # classe para UDP tc class add dev $ifl parent 1:0 classid 1:12 htb rate 100kbit ceil 400kbit # 3 - Cria as qdiscs para as classes filhas tc qdisc add dev $ifl parent 1:111 handle 2:0 pfifo limit 10 tc qdisc add dev $ifl parent 1:112 handle 3:0 pfifo limit 10 tc qdisc add dev $ifl parent 1:12 handle 4:0 pfifo limit 10 tc qdisc add dev $ifl parent 1:13 handle 5:0 pfifo limit 10
Exemplo de Script para a Empresa (UpLoad( UpLoad) # 4 - Cria os filtros #filtro para TCP no computador A tc filter add dev $ifl parent 1:0 protocol ip prio 1 u32 \ match ip protocol 0x06 0xff \ match ip src $ipa \ flowid 1:111 #filtro para TCP no computador B tc filter add dev $ifl parent 1:0 protocol ip prio 1 u32 \ match ip protocol 0x06 0xff \ match ip src $ipb \ flowid 1:112 #filtro para UDP tc filter add dev $ifl parent 1:0 protocol ip prio 2 u32 \ match ip protocol 0x11 0xff \ flowid 1:12 #filtro para outros tipos de tráfego tc filter add dev $ifl parent 1:0 protocol ip prio 3 u32 \ match ip protocol 0x0 0x0 \ flowid 1:13
PARTE 3 1) Crie um script para fazer o controle de download 2) Configure os scripts no roteador da empresa (G1) 3) Efetue um download de C para A e verifique as estatísticas geradas pelo roteador ( As estatísticas devem ser tomadas após o término do download) tc s show filters dev $ifl > sempup.txt tc s show filters dev $ife > sempdown.txt 4) Efetue um download de C para B e verifique as estatísticas geradas pelo roteador ( As estatísicas devem ser tomadas após o término do download) tc s show filters dev $ifl > sempup.txt tc s show filters dev $ife > sempdown.txt 4) Entregar todos os arquivos txt gerados nos passos 3 e 4 (entrega por equipe)
Reinicializar a configuração de rede service network restart Comandos adicionais Apagar rotas acumuladas read rota route -n grep $rota if [ $? eq 0 ]; then route del $rota fi