les comparto un código que encontré en Internet para el control de las redes lan, yo tengo mi servidor LINUX como firewall en mi red lan utlizando dhcp y squid para brindar el servicio y poder aplicar este script
lo haré de 2 formas, 1 con base de datos y la otra muy simple
para hacerlo mas sencillo de utilizar tendrán que crear una base de datos en phpmysql y agregan esta tabla a su base de datos
CREATE TABLE IF NOT EXISTS `dhcp` (
`id_dhcp` int(11) NOT NULL AUTO_INCREMENT,
`USUARIO` text NOT NULL,
`MAC` text NOT NULL,
`IP` text NOT NULL,
`ACCESO` text NOT NULL,
PRIMARY KEY (`id_dhcp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=86 ;
lo que tienen que hacer es ingresar la información de la red que tienen ejemplo yo en mi red tengo 20 computadoras las cuales tienen 3 niveles de uso de banda ancha
(ACCESO)
PRIORIDAD = INTERNET SIN RESTRICCIONES
LIMITADO = 1mbit = 120 kb
DENEGADO = 300kbit = 40 kb (lo suficiente como para abrir el correo y evitar que utilizen youtube a su 100%)
primero antes de iniciar con el script es necesario instalar algunos modulos para nuestro script en perl
en la terminal colocan perl -MCPAN -e shell, si es la primera vez que lo ejecutan les pedirá que ingresen la palabra yes como 3 veces y les saldra esto una vez que ya lo configuraron
#---------------------------------------------------
Terminal does not support AddHistory.
cpan shell -- CPAN exploration and modules installation (v1.960001)
Enter 'h' for help.
cpan[1]>
#---------------------------------------------------
ahora deberan de ingresar lo siguiente
install Text::Table
install Term::ANSIColor
install CGI
install DBI
una vez que instalaron todos estos módulos solo faltaría configurar el script
en la terminal ingresen sudo nano download_limit.pl e insertan el siguiente codigo
veran en el script que yo tengo la tarjeta de red eth1 ustedes la cambian por la que tengan predeterminada para su red LAN
Código HTML:
#!/usr/bin/perl use Text::Table; use Term::ANSIColor; use 5.010; use CGI; use DBI; $cgiObj = CGI ->new; $params = 'DBI:mysql:TU BASE DE DATOS:localhost'; $user= 'TU USUARIO MYSQL'; $pass = 'TU CLAVE DE ACCESO'; $conn = DBI ->connect ($params, $user, $pass); system "clear"; print colored ['red on_bright_yellow'], ' SISTEMA CONTROL DE DESCARGAS ', "\n"; print "USUARIO\t\t\t MAC ADDRESS\t\t IP\t\tVELOCIDAD\n"; print "\e[1;31m--------------------------------------------------------------------------\e[0m \n"; my $tb = Text::Table->new( "", "", "", "", "" ); system "/sbin/tc qdisc add dev eth1 root handle 1: htb default 30"; system "/sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 1mbit"; system "/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 1mbit"; system "/sbin/tc class add dev eth1 parent 1: classid 1:3 htb rate 300kbit"; system "/sbin/tc class add dev eth1 parent 1: classid 1:4 htb rate 300kbit"; #------------------------EXTRACCION DE DIRECCIONES IP $sql_DHCP = "SELECT * FROM dhcp" ; $query_DHCP = $conn->prepare($sql_DHCP); $query_DHCP->execute(); while (@row_DHCP = $query_DHCP->fetchrow_array){ $TOTALES ++; $USUARIO=$row_DHCP[1]; $MAC=$row_DHCP[2]; $IP_ADDRESS=$row_DHCP[3]; $ACCESO=$row_DHCP[4]; if ($ACCESO eq "PRIORIDAD") { $ACCESO="NO LIMITADO"; } if ($ACCESO eq "LIMITADO") { system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst $IP_ADDRESS/32 flowid 1:1"; system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src $IP_ADDRESS/32 flowid 1:2"; $ACCESO="100Kb"; } if ($ACCESO eq "DENEGADO") { system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst $IP_ADDRESS/32 flowid 1:3"; system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src $IP_ADDRESS/32 flowid 1:4"; $ACCESO="40kb"; } $tb->load( [ "\e[1;32m#\e[0m\e[1;31m$TOTALES\e[0m", "$USUARIO", "$MAC\t", "$IP_ADDRESS\t", "$ACCESO" ] ); } #------------------------EXTRACCION DE DIRECCIONES IP print $tb;
despues precionan control + O para guardar y control + X para salir
ahora hay que darle permisos sudo chmod 7777 -R download_limit.pl
una vez que ingresaron los datos de su red lan en la tabla DHCP de mysql
solo bastara ejecutar el script perl download_limit.pl
para parar el proceso ingresar en la terminal
tc qdisc del dev eth1 root
#-----------------------------------------------------------
opción sencilla
/sbin/tc qdisc add dev eth1 root handle 1: htb default 30
/sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 1mbit
/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 1mbit
/sbin/tc class add dev eth1 parent 1: classid 1:3 htb rate 300kbit
/sbin/tc class add dev eth1 parent 1: classid 1:4 htb rate 300kbit
#LIMITAR LA DIRECCION IP A 1mbit = 120 kb
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.31/32 flowid 1:1
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.31/32 flowid 1:2
#LIMITAR LA DIRECCION IP A 1mbit = 120 kb
#LIMITAR LA DIRECCION IP A 300kbit = 40 kb
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.31/32 flowid 1:3
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.31/32 flowid 1:4
#LIMITAR LA DIRECCION IP A 300kbit = 40 kb
espero y les sirva esta aportacion, gracias.