MEJORANDO SQUID – CONVIVENCIA CON EL QOS

*Actualización 12/02/2014: Con Squid 3.x podemos configurar sin parches el marcado de paquetes y dar QoS. Por ejemplo, podemos marcar con un numero ToS = 8, a los archivos que obtienen HIT haciendo: “qos_flows local-hit=0x8″, en squid.conf.

Parcheando el squid para soportar el zph (viene por defecto en las versiones 3.1.x y 2.7).
El ZPH (Zero Penalty Hit), es un parche para squid, que permite marcar el campo tos de los paquetes que pasan por este proxy, sólo cuando hay hits en el. Esto es útil cuando queremos diferenciar el tráfico que viene desde internet, y el tráfico que viene desde el squid (con hits), esto preferiblemente es usado junto con el TC (control de tráfico), para hacer las reglas de manejo de ancho de banda. Esto lo podemos apreciara mejor en los ejemplos al final de este howto.
Ahora veamos como parchar el squid para usar el módulo ZPH.
Descargamos “Squid3-Stable8″ de las fuentes de squid.

su
cd /usr/src
wget http://ftp.vim.org/internet/squid/squid-3.0.STABLE8.tar.gz
tar -xvzf squid-3.0.STABLE8.tar.gz

Ahora descargamos el parche para la versión 3.0 de squid.
cd squid-3.0.STABLE8
wget http://zph.bratcheda.org/squid-3.0.STABLE8-zph.patch

Aplicamos el parche a las fuentes del squid3.
patch -p1 < ../squid-3.0.STABLE8-zph.patch

Compilamos nuestras fuentes de squid con soporte para el zero penalty hit patch (zph) y delay pools.

./configure –enable-zph-qos –enable-delay-pools
make
make install

#El archivo de configuración se encontrará en “/usr/local/squid/etc/squid.conf”.
#Para reconfigurarlo :
“/usr/local/squid/sbin/squid -k reconfigure”
#Usuario y grupo por defecto :

user:nobody

grup:nogroup

#comprobacion del squid.

#Verificando la instalación

/usr/local/squid/sbin/squid -k parse

#creamos los directorios de cache

chown -R nobody.nogrup /usr/local/squid

/usr/local/squid/sbin/squid -z

#debug del squid

/usr/local/squid/sbin/squid -NCd1

nos debe de salir cerca de la linea final “Ready to serve requests.”

#iniciar el squid

/usr/local/squid/sbin/squid
#Ejemplo de uso:
En squid.conf, colocamos en el campo TOS el valor de 4 en hexadecimales:
zph_tos_local 0x4
Luego en nuestros scripts de TC, hacemos el manejo de los paquetes con el campo TOS de valor 4:

LANDEV=eth1
TC=/sbin/tc
....... Class creadas, y otros filtros .....
$TC filter add dev $LANDEV parent 1:0 protocol ip prio 1 u32 \
match ip protocol 0x6 0xff \
match ip tos 0x4 0xff \
flowid 1:60

Los paquetes de protocolo tcp(0x6) y con el campo tos de valor 0x4, se irán a la clase 1:60.

Nota: Esto puede funcionar bien, pero si no quiere parchear el squid, entonces puede solo reconocer los hits del squid, con ayuda del iptables, esto se puede lograr, reconociendo la cadena “X-Cache: HIT” de nuestros paquetes tcp:

iptables -A OUTPUT -t mangle -p tcp -m string --string "X-Cache: HIT" --algo kmp -j MARK --set-mark 666

Aunque este método es más simple, habría que probarlo mejor.
fuente:http://zph.bratcheda.org/
salu2.

About these ads
Post a comment or leave a trackback: Trackback URL.

