sábado, 16 de febrero de 2013

Mikrotik - Balanceo de carga a dos conexiones WAN con QoS Queue Tree


Mikrotik en un sistema operativo de router que puede ser instalado en una PC o comprar directamente un routerboad con el ROS instalado. El software esta en permanente actualización por lo que a partir de la versión 3.2 realizar un balanceo de carga entre dos o más conexiones a internet es mas sencillo con la opción PC
PCC (Per Connection Classifier) es el método por el cual se divide en porcentajes las conexiones de los usuarios al router asignando el mismo a las distintas conexiones wan disponibles. Asi, al tener dos conexiones a internet irá el 50% a cada una.
en la siguiente guía vamos a balancear dos conexiones de 2MB y 6Mb respectivamente por lo que para que el equilibrio sea más equitativo a la de mayor ancho de banda le asignaremos un 66% de las conexiones y a la otra el restante 33%.
Para el efecto consideramos que el router esta en producción por lo que en esta guía no se desarrolla la configuración inicial.

Balancear las conexiones de internet disponibles consta de cuatro procedimientos:
Configurar los gateway
Marcar el trafico
Asignar porcentajes a las conexiones (PCC)
Enrutar las conexiones

ingresamos nuestros gateway:
/ip route
add gateway=pppoe-out1 distance=1
add gateway=192.168.1.1 check-gateway=ping distance=2

Marcamos el tráfico para que todo lo que entra por una WAN salga por esa misma WAN:
/ip firewall mangle
add chain=prerouting in-interface=pppoe-out1 connection-state=new new-connection-mark=pppoe-out1_conn action=mark-connection passthrough=yes
add chain=prerouting in-interface=eth1-Arnet connection-state=new new-connection-mark=eth1_conn action=mark-connection passthrough=yes
add chain=output connection-mark=pppoe-out1_conn new-routing-mark=to_pppoe-out1 action=mark-routing passthrough=yes
add chain=output connection-mark=eth1_conn new-routing-mark=to_eth1-Arnet action=mark-routing passthrough=yes
Configuramos PCC, como dijimos 2/3 para una y el resto para la otra:
primero marcamos las conexiones:
/ip firewall mangle
add chain=prerouting in-interface=eth3-LAN connection-state=new dst-address-type=!local per-connection-classifier=both-addresses:3/0 action=mark-connection new-connection-mark=pppoe-out1_conn passthrough=yes
add chain=prerouting in-interface=eth3-LAN connection-state=new dst-address-type=!local per-connection-classifier=both-addresses:3/1 action=mark-connection new-connection-mark=eth1_conn passthrough=yes
add chain=prerouting in-interface=eth3-LAN connection-state=new dst-address-type=!local per-connection-classifier=both-addresses:3/2 action=mark-connection new-connection-mark=eth1_conn passthrough=yes
Luego marcamos las rutas:
/ip firewall mangle
add chain=prerouting in-interface=eth3-LAN connection-mark=pppoe-out1_conn action=mark-routing new-routing-mark=to_pppoe-out1 passthrough=yes
add chain=prerouting in-interface=eth3-LAN connection-mark=eth1_conn action=mark-routing new-routing-mark=to_eth1-Arnet passthrough=yes

Finalmente utilizamos esas marcas de ruta para enviarlas a cada conexion:
/ip route
add gateway=pppoe-out1 routing-mark=to_pppoe-out1
add gateway=192.168.1.1 routing-mark=to_eth1-Arnet check-gateway=ping

Observamos las marcas de conexiones y rutas en el mangle del firewall y el balanceo que se produce en connections:


Finalmente vamos a diseñar un nuevo queue tree para que actue con nuestro balanceo de carga:
marcamos los paquetes:
A diferencia de los QoS que comentamos en otros post, aqui solo marcaremos los paquetes, sin considerar las conexiones
/ip firewall mangle
add action=mark-packet chain=prerouting comment="Lista de Archivos" disabled=\
no in-interface=!eth3-LAN new-packet-mark=download-packet passthrough=no \
protocol=tcp src-address-list=download
add action=mark-packet chain=prerouting comment="ICMP (ping)" disabled=no \
new-packet-mark=interactivo passthrough=no protocol=icmp
add action=mark-packet chain=prerouting comment=DNS disabled=no \
new-packet-mark=interactivo passthrough=no protocol=tcp src-port=53
add action=mark-packet chain=postrouting disabled=no dst-port=53 \
new-packet-mark=dns_out passthrough=no protocol=tcp
add action=mark-packet chain=prerouting disabled=no new-packet-mark=\
interactivo passthrough=no protocol=udp src-port=53
add action=mark-packet chain=postrouting disabled=no dst-port=53 \
new-packet-mark=dns_out_udp passthrough=no protocol=udp
add action=mark-packet chain=prerouting comment="http Conexion" \
connection-bytes=0-500000 disabled=no new-packet-mark=http_in \
passthrough=no protocol=tcp src-port=80
add action=mark-packet chain=postrouting connection-bytes=0-500000 disabled=\
no dst-port=80 new-packet-mark=http_out passthrough=no protocol=tcp
add action=mark-packet chain=prerouting comment="http Descargas" \
connection-bytes=500000-2000000 disabled=no new-packet-mark=http_dwn \
passthrough=no protocol=tcp src-port=80
add action=mark-packet chain=prerouting comment="https conexion" \
connection-bytes=0-500000 disabled=no new-packet-mark=https_in \
passthrough=no protocol=tcp src-port=443
add action=mark-packet chain=postrouting connection-bytes=0-500000 disabled=\
no dst-port=443 new-packet-mark=https_out passthrough=no protocol=tcp
add action=mark-packet chain=prerouting comment="https Descargas" \
connection-bytes=500000-2000000 disabled=no new-packet-mark=https_dwn \
passthrough=no protocol=tcp src-port=443
add action=mark-packet chain=prerouting comment="Otras conexiones" disabled=\
no new-packet-mark=Otras_in passthrough=no
add action=mark-packet chain=postrouting disabled=no new-packet-mark=\
Otras_out passthrough=no
add action=mark-packet chain=prerouting comment="SIP and RTP" disabled=no \
dscp=46 new-packet-mark=interactivo passthrough=no
add action=mark-packet chain=prerouting comment="SIP and RTP control" \
disabled=no dscp=26 new-packet-mark=interactivo passthrough=no
add action=mark-packet chain=prerouting comment=ospf disabled=no dscp=48 \
new-packet-mark=interactivo passthrough=no protocol=ospf

Finalmente configuramos el Queue Tree:
con un parent max limit de 80% en Download_all y Upload_all
/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=1768k name=Download-All packet-mark="" parent=global-in \
priority=1
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=400k name=Upload-All packet-mark="" parent=global-out priority=\
1
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=yes limit-at=0 \
max-limit=0 name=Descargas packet-mark=download-packet parent=global-in \
priority=8 queue=PCQ_download
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=descargas packet-mark=download-packet parent=\
Download-All priority=8 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=www-descargas packet-mark=http_dwn parent=Download-All \
priority=6 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=www-conexion packet-mark=http_in parent=Download-All \
priority=4 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=https-conexion packet-mark=https_in parent=Download-All \
priority=3 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=https-descargas packet-mark=https_dwn parent=\
Download-All priority=6 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=otras packet-mark=Otras_in parent=Download-All priority=\
7 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name="icmp (ping) Up" packet-mark=icmp parent=Upload-All \
priority=1 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=dns-Up packet-mark=dns_out parent=Upload-All priority=2 \
queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=dns_udp-Up packet-mark=dns_out_udp parent=Upload-All \
priority=2 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=www-conexion-Up packet-mark=http_out parent=Upload-All \
priority=4 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=https-Up packet-mark=https_out parent=Upload-All \
priority=4 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=yes limit-at=0 \
max-limit=0 name=otras-up packet-mark=Otras_out parent=Upload-All \
priority=7 queue=PCQ_upload
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=Interactivos packet-mark=interactivo parent=Download-All \
priority=1 queue=default

Vemos cómo quedaron el mangle del firewall y el queue tree:


Fuentes:
http://forum.mikrotik.com/

viernes, 8 de febrero de 2013

ThunderCache 3.1.2 en CentOS 6.3



ThunderCache es un proxy cache para contenidos dinámicos de Internet que trabaja de parent para squid. Los desarrolladores del software sugieren instalarlo en distribuciones debian o ubuntu, por lo que esta guía les será de utilidad a aquellos que trabajen con CentOS o derivados de Red Hat.

