CBQ + Cache Full (Squid)

Publicado por Maviael Ramalho em 25/07/2008

[ Hits: 14.440 ]

 


CBQ + Cache Full (Squid)



Considerando que até o presente momento não encontrei na internet explicações ou regras eficientes para fazer cache full (Squid) com CBQ, e também considerando que há muita procura sobre o assunto, resolvi abordar o tema aqui objetivando facilitar a vida de muita gente que necessita desta informação.

Implementando regras no iptables

Na verdade é o iptables quem vai fazer com que o cache do Squid seja entregue ao cliente na velocidade determinada na regra de CBQ. Obviamente não faremos nenhuma modificação nas configurações do Squid.

# iptables -t mangle -A OUTPUT -p tcp -m connmark --mark 0 -m string --string "X-Cache: HIT" --algo kmp -j CONNMARK --set-mark 6
# iptables -t mangle -A OUTPUT -p tcp -j CONNMARK --restore-mark
# iptables -t mangle -A OUTPUT -p tcp -m mark --mark 6 -j CLASSIFY --set-class 1:9


Agora vamos entender:

1) O primeiro comando do iptables verifica se o pacote contém o cabeçalho "X-Cache: HIT", ou seja, se está no cache. Caso verdadeiro, marca o pacote com um número decimal qualquer, eu escolhi o número 6.

2) O terceiro comando do iptables encaminha para a classe ID 9 do CBQ caso o pacote esteja marcado com o número 6. Lembrando que a classe (ID 9) foi definida anteriormente através do nome do arquivo (cbq-0009.Cache-Full).

Criando as regras de CBQ

Primeiramente devemos criar um arquivo contendo as regras de CBQ para efetivar o cache full. No Fedora 7, os arquivos contendo as regras ficam em /etc/sysconfig/cbq.

Arquivo: cbq-0009.Cache-Full

DEVICE=eth1,100Mbit,10Mbit
RATE=10Mbit
WEIGHT=1Mbit
PRIO=5

O nome do arquivo deve obedecer ao seguinte formato "cbq-." Onde é representado por 2 bytes em hexadecimal, cujo intervalo vai de 0002 a FFFF, que na verdade determinará a classe ID do CBQ e pode ser atribuído qualquer palavra, de preferência algo que identifique a regra.

Agora vamos entender:

1) DEVICE -> interface interna (eth1), velocidade real da interface (100Mbit), parâmetro que deve ser proporcional à velocidade da interface (/10).

2) RATE -> Definimos a velocidade em que será entregue o cache do Squid ao cliente (10Mbit).

3) WEIGHT -> Parâmetro que deve ser proporcional à velocidade RATE (/10).

4) PRIO -> Prioridade do tráfego da classe.

Neste arquivo não definiremos o parâmetro RULE porque a classe servirá para qualquer IP ou sub-rede.

Considerações finais

Considerando que estas regras de iptables exigem esforço do processador, não recomendo sua aplicação para quem tem inúmeros clientes requisitando conexões ao Squid.

Estou utilizando estas regras desde o início deste mês (julho/2008) numa máquina k6-III 400Mhz (Fedora 7 - squid 2.6.STABLE16 transparent) com 9 clientes e esta é a minha média (CPU load average 0.24).

Espero ter contribuído e desejo boa sorte àqueles que desejam fazer cache full com CBQ.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Validando checksum MD5 de arquivos

Usar um modem Agere (Lucent) V.92 56K no Linux (Debian)

Configurando interfaces de rede no Debian

Node.js e Apache juntos usando mod_proxy

Redirecionando seus emails no Postfix ou Sendmail

  

Comentários
[1] Comentário enviado por leaivam em 25/07/2008 - 18:28h

Complementando ...

Os módulos abaixo devem ser carregados:

modprobe ipt_CONNMARK
modprobe ipt_string


[2] Comentário enviado por marcianovc em 26/07/2008 - 17:15h

amigo, como aplico isso ae nesse tuto aq http://www.guiadohardware.net/dicas/servidor-linux-provedor-wireless.html
estou usando um servidor com a configuracao do tuto ae, mas entre a rede local a velocidade ainda ta sendo controlada, onde q eu coloco estes comandos ae q vc falo ?, desde ja obrigado...

[3] Comentário enviado por leaivam em 26/07/2008 - 18:42h

Prezado marcianovc

Se você está seguindo a risca o tutorial mencionado no link acima, então faça o seguinte:

No arquivo: /etc/provedor/configurador.sh após o comando done já no finalzinho, coloque o seguinte:

CACHE="/etc/shaper/cbq-2222.Cache-full"
touch $CACHE
echo "DEVICE=eth1,100Mbit,10Mbit" >> $CACHE
echo "RATE=10MBit" >> $CACHE
echo "WEIGHT=1Mbit" >> $CACHE
echo "PRIO=5" >> $CACHE

No arquivo: /etc/provedor/firewall.sh, antes de limpar as regras, no início do arquivo, coloque o seguinte:

/caminho_do_modprobe/modprobe ipt_CONNMARK
/caminho_do_modprobe/modprobe ipt_string

