Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

jueves, 22 de octubre de 2015

Cómo limitar el ancho de banda en Linux

Hola a todos, hoy vengo a hablaros sobre algo cuyo uso, aunque poco habitual; puede ser realmente útil en entornos en los que deseamos que nuestra red se vea menos saturada o en los que deseamos que las personas posean una navegación por Internet más limitada; hablo por supuesto de la limitación del ancho de banda de una tarjeta de red... ¿Cuantas veces hemos querido poner alguna limitación a un PC con el fin de que éste no desborde la red por accidente (especialmente en redes que no están preparadas para grandes cantidades de tráfico)? El establecimiento de límites es más sencillo de lo que puede parecer, y no nos llevaría más de unos minutos. Dicha limitación se puede establecer de dos formas: Mediante un firewall que limite el ancho de banda a toda la red o limitando el ancho de banda en un equipo específico.

Portada_ancho_banda

Limitación desde un firewall

Imaginemos que deseamos poner un router/firewall entre nuestros equipos e Internet... Dicho router no sólo nos haría posible la comunicación con internet, sino que además podría brindarnos seguridad a nuestra red... Para ello lo primero de todo sería convertir nuestro equipo en un router... Esto es muy sencillo en caso de poseer nociones de la tabla NAT de iptables, pues simplemente habría que crear un entorno que todo lo que entrase por una interfaz, saliese por la otra sin problema alguno; supongamos que poseemos un servidor con dos tarjeta de red: Una con la ip 192.168.0.1 (y una mascara de red 24 bits), que sería la que estaría conectada a nuestra red interna; y otra con la ip 192.168.1.1 (también con mascara de 24 bits) conectada a un router con la ip 192.168.1.100. Para esclarecer un poco el entorno que he descrito, he aquí un pequeño esquema:



Para poder crear un router en este escenario habría que hacer que todo el tráfico que fluya desde nuestra VLAN, sea "enmascarado" para que tenga una ip válida dentro de la VLAN en la que se encuentra el router. Esto es tan sencillo como escribir estas líneas en la consola de nuestro servidor:

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. iptables -A FORWARD -j ACCEPT
  3. iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Obviamente con esto lo único que lograríamos sería que nuestro servidor se convirtiese en un router, cosa útil, pero que en este caso no nos es suficiente; queremos ir un paso más allá y tener una política restrictiva con el tráfico que fluye a través del servidor. Esto se puede lograr gracias a un parámetro de iptables llamado hashlimit, y habría que aplicarlo de forma de que pudiésemos limitar el tráfico que pasa a través de nuestro servidor. Por ejemplo podemos toda ip que se encuentre en la red local, pueda únicamente transferir un máximo de 20 paquetes de red por segundo tal que así:

iptables -A INPUT -i eth0 -s 192.168.0.0/24 -m hashlimit --hashlimit-above 20/sec --hashlimit-mode srcip --hashlimit-name all -j DROP

Esto haría que cualquier ip que pase por eth0 con el rango de ip 192.168.0.0/24, no podría enviar más de 20 paquetes por segundo; número de paquetes que podría adaptarse perfectamente a las necesidades de cada entorno.


Limitación en el propio equipo

Aunque esta limitación es muy útil, está más bien diseñada para limitar a nivel global y requiere poner un firewall entre el router y la red local para poder lograr esa limitación, cosa que no siempre es posible, especialmente en entornos "caseros". Por ello, a veces es más recomendable buscar alternativas diseñadas para limitar el ancho de banda a nivel de equipo local, y ahí es donde entra la siguiente utilidad: wondersharper.

Wondersharper no es ni más ni menos que una herramienta capaz de limitar tanto el ancho de banda de subida como el de bajada en un equipo local, siendo capaz de establecer diferentes límites a la subida y la bajada... Se trata de una herramienta que no está instalada por defecto en el sistema, pero que está incluida en los repositorios oficiales, con lo que instalarla sería tan sencillo como escribir:

sudo apt-get install wondershaper

Su uso es muy sencillo, pues para poner un límite simplemente habría que escribir:

wondersharper ${interfaz} ${límite_bajada} ${límite_subida}

Hemos de tener en cuenta que los límites que establezcamos serán especificados en Kilobytes por sesgundo, con lo que hemos de tener en cuenta que 1024 Kilobytes por segundo equivaldrían a 1 megabyte por segundo. Teniendo en cuenta dicho dato podríamos poner cualquier límite a nuestro gusto; por ejemplo en este caso pondremos un límite de 1024 kilobytes de bajada por segundo y 512 kilobytes por segundo de subida; límite que le pondríamos a la interfaz eth0.

wondershaper eth0 1024 512

Simple y rápido... En caso de querer consultar los límites impuestos a la interfaz, únicamente deberíamos escribir:

wondershaper eth0

Por último, pero no por ello no menos importante, quedaría la eliminación de límites. Todo límite impuesto puede ser eliminado mediante una sola orden; dicha orden se basaría en el comando wondersharper, seguido del parámetro clear y la interfaz cuyos límites queremos "limpiar".  En caso de la interfaz eth0 sería:

wondershaper clear eth0


Ambos métodos son excelentes para filtrar el ancho de banda, cada uno con sus pros y sus contras... Solamente dependería de uno mismo elegir qué opción de las dos se adapta más a sus necesidades.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario