En muchas empresas, cyber, o lugares con acceso a Internet sucede el fenómeno, cuando un usuario quiere ingresar a la Web y realizar ciertas tareas (transacciones en linea, revisar correos, paginas de consulta, etc.) se encuentra que la navegación se torna muy lenta y se pregunta ¿qué esta pasando?. Sorpresa que en el mismo lugar otros usuarios están descargando programas, música, vídeos, etc. Y por estos y mas motivos segmentar el ancho de banda para los usuarios es una buena elección.
Objetivos.
El objetivo de aplicar segmentación de ancho de banda por paquetes, es asignar a los usuarios y parte de la red un mínimo y máximo del ancho de banda (Kb). Con esto evitamos el abuso de los usuarios al momento de navegar en la red y nos aseguramos que la red no se congestione.
Los Requerimientos.
Para realizar esta configuración necesitamos:
- Tener instalado y funcionando el Shorewall
- Realizar un script el cual contendrá la programación.
Diagrama Conceptual.
En estos diagrama se muestra un esquema como quedara segmentada nuestra red.
Diagrama cola TC WAN.
Diagrama cola TC LAN
Manos a la obra.
Paso 1.
En esta parte declaramos nuestras variables.
cho -e "Generacion de colas: $OK"
### Interfaces ###
DEVWAN="eth0" #WAN
DEVLAN="eth1" #LANTC=/sbin/tc
Paso 2.
Aqui indicamos que se realice un flush de politicas existentes
tc qdisc del root dev $DEVLAN
echo OK hasta aqui
Paso 3.
Declaramos a los padres del árbol de la WAN
$TC qdisc add dev $DEVWAN root handle 1: htb default 1 r2q 10
$TC class add dev $DEVWAN parent 1: classid 1:1 htb rate 1000Kbit ceil 1000kbit
$TC class add dev $DEVWAN parent 1:100 classid 1:100 htb rate 1000Kbit ceil 1000Kbit
Nota:
root: la raíz del árbol
parent: el padre
classid: el hijo
htb: tipo de cola
rate: especifica el mínimo Kb
ceil: especifica el máximo Kb
Paso 4.
Definimos a los hijos del árbol WAN.
$TC class add dev $DEVWAN parent 1:100 classid 1:201 htb rate 100Kbit ceil 100Kbit prio 0
$TC class add dev $DEVWAN parent 1:100 classid 1:301 htb rate 4Kbit ceil 4Kbit prio 0
$TC class add dev $DEVWAN parent 1:100 classid 1:401 htb rate 10Kbit ceil 800Kbit prio 0
$TC class add dev $DEVWAN parent 1:100 classid 1:501 htb rate 500Kbit ceil 500Kbit prio 0
Paso 5.
En esta parte enlazamos las direcciones IP con las marcas de los paquetes, que seran definidos aqui y en el tcrules del shorewall.
$TC filter add dev $DEVWAN protocol ip parent 1: handle 201 fw classid 1:201
$TC filter add dev $DEVWAN protocol ip parent 1: handle 301 fw classid 1:301
$TC filter add dev $DEVWAN protocol ip parent 1: handle 401 fw classid 1:401
$TC filter add dev $DEVWAN protocol ip parent 1: handle 501 fw classid 1:501
handle: cabecera
Paso 6.
Realizamos los pasos del 3-5 pero para la red LAN
$TC qdisc add dev $DEVLAN root handle 2: htb default 1 r2q 10
$TC class add dev $DEVLAN parent 2: classid 2:100 htb rate 10Mbit ceil 100Mbit
$TC class add dev $DEVLAN parent 2:100 classid 2:1 htb rate 10Mbit ceil 100Mbit #HIJOS-LAN
$TC class add dev $DEVLAN parent 2:100 classid 2:201 htb rate 100Kbit ceil 100Kbit prio 0
$TC class add dev $DEVLAN parent 2:100 classid 2:301 htb rate 4Kbit ceil 4Kbit prio 0
$TC class add dev $DEVLAN parent 2:100 classid 2:401 htb rate 600Kbit ceil 800Kbit prio 0
$TC class add dev $DEVLAN parent 2:100 classid 2:501 htb rate 500Kbit ceil 500Kbit prio 0
#REGISTRAR-LAN
$TC filter add dev $DEVLAN protocol ip parent 2: handle 201 fw classid 2:201
$TC filter add dev $DEVLAN protocol ip parent 2: handle 301 fw classid 2:301
$TC filter add dev $DEVLAN protocol ip parent 2: handle 401 fw classid 2:401
$TC filter add dev $DEVLAN protocol ip parent 2: handle 501 fw classid 2:501 ####FINSCRIPT
Nota: Todo dentro de un mismo script.
-------------------------------------------------------------------------------------------------
Paso 7.
En este punto editamos el archivo "tcrules" ubicado en:
Grabamos dentro del vi ":wq".
Paso 8.
Una vez grabado reiniciamos el servicio.
Paso 9.
Ejecutamos nuestro script.
Pruebas.
Para verificar que la cola TC de la red WAN fue creada.
Para verificar que la cola TC de la red LAN fue creada.
Recomendaciones.
OK="\033[1;0m [ \033[00;32mOK \033[1;0m]\033[0m" e
cho -e "Generacion de colas: $OK"
### Interfaces ###
DEVWAN="eth0" #WAN
DEVLAN="eth1" #LANTC=/sbin/tc
Paso 2.
Aqui indicamos que se realice un flush de politicas existentes
tc qdisc del root dev $DEVWAN
tc qdisc del root dev $DEVLAN
echo OK hasta aqui
Paso 3.
Declaramos a los padres del árbol de la WAN
####PADRES WAN
$TC qdisc add dev $DEVWAN root handle 1: htb default 1 r2q 10
$TC class add dev $DEVWAN parent 1: classid 1:1 htb rate 1000Kbit ceil 1000kbit
$TC class add dev $DEVWAN parent 1:100 classid 1:100 htb rate 1000Kbit ceil 1000Kbit
Nota:
root: la raíz del árbol
parent: el padre
classid: el hijo
htb: tipo de cola
rate: especifica el mínimo Kb
ceil: especifica el máximo Kb
Paso 4.
Definimos a los hijos del árbol WAN.
#HIJOS-WAN
$TC class add dev $DEVWAN parent 1:100 classid 1:201 htb rate 100Kbit ceil 100Kbit prio 0
$TC class add dev $DEVWAN parent 1:100 classid 1:301 htb rate 4Kbit ceil 4Kbit prio 0
$TC class add dev $DEVWAN parent 1:100 classid 1:401 htb rate 10Kbit ceil 800Kbit prio 0
$TC class add dev $DEVWAN parent 1:100 classid 1:501 htb rate 500Kbit ceil 500Kbit prio 0
Paso 5.
En esta parte enlazamos las direcciones IP con las marcas de los paquetes, que seran definidos aqui y en el tcrules del shorewall.
#REGISTRAR-WAN
$TC filter add dev $DEVWAN protocol ip parent 1: handle 201 fw classid 1:201
$TC filter add dev $DEVWAN protocol ip parent 1: handle 301 fw classid 1:301
$TC filter add dev $DEVWAN protocol ip parent 1: handle 401 fw classid 1:401
$TC filter add dev $DEVWAN protocol ip parent 1: handle 501 fw classid 1:501
handle: cabecera
Paso 6.
Realizamos los pasos del 3-5 pero para la red LAN
####$DEVLAN
$TC qdisc add dev $DEVLAN root handle 2: htb default 1 r2q 10
$TC class add dev $DEVLAN parent 2: classid 2:100 htb rate 10Mbit ceil 100Mbit
$TC class add dev $DEVLAN parent 2:100 classid 2:1 htb rate 10Mbit ceil 100Mbit #HIJOS-LAN
$TC class add dev $DEVLAN parent 2:100 classid 2:201 htb rate 100Kbit ceil 100Kbit prio 0
$TC class add dev $DEVLAN parent 2:100 classid 2:301 htb rate 4Kbit ceil 4Kbit prio 0
$TC class add dev $DEVLAN parent 2:100 classid 2:401 htb rate 600Kbit ceil 800Kbit prio 0
$TC class add dev $DEVLAN parent 2:100 classid 2:501 htb rate 500Kbit ceil 500Kbit prio 0
#REGISTRAR-LAN
$TC filter add dev $DEVLAN protocol ip parent 2: handle 201 fw classid 2:201
$TC filter add dev $DEVLAN protocol ip parent 2: handle 301 fw classid 2:301
$TC filter add dev $DEVLAN protocol ip parent 2: handle 401 fw classid 2:401
$TC filter add dev $DEVLAN protocol ip parent 2: handle 501 fw classid 2:501 ####FINSCRIPT
Nota: Todo dentro de un mismo script.
-------------------------------------------------------------------------------------------------
Paso 7.
En este punto editamos el archivo "tcrules" ubicado en:
# vi /etc/shorewall/tcrules
Grabamos dentro del vi ":wq".
Paso 8.
Una vez grabado reiniciamos el servicio.
# service shorewall restart
Paso 9.
Ejecutamos nuestro script.
# ./archivo
Pruebas.
Para verificar que la cola TC de la red WAN fue creada.
# tc -s -d qdisc show dev eth0
Para verificar que la cola TC de la red LAN fue creada.
# tc -s -d qdisc show dev eth1
Recomendaciones.
- Antes de ejecutar el script verificar que este en texto unix (#dos2unix
). - Dar permisos de ejecución al script.
- Verificar que el shorewall este funcionando correctamente.
- Realizar un diagrama de como quedara segmentada nuestra red.
Hola John, estuve poniendo en practica tu articulo y encontré unas observaciones, primero.- el comando (TC) esta en mayusculas cuando funciona en minuscula (tc).
ResponderEliminarSegundo.- hay que convertir el script creado con dos2unix.
Tercero.- en el archivo tcrules las marcas no funcionaron desde el 301, por lo que tuve que cambiar el script y quitarles el 0 a todas las marcas quedando el 301 como 31 y sucesivamente.
Gracias por el articulo me esta funcionando perfecto.
ResponderEliminar