Hacer cache de los videos de youtube y demás con Debian + Squid + Apache2 + Videocache 1.9.2

Imagen de RazaMetaL

Tema: 

Ha algún tiempo publiqué un [url=http://www.ecualug.org/2009/07/11/blog/razametal/limitar_el_consumo_de_ancho_de_banda_de_descarga_de_diferentes_sitios_y_archivos_con_squid]pequeño "joutú"[/url] para limitar la velocidad de descarga de ciertas extensiones y contenido con squid.

Hace unos días he estado probando esta herramienta llamada [url=http://cachevideos.com/]Videocache[/url] que en verdad promete mucho. Con Videocache se pueden almacenar en nuestro servidor los videos de algunos sitios como:

- youtube.com
- googlevideo.com
- metacafe.com
- dailymotion.com
- video.google.com
- vimeo.com
- soapbox.msn.com
- blip.tv
- break.com
- tvuol.uol.com.br
- Red Tube
- X Tube Videos
- You Pron Videos
- Tube8 Videos

Lo he probado durante la última semana y hasta ahora no me puedo quejar de su desempeño y los usuarios tampoco, ya que un video que vió uno y lo compartió por email en cadena a los demás usuarios es visualizado fluido y sin cortes :)

Mas información sobre este aplicación y como ayudar en su crecimiento la pueden encontrar en:
[url]http://cachevideos.com/[/url]

Para poder utilizar Videocache debemos contar con un squid configurado y funcionando, apache2, Python y un par de módulos adicionales.

Instalamos dependencias:

aptitude install python-urlgrabber

Descargarmos e instalamos iniparse:

cd /usr/src
wget http://iniparse.googlecode.com/files/python-iniparse_0.3.1-1_all.deb
dpkg -i python-iniparse_0.3.1-1_all.deb

Descargamos y descomprimimos videocache:

cd /usr/src
wget http://cachevideos.com/sites/default/files/pub/videocache/videocache-1.9.2.tar.gz
tar zvxf videocache-1.9.2.tar.gz

También se puede utilizar GIT:

aptitude install git-core


cd /usr/src
git clone http://git.cachevideos.com/videocache.git
ln -sf /usr/src/videocache videocache-1.9.2

Modificamos las siguientes variables en el archivo instalador de videocache /usr/src/videocache-1.9.2/setup.py

squid_user = 'proxy'
squid_group = 'proxy'
install_dir = '/usr/share/'
apache_conf_dir = '/etc/apache2/conf.d/'

También se deben modificar la misma información en /usr/src/videocache-1.9.2/update-vc

Una vez editado ejecutamos el instalado:

cd /usr/src/videocache-1.9.2
python setup.py install

Creamos una acl en /etc/squid/squid.conf para que el servidor pueda guardar los videos, para ilustrar el ejemplo vamos a suponer que nuestro servidor tiene la ip 192.168.0.1 :

acl proxy src 192.168.0.1 # 192.168.0.1. es la ip de nuestro proxy
http_access allow proxy

Agregamos al final de nuestro /etc/squid/squid.conf :

# --BEGIN-- videocache config for squid
url_rewrite_program /usr/bin/python /usr/share/videocache/videocache.py
url_rewrite_children 10
acl videocache_allow_url url_regex -i \.youtube\.com\/get_video\?
acl videocache_allow_url url_regex -i \.youtube\.com\/videoplayback \.youtube\.com\/videoplay \.youtube\.com\/get_video\?
acl videocache_allow_url url_regex -i \.youtube\.[a-z][a-z]\/videoplayback \.youtube\.[a-z][a-z]\/videoplay \.youtube\.[a-z][a-z]\/get_video\?
acl videocache_allow_url url_regex -i \.googlevideo\.com\/videoplayback \.googlevideo\.com\/videoplay \.googlevideo\.com\/get_video\?
acl videocache_allow_url url_regex -i \.google\.com\/videoplayback \.google\.com\/videoplay \.google\.com\/get_video\?
acl videocache_allow_url url_regex -i \.google\.[a-z][a-z]\/videoplayback \.google\.[a-z][a-z]\/videoplay \.google\.[a-z][a-z]\/get_video\?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/videoplayback\?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/videoplay\?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/get_video\?
acl videocache_allow_url url_regex -i proxy[a-z0-9\-][a-z0-9][a-z0-9][a-z0-9]?\.dailymotion\.com\/
acl videocache_allow_url url_regex -i vid\.akm\.dailymotion\.com\/
acl videocache_allow_url url_regex -i [a-z0-9][0-9a-z][0-9a-z]?[0-9a-z]?[0-9a-z]?\.xtube\.com\/(.*)flv
acl videocache_allow_url url_regex -i bitcast\.vimeo\.com\/vimeo\/videos\/
acl videocache_allow_url url_regex -i va\.wrzuta\.pl\/wa[0-9][0-9][0-9][0-9]?
acl videocache_allow_url url_regex -i \.files\.youporn\.com\/(.*)\/flv\/
acl videocache_allow_url url_regex -i \.msn\.com\.edgesuite\.net\/(.*)\.flv
acl videocache_allow_url url_regex -i media[a-z0-9]?[a-z0-9]?[a-z0-9]?\.tube8\.com\/ mobile[a-z0-9]?[a-z0-9]?[a-z0-9]?\.tube8\.com\/
acl videocache_allow_url url_regex -i \.mais\.uol\.com\.br\/(.*)\.flv
acl videocache_allow_url url_regex -i \.video[a-z0-9]?[a-z0-9]?\.blip\.tv\/(.*)\.(flv|avi|mov|mp3|m4v|mp4|wmv|rm|ram)
acl videocache_allow_url url_regex -i video\.break\.com\/(.*)\.(flv|mp4)
acl videocache_allow_dom dstdomain .mccont.com .metacafe.com .redtube.com .cdn.dailymotion.com
acl videocache_deny_url url_regex -i http:\/\/[a-z][a-z]\.youtube\.com http:\/\/www\.youtube\.com
url_rewrite_access deny videocache_deny_url
url_rewrite_access allow videocache_allow_url
url_rewrite_access allow videocache_allow_dom
redirector_bypass on
# --END-- videocache config for squid

Modificamos en /etc/videocache.conf los parámetros cache_host y proxy para que contengan la IP del servidor proxy, por ejemplo si mi proxy tiene la dirección 192.168.0.1:

cache_host = 192.168.0.1
proxy = http://192.168.0.1:3128/

Luego actualizamos la información con update-vc:

update-vc

Reiniciamos los servicios:

invoque-rc.d squid restart
invoque-rc.d apache2 restart

Ahora si podemos probar mirando un video de youtube (ó porntube si así lo prefieren) en un terminal, y una vez finalizado abrirlo en otros terminales, seguro notarán la diferencia :)

