Este how-to describe los pasos necesarios para la configuración de WCCP versión 2.0 con un router CISCO 3725 en combinación con un Squid-2.7.STABLE3 ejecutándose sobre un FreeBSD-6.3.
El WCCP (Web Cache Control Protocol) versión 2 de Cisco es usado para el envío de peticiones Web desde los clientes a uno o mas servidores proxy. La función del WCCP es que nos permite redireccionar el trafico de la web hacia nuestros servidores proxies, en los que prestaremos de servicios de cache, filtros de contenidos, políticas de consumo de ancho de banda, u otros servicios, lo cual nos ayudaría a economizar nuestros enlaces.
Con WCCP, podemos crear un "cluster de cache" para lograr un mejor balance de carga. Por ejemplo, en el caso de tener dos servidores proxies, si uno de los dos falla, por alguna razón, el WCCP redireccionara todo el trafico hacia el segundo, evitando así interrupciones en el servicio. En el caso extremo que los dos servidores de cache, fallen, el WCCP determinara los proxies como "muertos" y enrrutara directamente todas las peticiones a través de sus interfaces.
NOTA: Solo la versión CISCO IOS Release 12.1 o anteriores permiten usar las versiones 1.0 (WCCPv1) o la 2.0 (WCCPv2) de WCCP.
Como funciona WCCP y navegación transparente con Squid?
- Un cliente hace una petición hacia la web, esta va directo al router.
- El router intercepta la peticion.
- El router redirecciona la petición a una nueva ubicación dentro de un marco de enrrutamiento de encapsulamiento genérico (generic routing encapsulation GRE) para prevenir cualquier modificación en el paquete original.
- El túnel (GRE) se establece entre el servidor proxy y el router cisco.
- Todas las peticiones redireccionadas desde el router son encapsuladas bajo el túnel hacia la cache en el FreeBSD.
- El FreeBSD desencapsula el trafico en el GRE y redirecciona los paquetes de WCCP hacia el Squid.
- El redireccionamiento se logra transparentemente usando el Reenvío de Paquetes (IP Forwarding) y el cortafuegos IPFW.
- El squid separa la petición y entonces la reenvía, así sea a un servidor cache padre o directamente a al destino.
- La respuesta a la petición es enviada a través del router al cliente que la origino.
Ahora para armar todas las piezas para el funcionamiento del WCCP, en conjunto con el Squid, se seguirán los siguientes pasos:
- inicialmente necesitamos incluir las fuentes de nuestro kernel en el sistema.
# sysintall
Entrar en la Opción
Configure
Distributions
src
sys
Chose Media
CD/DVD
deje que termine el proceso de inclusión de las fuentes de lo relacionado a "sys", cuando este proceso termine entonces haremos lo siguiente
1.- lo primero sera configurar y recompilar el kernel, para adicionarle soporte para el ip_forward, ipfw.
# cd /usr/src/sys/i386/conf/
hacer una copia del archivo original para modificarlo y ponerlo a nuestro gusto
# cp GENERIC SQUID_WCCP
# nano SQUID_WCCP
2.- con el editor preferido editar el archivo que creamos y adicionarle las siguientes lineas
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_FORWARD #enable transparent proxy support
options IPFIREWALL_VERBOSE_LIMIT=500 #limit verbosity
options IPSTEALTH #support for stealth forwarding
options DUMMYNET
options NETGRAPH
options DEVICE_POLLING
options HZ=1000
options SHMSEG=128
options SHMMNI=256
options SHMMAX=50331648 # max shared memory segment size (bytes)
options SHMALL=16384 # max amount of shared memory (pages)
options MSGMNB=16384 # max # of bytes in a queue
options MSGMNI=48 # number of message queue identifiers
options MSGSEG=768 # number of message segments
options MSGSSZ=64 # size of a message segment
options MSGTQL=4096 # max messages in system
3.- Configurar y compilar el nuevo kernel
(a.) config SQUID_WCCP
(b.) cd ../compile/SQUID_WCCP/
(c.) make cleandepend
(d.) make depend
(e.) make
(f.) make install
(g.) reboot
Si no hubo errores en nada, entonces todo salio bien, reinicie el servidor con su nuevo kernel.
4.- crear en el FreeBSD el túnel hacia el router.
ifconfig gre0 create
ifconfig gre0 IP.DE.SQUID.BOX 10.20.30.40 netmask 255.255.255.255 link2 tunnel IP.DE.SQUID.BOX IP.DE.CISCO.ROUTER up
4.) compilar squid y configurarlo para que trabaje con WCCP.
(a.) descargar los fuentes del squid desde el sitio oficial
# cd /usr/local/src/
# wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE3.tar.gz
(b.) descompactar el paquete
# tar -zxf squid-2.7.STABLE3.tar.gz
(c.) configurar y compilar
# ./configure --prefix='/usr/local' --sbindir='/usr/local/sbin' --bindir='/usr/local/sbin' --datadir='/usr/local/etc/squid' --sysconfdir='/usr/local/etc/squid' --libexecdir='/usr/local/libexec/squid' --localstatedir='/usr/local/squid' --enable-removal-policies='lru heap' --enable-basic-auth-helpers='NCSA PAM SMB' --enable-auth='basic ntlm digest' --enable-digest-auth-helpers='password' --enable-external-acl-helpers='ip_user session unix_group wbinfo_group' --enable-ntlm-auth-helpers='SMB' --enable-storeio='ufs diskd null' --disable-ident-lookups --enable-kqueue --enable-default-err-language='Spanish' --enable-snmp --enable-largefile --enable-ipfilter --enable-wccpv2 --enable-icmp --enable-arp-acl --enable-delay-pools --disable-wccp
# make all
# make install
(d.) editar el archivo de configuración del squid y poner estas lineas
# nano /usr/local/etc/squid/squid.conf
wccp2_router IP.DE.CISCO.ROUTER
wccp2_forwarding_method 1
wccp2_return_method 1
wccp2_service standard 0
(4.) Crear las reglas del firewall para redireccionar las peticiones web que llegan vía GRE hacia el puerto de trabajo del squid (3128).
Vamos crear un archivo llamado rc.firewall para salvar las reglas del IPFW. Se puede usar el script siguiente, ajustando sus direcciones IP.
#!/bin/sh
##### Inicio de rc.firewall ######
NET_IF="rl0"
IPFW="/sbin/ipfw -q"
#IP del Proxy
IF_ADDR="192.168.1.2"
ROUTER_IP="192.168.1.1"
PROXY_NET="192.168.1.0/24"
PROXY_PARENT="192.168.0.1"
ALL_NET="192.168.2.0/24"
CLIENT_NET="192.168.3.0/24"
ADMIN_NET="192.168.1.10"
SSH_PORT="4554"
LOCALHOST="127.0.0.1"
$IPFW -f flush
$IPFW add allow all from any to any via lo0
#$IPFW add allow all from any to any
$IPFW add allow gre from any to any frag
#$IPFW add deny ip from any to any frag
$IPFW add fwd 127.0.0.1,3128 tcp from any to any 80 via gre0 in
$IPFW add fwd 127.0.0.1,3128 ip from any to any via gre0 in
$IPFW add fwd 127.0.0.1,3128 tcp from any to any 80 in
$IPFW add fwd 127.0.0.1,3128 tcp from any to any http in via gre0
$IPFW add allow tcp from any 80 to $PROXY_NET in
$IPFW add allow all from $ROUTER_IP to $IF_ADDR
$IPFW add allow all from $IF_ADDR to $ROUTER_IP
$IPFW add allow gre from $ROUTER_IP to $IF_ADDR
$IPFW add allow all from $IF_ADDR to any
#Allow local DNS caching
$IPFW add allow udp from $ALL_NET to any 53
$IPFW add allow udp from any 53 to $IF_ADDR
$IPFW add allow tcp from any 53 to $IF_ADDR
$IPFW add allow all from any to any out via $NET_IF
#Permitir Consultas DNS
$IPFW add allow udp from $ALL_NET 53 to $IF_ADDR
#For Proxy access
$IPFW add allow tcp from $ALL_NET to any 3128 in via $NET_IF
##### Permitir Conexiones Establecidas
$IPFW add allow tcp from any to any in via $NET_IF established
# Para consultas ICP
$IPFW add allow UDP from $PROXY_PARENT to $PROXY_NET 3130
$IPFW add allow UDP from $PROXY_NET to $PROXY_PARENT 3130
####### Para SSH
$IPFW add allow tcp from $ADMIN_NET to $IF_ADDR $SSH_PORT
#Para SNMPWALK desde el administrador
$IPFW add allow udp from $ADMIN_NET to me 3001
$IPFW add allow udp from $ADMIN_NET to me 161
$IPFW add allow udp from $ADMIN_NET to me 161
$IPFW add allow udp from $LOCALHOST to me 3001
$IPFW add allow udp from $LOCALHOST to me 161
###########
$IPFW add allow ICMP from $ALL_NET to any
#################################################
# Permitir TODO desde el administrador
$IPFW add allow all from $ADMIN_NET to me
$IPFW add allow all from me to $ADMIN_NET
$IPFW add 65533 deny log all from any to any
############# End of rc.firewall ###############
5.- Habilitar WCCP en el router Cisco
Global Configuration
Router (config)# ip wccp version 2
Router (config)# ip wccp web-cache redirect-list 160
Access-List 160
permit ip 192.168.0.0 0.0.0.255 any
Router (config)# interface fastethernet 0/0
Router(config-if)# ip wccp web-cache redirect in
Router# write
Final de la configuracion de WCCP para router Cisco
6.- Habilitar el ip_forwarding en systcl.conf
agregar estas lineas en /etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
7.- Reiniciar el squid y recargar las reglas del IPFW. Si no hay ningun error, entonces ya tiene trabajando su servidor proxy resondiendo peticiones a traves del GRE y usando el WCCP de su router Cisco
Happy Proxying with Squid + FreeBSD + Cisco WCCP !!!
jueves, 17 de julio de 2008
jueves, 22 de mayo de 2008
Resolver "SIOCSIFADDR No such device eth0 error while getting interface flags" en Debian
si la interface de red que estaba en nuestra PC se rompio y la reemplazamos por otra, normalmente nos da errores como este
SIOCSIFADDR No such device eth0 error while getting interface flags
y que
Failed to bringe interface eth0
para resolver esto, primeramente revisar si la maquina ha reconocido la interface de red, como un nuevo hardware:
# dmesg | egrep eth
si el kernel vio el nuevo hard, entonces podemos hacer esto
en el archivo /etc/udev/rules.d/70-persistent-net.rules existe una relacion de direcciones MAC con el nombre que se le asigna a la interface, por lo general a la primera que se le pone le da el eth0, pero entonces el kernel si es la unica interface le dice que es eth0, las lineas en este archivo se ven como esta mas o menos:
# PCI device 0x8086:0x1039 (e100)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:11:11:4e:ea:6c", NAME="eth0"
se eliminan las lineas correspondientes a las interfaces anteriores y se deja solamente la que nos corresponde.
despues de esto se reinicia el udev
# /etc/init.d/udev restart
luego se puede activar la interface o reiniciar la maquina para que tome toda la configuracion adecuada
# ifup eth0
o
# reboot
SIOCSIFADDR No such device eth0 error while getting interface flags
y que
Failed to bringe interface eth0
para resolver esto, primeramente revisar si la maquina ha reconocido la interface de red, como un nuevo hardware:
# dmesg | egrep eth
si el kernel vio el nuevo hard, entonces podemos hacer esto
en el archivo /etc/udev/rules.d/70-persistent-net.rules existe una relacion de direcciones MAC con el nombre que se le asigna a la interface, por lo general a la primera que se le pone le da el eth0, pero entonces el kernel si es la unica interface le dice que es eth0, las lineas en este archivo se ven como esta mas o menos:
# PCI device 0x8086:0x1039 (e100)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:11:11:4e:ea:6c", NAME="eth0"
se eliminan las lineas correspondientes a las interfaces anteriores y se deja solamente la que nos corresponde.
despues de esto se reinicia el udev
# /etc/init.d/udev restart
luego se puede activar la interface o reiniciar la maquina para que tome toda la configuracion adecuada
# ifup eth0
o
# reboot
Configurar Fecha y Hora en FreeBSD
es incluso mas sencillo que hacerlo en linux, con solo darle los parametros que queremos al comando `date` se resuelve, y bien claro
# date 0805220741
Thu May 22 07:41:00 UTC 2008
# date
Thu May 22 07:41:00 UTC 2008
#
y con eso, ya esta, no hace falta hacer nada mas para poner en hora nuestro sistema.
;)
# date 0805220741
Thu May 22 07:41:00 UTC 2008
# date
Thu May 22 07:41:00 UTC 2008
#
y con eso, ya esta, no hace falta hacer nada mas para poner en hora nuestro sistema.
;)
Suscribirse a:
Entradas (Atom)