Cisco + Squid 2.6 + FreeBSD 6.3 = WCCP2
Buenas.
Depois de sofridas semanas apanhando para fazer essa implantação, lendo muito manual, snifando tudo que dava, lendo código da interface ‘GRE’ tá ai um mini how-to de com colocar tudo isso pra funcionar.
Pra quem não conheçe muito, WCCP (Web Comunication Cache Protocol ) é um protocolo criado pela Cisco que visa diminuir seu tráfego web, redirecionando eles para servidores Cache na sua rede, de forma transparente.
Ai você me diz, ‘tá mais eu já tenho isso com meu Linux/Bsd usando iptables/pf, tudo transparente e de forma perfeita’, então te respondo, e se teu Squid cair, oque acontece ? Sua navegação pára certo ?
Então com o wccp isso não acontece, pois o roteador antes de encaminhar os pacotes, verifica se existe algum servidor cache disponivel, se sim, ai então ele faz o redirecionameto do pacote, via tunel GRE, mantendo a requisição intacta.
A requisição chegando no Cache, então ela é redirecionada para a porta do Squid, usando a mesma técnica de proxy transparente que você já usa hoje. Se o squid tiver a página no cache, a mesma é devolvida para o cliente, se ele não tiver, então ele busca, cacheia, e devolve para o cliente.
Vamos lá, passos nescessários:
No Cisco, no modo ‘configure’ faça o seguinte:
ip wccp web-cache interface fastEthernet 0/1 #sua interface LAN ip wccp web-cache redirect in exit exit
Compile o kernel do BSD com suporte a gre, adicionando a seguinte linha no seu arquivo de configuração do kernel:
device GRE
Detalhes de como compilar um kernel BSD, você encontra aqui.
Após compilado e rebootado o Server vamos criar o tunnel GRE:
ifconfig gre0 create
ifconfig gre0 IP_DESTE_SERVER 10.20.30.40 \
netmask 255.255.255.255 link1 link2 \
tunnel IP_DESTE_SERVER IP_INTERFACE_WAN_DO_CISCO up
No Firewall no caso pf.conf, vá as seguintes linhas redirecionando o trafego para o squid:
rdr on gre0 proto tcp from any to any port www -> 127.0.0.1 port 3128
Agora a configuração do squid, adicione o seguinte no seu squid.conf
wccp2_router IP_LAN_CISCO wccp2_forwarding_method 1 wccp2_return_method 1 wccp2_service standard 0 wccp2_address IP_DESTE_SERVER
Ok, restarte seu squid, e veja no cisco com o comando ‘show ip wccp’ se ele está registrado, você vê isso, no item ‘Number of Service Group’, se estiver igual a 1, muito bem, está tudo pronto, e em teoria funcionando. Só fazer a requisição que o router vai interceptar e enviar para o squid.
Lembre-se este é um exemplo bem simples, onde não há preocupação com segurança.
Você pode e deve, incrementar o cisco para permitir que apenas um grupo de Caches se registre nele, isso tudo via acl, e aplicando mais algumas regras no pf.conf para dar mais segurança ao servidor.
Um detalhe importante é a versão da IOS do Cisco.
Nesse exemplo foi usada a versão 12.4(18), versão antigas a 12.4.11, possuem alguns bugs, entre eles um que você deve criar uma acl para excluir o ‘cache’ da lista da rede a ser roteada, caso contrario entrará em loop.
Bom é isso, qualquer dúvida é só entrar em contato.
Abraços
June 24th, 2008 at 11:17 pm
grande! 2 pontos. 1 pela bela explicação. 1 pela ‘compartilhação’. abraço!