Comentarios

  • lanaze  On 20 junio, 2011 at 1:55 pm

    al trata de bajar los paquetes me dice permiso denegado

  • lanaze  On 20 junio, 2011 at 1:56 pm

    estoy trabajando con ubuntu 11.04 64bits , quisiera saber si puedo configurar alli un buen squid server y en caso contrario que me recomendarian.??

  • Luis  On 31 julio, 2011 at 3:44 pm

    HOla en donde se pega este script :

    LANDEV=eth1
    2 TC=/sbin/tc
    3 ……. Class creadas, y otros filtros …..
    4 $TC filter add dev $LANDEV parent 1:0 protocol ip prio 1 u32 \
    5 match ip protocol 0x6 0xff \
    6 match ip tos 0x4 0xff \
    7 flowid 1:60

  • Manuel Guilcapi  On 21 febrero, 2012 at 9:49 pm

    COMO PUEDO HACR CACHE DE VIDEOS DE YOUTUBE PORQ TENGO ENTENDIDO QUE SQUID SOLO HACE CACHE DE PAGINAS ESTATICAS

  • Pablo TP  On 12 febrero, 2014 at 9:04 am

    En squid utilizo
    qos_flows parent-hit=0xfc
    qos_flows local-hit=0xfc
    para marcar los paquetes que vienen del cache del parent y del propio cache.
    Ahora el parent es haarpcache. Sin embargo, al parecer squid no reconoce como HIT los HIT de haarpcache.
    En el log de squid aparecen como TCP_MISS los mismos paquetes que haarpcache tiene como TCP_HIT.
    Por lo tanto squid tampoco los marca con el 0xfc
    ¿Por qué puede ocurrir esto? ¿Qué “señal” espera squid3 que le envíe su parent proxy para reconocer el HIT como tal?

    • keikurono01  On 12 febrero, 2014 at 11:17 am

      El squid no reconoce si el parent realiza hit o no. Pero el haarp realiza una modificación en las cabeceras http:
      cuando es hit o mis envía una cabecera como esta: “X-Cache: HIT from haarp”, para cuando es HIT por ejemplo.

      Configuralo como guia el manual: http://perufw.wordpress.com/2013/02/11/instalando-haarpcache-v1-1-un-cache-inteligente/#qos

      Como vez debes utilizar el iptables para marcar los paquetes con aquella cadena dentro de las cabeceras, y luego utilizar el TC para configurar las políticas QoS.

      Dudas preguntar.

      • Pablo TP  On 12 febrero, 2014 at 11:27 am

        Gracias por la rápida respuesta! Ese método lo he estado utilizando, pero sospecho que es mucho más “lento” (y ocupa más procesador) que el simplemente detectar una marca TOS que es lo que prefiero hacer ahora. En redes grandes con mucho tráfico puede sentirse. Es una pena que squid no reconozca los HITS de haarp, ya que esa identificación se realiza a un nivel más alto con, posiblemente, mucho menos consumo de recursos. Sigo en las pruebas. Gracias.

        • keikurono01  On 12 febrero, 2014 at 12:05 pm

          Que tan dificil será hacer que haarp realice la modificación del Tos a los Hits?. Permiteme derle una ojeada, si alguien se anima el code está ahi
          Efectivamente el haarp está realizando el marcado de paquetes, el problema de todo es que el squid y el haarp deben de comunicarse con el protocolo icp para respetar el hit del haarp…

          • Pablo TP  On 12 febrero, 2014 at 12:31 pm

            Utilicé el parámetro ZPH_TOS_LOCAL de /etc/haarp/haarp.conf pero no vi que las reglas de iptables lo reconocieran. Intenté con 0xfc y con 252 que es el equivalente decimal. Voy a intentar con 8 y programar una regla a ver si lo reconoce.
            De todos modos, de marcar el paquete se puede encargar squid, no hace falta que lo haga haarp. Lo único que habría que lograr es que squid reconozca los HIT de su parent proxy (haarp) como HIT. La verdad, no sé qué espera “ver” squid para hacer esto.
            Ahora recién estoy conociendo el sistema, probando configuraciones, testeando funcionamiento, etc. Si pudiera, sería muy bueno poder aportar algo comenzando por esto de la marca.

            • keikurono01  On 12 febrero, 2014 at 7:22 pm

              Creo que hay dos maneras de hacerlo.. una es parcheando el kernel de linux, como se dice en el squid.conf o aqui:http://wiki.squid-cache.org/Features/QualityOfService
              con ello automaticamente se respeta las marcas tos de las conexiones cuando el squid obtiene un MISS (abría que probar si tomara en cuenta las marcas del “parent” haarp ya que este no vine de un server externo sino es un “parent” local).

              La otra es hacer que squid comprenda el hit del haarp, pero para ello se debe de modificar las fuentes del haarp y agregar el manejo del protocolo ICP para caches, el cual deberia de elaborar …. el haarp sólo se comporta como un parent el cual no da cuenta al squid cuando este encuentra (hit) o no un archivo en cache, o sea en ese nivel no se estan comunicando …

              El realizar un manejo del protocolo ICP no lo veo a la vuelta de la esquina, si no toma mucho tiempo lo hago.

              Salu2.

            • keikurono01  On 12 febrero, 2014 at 7:31 pm

              En un futuro se piensa incrustar el haarp dentro del squid o lusca para conseguir funcionalidades como del tproxy o del Qos como en este caso… se verían resueltos.

              • Pablo TP  On 13 febrero, 2014 at 10:07 am

                Analizando en decenas de pruebas esta es la conclusión “final” que he llegado en la práctica, similar a lo que tú dices:
                – Haarp marca correctamente los paquetes como indica su configuración ZPH_TOS_LOCAL
                – Estos paquetes van de haarp a squid solamente, no salen del servidor:
                tcp 0 4380 10.42.42.1:3129 10.42.42.1:5826 ESTABLECIDO
                – Squid los procesa y los envía al cliente como un paquete nuevo Y LA MARCA SE PIERDE
                – Squid no sabe cuando lo que recibe de su parent proxy haarp viene del cache o de internet, no “ve” la marca HIT de haarp. Esto impide que aplique el TOS señalado por su configuración “qos_flows parent-hit”. Si se solucionara esto, si squid reconociera los HIT de haarp, se soluciona todo.
                – Otra solución es que squid no modifique las marcas TOS que ya traen los paquetes. Parece que eso es posible con “qos_flows disable-preserve-miss” pero necesitaría parchar el kernel (no squid que ahora lo trae por defecto)
                Sigo probando, pero aparentemente el reconocimiento de los HIT de HAARP sería lo mejor y lo más eficiente.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 68 seguidores

A %d blogueros les gusta esto: