180 likes | 265 Vues
Learn how to set up a network scenario with Quality of Service (QoS) policies in Linux for a company, ensuring bandwidth control and connectivity between hosts. Includes configuration scripts and traffic management rules.
E N D
ExercícioQoS 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. provedor empresa ipB B rede 1 rede 2 G3 ipG2i ipG1i G1 G2 C ipA A ipG1e ipC ipG2e 500 Kbps 1000 Kbps
Configuração do Cenário EMPRESA (eth2) LINK (eth3) PROVEDOR (eth0) ipG1i ipG1e ipG2e ipG2i A B G1 G2 C ipA ipB ipB Provedor: Rede: 20.0.0.0/8 ipG2i: 20.10.$EQ.1/24 ipC: 20.10.$EQ.2/24 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
Configuracao de Rede (COMANDOS) #!/bin/bash -x echo “Entre com o número 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 #LINK ipG1e=10.0.$Equipe.1 ipG2e=10.0.$Equipe.2 #PROVEDOR ipG2i=20.33.$Equipe.1 ipC=20.33.$Equipe.2/8 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
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) 1000 kbps Classe PRIO 1 Marcar AF11(D)/AF21 (U) 500 kbs 0 kbs policiamento policiamento tráfego de UPLOAD tráfego de DOWLOAD G2 $ifL $ifP
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 AF12 Transmite como AF11 rate 500 kbps rate 500 kbps X drop balde 1 (62,5kbytes) balde 2 (62,5kbytes) tráfego download tráfego excedente
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 AF22 Transmite como AF21 rate 500 kbps rate 500 kbps X drop balde 1 (62,5kbytes) balde 2 (62,5kbytes) tráfego upload tráfego excedente
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. LINK 1000 Kbps class 1:1 class 1:11 class 1:12 class 1:13 UDP 100 Kbps 400 Kbps Default 100 Kbps 400 Kbps TCP 300 Kbps 1000 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) #!/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) # 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) # 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)
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