Hace unos días las computadoras de la LAN no podían tener acceso a Internet al analizar el servidor Linux que hace NAT y es proxy (tiene una salida a intente por adsl) note que el Internet se saturaba, eso me hizo pensar que alguna maldita maquina en la red estaba generando gran volumen de trafico, pues al desconectar el cable de red de la LAN se normalizaba el ancho de banda. Esto me causo bronca, así que decidí administrar el ancho de banda por cada computadora de la red.
Entonces me puse manos a la obra y opte por repartir el ancho de banda de forma equitativa por cada computadora, así que utilice la herramienta tc.
Mi primer paso fue identificar a los usuarios que tiene acceso a paginas Web de importancia para el trabajo de la empresa como acceso a bancos, acceso a proveedores y paginas Web de la empresa, para ello utilice squidview. Luego de identificar las direcciones IP de estas computadoras me puse a crear los filtros respectivos para cada computadora. En total cree 16 colas con un ancho de banda bastante aceptable y una cola unica por defecto para todas las demás computadoras. Jugando un poco con el siguiente script se puede administrar una red mediana y con esta política de colas administrar el ancho de banda por ip o subredes. Muy útil si quieres que no te tumben la red aquellos usuarios que descargan trafico p2p.
Aquí presento el script con sus comentarios:
<--------------------------------- CORTAR AQUÍ ------------------------------>
#!/bin/bash
#este script debería limitar el ancho de banda de toda la red, para que no la sature
# y se caiga el Internet
#Definimos la placa de red interna de la LAN, ya que es la que nos interesa administrar.
DEV=eth1
#Definimos el camino al comando "tc", en caso de que no este en el PATH
TC=/sbin/tc # este es el caso en el que esta en el PATH
#Definimos todos los límites de ancho de banda a utilizar en Kbps.
RATE1=2048
RATE2=128
RATE3=256
RATE4=512
# Esta línea elimina toda posible definición anterior de FILTROS y CLASES
$TC qdisc del dev $DEV root 2>&1 >/dev/null
#Definimos las CLASES existentes, además de la CLASE root y la CLASE master que
#son necesarias para el funcionamiento del script, pero que no debemos modificar.
#CLASE root y master por defecto todo el trafico se va por la cola 170
$TC qdisc add dev $DEV root handle 1: htb default 170
$TC class add dev $DEV parent 1: classid 1:1 htb rate ${RATE1}kbit
#CLASES y orden prioridad
$TC class add dev $DEV parent 1:1 classid 1:10 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:20 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:30 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:40 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:40 handle 40: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:50 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:50 handle 50: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:60 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:60 handle 60: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:70 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:70 handle 70: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:80 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 3
$TC qdisc add dev $DEV parent 1:80 handle 80: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:90 htb rate ${RATE3}kbit ceil ${RATE3}kbit prio 1
$TC qdisc add dev $DEV parent 1:90 handle 90: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:100 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:100 handle 100: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:110 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:110 handle 110: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:120 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:120 handle 120: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:130 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:130 handle 130: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:140 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:140 handle 140: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:150 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:150 handle 150: sfq perturb 10
$TC class add dev $DEV parent 1:1 classid 1:160 htb rate ${RATE2}kbit ceil ${RATE2}kbit prio 1
$TC qdisc add dev $DEV parent 1:160 handle 160: sfq perturb 10
#ClASE POR DEFECTO
$TC class add dev $DEV parent 1:1 classid 1:170 htb rate ${RATE3}kbit ceil ${RATE3}kbit prio 5
$TC qdisc add dev $DEV parent 1:170 handle 170: sfq perturb 10
# FILTRO PARA CADA IP DE COMPUTADORA
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.2 flowid 1:10
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.2 flowid 1:10
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.17 flowid 1:20
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.17 flowid 1:20
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.23 flowid 1:30
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.23 flowid 1:30
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.30 flowid 1:40
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.30 flowid 1:40
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.55 flowid 1:50
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.55 flowid 1:50
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.56 flowid 1:60
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.56 flowid 1:60
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.60 flowid 1:70
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.60 flowid 1:70
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.100 flowid 1:80
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.100 flowid 1:80
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.156 flowid 1:90
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.156 flowid 1:90
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.210 flowid 1:100
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.210 flowid 1:100
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.212 flowid 1:110
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.212 flowid 1:110
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.214 flowid 1:120
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.214 flowid 1:120
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.217 flowid 1:130
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.217 flowid 1:130
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.233 flowid 1:140
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.233 flowid 1:140
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.241 flowid 1:150
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.241 flowid 1:150
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip dst 10.16.1.25 flowid 1:160
$TC filter add dev $DEV parent 1: protocol ip prio 1 u32 match ip src 10.16.1.25 flowid 1:160
#Ya esta listo para correr.
$TC qdisc show dev $DEV
$TC class show dev $DEV
#Fin del Script
<-----------------------------CORTAR AQUÍ --------------------------->
Ahora en vez de que cada invitado coja un pedazo de torta para el (siempre hay un vivo que se corta una tajada mas grande, perjudicando a los demás) decido cortar yo mismo la torta en partes iguales para cada uno.
Nota: Se puede filtrar el tráfico por puerto marcando los paquetes con iptables, priorizando el puerto 3128 del servidor proxy, sin embargo, estuve pensando
que a todos los usuarios los metería en ese mismo saco lo cual si hay un usuario que esta viendo youtube o descargando música, restaria ancho de banda a
los demás, por tal motivo esa no me parecía una buena solución, aunque se puede configurar squid para manejar pool y administrar la velocidad por conexión.
Pero esto lo haría manejando una política de marcación de paquetes y cambiando el script que podría ser tema de otro post.
Ah me olvidaba el siguiente script me permitio detectar las ips de las computadoras activas. Cambiar el rando de las ips para su red LAN.
<-------------------- CORTAR AQUI -------------->
#!/bin/sh
statname="Maquinas Conectadas Actualmente"
uptime=`uptime awk '{print $3}'`" dias, "`uptime awk '{print $5}'`" horas"
nmap -sP 10.16.1.1-254 > /tmp/nmap.txt
statin=`cat /tmp/nmap.txt grep "10.16.1."`" - "
echo $uptime
echo $statin
<------------------CORTAR AQUI--------------------a
Para mas informacion estas url puede ser de interes:
http://www.bulma.net/impresion.phtml?nIdNoticia=1727
http://www.docum.org/docum.org/monitor/
1 comentario:
HOLA AMIGO UNA CONSULTA
QUIERO PONER UNA PROMOCION EN EL BONUS PERO QUIERO QUE SOLO SEAN LOS DIAS DOMINGOS Y LOS DEMAS DIAS LA TARIFA SEA NORMAL,COMO PODRIA HACER ESTA CONFIGURACION.
AGRADESCO DE ANTEMANO TU RESPUESTA
ATTE
NEUMOGASTRICO
Publicar un comentario