Para el efecto asumiremos que ya esta en producción el servidor centos con squid 3.1
actualizamos el sistema
yum update

instalamos las librerías de desarrollo necesarias:
yum install -y libcurl4-gnutls-devel libmysqlclient-devel libmysqlclient15-devel libmysqlclient16-devel
Instalaremos la versión 3.1 del thunder para luego actualizar a 3.1.2 con el script que creó JOEMG, siendo esta una versión modificada del proxy con nuevos plugins y las herramientas para diseñar los propios también.
Como ya dije, el script esta programado para distribuciones debian alike asi que extraemos lo relevante para el CentOS.
Creamos un directorio de trabajo:
mkdir /var/tmp/thunder312
cd /var/tmp/thunder312

descargamos esta serie de archivos:
wget http://joemg.host56.com/tc31/thunder31.tar.gz
wget http://www.joemg.host56.com/tc312/x32/thunder.tar.gz
wget http://www.joemg.host56.com/tc31/libmysqlclient.so.15
wget http://www.joemg.host56.com/tc31/libmysqlclient.so.15.0.0
wget http://www.joemg.host56.com/clean/32bits/clean.zip
wget http://www.joemg.host56.com/tc31/killcpumax.sh
wget http://www.joemg.host56.com/tc31/thunderotate.sh
wget http://www.joemg.host56.com/tc31/pluginmaker.zip
wget http://joemg.host56.com/plugins32/plugins.zip
wget http://joemg.host56.com/tc31/thunder.sql
wget http://joemg.host56.com/tr/thunder.zip
wget http://joemg.host56.com/tr/thunderp.sql
wget http://joemg.host56.com/tc31/upload.cgi
instalamos la versión 3.1 de thunder:
tar -xzvf /tmp/thunder31.tar.gz -C /
Creamos los directorios de trabajo y asignamos permisos:
mkdir /var/log/thunder
mkdir /var/tmp/thunder
mkdir /var/run/thunder
mkdir /thunder
chmod a+rwx /var/log/thunder
chmod a+rwx /var/tmp/thunder
chmod a+rwx /var/run/thunder
chmod a+x /etc/init.d/thunder
touch /etc/thunder/whitelist
touch /etc/thunder/blacklist
chown -R apache /thunder/
chmod -R 777 /thunder/
umask 000 /thunder/
echo “extension=pdo.so” >> /etc/php.ini
echo “vm.swappiness=10″ >> /etc/sysctl.conf

creamos la base de datos para thunder y el modulo administrativo:
mysql -p
mysql> create database thunder;
mysql> grant all privileges on thunder.* to thunder@localhost identified by ‘thunder2012′;
mysql> create database clientes;
mysql> grant all privileges on clientes.* to thunder@localhost identified by ‘thunder2012′;
mysql> flush privileges;

Llenamos esas bases de datos:
mysql -u root -p thunder < thunder.sql
mysql -u root -p clientes < thunderp.sql

Actualizamos a la version thunder 3.1.2:
rm -rf /usr/local/sbin/thunder
tar -xzvf thunder.tar.gz
mv thunder /usr/local/sbin/

Editamos /etc/squid/squid.conf y le agregamos:
#———————————————————————-
#Redireccionamiento Thunder – REGEx
#———————————————————————-
acl thunder_lst url_regex -i \”/etc/thunder/thunder.lst\”
cache deny thunder_lst
cache_peer 127.0.0.1 parent 8080 0 proxy-only no-digest
dead_peer_timeout 2 seconds
cache_peer_access 127.0.0.1 allow thunder_lst
cache_peer_access 127.0.0.1 deny all
#———————————————————————-
Editamos /etc/thunder/thunder.conf y cambiamos las lineas para que se muestren asi:
# Configuracion de MySQL
MYSQL_HOST localhost
MYSQL_USER thunder
MYSQL_PASS thunder2012
MYSQL_DB thunder
Instalamos las herramientas de thunder:
unzip clean.zip
cp clean /etc/thunder/
chmod 555 /etc/thunder/clean
cp killcpumax.sh /etc/thunder/killcpumax.sh
cp thunderotate.sh /etc/thunder/thunderotate.sh
unzip pluginmaker.zip
mv pluginmaker /etc/thunder/

