Mostrando entradas con la etiqueta Ancho de banda. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ancho de banda. Mostrar todas las entradas

lunes, 26 de enero de 2015

Emulando parametros de red con Shapy


Este post pretende explicar como emular parámetros de redes tales como la latencia, jitter, pérdida de paquetes y ancho de banda por medio de la creación de un entorno de pruebas enfocado principlamente  para sistemas  GNU/Linux. 
¿Para que emular?
Sirve por ejemplo, en situaciones donde se desea evaluar el comportamiento de diversos protocolos del stack de TCP/IP en redes de datos, verificar el tratamiento que se da a los paquetes con condiciones particulares, y con ello poder predecir posibles fallos o anomalías que puedan ocurrir.

Latencia: Es la demora en la entrega de los paquetes, desde que estos salen hasta que llegan a su destino.
Jitter: Se define como las variaciones en el tiempo (demoras) cuando se transmiten los paquetes, generalmente esas demoras son causadas por un encolamiento al existir altos niveles de tráfico en la red.

Perdida de paquetes: Se presenta cuando los niveles de tráfico son muy altos y  los paquetes tienden a perderse al ser rechazados por los dispositivos de red, especialmente cuando los buffers se llenan.

¿Como hacerlo?

Bien, existen diversas aplicaciones y software para realizar este tipo de pruebas, uno de los mas conocidos es TC (Traffic Control) viene incluido en un modulo del Kernel llamado NetEM para mas información en este link:  http://www.lartc.org/#download.

Sin embargo una forma fácil de entender  y de implementar la podemos realizar por medio de un framework  de python llamado Shapy el cual se apoya en el modulo NetEM,

Shapy

Se asume que python esta instalado  y el gestor de paquetes pip, este ultimo puede ser descargado e instalado en sistemas linux basados en debian o ubuntu ejecutando en una terminal:
sudo apt-get install python-pip
Para instalar shapy simplemente digitamos lo siguiente:
sudo pip install shapy
¿Como configurarlo?

Lo primero es crear un archivo  de configuración de la siguiente forma:

UNITS = 'kbit'
ENV = {'PATH': '/sbin:/bin:/usr/bin'}
HTB_DEFAULT_CLASS = '1ff'
EMU_INTERFACES = ('eth0',"wlan0","lo",)
Donde UNITS son las unidades para limitar ancho de manda puede ser kbits o mbits, ENV es la variable de entorno con la ruta donde esta el comando tc, HTB_DEFAULT_CLASS es la clase que va indentificar cada una de las reglas para cada interfaz de red y asi poder aplicarle un Token Bucket Jerarquico  (Ver el link anterior) y finalmente EMU_INTERFACES son las interfaces de red que se pretenden emular. Lo anterior debe ser guardado en un archivo .py.

Aplicando parametros

A continuación creamos un archivo de python de la siguiente manera:
#IMPORTAR LIBRERIAS
from shapy.emulation.shaper import Shaper
from shapy import register_settings
#LLAMAR ARCHIVO DE CONFIGURACION
register_settings('archivo_configuracion.py')
#APLICAR REGLAS
ip ="192.168.1.1"
subida = 1000
bajada = 500
latencia = 250
jitter = 25
regla = {(ip,) : {'upload': subida, 'download': bajada, 'delay': latencia, 'jitter': jitter},}
sh = Shaper()
sh.set_shaping(regla)
Finalmente las reglas fueron aplicadas en la interfaz donde esta la IP 192.168.1.1, ancho de banda de subida de 1000 kbps, bajada 500 kbps, latencia de 250 milisegundos y jitter de 25 milisegundos.

¿Y la perdida de paquetes?

Hay dos formas de emular perdida de paquetes (que conozco):

1-Usando iptables:
iptables -A INPUT -m statistic --mode random --probability 0.15 -j DROP
Con lo anterior se rechazaran el 15% de los paquetes entrantes en todas las interfaces.

2- Taffic control:
tc qdisc add dev  eth0 parent 1:1 handle 512: netem loss 15%
Con lo anterior se rechazaran el 15% de los paquetes entrantes en  eth0.

Finalmente recomiendo ver el siguiente video para ver de forma práctica como se comporta una red con parametros emulados.


martes, 11 de noviembre de 2014

Crear un "ICMP tunnel" con Hans


En algunas ocasiones cuando estamos detrás de un firewall y este nos bloquea puertos, nos sentimos frustrados al no poder salir a Internet. A pesar que intentemos obtener acceso usando técnicas a nivel de capa de transporte como por ejemplo tuneles TCP, UDP y HTTP entre otros, el firewall en la mayoria de los casos va salir victorioso. Es aquí amigos, donde entra el milagroso protocolo ICMP conocido gracias al inmortal comando "ping", el cual permite enviar mensajes de peticiones y de respuesta de eco, usado a menudo para diagnostico en las redes IP.  En los mensajes ICMP, se encapsulan los datos de los demás protocolos en el payload del paquete para no ser detectados.

En los sistemas Linux y Unix  hay una serie de programas que nos permiten realizar conexiones para hacer bypass en los firewalls donde el trafico ICMP es permitido, sin importar que los puertos a nivel de capa de transporte sean bloqueados. Uno de esos programas se llama "Hans" el cual funciona en arquitectura cliente-servidor. En la pagina "http://code.gerade.org/hans/" se encuentran todas las caracteristicas y la descripción del software incluyendo el cídigo fuente.

Como es costumbre aquí en Nación Bit dejamos a dispossición un videotutorial dónde se describen los pasos de una forma sencilla para implentar el tunnel ICMP con Hans y así  poder lograr el tan anhelado acceso a internet:





sábado, 25 de octubre de 2014

Limitar ancho de banda en Ubuntu Linux con Wondershaper



En ocasiones, nos conectamos a Internet compartiendo el ancho de banda con otros usuarios en la red y notamos que la conexión comienza a deteriorarse, especialmente cuando se acceden a contenidos de video (Youtube, Vimeo ...etc), música o trafico p2p como es el caso de los torrents. Esto ocurre debido a que no existen políticas para gestionar de forma adecuada el tráfico. Una ventaja de los sistemas basados en Unix es que tienen múltiples herramientas y técnicas que nos permiten gestionar de forma adecuada el flujo de los datos. Este video tutorial explica como limitar nuestro ancho de banda usando Wondershaper en sistemas Unix y Linux de forma fácil y rápida.



Para instalar en sistemas Ubuntu o basados en Debian simplemente digitamos en una terminal de comandos:


# sudo aptitude install wondershaper

Para establecer la velocidad de transmisión, seleccionamos una interfaz de red y a continuación los valores de la velocidad  de bajada y de subida en Kbps respectivamente:

# sudo wondershaper wlan0 400 500

En ele ejemplo anterior se establece un downstream de 400 Kbps y un upstream de 500 Kbps en la interfaz de red wlan0. Para restablecer de nuevo la configuración original se escribe lo siguiente:


# sudo wondershaper clear wlan0
Distributed By Free Blogger Templates | Designed By Seo Blogger Templates