Limitar ancho de banda con un router linux

8 02 2013

Si tenemos una máquina de linux que hace de router conectando, por ejemplo, una lan con internet, y queremos limitar el ancho de banda que cada usuario puede consumir, tanto de bajada como de subida, la opicón es utilizar “tc”.

El control de tráfico, traffic shaper, traffic control, o como lo quieran llamar, se gestiona con el comando “tc” y aunque no existe mucha documentación y la que hay no es muy clara (obsoleta a veces) con un poco de dedicación se pueden llegar a conseguir los resultados esperados.

Tengo realizado un script que se encarga de lo anteriormente comentado, en una red simétrica de 20Mb, se asigna a cada usuario, en teoría 255 hosts/ips, 80kbit de mínimo. En el caso de que el tráfico asignado a alguno de los clientes no se utilice, será aprovechado por el resto, por ello, sólo en el caso de que todos ellos se pongan a descargar un archivo llegarán a tener los 80kbit.

Limitar el ancho de banda de descarga es difícil, podéis buscar en los links de abajo referencias al ingress de la tarjeta de red, de hecho en muchos sitios he leído que no se puede. Esta situación se resuelve con la interfaz ifb0, es el Intermediate Functional Block device, el sucesor de módulo IMQ. Con él (y con un par de líneas de tc) básicamente damos la vuelta a la tarjeta de red y se consigue tener el ingress de eth0 en la egress de ifb0, pudiendo así aplicar las políticas deseadas.

Para marcar los paquetes he decidido usar el clasificador u32 y no iptables, me parecía más sencillo y rápido de usar. Así se puede dejar a iptables sólo con el NAT de salida:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Todo eso se puede monitorizar con munin y el plugin llamado tc.in que se puede descargar de: http://munin-monitoring.org/browser/munin/plugins/node.d.debug/tc.in . No olvidar cambiar la primera línea del mismo por #!/usr/bin/perl para que no de error.

https://github.com/rfrail3/misc/blob/master/tc/traffic-control.sh

Referencias:

http://www.funtoo.org/wiki/Traffic_Control
http://edseek.com/~jasonb/articles/traffic_shaping/
http://linux-ip.net/articles/Traffic-Control-HOWTO/
http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/
http://www.linuxfoundation.org/collaborate/workgroups/networking/ifb
http://wiki.edseek.com/howto:traffic_control
http://www.adslayuda.com/modules/Linux/iproute_src.txt

Advertisements

Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: