Distribuir el ancho de banda usando Iproute
Descargar el script
Este script pretende optimizar el ancho de banda de tal manera que el uso de programas p2p o envíos masivos de datos no afecten el rendimiento de nuestra conexión.
Qué hace el script
- Disminuye el ancho de banda para que las colas de paquetes se creen en nuestro Linux y no en el módem, que tiene colas más cortas. Con esto evitaremos laguearnos cuando haya tráfico abundante. El script esta pensado para una conexion DSL 512/128. Si se tuviera otra conexión se deberia modificar el valor de la variable 'CAPACIDAD' y poner el valor del ancho de banda de subida de la conexion que se tenga.
- Crea 3 colas en las que distribuye el tráfico:
- A la primera cola (1:10) se dirige el tráfico interactivo e importante: paquetes icmp, paquetes tcp syn (de establecimiento de conexión), paquetes tcp con el TOS a Minimum-delay (son los paquetes de tráfico interactivo), y los paquetes ACK (confirmaciones) que no contienen datos.
- A la segunda cola (1:20) se dirige el tráfico normal. Tiene un poco menos de ancho de banda que la primera pero esto no supone problema, ya que las 3 colas están diseñadas para poder "coger prestado" ancho de banda de las demás si estas disponen de él.
- A la tercera cola (1:30), la menos prioritaria, dirigimos el tráfico p2p. Nuevamente puede "robar" ancho de banda de las demás, pero si hay paquetes en las otras colas, esas iran antes. Así nos aseguramos de poder usar programas p2p sin que interfieran en nuestras trnsferencias normales.
Cómo adaptarlo a nuestras necesidades
Para adaptarlo a nuestras necesidades sólamente hay que añadir las reglas de filtrado necesarias para identificar el tipo de tráfico que queramos y luego añadir la regla para colocarlo en una de las tres colas.
Veámoslo con un ejemplo que encontraremos en el script. La línea:
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark 1
Marca con el valor '1' el tráfico ICMP; ahora veamos como lo dirigimos a la primera cola:
tc filter add dev eth0 parent 1: protocol ip prio 1 handle 1 fw classid 1:10
Esto lo que nos dice es: los paquetes que tengan la marca '1' (
handle 1 fw) dirigelos a la cola 1:10 (
classid 1:10). El parámetro "prio 1" es para indicar la prioridad del filtro. Se puede ver en el script que hay 2 filtros. Con el prio establecemos el orden y prioridad de los filtros. El resto de la linea lo dejaremos tal cual.
En resumen, que para encolar el tráfico en la cola que se quiera hay que añadir una línea para marcar el paquete, y otra para dirigir el paquete con esa marca a la cola que se quiera.
Sobre el trafico p2p
Este script de momento solo dirige a la tercera cola el trafico p2p generado por los procesos amule y eDonkey2000. Para añadir otro trafico p2p, se puede copiar la linea que corresponde a amule cambiando el nombre del proceso. Se puede dejar la misma marca que la de amule (3) y ya se dirigirá todo el trafico generado por ese proceso a la tercera cola.
¿Y WonderShaper?
Lo sé, hay scripts como
wondershaper que realizan también esta tarea. Simplemente éste es el script que yo me he montado y que me funciona perfectamente bien. Quizá sea también más efectivo parchear el kernel con parches cono
ipp2p y demás, pero para el tipo de clasificación que necesitaba me era suficiente clasificar según el proceso.
Elaborado por
Nacx para ADSLAyuda.com