El contenido guardado por videocache podrá ser visto desde:
[url]http://proxy/videocache[/url]

En el log podemos visualizar si un video es visualizado desde el cache o no:

2009-09-27 21:13:04,558 13846 192.168.0.203 7b259975c04da1cb CACHE_MISS YOUTUBE Requested video was not found in cache.
2009-09-27 21:13:04,574 13846 192.168.0.203 7b259975c04da1cb NEW_URL YOUTUBE http://v16.nonxt7.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cburst%2Cfactor&fexp=905303%2C900037&itag=5&ipbits=0&signature=76037D5DCA6ACCCF32F0BD0AC21FF23678B90A3E.99B4C9EC3CBA4555A3E148945C049F36DBF025A4&sver=3&expire=1254128400&key=yt1&factor=1.25&burst=40&id=7b259975c04da1cb&redirect_counter=1

Esto indica que el video no se encuentra en el caché y que va a ser descargado.


2009-09-27 21:08:09,697 13846 192.168.0.204 27399fa5f22ad3ee URL_HIT YOUTUBE http://v19.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cburst%2Cfactor&itag=34&ipbits=0&signature=8CDCEEC03501B93F98216A506D8B153615EFDEF4.9833FD05744A1E8F4A54548F4AB0560C1AE45F27&sver=3&expire=1254128400&key=yt1&factor=1.25&burst=40&id=27399fa5f22ad3ee
2009-09-27 21:08:09,697 13846 192.168.0.204 27399fa5f22ad3ee CACHE_HIT YOUTUBE Video was served from cache.

Esto quiere decir que el video esta en el caché y va a ser servido desde ahí.

Si tenemos apache corriendo en un puerto diferente al 80 se debe modificar el parámetro cache_host en /etc/videocache.conf :

cache_host = 192.168.0.1:81

Donde 192.168.0.1 es la ip del servidor y 81 es el puerto en el que esta escuchando apache.

Luego de eso hay que ejecutar para activar los cambios:

update-vc
invoque-rc.d apache2 restart

Comentarios

Buenas... En estos momentos

Imagen de Mirrortech

Buenas...

En estos momentos NO puedo cachear YOUTUBE.. y me sale este error en el log de Videocache.log
A que se refiere esto?? Y si para cachear YOUTUBE ser equiere alguna configuracion adicional