cambiamos el contenido de /etc/thunder/thunder.lst por este:
74\.125\.(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]?)
http.*\.2shared.com\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
http.*\.4shared\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
http.*\.photobucket\.com
########################################==========A==========###############
http.*\.avast\.com.*(\.def|\.vpu|\.vpaa|\.stamp|\.vpx)
http.*adobe\.com/.*(\.cab|\.aup|\.exe|\.msi|\.upd|\.msp)
http.*\.avira-update\.com.*(\.idx|\.gz|\.exe)
http.*\.avg\.com.*(\.exe|\.bin)
http.*\.axeso5\.com.*(\.zip|\.cdt|\.cmp|\.exe)
########################################==========B==========###############
http.*\.blogspot\.com.*(\.mp4|\.flv|\.swf|\.jpg)
########################################==========C==========###############
http.*\.cnet\.com.*(\.exe|\.rar|\.zip|\.iso)
http.*\.baycdn\.com.*(\.exe|\.iso|\.flv|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv|.7z)
http.*\.cramit\.in.*\.mp4
########################################==========D==========###############
http.*\.depositfiles\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv|.7z)
http.*\.dailymotion\.com.*(\.flv|\.on2|\.h264|\.mp4)
########################################==========E==========###############
http.*\.eset\.com.*(\.nup|\.ver|\.exe|\.msi)
http.*\.eluniverso\.com.*\.jpg
http.*\.ewinet\.com.*\.jpg
########################################==========F==========###############
http.*\.fulltono\.com.*(\.mp3|\.ftm|\.sdk)
http.*\.fbcdn\.net.*(\.mp4|\.jpg)
http.*\.filefactory.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
http.*\.filehippo\.com.*(\.zip|\.rar|\.exe|\.iso)
http.*flashvideo\.globo\.com.*(\.mp4|\.flv)
http.*\.fileserve\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
http.*\.filebox\.com.*\.mp4
########################################==========G==========###############
http.*\.google\.com.*(\.kmz|\.exe|\.msi|\.kmz|\.msp|\.cab)
http.*\.goear\.com.*\.mp3
########################################==========H==========###############
http.*\.hotfile.com*
http.*\.hardsextube\.com.*(\.flv|\.wmv)
http.*\.hsyns\.net.*\.jpg
http.*\.hwcdn\.net*
########################################==========K==========###############
http.*\.juegosjuegos\.com.*(\.swf|\.jpg|\.png)
########################################==========L==========#######################################################==========M==========###############
http.*\.mlstatic\.com.*\.jpg
http.*\.mbamupdates\.com.*\.ref
http.*\.mccont\.com.*(\.flv|\.mp4)
http.*\.macromedia\.com.*\.z
http.*\.mcafee\.com.*(\.exe|\.xdb|\.msi|\.zip|)
#http.*\.mediafire\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
http.*(\.myspacecdn\.com|\.footprint\.com).*(\.flv|\.mp4)
http.*(\.movistar\.com\.pe|\.telconet\.net).*\.jpg
########################################==========N==========###############
http.*\.nai.com.*(\.zip|\.tar|\.exe|\.gem)
http.*\.netlogstatic\.com.*(\.flv|\.mp4)
http.*\.noticias24\.com
http.*\.nflxvideo\.net*
########################################==========O==========###############
########################################==========P==========###############
http.*\.pandonetworks\.com.*(\.nzp|\.lst)
http.*\.phncdn\.com.*(\.flv|\.mp4)
http.*\.pornhub\.com.*\.flv
http.*\.pornotube\.com.*(\.flv|\.mp4)
http.*\.porntube\.com.*(\.m4v|\.flv|\.mp4)
http.*\.pop6\.com.*(\.flv)
########################################==========R==========###############
http.*\.redtubefiles\.com.*(\.flv|\.mp4)
#http.*\.rapidshare\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\ .doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
########################################==========S==========###############
http.*\.sendspace\.com.*(\.exe|\.iso|\.torrent|\.zip|\.rar|\.pdf|\.doc|\.tar|\.mp3|\.mp4|\.avi|\.wmv)
http.*\.symantecliveupdate\.com.*(\.zip|\.exe|\.m26)
http.*\.sourceforge\.net.*(\.zip|\.rar|\.exe|\.iso)
http.*\.softonic\.com.*(\.zip|\.rar|\.exe|\.iso)
http.*\.stream\.aol\.com.*(\.mp4|\.flv)
http.*\.softnyx\.com.*(\.xfs|\.rar|\.exe|\.iso)
http.*\.staticflickr\.com.*\.jpg
########################################==========T==========###############
http.*\.terra\.com.*\.mp4
http.*\.tube8\.com.*(\.flv|\.mp4)
http.*\.tagstat\.com.*\.jpg
http.*\.tudiscoverykids\.com.*(\.flv|\.mp4|\.mp3|\.jpg|\.png|\.mp4|\.f3d|\.swf)
http.*\.tricom\.net.*\.jpg
########################################==========U==========###############
http.*\.uptodown\.net.*(\.zip|\.rar|\.exe|\.iso)
http.*\.uptodown\.com.*(\.zip|\.rar|\.exe|\.iso)
http.*\.ubuntu\.com.*(\.deb|\.tar|\.gz)
########################################==========V==========###############
http.*\.viddler\.com.*\.flv
http.*(\.video\.msn\.com|\.video\.latan\.msn\.com).*(\.flv|\.mp4)
http.*\.vimeo.com.*(\.flv|\.on2|\.h264|\.mp4)
http.*\.videocaserox\.com.*\.flv
########################################==========W==========###############
#http.*(\.windowsupdate\.com|\.microsoft\.com).*(\.cab|\.exe|\.iso|\.zip|\.psf|\.msu)
http.*\.microsoft\.com.*(\.cab|\.exe|\.iso|\.zip|\.psf|\.msu|\.msi|\.msp|\.dsft)
http.*\.windowsupdate\.com.*(\.cab|\.exe|\.iso|\.zip|\.psf|\.msu|\.msi|\.msp|\.dsft)
http.*\.wikimedia\.org.*(\.jpg|\.png)
########################################==========X==========###############
http.*\.xtube\.com.*\.flv
http.*\.xvideos\.com.*\.flv
########################################==========Y==========###############
http.*\.youtube\.com.*videoplayback
http.*\.youporn\.com.*(\.flv|\.mp4)
http.*\.youjizz\.com.*(\.flv|\.mp4)
http.*\.ytimg\.com.*\.jpg
http.*\.yimg\.com.*(\.jpg|\.swf)
########################################==========Z==========###############
http.*.\ziddu\.com.*(\.exe|\.iso|\.rar|\.zip|)

Actualizamos los plugins:
rm -rf /etc/thunder/plugins/
unzip plugins.zip
mv plugins /etc/thunder/
chmod 555 /etc/thunder/plugins/*
chmod 555 /etc/thunder/memoria.sh
chmod 555 /etc/thunder/clean
chmod 555 /etc/thunder/thunderotate.sh
chmod 555 /etc/thunder/killcpumax.sh
instalamos el modulo web:
unzip thunder.zip
mv thunder /var/www/html/
chmod 555 /var/www/html/thunder/*
chmod 555 /var/www/html/thunder/mail/*
Editamos estos archivos para cambiar usuario y contraseña de la DB:
/var/www/html/thunder/report.php
/var/www/html/thunder/Cpay.php
/var/www/html/thunder/Cent.php
/var/www/html/thunder/Cent.php
/var/www/html/thunder/conexion.php
/var/www/html/thunder/system.php
/var/www/html/thunder/edit/editsq.php
/var/www/html/thunder/edit/editip.php
/var/www/html/thunder/edit/edit.php
/var/www/html/thunder/edit/editdns.php
/var/www/html/thunder/edit/editmk.php
/var/www/html/thunder/edit/editus.php
Iniciamos los servicios:
/etc/init.d/thunder start
/etc/init.d/squid restart

Y ya podemos ver cómo esta funcionando thundercache junto a squid en nuestro servidor CentOS 6.3 entrado a:
http:/ip.del.servidor/thunder

usuario:admin password:admin Esto podrá cambiarse más adelante desde esta misma interface

Screenshots:

Fuentes:
http://www.alterserv.com/foros/index.php?topic=3.0
http://www.alterserv.com/foros/index.php?topic=9.0
http://www.alterserv.com/foros/index.php?topic=11.0
http://foro-mikrotik.com/thundercache-7-1-final-licencia-de-pago-y-free-ads-detalles/