¿Alguna vez has encontrado situaciones en las que una aplicación dominaba el ancho de banda de tu red? Si alguna vez te has visto en una situación en la que una aplicación consumía todo tu tráfico, entonces valorarás el papel de la aplicación reguladora de ancho de banda en goteo.
Ya seas un administrador de sistemas o simplemente un usuario de Linux, necesitas aprender a controlar las velocidades de carga y descarga de las aplicaciones para asegurarte de que tu ancho de banda de red no sea consumido por una sola aplicación.
¿Qué es Trickle?
Trickle es una herramienta reguladora de ancho de banda de red que nos permite gestionar las velocidades de carga y descarga de las aplicaciones para evitar que alguna de ellas acapare todo (o la mayoría) del ancho de banda disponible.
En pocas palabras, Trickle te permite controlar el tráfico de red a nivel por aplicación, a diferencia del control por usuario, que es el ejemplo clásico de modelado de ancho de banda en un entorno cliente-servidor y probablemente sea el escenario con el que estamos más familiarizados.
¿Cómo funciona Trickle?
Además, un Trickle puede ayudarnos a definir prioridades a nivel por aplicación para que, cuando se hayan establecido límites generales para todo el sistema, las aplicaciones prioritarias sigan obteniendo más ancho de banda automáticamente.
Para lograr esto, Trickle establece límites de tráfico en la forma en que los datos se envían y reciben de los sockets utilizando conexiones TCP. Debemos tener en cuenta que, además de las tasas de transferencia de datos, Trickle no modifica de ninguna manera el comportamiento del proceso que está modelando en un momento dado.
¿Qué no puede hacer Trickle?
La única limitación, por así decirlo, es que Trickle no funcionará con aplicaciones vinculadas estáticamente o binarios con los bits SUID o SGID establecidos, ya que utiliza vinculación y carga dinámica para colocarse entre el proceso modelado y su socket de red asociado. Trickle luego actúa como un proxy entre estos dos componentes de software.
Dado que trickle no requiere privilegios de superusuario para ejecutarse, los usuarios pueden establecer sus propios límites de tráfico. Dado que esto puede no ser deseable, exploraremos cómo establecer límites generales que los usuarios del sistema no puedan superar. En otras palabras, los usuarios aún podrán administrar sus tasas de tráfico, pero siempre dentro de los límites establecidos por el administrador del sistema.
Entorno de prueba
En este artículo, explicaremos cómo limitar el ancho de banda de red utilizado por las aplicaciones en un servidor Linux con trickle.
Para generar el tráfico necesario, utilizaremos ncftpput y ncftpget (ambas herramientas están disponibles al instalar ncftp) en el cliente (servidor CentOS – dev1: 192.168.0.17), y vsftpd en el servidor (Debian – dev2: 192.168.0.15) con fines de demostración.
Las mismas instrucciones también funcionan en distribuciones basadas en RHEL y basadas en Debian como Ubuntu y Linux Mint.
Cómo instalar ncftp y vsftpd en Linux
1. Para las distribuciones basadas en RedHat, necesitas habilitar el repositorio EPEL, que es un repositorio de software libre y de código abierto de alta calidad mantenido por el proyecto Fedora.
Instalar EPEL en RHEL 9:
sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
Instalar EPEL en CentOS 9, AlmaLinux 9, Rocky Linux 9:
sudo dnf config-manager --set-enabled crb sudo dnf install epel-release
Instalar EPEL en RHEL 8:
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Instalar EPEL en CentOS 8, AlmaLinux 8, Rocky Linux 8:
sudo dnf config-manager --set-enabled powertools sudo dnf install epel-release
2. A continuación, instala ncftp de la siguiente manera.
sudo dnf install ncftp [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install ncftp [On Debian, Ubuntu and Mint]
3. Configura un servidor FTP en un servidor separado. Ten en cuenta que aunque FTP es inherentemente inseguro, todavía se usa ampliamente en casos en los que no se necesita seguridad al cargar o descargar archivos.
Lo estamos utilizando en este artículo para ilustrar las ventajas de trickle y porque muestra las tasas de transferencia en stdout en el cliente, y dejaremos la discusión de si se debe o no usar para otra fecha y hora.
sudo dnf install vsftpd [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install vsftpd [On Debian, Ubuntu and Mint]
Ahora, edita el archivo /etc/vsftpd/vsftpd.conf en el servidor FTP de la siguiente manera:
$ sudo nano /etc/vsftpd/vsftpd.conf OR $ sudo nano /etc/vsftpd.conf
Haz los siguientes cambios:
anonymous_enable=NO local_enable=YES chroot_local_user=YES allow_writeable_chroot=YES
Después de eso, asegúrate de iniciar vsftpd para tu sesión actual y habilitarlo para el inicio automático en futuros arranques:
sudo systemctl start vsftpd sudo systemctl enable vsftpd sudo systemctl status vsftpd
4. Si decides configurar el servidor FTP en un droplet de CentOS/RHEL con claves SSH para acceso remoto, necesitarás una cuenta de usuario protegida por contraseña con los permisos de directorio y archivo apropiados para subir y bajar el contenido deseado FUERA del directorio raíz de root.
Luego puedes navegar hasta tu directorio personal ingresando la siguiente URL en tu navegador. Aparecerá una ventana de inicio de sesión que te solicitará una cuenta de usuario válida y una contraseña en el servidor FTP.
ftp://192.168.0.15
Si la autenticación tiene éxito, verás el contenido de tu directorio personal. Más adelante en este tutorial, podrás actualizar esa página para mostrar los archivos que se hayan subido durante los pasos anteriores.

Cómo instalar Trickle en Linux
Ahora instala trickle a través de yum o apt.
Para garantizar una instalación exitosa, se considera una buena práctica asegurarse de que los paquetes actualmente instalados estén actualizados (usando yum update) antes de instalar la herramienta en sí misma.
sudo yum -y update && sudo yum install trickle [On RedHat based systems] sudo apt -y update && sudo apt install trickle [On Debian based systems]
Verifica si trickle funcionará con el binario deseado. Como explicamos anteriormente, trickle solo funcionará con binarios que utilicen bibliotecas dinámicas o compartidas.
Para verificar si podemos utilizar esta herramienta con una aplicación específica, podemos utilizar el conocido utilitario ldd, donde ldd significa listar dependencias dinámicas.
Específicamente, buscaremos la presencia de glibc (la biblioteca C de GNU) en la lista de dependencias dinámicas de cualquier programa dado, ya que es precisamente esa biblioteca la que define las llamadas al sistema involucradas en la comunicación a través de sockets.
Ejecute el siguiente comando contra un binario dado para ver si trickle puede ser utilizado para dar forma a su ancho de banda:
sudo ldd $(which [binary]) | grep libc.so
Por ejemplo,
sudo ldd $(which ncftp) | grep libc.so
cuyo resultado es:
sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
La cadena entre corchetes en la salida puede cambiar de sistema a sistema e incluso entre ejecuciones sucesivas del mismo comando, ya que representa la dirección de carga de la biblioteca en la memoria física.
Si el comando anterior no devuelve ningún resultado, significa que el binario contra el que se ejecutó no utiliza libc, y por lo tanto, trickle no puede ser utilizado como formador de ancho de banda en ese caso.
Aprende cómo usar Trickle en Linux
El uso más básico de trickle es en modo independiente. Utilizando este enfoque, trickle se utiliza para definir explícitamente las velocidades de descarga y subida de una aplicación dada. Como explicamos anteriormente, por brevedad, utilizaremos la misma aplicación para pruebas de descarga y subida.
Ejecutando Trickle en modo independiente
Compararemos las velocidades de descarga y subida con y sin utilizar trickle. La opción -d
indica la velocidad de descarga en KB/s, mientras que la bandera -u
le indica a trickle que limite la velocidad de subida en la misma unidad. Además, utilizaremos la bandera -s
, que especifica que trickle debe ejecutarse en modo standalone.
La sintaxis básica para ejecutar trickle en modo standalone es la siguiente:
sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]
Para realizar los siguientes ejemplos por su cuenta, asegúrese de tener trickle y ncftp instalados en la máquina cliente (192.168.0.17 en mi caso).
Ejemplo 1: Cargar un archivo de 2.8MB con y sin Trickle
Estamos utilizando el archivo PDF gratuitamente distribuible Linux Fundamentals (disponible desde aquí) para las siguientes pruebas.
Inicialmente, puede descargar este archivo a su directorio de trabajo actual con el siguiente comando wget:
wget http://linux-training.be/files/books/LinuxFun.pdf
La sintaxis para cargar un archivo en nuestro servidor FTP sin trickle es la siguiente:
sudo ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename
Donde /remote_directory es la ruta del directorio de subida relativa al directorio raíz del usuario, y local-filename es un archivo en su directorio de trabajo actual.
Específicamente, sin trickle, obtenemos una velocidad de subida máxima de 52.02 MB/s (tenga en cuenta que esta no es la velocidad de subida promedio real, sino un pico instantáneo al inicio), y el archivo se sube casi al instante:
sudo ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf
Salida:
LinuxFun.pdf: 2.79 MB 52.02 MB/s
Con trickle, limitaremos la tasa de transferencia de subida a 5 KB/s. Antes de volver a subir el archivo, necesitamos eliminarlo del directorio de destino.
De lo contrario, ncftp nos informará que el archivo en el directorio de destino es el mismo que estamos intentando subir, y no realizará la transferencia:
rm /absolute/path/to/destination/directory/LinuxFun.pdf
Entonces:
trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf
Salida:
LinuxFun.pdf: 2.79 MB 4.94 kB/s
En el ejemplo anterior, podemos ver que la velocidad de subida promedio disminuyó a ~5 KB/s.
Ejemplo 2: Descargar el mismo archivo de 2.8MB con y sin Trickle
Primero, recuerde eliminar el PDF del directorio de origen:
rm /absolute/path/to/source/directory/LinuxFun.pdf
Tenga en cuenta que los siguientes casos descargarán el archivo remoto al directorio actual en la máquina del cliente. Este hecho se indica por el período (‘.‘) que aparece después de la dirección IP del servidor FTP.
Sin trickle:
ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Salida:
LinuxFun.pdf: 2.79 MB 260.53 MB/s
Con trickle, limitando la velocidad de descarga a 20 KB/s:
trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Salida:
LinuxFun.pdf: 2.79 MB 17.76 kB/s
Ejecutar Trickle en modo supervisado [no administrado]
Trickle también puede ejecutarse en modo no administrado, siguiendo una serie de parámetros definidos en /etc/trickled.conf. Este archivo define cómo se comporta y administra trickled (el demonio).
Además, si queremos establecer configuraciones globales para ser utilizadas, en general, por todas las aplicaciones, necesitaremos usar el comando trickled. Este comando ejecuta el demonio y nos permite definir límites de descarga y subida que serán compartidos por todas las aplicaciones ejecutadas a través de trickle sin necesidad de especificar límites cada vez.
Por ejemplo, ejecutando:
trickled -d 50 -u 10
Esto hará que las velocidades de descarga y subida de cualquier aplicación ejecutada a través de trickle se limiten a 30 KB/s y 10 KB/s, respectivamente.
Tenga en cuenta que puede verificar en cualquier momento si trickled está ejecutándose y con qué argumentos:
ps -ef | grep trickled | grep -v grep
Salida:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
Ejemplo 3: Cargar un archivo MP4 de 19MB a un servidor FTP usando Trickle
En este ejemplo usaremos el video de distribución gratuita “He is the gift”, disponible para descargar desde este enlace.
Inicialmente, descargaremos este archivo a su directorio de trabajo actual con el siguiente comando:
wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4
Primero, iniciaremos el demonio trickled con el comando mencionado anteriormente:
trickled -d 30 -u 10
Sin trickle:
ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Salida:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s
Con trickle:
trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Salida:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
Como podemos ver en la salida anterior, la tasa de transferencia de subida disminuyó a ~10 KB/s.
Ejemplo 4: Descargar el mismo video con Trickle
Como en Ejemplo 2, estaremos descargando el archivo al directorio de trabajo actual.
Sin trickle:
ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Salida:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s
Con trickle:
trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Salida:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s
Lo cual está de acuerdo con el límite de descarga establecido anteriormente (30 KB/s).
Nota: Una vez que el demonio ha sido iniciado, no es necesario establecer límites individuales para cada aplicación que usa trickle.
Como mencionamos anteriormente, uno puede personalizar aún más la formación de la forma de la banda ancha de trickle a través de trickled.conf. Una sección típica en este archivo consiste en lo siguiente:
[service] Priority = <value> Time-Smoothing = <value> Length-Smoothing = <value>
Donde,
- [service] indica el nombre de la aplicación cuyo uso de ancho de banda queremos moldear.
- Prioridad nos permite especificar un servicio con una prioridad más alta en relación con otro, evitando que una sola aplicación consuma todo el ancho de banda que el demonio está gestionando. Cuanto menor sea el número, más ancho de banda se asigna a [servicio].
- Ajuste de tiempo [en segundos]: define con qué intervalos de tiempo trickled intentará permitir que la aplicación transfiera y/o reciba datos. Valores más pequeños (algo entre el rango de 0.1 – 1s) son ideales para aplicaciones interactivas y resultarán en una sesión más continua (suave) mientras que valores ligeramente mayores (1 – 10 s) son mejores para aplicaciones que necesitan transferencia masiva. Si no se especifica ningún valor, se usa el predeterminado (5 s).
- Alisamiento de Longitud [en KB]: la idea es la misma que en el Alisamiento de Tiempo, pero basado en la longitud de una operación de E/S. Si no se especifica un valor, se utiliza el predeterminado (10 KB).
Cambiar los valores de suavizado se traducirá en que la aplicación especificada por [servicio] utilice tasas de transferencia dentro de un intervalo en lugar de un valor fijo. Desafortunadamente, no hay una fórmula para calcular los límites inferior y superior de este intervalo, ya que depende principalmente de cada escenario específico.
A continuación, se muestra un archivo de ejemplo trickled.conf en el cliente CentOS 7 (192.168.0.17):
[ssh] Priority = 1 Time-Smoothing = 0.1 Length-Smoothing = 2 [ftp] Priority = 2 Time-Smoothing = 1 Length-Smoothing = 3
Con esta configuración, trickled priorizará las conexiones SSH sobre las transferencias FTP. Tenga en cuenta que un proceso interactivo, como SSH, utiliza valores de alisamiento de tiempo más pequeños, mientras que un servicio que realiza transferencias de datos masivas (FTP) utiliza un valor mayor.
Los valores de suavizado son los responsables de que las velocidades de descarga y subida en nuestro ejemplo anterior no coincidan con el valor exacto especificado por el demonio trickled, sino que se muevan en un intervalo cercano a él.
[También podría interesarle: Cómo Seguir y Fortalecer el Servidor OpenSSH ]
Conclusión
En este artículo, hemos explorado cómo limitar el ancho de banda utilizado por aplicaciones mediante trickle en distribuciones basadas en Fedora y Debian / derivadas. Otros posibles casos de uso incluyen, pero no se limitan a:
- Limitando la velocidad de descarga a través de una utilidad del sistema como wget, o un cliente de torrent, por ejemplo.
- Limitando la velocidad a la que su sistema puede ser actualizado a través de `yum` (o `aptitude`, si está en un sistema basado en Debian), el sistema de gestión de paquetes.
- Si su servidor se encuentra detrás de un proxy o cortafuegos (o es el proxy o cortafuegos mismo), puede utilizar trickle para establecer límites tanto en la velocidad de descarga y subida o comunicación con los clientes o el exterior.
Las preguntas y comentarios son muy bienvenidos. No dude en utilizar el formulario a continuación para enviarlos en nuestra dirección.
Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/