[FUG-BR] Sonho realizado: 2 links + 2squid com ZPH

Mario Augusto Mania m3.bsd.mania em gmail.com
Quinta Março 6 14:58:46 BRT 2008


Caros

To escrevendo numa tremenda empolgacao e prazer em utilizar o FreeBSD :)
Nao é de hoje que venho tentando fazer funcionar algumas coisas muito
interessantes e uteis no freebsd. Quase sempre, quando mando email pra
lista, as discussoes sao superficiais, senao, dicas dizendo que eh
melhor usar o linux pq jah tem XYZ funcionando e etc...

Bem, isso nao eh uma reclamacao, na verdade, eh mais um agradecimento,
pq, foi tambem por causa da lista que insisti tanto até conseguir
fazer o que eu queria!

Vamos ao ambiente:

2 links de internet
1 servidor com 3 nic

Bem, primeiramente, encarnei no policy routing com ipfw+natd, muitos
vao dizer: pf+route-to eh muito mais facil, etc.. etc..., rodar dois
nats na mao eh gambiarra, etc.. etc..
Bom, em primeiro lugar, com ipfw com uma simples regra eu escolho por
qual link quero que o cliente sai, segundo, estou rodando somente um
natd porem, com a flag instance que nao eh documentada. Ficou super
fileh e facil de administrar.

Segunda etapa, de que adianta balancear a carga de saida em dois links
se nao posso ter proxy/cache? Bom, isso ainda acho q eh gambiarra,
deve ter outro jeito melhor de fazer, fica ai a sugestao de quem tiver
uma saida melhor. O que fiz:
Dois processos squid rodando um na porta 3128 e outro na porta 3129,
usando dois arquivos .conf diferentes. No arquivo secundario, eu user
tcp_outgoind_address pra mudar o ip de saida do squid2 para sair pelo
link2. Blz... Funcionou, independente da politica de rota do ipfw, se
no cliente (browser) eu setar o proxy pra porta 3128, saio por um
link, se muda pra porta 3129 saio pelo outro link, ae eh soh usar
proxy transp pra jogar o cliente por onde eu quero, isso tudo com a
vantagem de se ter um squid nas conexoes http.
O problema que vejo, que nem eh tanto problema assim, eh ter dois
diretorios de cache separado.

Com isso, tava tudo fileh, dois links, politica de uso por
source_addr, ae implementei o controle de banda.

Ultimo passo: Patch ZPH no squid, rapaiz, ae foi dor de cabeca hehehe,
patchei o squid, fui compilar, pronto, erro, faltava definir SOL_IP e
IP_PKTOPTIONS. Bem, o SOL_IP descobri que no FreeBSD (valeu thiago:))
eh IPPROTO_IP, e o IP_PKTOPTIONS, heheheheh, ae eh foda, hehehe, nao
consegui achar, porem, achei que nos .h do linux, simplesmente tem:
#define IP_PKTOPTIONS 9
hehehe, portanto, fui no arquivo de patch, e mudei onde tava
IP_PKTOPTIONS pra 9, isso na funcao getsockopt() hehehhee, e pronto,
compilou fileh.
Ae, nos dois squid.conf, adicionei a linha: zph_tos_local 0x20, e
restatei o squid.
Ae, foi soh rodar um tcpdump -i rl0 -vv e ver que quando o arquivo
tava no cache, o squid marcava o tos do cabecalho ip com 0x20, e
quando nao tava era, o tos era 0x00. Ok. O patch tava fazendo o papel
dele. E como tratar isso com ipfw?

Bem, o ipfw tem a opcao iptos, porem, ele aceita algumas constantes,
tentei fazer:
ipfw add allow all from any to any iptos 0x20, e ele reclamou que 0x20
nao eh uma opcao valida. Ae, corri no man, e tava lah, eu tinha q usar
umas constantes, coloquei:
ipfw add X allow all from any to any iptos TCP_MINCOST e pronto, olhei
no cabecalho ip.h e TCP_MINCOST vale 0x02 :), fui nos squids.confs e
mudei o zph_tos_local para 0x02.

Restartei o squid, limpei o cache do squid e do navegador, limitei a
banda do cliente em 32 Kbit/s e fiz o download de um arquivo com 1
mega. Blz, no access.log do squi deu TCP_MISS, veio a 32Kbit/s.

Fui no firefox, limpei o cache do firefox, mandei baixar o arquivo de
novo ehhhhhh, tchararammm... o arquivo veio FULL, velocidade maxima
ethernet heheheh, que delicia hehehhhee, no access.log do squid,
TCP_REFRESH_HIT, ou seja, pegou do cache, marcou o tos com 0x02 e
escapou do controle de banda hehehhe

Enfim, to realizado :)

Soh estou meio trsite com dois diretorios de cache diferente, nao sei
se os dois squids compartilhando o mesmo /cache pode dar problema,
entao resolvi deixar dois mesmo pra testar.

Bem, pretendo escrever um arquivo e postar na fug, porem, pra quem
quiser se aventurar, meu e-mail tem tudo que passei.

PS. Desculpem o e-mail longo, mas eh meio que uma comemoracao
compartilhada hehehhe.

Mario Augusto Mania (m3bsd)

-- 
Atenciosmente

Mario Augusto Mania <m3BSD>
-----------------------------------------------
m3.bsd.mania em gmail.com
Cel.: (43) 9938-9629
Msn: mario em oquei.com


Mais detalhes sobre a lista de discussão freebsd