LinuxParty
¿Alguna vez se ha encontrado con situaciones en las que una aplicación dominaba todo el ancho de banda de su red? Si alguna vez ha estado en una situación en la que una aplicación consumió todo su tráfico, entonces valorará el papel de la aplicación moldeadora de ancho de banda de Trickle.
Ya sea que sea un administrador del sistema o simplemente un usuario de Linux, puede aprender a controlar las velocidades de carga y descarga de las aplicaciones para asegurarse de que una sola aplicación no consuma el ancho de banda de su red.
¿Qué es Trickle?
Trickle es una herramienta de modelado del ancho de banda de la red que nos permite administrar las velocidades de carga y descarga de las aplicaciones para evitar que cualquiera de ellas acapare todo (o parte) del ancho de banda disponible.
En pocas palabras, el Trickle le permite controlar la tasa de tráfico de la red por aplicación, a diferencia del control por usuario, que es el ejemplo clásico de configuración del ancho de banda en un entorno cliente-servidor, y es probablemente la configuración que estamos más familiarizadas
¿Cómo funciona el Trickle?
Además, un Trickle puede ayudarnos a definir prioridades por aplicación, de modo que cuando se hayan establecido límites generales para todo el sistema, las aplicaciones prioritarias aún obtendrán más ancho de banda automáticamente.
Para llevar a cabo esta tarea, el Trickle establece límites de tráfico en la forma en que los datos se envían y reciben de los sockets que utilizan conexiones TCP. Debemos tener en cuenta que, más allá de las tasas de transferencia de datos, el Trickle no modifica en ningún momento el comportamiento del proceso que está configurando.
¿Qué no se puede hacer Trickle?
La única limitación, por así decirlo, es que el Trickle no funcionará con aplicaciones vinculadas estáticamente o binarios con los bits SUID o SGID configurados, ya que utiliza vinculación y carga dinámicas para colocarse entre el proceso moldeado 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 pueden exceder. 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 la red que utilizan 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 ) para fines demostrativos. Las mismas instrucciones también funcionan en sistemas basados en RedHat , Fedora y Ubuntu .
Instalación de ncftp y vsftpd en Linux
1 . Para RHEL/CentOS 8/7, habilite el repositorio EPEL . Extra Packages for Enterprise Linux ( EPEL ) es un repositorio de software gratuito y de código abierto de alta calidad mantenido por el proyecto Fedora y es 100 % compatible con sus derivados, como Red Hat Enterprise Linux y CentOS . Tanto el truco como el ncftp están disponibles en este repositorio.
2 . Instale ncftp de la siguiente manera:
# yum update && sudo yum install ncftp [En sistemas basados en RedHat] # aptitude update && aptitude install ncftp [En sistemas basados en Debian]
3 . Configure un servidor FTP en un servidor separado. Tenga en cuenta que aunque FTP es intrínsecamente inseguro, todavía se usa ampliamente en los casos en que no se necesita seguridad para cargar o descargar archivos.
Lo estamos usando en este artículo para ilustrar las bondades del Trickle y porque muestra las tasas de transferencia en la salida estándar del cliente, y dejaremos la discusión sobre si debe usarse o no para otra fecha y hora.
# yum update && yum install vsftpd [En sistemas basados en RedHat] # apt update && apt install vsftpd [En sistemas basados en Debian]
Ahora, edite el archivo /etc/vsftpd/vsftpd.conf en el servidor FTP de la siguiente manera:
$ sudo nano /etc/vsftpd/vsftpd.conf O $ sudo /etc/vsftpd.conf
Realice los siguientes cambios:
anonymous_enable=NO local_enable=YES chroot_local_user=YES allow_writeable_chroot=YES
Después de eso, asegúrese de iniciar vsftpd para su sesión actual y habilitarlo para el inicio automático en futuros arranques:
# systemctl start vsftpd [Para sistemas basados en systemd]# systemctl enable vsftpd= = = = = = = = = = = = = = = = = = = = = = = =
# service vsftpd start [Para sistemas basados en init]# chkconfig vsftpd on
4 . Si eligió configurar el servidor FTP en un droplet de CentOS / RHEL con claves SSH para acceso remoto, necesitará una cuenta de usuario protegida con contraseña con el directorio y los permisos de archivo apropiados para cargar y descargar el contenido deseado FUERA del directorio de inicio de la raíz.
Luego puede navegar a su directorio de inicio ingresando la siguiente URL en su navegador. Aparecerá una ventana de inicio de sesión que le solicitará una cuenta de usuario y una contraseña válidas en el servidor FTP.
ftp://192.168.0.15
Si la autenticación tiene éxito, verá el contenido de su directorio de inicio. Más adelante en este tutorial, podrá actualizar esa página para mostrar los archivos que se cargaron durante los pasos anteriores.
Árbol de directorios FTP
Cómo instalar Trickle en Linux
Ahora instale 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 instalados actualmente estén actualizados (usando yum update ) antes de instalar la herramienta.
# yum -y update && yum install Trickle [En sistemas basados en RedHat] # apt -y update && apt install trickle [En sistemas basados en Debian]
Verifique si Trickle funcionará con el binario deseado. Como explicamos anteriormente, el Trickle solo funcionará con archivos binarios que utilicen bibliotecas dinámicas o compartidas. Para comprobar si podemos usar esta herramienta con una determinada aplicación, podemos usar la conocida utilidad ldd , donde ldd significa lista de dependencias dinámicas.
En concreto, buscaremos la presencia de glibc (la biblioteca C de GNU) en la lista de dependencias dinámicas de cualquier programa porque 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 se puede usar el Trickle para dar forma a su ancho de banda:
# ldd $(which [binary]) | grep libc.so
Por ejemplo,
# ldd $(which ncftp) | grep libc.so
cuya salida es:
# libc.so.6 => /lib64/libc.so.6 (0x00007eff2e6c000)
La cadena entre corchetes en la salida puede cambiar de un sistema a otro e incluso entre ejecuciones posteriores del mismo comando, ya que representa la dirección de carga de la biblioteca en la memoria física.
Si el comando anterior no arroja ningún resultado, significa que el binario con el que se ejecutó no usa libc y, por lo tanto, no se puede usar el control de ancho de banda en ese caso.
Aprenda a usar Trickle en Linux
El uso más básico de Trickle es en modo independiente. Usando este enfoque, se usa Trickle para definir explícitamente las velocidades de carga y descarga de una aplicación determinada. Como explicamos anteriormente, en aras de la brevedad, utilizaremos la misma aplicación para las pruebas de descarga y carga.
Ejecución de Trickle en modo independiente
Compararemos las velocidades de carga y descarga con y sin el uso de Trickle. La -dopción indica la velocidad de descarga en KB/s, mientras que la -ubandera le dice a Trickle que limite la velocidad de carga en la misma unidad. Además, usaremos la -sbandera, que especifica que Trickle debe ejecutarse en modo independiente.
La sintaxis básica para ejecutar Trickle en modo independiente es la siguiente:
# Trickle -s -d [tasa de descarga en KB/s] -u [tasa de carga en KB/s]
Para realizar los siguientes ejemplos por su cuenta, asegúrese de tener instalados trickle y ncftp en la máquina cliente ( 192.168.0.17 en mi caso).
Ejemplo 1: carga de un archivo PDF de 2,8 MB con y sin Trickle.
Estamos utilizando el archivo PDF Linux Fundamentals de libre distribución (disponible aquí ) para las siguientes pruebas.
Inicialmente, puede descargar este archivo a su directorio de trabajo actual con el siguiente comando:
# wget http://linux-training.be/files/books/LinuxFun.pdf
La sintaxis para subir un archivo a nuestro servidor FTP sin Trickle es la siguiente:
# ncftpput -u nombre-de-usuario -p contraseña 192.168.0.15 /remote_directory nombre-archivo-local
Donde /remote_directory es la ruta del directorio de carga en relación con el inicio del nombre de usuario, y local-filename es un archivo en su directorio de trabajo actual.
Específicamente, sin Trickle, obtenemos una velocidad de carga máxima de 52,02 MB/s (tenga en cuenta que esta no es la velocidad de carga promedio real, sino un pico de inicio instantáneo), y el archivo se carga casi instantáneamente:
# ncftpput -u nombre-de-usuario -p contraseña 192.168.0.15 /testdir-LinuxFun.pdf
Producción:
LinuxFun.pdf: 2,79 MB 52,02 MB/s
Con Trickle, limitaremos la tasa de transferencia de carga a 5 KB/s . Antes de cargar el archivo por segunda vez, debemos eliminarlo del directorio de destino; de lo contrario, ncftp nos informará que el archivo en el directorio de destino es el mismo que estamos tratando de cargar 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
Producción:
LinuxFun.pdf: 2,79 MB 4,94 kB/s
En el ejemplo anterior, podemos ver que la velocidad de carga promedio se redujo a ~5 KB/s .
Ejemplo 2: Descargar el mismo archivo PDF de 2,8 MB con y sin Trickle
Primero, recuerde eliminar el PDF del directorio de origen original:
# 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 cliente. Este hecho viene indicado por el punto (' . ') que aparece después de la dirección IP del servidor FTP.
Sin Trickle:
# ncftpget -u nombre de usuario -p contraseña 111.111.111.111 . /testdir/LinuxFun.pdf
Producción:
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
Producción:
LinuxFun.pdf: 2,79 MB 17,76 kB/s
Ejecución de 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 el Trickle (el demonio).
Además, si queremos establecer una configuración global para que la usen, en general, todas las aplicaciones, necesitaremos usar el comando de filtrado. Este comando ejecuta el daemon y nos permite definir límites de carga y descarga que serán compartidos por todas las aplicaciones que se ejecutan a través de Trickle sin que necesitemos especificar límites cada vez.
Por ejemplo, ejecutando:
# trickled -d 50 -u 10
Hará que las velocidades de carga y descarga de cualquier aplicación que se ejecute por Trickle se limiten a 30 KB/s y 10 KB/s , respectivamente.
Tenga en cuenta que puede verificar en cualquier momento si el truco se está ejecutando y con qué argumentos:
# ps -ef | grep trickled | grep -v grep
Producción:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
Ejemplo 3: Subir un archivo mp4 de 19 MB a nuestro servidor FTP usando con y sin Trickle.
En este ejemplo, utilizaremos el video de distribución gratuita "Él es el regalo ", 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
En primer lugar, iniciaremos el demonio filtrado 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
Producción:
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
Producción:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
Como podemos ver en el resultado anterior, la tasa de transferencia de carga se redujo a ~10 KB/s .
Ejemplo 4: Descargar el mismo video con y sin Trickle
Como en el Ejemplo 2 , descargaremos el archivo al directorio de trabajo actual.
Sin Trickle:
# ncftpget -u nombre de usuario -p contraseña 192.168.0.15 . /testdir/2014-00-1460-él-es-el-regalo-360p-eng.mp4
Producción:
2014-00-1460-él-es-el-regalo-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
Producción:
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 se ha iniciado el demonio, no es necesario establecer límites individuales para cada aplicación que usa Trickle.
Como mencionamos anteriormente, se puede personalizar aún más la configuración del ancho de banda de trickle a través de trickled.conf. Una sección típica de este archivo consta de 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 pretendemos moldear.
- Priority nos permite especificar un servicio para que tenga una prioridad más alta en relación con otro, por lo que no permite que una sola aplicación acapare todo el ancho de banda que administra el demonio. Cuanto menor sea el número, más ancho de banda se asigna a [servicio].
- Time-Smoothing [en segundos]: define con qué intervalos de tiempo el filtrado intentará dejar que la aplicación transfiera y/o reciba datos. Los valores más pequeños (algo entre el rango de 0,1 a 1 s) son ideales para aplicaciones interactivas y darán como resultado una sesión más continua (suave), mientras que los valores ligeramente más grandes (1 a 10 s) son mejores para aplicaciones que necesitan una transferencia masiva. Si no se especifica ningún valor, se utiliza el predeterminado (5 s).
- Length-Smoothing [en KB]: la idea es la misma que en Suavizado de tiempo, pero basada en la duración de una operación de E/S. Si no se especifica ningún valor, se utiliza el predeterminado (10 KB).
Cambiar los valores de suavizado se traducirá en la aplicación especificada por [servicio] utilizando tasas de transferencia dentro de un intervalo en lugar de un valor fijo. Desafortunadamente, no existe una fórmula para calcular los límites inferior y superior de este intervalo, ya que depende principalmente del escenario de cada caso específico.
El siguiente es un archivo de muestra 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
Usando esta configuración, filtrado dará prioridad a las conexiones SSH sobre las transferencias FTP. Tenga en cuenta que un proceso interactivo, como SSH, usa valores de suavizado de tiempo más pequeños, mientras que un servicio que realiza transferencias masivas de datos (FTP) usa un valor mayor.
Los valores de suavizado son responsables de que las velocidades de carga y descarga en nuestro ejemplo anterior no coincidan con el valor exacto especificado por el demonio filtrado, pero se mueven en un intervalo cercano a él.
Conclusión
En este artículo, hemos explorado cómo limitar el ancho de banda utilizado por las aplicaciones que usan Trickle en distribuciones basadas en Fedora y Debian/derivados. Otros posibles casos de uso incluyen, pero no se limitan a:
- Limitar la velocidad de descarga a través de una utilidad del sistema como wget o un cliente de torrent , por ejemplo.
- Limitar la velocidad a la que su sistema puede actualizarse 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 está detrás de un proxy o firewall (o es el propio proxy o firewall), puede usar el Trickle para establecer límites tanto en la descarga como en la carga o la velocidad de comunicación con los clientes o el exterior.
Las preguntas y los comentarios son bienvenidos. Siéntase libre de usar el siguiente formulario para enviárnoslos.
![](/images/banners/linux-party-png-para-articles.png)
-
Linux
- ¿Por qué no más personas usan Linux en el escritorio? Tengo una teoría que quizás no te guste.
- Los países occidentales ricos lideran la expansión mundial del petróleo y el gas
- Systemd 256.1 aborda la queja de que 'systemd-tmpfiles' podría eliminar inesperadamente su directorio /home
- Por qué un kernel Linux de distribución 'congelada' no es la mejor opción para la seguridad
- RebornOS es una versión hermosa y fácil de usar de Arch Linux con abundantes opciones de escritorio
- Linus Torvalds sobre el 'hilarante' bombo de la IA
- Cambiar la hora en Linux con Chrony
- Renombrar multiples archivos masivamente en Linux (quitar espacios, cambiar mayúsculas) a la vez en Linux
- Linux 6.9 será el primero en superar los 10 millones de objetos Git
- Zorin OS 17.1 lanzado con soporte mejorado para aplicaciones de Windows, edición educativa
- Linux en el Escritorio: ¡Despega en 2024 con un 4% de Cuota!"
- ¿Estás pensando en cambiarte a Linux? 10 cosas que necesitas saber
- Hay una nueva distribución de Linux más genial para 2024
- rlxOS es una distribución de Linux inmutable que demuestra que las apariencias engañan
- Ultramarine Linux Flagship es candidato a escritorio del año