Check the new version here

Popular channels

Control de Ancho de Banda ISP desde Linux

Hola Amigos Taringeros,

Quiero Compartirles este Código Fuente de un Desarrollo que Realicé con el Fin de Convertir un Linux en un Servidor de Ancho de Banda o LBTC (Load Balancing Traffic Control).

Primero que Todo, Mi Sistema Original es un Appliance Firewall en Etapa de Desarrollo, El Kernel Utilizado es el 4.3.0 el cual tiene entre otros beneficios el ipset con hash MAC, que me permite crear grupos de filtrado Basado en Direcciones Físicas.

Espero que Algunos Temas Aquí Tratados sean de Conocimiento General, como el Hecho de Reconocer que Significa Rehúso de Canales de Internet y su Aplicación.

Entonces, para que hablemos en el mismo contexto, les dejo una Lista de Términos con sus Respectivos Significados Coloquiales.

1- Rehúso de Internet: El Rehúso es una Técnica permitida por los organismos de regulación de las telecomunicaciones, que le dan la potestad al proveedor de internet en utilizar una notación matemática de venta de los canales de internet con una formula mas chimba que el carajo.

Por Ejemplo:

1/1 = Esto es un Canal Dedicado de X velocidad.
Donde 1/ es la Velocidad de Bajada
Donde /1 es la Velocidad de Subida

Lo Cual es Costoso para el Usuario Final ya que el proveedor ISP debe suplir esa velocidad de subida y bajada siempre, no puede ser fluctuante en un 98% y debe garantizar los canales que la soporten.

Entonces el TRUCO ISP para vender canales dedicados fragmentados entre varios usuarios que paguen el uso de un canal dedicado pero con Rehúso, osea la Famosa Banda Ancha, que no es otra cosa que un Canal Dedicado pagado por el número de usuarios en los que Fragmentaron el Canal Original del Servicio.

Ejemplo:

1 Canal Dedicado de 5 Megas Convertido en Banda Ancha Residencial = Rehúso 1/5

1 Canal Dividido Entre 5 Usuarios, y el truco está en que, el canal no siempre está en uso, por lo tanto en ocasiones puedes descargar a 5 Megas, pero cuando los 5 Clientes se ponen de acuerdo se convierte en un Canal de 1 Mega por Usuario.

Esta Clara la Explicación????

Pero no creas que solamente el rehúso es 1/5, hay ISP que tienen el descaro de aplicar Rehúso 1/8 o 1/10, como es el Caso de Timofonica.


Bueno dejemos de tanta palabrería y vamos directo a la solución de Control de Tráfico tipo ISP.

Para la Aplicación del Código hay que dejar en claro que conocemos nuestro entorno físico de red.

Supongamos que Nuestra Interfaz de Internet es eth0 y la Red Local es eth1

Entonces, en el mismo lugar donde guardaremos el bash ejecutable guardaremos el archivo de configuración donde almacenaremos la disponibilidad de ancho de banda por dispositivo.

el archivo de configuración tendrá el mismo nombre que la interfaz local

nano eth1

Este es el Contenido de 3 Equipos en la Red a los que les Controlaremos el Ancho de Banda

1,00:21:45:67:b3:f1,1Mbit
2,00:21:b5:62:a3:c1,5Mbit
3,00:21:45:b7:c3:f2,10Mbit

NO pueden quedar espacios ni arriba ni abajo, ya que provoca volcado del código

Lo anterior indica que el primer equipo con MAC 00:21:45:67:b3:f1 será limitado a 1 Megabite por segundo en descargas; el Segundo equipo con MAC 00:21:b5:62:a3:c1 será limitado a 5 Megabites por segundo. etc.

El Archivo de LBTC solo controlará los Protocolos TCP y UDP + Puertos 80,443,1080 y 8080, los demás puertos tendrán velocidad ilimitada.

creamos el archivo de ejecución LBTC

nano lbtc

#!/bin/bash

eth=$1
act=$2
tcp=17
udp=6

VER=`tc -s class show dev $eth | head -1 | wc -l`
if [[ $VER == 1 ]]; then
tc qdisc del dev $eth root 2>&1 >/dev/null
fi

if [[ $act == "enable" ]]; then
echo "Habilitando el Control de Ancho de Banda para la Interfaz $eth"
tc qdisc add dev $eth root handle 1: htb default 60

OLDIFS=$IFS
IFS=","
while read n mac vel
do
IFS=':' eval 'array=($mac)'
fabricante=`echo ${array[0]}${array[1]} | tr '[a-z]' '[A-Z]'`
maquina=`echo ${array[2]}${array[3]}${array[4]}${array[5]} | tr '[a-z]' '[A-Z]'`
tc class add dev $eth parent 1: classid 1:$n htb rate $vel
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $udp 0xff match ip sport 80 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $tcp 0xff match ip sport 80 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $udp 0xff match ip sport 443 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $tcp 0xff match ip sport 443 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $udp 0xff match ip sport 1080 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $tcp 0xff match ip sport 1080 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $udp 0xff match ip sport 8080 0xffff flowid 1:$n
tc filter add dev $eth parent 1: protocol ip prio 1 u32 match u16 0x0800 0xffff at -2 match u32 0x$maquina 0xffffffff at -12 match u16 0x$fabricante 0xffff at -14 match ip protocol $tcp 0xff match ip sport 8080 0xffff flowid 1:$n
done < ./$eth
IFS=$OLDIFS
else
echo "Deshabilitando el Control de Ancho de Banda para la Interfaz $eth"
fi


Guardamos el Archivo Bash y lo Convertimos en Ejecutable

chmod a+x lbtc

Modo de Uso:
Activar LBTC: ./lbtc eth1 enable
Desactivar el LBTC: ./lbtc eth1 disable


Con esta solución de control de trafico, podemos asegurar velocidades por usuario 1/1 también que sin importar que cambie de IP siempre tendrá la misma velocidad.

Fue un Placer dar este Aporte a la Comunidad de Linuxeros.

SU AMIGO.


Ing. Alexander Rubio Cáceres
Certificado RHCE
Especialista en Desarrollo de Soluciones de Networking y Seguridad Informática
Director IT
COLSOF S.A.
0
0
0
2
0No comments yet