No mesmo arquivo e após as regras que habilitam o Proxy transparente coloque o seguinte:

/caminho_do_iptables/iptables -t mangle -A OUTPUT -p tcp -m connmark --mark 0 -m string --string "X-Cache: HIT" --algo kmp -j CONNMARK --set-mark 6
/caminho_do_iptables/iptables -t mangle -A OUTPUT -p tcp -j CONNMARK --restore-mark
/caminho_do_iptables/iptables -t mangle -A OUTPUT -p tcp -m mark --mark 6 -j CLASSIFY --set-class 1:2222

Estou sugerindo uma class ID 2222 por não saber como você configurou os códigos de seus clientes no arquivo /etc/provedor/clientes

No squid você não precisa fazer nada.

Espero ter ajudado.

[4] Comentário enviado por marcianovc em 27/07/2008 - 09:14h

os clientes estao como no tutorial la, assim:

Cadastramento dos Clientes


Os seus clientes serão cadastrados no arquivo "/etc/provedor/clientes". Crie esse arquivo:


# vi /etc/provedor/clientes

Agora preencha esse arquivo como exemplo:


0010|novo-teste|192.168.0.7|128|12|8|00:E0:06:EF:7F:D8|3|A
0011|teste|192.168.0.3|256|30|15|00:0B:CD:A4:AE:2C|5|B

[5] Comentário enviado por leaivam em 27/07/2008 - 10:15h

Prezado marcianovc

Considerando que o primeiro código de cliente que você está utilizando é 0010, você pode utilizar uma classID menor, como por exemplo 9.

Ficaria assim:

No arquivo: /etc/provedor/configurador.sh após o comando done já no finalzinho, coloque o seguinte:

CACHE="/etc/shaper/cbq-0009.Cache-full"
touch $CACHE
echo "DEVICE=eth1,100Mbit,10Mbit" >> $CACHE
echo "RATE=10MBit" >> $CACHE
echo "WEIGHT=1Mbit" >> $CACHE
echo "PRIO=5" >> $CACHE

No arquivo: /etc/provedor/firewall.sh, antes de limpar as regras, no início do arquivo, coloque o seguinte:

/caminho_do_modprobe/modprobe ipt_CONNMARK
/caminho_do_modprobe/modprobe ipt_string

No mesmo arquivo e após as regras que habilitam o Proxy transparente coloque o seguinte:

/caminho_do_iptables/iptables -t mangle -A OUTPUT -p tcp -m connmark --mark 0 -m string --string "X-Cache: HIT" --algo kmp -j CONNMARK --set-mark 6
/caminho_do_iptables/iptables -t mangle -A OUTPUT -p tcp -j CONNMARK --restore-mark
/caminho_do_iptables/iptables -t mangle -A OUTPUT -p tcp -m mark --mark 6 -j CLASSIFY --set-class 1:9

Boa sorte com seu cache full em CBQ.

[6] Comentário enviado por snakerj em 28/07/2008 - 14:42h

amigo, o cache full e o que eu estava querendo e segui todos os seus passos e esta funcionando uma maravilha, obrigado

[7] Comentário enviado por marcianovc em 10/09/2008 - 17:22h

obrigado leaivam

funciono q eh uma maravilha aq blzinha... ta do jeito q eu queria....

[8] Comentário enviado por fenix_chikinho em 08/11/2008 - 00:37h

Amigo muito obrigado pela a dica, fiz aqui conforme suas explicações, porem adaptei para as regras tc do iproute,
depois de um tempo parau de funcionar, dai fiz utilizando o CBQ, e acontece a mesma coisa, quando faço donwload pelo o firefox alguns arquivos baixam na velocidade full, mas pelo internet explore ou por algum aceledor de donwload, na funfa mesmo.
minha duvida é esseas regras para marcar os pocotes, eu coloco em meu firewall antes ou depois da regras que faz o direcionamento para o prox transparente.
muito obridado t+

[9] Comentário enviado por daniel.uramg em 06/04/2009 - 11:43h

Meus Squdi funciona da seguinte forma:
Minha rede tem +- 20 maquinas, onde 3 sao minhas, que uso IP fixo que tem acesso liberado
todas as demais atribuidas por DHCP tem limite de banda a +- 600k, com Delay_pools.
Meu servidor roda o Kurumin 7 com Squid 2.6 Stables, e proxy transparente.
Eu preciso que o squid NÃO limite a banda dos arquivos que já estão em cache, é exatamente isso que explica neste tutorial né?
Só que não uso CBQ! Somente o Squid com delay pools, e o firewall do Kurumin.

Po0dem ver que não intendo quase p$% nenhuma de Linux, estou aprendendo agora na marra apenas estudando os tutoriais.

Como aplico essa solução em meu servidor??

Valew....

[10] Comentário enviado por evaniobs em 08/08/2009 - 00:38h

Seguir todos os passos mas o meu controle de tráfego parou de funcionar será que o arquivo do CBQ que eu fiz não pode ficar com o final .in Agluém ai pode ajudar?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts