Pular para o conteúdo

CBQ + Cache Full (Squid)

Dica publicada em Linux / Introdução
Maviael Ramalho leaivam
Hits: 15.231 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

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.

Nenhuma dica encontrada.

Instalando o aMSN no Ubuntu

Como criar um atalho de navegação anônima no Chrome ou no Chromium

Como instalar o Divulga (Resultado das Eleições 2014)

Samba 4.2.1 como Domain Controller no CentOS 6.6 Minimal - Instalando e promovendo

Como instalar Cinnamon no Fedora

#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

#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

Entre na sua conta para comentar.