LinuxParty
Trickle permite controlar la velocidad de subida y descarga de programas concretos sin configurar reglas complejas en el cortafuegos ni modificar todo el tráfico del sistema
Una descarga grande, una copia de seguridad o la sincronización de numerosos archivos pueden consumir prácticamente toda la conexión a Internet. Como consecuencia, la navegación se vuelve lenta, las videollamadas empiezan a sufrir cortes y otros usuarios de la red encuentran dificultades para trabajar.
Linux dispone de sistemas avanzados para administrar el tráfico, como tc, las disciplinas de colas y las reglas de calidad de servicio. Sin embargo, estas herramientas pueden resultar excesivamente complejas cuando solamente necesitamos limitar temporalmente la velocidad de una aplicación.
Para estos casos podemos utilizar trickle, un pequeño programa que permite establecer límites de descarga y subida para procesos concretos.
¿Qué es Trickle?
Trickle es un limitador de ancho de banda que funciona en el espacio de usuario. Puede controlar las conexiones de una aplicación sin necesidad de modificar la configuración de las interfaces de red.
Su principal ventaja es la sencillez. En lugar de crear reglas para direcciones IP, puertos o interfaces, ejecutamos el programa deseado a través de trickle y establecemos la velocidad máxima permitida.
Su sintaxis básica es:
trickle -s -d VELOCIDAD_DESCARGA -u VELOCIDAD_SUBIDA programa
Las velocidades se indican en kilobytes por segundo, normalmente representados como KB/s o kB/s.
Las opciones principales son:
-
-d: establece el límite de descarga. -
-u: establece el límite de subida. -
-s: ejecuta Trickle en modo independiente. -
-t: modifica el tiempo de suavizado. -
-l: modifica la longitud de suavizado.
Por ejemplo, para limitar una aplicación a 500 KB/s de descarga y 100 KB/s de subida:
trickle -s -d 500 -u 100 programa
El límite no tiene que coincidir exactamente en cada instante. La velocidad puede oscilar ligeramente alrededor del valor establecido.
Cómo instalar Trickle
En Debian, Ubuntu, Linux Mint y distribuciones derivadas podemos instalarlo mediante:
sudo apt update
sudo apt install trickle
El paquete continúa disponible en los repositorios oficiales de Debian y Ubuntu.
En Fedora, RHEL, Rocky Linux o AlmaLinux podemos comprobar si se encuentra en los repositorios habilitados:
dnf search trickle
Si aparece disponible:
sudo dnf install trickle
En determinadas versiones de las distribuciones derivadas de RHEL puede ser necesario activar previamente EPEL. La disponibilidad del paquete varía según la versión y los repositorios configurados.
Después de instalarlo podemos comprobar su funcionamiento con:
trickle --version
Y consultar todas sus opciones:
man trickle
Limitar una descarga con wget
Imaginemos que queremos descargar una imagen ISO sin ocupar toda la conexión. Para limitar wget a 500 KB/s ejecutaríamos:
trickle -s -d 500 wget https://servidor.example/archivo.iso
Trickle iniciará wget y tratará de impedir que la descarga supere la velocidad indicada.
Si no necesitamos establecer un límite de subida, podemos omitir -u:
trickle -s -d 500 wget https://servidor.example/archivo.iso
De manera equivalente, si solamente nos interesa controlar la subida, podemos utilizar únicamente -u.
Limitar la velocidad de curl
También podemos utilizar Trickle con curl:
trickle -s -d 300 curl -LO https://servidor.example/archivo.tar.gz
En este ejemplo, la descarga queda limitada a aproximadamente 300 KB/s.
Para guardar el archivo con un nombre diferente:
trickle -s -d 300 curl -o copia.tar.gz \
https://servidor.example/archivo.tar.gz
En protocolos modernos basados en UDP, como HTTP/3 mediante QUIC, Trickle puede no funcionar. Si una aplicación permite forzar HTTP/1.1 o HTTP/2 sobre TCP, podemos utilizar ese modo para aumentar las posibilidades de que el límite sea aplicado.
Por ejemplo:
trickle -s -d 300 curl --http1.1 -LO \
https://servidor.example/archivo.tar.gz
Limitar una subida
Supongamos que necesitamos enviar una copia de seguridad a un servidor mediante curl, pero no queremos saturar la velocidad de subida:
trickle -s -u 200 curl -T copia.tar.gz \
https://servidor.example/subidas/
La opción anterior limita la subida a aproximadamente 200 KB/s.
No debemos introducir contraseñas directamente en la línea de comandos si pueden quedar almacenadas en el historial del terminal o aparecer en la lista de procesos.
Limitar aplicaciones gráficas
Trickle no está restringido a programas que funcionen exclusivamente en el terminal. También podemos intentar iniciar una aplicación gráfica bajo su control:
trickle -s -d 1000 -u 200 nombre-aplicacion
Por ejemplo:
trickle -s -d 1000 -u 200 firefox
No obstante, limitar un navegador completo puede producir resultados irregulares. Los navegadores modernos utilizan múltiples procesos, conexiones compartidas, espacios aislados y protocolos como HTTP/3. Además, si Firefox ya estaba abierto, la orden podría limitar únicamente el proceso que solicita reutilizar la instancia existente y no todas sus conexiones.
Para realizar una prueba más fiable conviene cerrar previamente todas las ventanas y procesos del navegador.
También debemos tener en cuenta que una aplicación instalada mediante Flatpak o Snap puede utilizar mecanismos de aislamiento que impidan el funcionamiento de Trickle.
Cómo funciona internamente
Trickle no crea una regla en el kernel ni controla directamente la tarjeta de red. Su funcionamiento se basa en la carga dinámica de una biblioteca que intercepta determinadas operaciones realizadas sobre conexiones de red.
El programa actúa entre la aplicación y sus conexiones TCP, regulando la cantidad de datos que puede enviar o recibir.
Esta técnica permite que un usuario normal aplique sus propios límites sin necesitar privilegios administrativos:
trickle -s -d 500 wget https://servidor.example/archivo.iso
En condiciones normales no necesitamos utilizar sudo para limitar una aplicación ejecutada con nuestra propia cuenta.
Comprobar si una aplicación es compatible
Trickle necesita trabajar con programas enlazados dinámicamente. Podemos comprobar las bibliotecas utilizadas por una aplicación mediante ldd.
Por ejemplo:
ldd "$(command -v wget)"
Para buscar específicamente la biblioteca C:
ldd "$(command -v wget)" | grep libc.so
Si la aplicación está enlazada estáticamente, Trickle no podrá introducir su biblioteca y el límite no funcionará.
Tampoco funciona correctamente con ejecutables que tengan activados los bits SUID o SGID. En estos programas, el cargador dinámico aplica restricciones de seguridad e ignora determinadas variables relacionadas con la precarga de bibliotecas.
Podemos comprobar los permisos de una aplicación mediante:
ls -l "$(command -v programa)"
Utilizar el demonio trickled
Además del modo independiente, Trickle incorpora un demonio llamado trickled. Este proceso permite coordinar el ancho de banda de varias aplicaciones ejecutadas a través de trickle.
Por ejemplo:
trickled -d 2000 -u 500
Con esta orden establecemos un conjunto compartido de aproximadamente 2.000 KB/s para descarga y 500 KB/s para subida.
Después iniciaríamos las aplicaciones sin indicar límites individuales:
trickle wget https://servidor.example/archivo1.iso
En otro terminal:
trickle curl -LO https://servidor.example/archivo2.tar.gz
Las dos aplicaciones se comunicarán con trickled y compartirán los límites establecidos.
Podemos comprobar si el demonio se está ejecutando mediante:
pgrep -a trickled
Es importante comprender que trickled no limita automáticamente todos los programas del ordenador. Solamente administra las aplicaciones que hayan sido iniciadas mediante trickle y sean compatibles con su mecanismo de interceptación.
Configurar prioridades
El archivo de configuración del demonio suele encontrarse en:
/etc/trickled.conf
En él podemos establecer prioridades y parámetros de suavizado para diferentes aplicaciones.
Un ejemplo sencillo sería:
[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2
[wget]
Priority = 5
Time-Smoothing = 5
Length-Smoothing = 10
En esta configuración, SSH tiene mayor prioridad que wget. Los números de prioridad más bajos representan una preferencia mayor.
Los parámetros disponibles son:
-
Priority: establece la prioridad relativa de la aplicación. -
Time-Smoothing: determina el intervalo temporal utilizado para suavizar el tráfico. -
Length-Smoothing: establece el tamaño empleado para suavizar las operaciones de entrada y salida.
Una conexión interactiva como SSH puede beneficiarse de valores pequeños, mientras que una descarga grande puede funcionar correctamente con intervalos más amplios.
Antes de modificar el archivo podemos crear una copia de seguridad:
sudo cp /etc/trickled.conf /etc/trickled.conf.copia
Verificar si el límite funciona
Podemos observar el consumo de red utilizando herramientas como nload, iftop, bmon o nethogs.
En Debian y Ubuntu, por ejemplo:
sudo apt install nload nethogs
Después podemos ejecutar:
nload
O identificar el consumo de cada proceso:
sudo nethogs
Hay que recordar que Trickle utiliza kilobytes por segundo, mientras que algunas herramientas y proveedores muestran la velocidad en kilobits o megabits por segundo.
La relación aproximada es:
1 MB/s = 8 Mb/s
500 KB/s = 4 Mb/s
100 KB/s = 0,8 Mb/s
La diferencia entre bytes y bits puede hacer que pensemos erróneamente que el límite no se está respetando.
Limitaciones importantes de Trickle
Trickle es una herramienta ligera y práctica, pero tiene limitaciones que debemos conocer:
-
Actúa principalmente sobre conexiones TCP.
-
No controla de manera general el tráfico UDP.
-
Puede no funcionar con HTTP/3 y QUIC.
-
No funciona con ejecutables enlazados estáticamente.
-
No debe utilizarse con programas SUID o SGID.
-
Puede encontrar dificultades con aplicaciones aisladas mediante Snap o Flatpak.
-
No limita programas que no hayan sido iniciados a través de Trickle.
-
Un usuario puede ejecutar la aplicación directamente y evitar el límite.
-
No sustituye a una política de calidad de servicio aplicada en el kernel o en el router.
Tampoco debe considerarse un mecanismo de seguridad. Su finalidad es evitar que una aplicación compatible monopolice accidentalmente la conexión, no impedir que un usuario eluda las restricciones.
¿Cuándo deberíamos utilizar tc en su lugar?
Trickle resulta apropiado para situaciones sencillas y temporales:
-
Reducir la velocidad de una descarga.
-
Limitar una copia de seguridad.
-
Evitar que una transferencia sature la subida.
-
Probar cómo se comporta una aplicación con una conexión lenta.
-
Compartir el ancho de banda entre varios procesos compatibles.
Para controlar todo el tráfico de una interfaz, imponer límites obligatorios a usuarios, administrar contenedores o establecer políticas permanentes, resulta más adecuado utilizar herramientas integradas en el kernel como tc, nftables, cgroups o las funciones de calidad de servicio del router.
tc ofrece un control mucho más completo, pero también exige conocer conceptos como disciplinas de colas, clases, filtros y algoritmos de planificación.
Una herramienta sencilla para necesidades concretas
La principal virtud de Trickle es que permite limitar una aplicación con una sola orden:
trickle -s -d 500 -u 100 programa
No necesitamos modificar el cortafuegos, crear reglas de enrutamiento ni disponer de permisos de administrador para controlar nuestros propios procesos.
Aunque su funcionamiento presenta limitaciones con las aplicaciones y protocolos modernos, continúa siendo una solución interesante para descargas, transferencias y programas tradicionales que utilizan conexiones TCP mediante bibliotecas dinámicas.
Si necesitamos una limitación rápida y no queremos adentrarnos todavía en la complejidad de tc, Trickle puede resolver el problema en pocos segundos.