2011-05-14 16:13:00,924 18323 192.168.127.163 - REQUEST - http://www.redtube.com/_playerrt/SeekVideo.swf
2011-05-14 16:13:00,933 18320 192.168.127.163 - REQUEST - http://www.redtube.com/iframe/bottom/brazzers073/index.php?clickTAG=http://www.redtube.com/click?id=1555
2011-05-14 16:13:06,012 18322 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:13:18,963 18323 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:15:54,715 18321 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:02,415 18320 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:08,017 18325 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:21,833 18335 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:22,392 18336 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:22,393 18324 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:33,595 18333 - - SCHEDULE_ERR - Error while querying RPC server.
2011-05-14 16:16:45,487 18334 - - SCHEDULE_ERR - Error while querying RPC server.

Htb-gen restringe tambien el videocache

Gracias por responder
Mi problema es que tengo en un solo servidor centos instalado el htb-gen, shorewal, squid y el videocache, este videocache guarda todos los videos de youtube en cache, pero al momento de que los usuarios ven los videos, el htb-gen los segmenta, y esa no es la idea. Porque se los ve muy lento.
Este servidor tiene una tarjeta conectada a la red con IP pública y la otra a mi red LAN
Si detengo el htb-gen, ahí si se ven los videos guardados en cache bien rápido, pero claro ya no segmenta nada.
He cambiado el videocahe al puerto 81, pero igual el htb-lo segmenta, como puedo hacer que el htb-gen no segmente el puerto 81, o alguna otra solución.
De antemano te agradezco por tu ayuda.

podrias utilizar imq

Imagen de chilino

Hola,

Sucede que el htb-gen utiliza tc e iptables sobre la interface, entonces, por ese motivo controla el ancho de banda a nivel de colas sobre la interface LAN que da acceso a los clientes en conjunto con iptables. Por tanto, el control lo hace en medio, entre el proxy y tus usuarios. por tanto los videos de youtube no cargan a la velocidad deseada, pues como sabes, en primer orden estan los iptables en lo referente a las politicas de seguridad para dar tramite a la transmisión de la data.

Lo que te recomiendo realizar es utilizar IMQ, una interface que realice el control del ancho de banda en el medio, caso contrario, realizar el control del ancho de banda a nivel de la eth0, lo que es imposible me parece hasta la fecha.

Caso contrario, realizar un control de ancho de banda a nivel de Squid, ofreciendo quotas para el acceso a internet y una qota ilimitada al proxy server. Podria ser...

Salu2.

Chilino

Solucionado no segmentar el puerto 81 en HTB

Gracias por tratar de darme una solución, había buscado por muchos foros y no me imaginé tener la respuesta aquí en mi país mismo, en otro foro de ecualug.org, como yo cambié al puerto 81 el videocache, entonces lo que agregué al final del scripts htb-gen.conf es:

iptables -t mangle -I OUTPUT -o eth1 -p tcp --sport 81 -j RETURN
iptables -t mangle -I OUTPUT -o eth1 -p tcp --dport 81 -j RETURN

y ahora todo funciona perfecto.

eliminar Zombies

Hola alguien me ayuda quisiera saber como poder eliminar automaticamente los archivos que no son revizados digamos 3 semanas o mas Gracias

Te refieres a los del caché

Imagen de deathUser

Te refieres a los del caché de vídeos ...???

En cualquier caso puedes hacerlo con find y el accesstime más información la encuentras en:

man find

Sería algo como:


find /directorio/de/busqueda -type f -atime 20 -exec rm -f {} \;

No lo uses sin leer la documentación antes y de probar con una lista de archivos de prueba, luego si se jode algo no respondo :)

bye
;)

el comando lo debes probar en

Imagen de deathUser

el comando lo debes probar en la línea de comandos sin el "-exec rm -f {}\; e" a ver si te retorna los archivos que te interesa borrar, una vez probado, puedes automatizar su ejecución con el "cron", no puse ningún link, solo una referencia al manual de find "man find"

bye
;)

Ayuda Videos Youtube con Previsualizacion

Hola!! Espero me puedan ayudar, soy nuevo en linux pero con muchas ganas de aprender! Bueno mi problema es el siguiente, ya consegui hacer funcionar VideoCache en Ubunto Server 11.10 + Squid 2.7, el problema es con los videos de YouTube que si se hace cache pero con algunos videos (Principalmente con los video que ya cuentan con Previsualizacion) los videos al ponerlos en pausa me tira un error que dice que intente acceder al video mas tarde y despues de salir este error ya no se puede ver el video en ninguna computadora que tengo conectada al Servidor, aclaro los otros videos sin previsualizacion se cachean bien y se pueden ver despues desde la cache del servidor y se cargan a velocidad de red. Espero me puedan ayudar Gracias :D!

Páginas