CBQ + Cache Full (Squid)

Publicado por Maviael Ramalho em 25/07/2008

[ Hits: 13.971 ]

 


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

Peppermint 10 em um PC da "pré-histórico"

Microsoft Office 2010 no openSUSE 12.2 - Instalação via Wine

Seu MSN parou de funcionar?

Instalando placas wireless Realtek RTL8188CE e RTL8192CE-VA4 802.11 no Slackware 13.37

Tecla Super (tecla Windows) para todos os logins no modo gráfico

  

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