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.
[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?