Cómo limitar el uso del ancho de banda de la red en Linux usando Trickle

Cómo limitar el uso del ancho de banda de la red en Linux usando Trickle

¿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 se comió todo su tráfico, entonces valorará el papel de la aplicación de modelado de ancho de banda.

O es un administrador del sistema. o solo un usuario de Linux. debe aprender a controlar las velocidades de carga y descarga de aplicaciones para asegurarse de que el ancho de banda de su red no sea quemado por una sola aplicación.

[También puede interesarle: 16 útiles herramientas de supervisión de ancho de banda para analizar el uso de la red en Linux].

¿Qué es Trickle?

Trickle. es una herramienta de modelado de ancho de banda de red que nos permite administrar las velocidades de carga y descarga de aplicaciones para evitar que una de ellas acapare todo (o la mayor parte) del ancho de banda disponible.

En pocas palabras, gotear 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, un nd es probablemente la configuración con la que estamos más familiarizados.

¿Cómo funciona Trickle?

freestar.config.enabled_slots.push

Además, un goteo puede ayudarnos a definir prioridades por aplicación, de modo que cuando se establezcan límites generales para todo el sistema, las aplicaciones prioritarias seguirán obteniendo más ancho de banda automáticamente.

Para lograr En esta tarea, el goteo establece límites de tráfico a la forma en que los datos se envían y reciben desde los sockets que utilizan conexiones TCP. Debemos tener en cuenta que, aparte de las tasas de transferencia de datos, el goteo no modifica de ninguna manera el comportamiento del proceso que está configurando en un momento dado.

¿Qué no puede hacer Trickle?

La única limitación, por así decirlo, es que el filtrado no funcionará con aplicaciones o binarios vinculados estáticamente con los bits SUID. o SGID. configurados, ya que utiliza vínculos dinámicos y carga para colocarse entre el proceso conformado y su zócalo de red asociado. Trickle entonces actúa como un proxy entre estos dos componentes de software.

Dado que 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 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 aplicaciones en un servidor Linux con un goteo.

Para generar el tráfico necesario, usaremos ncftpput. y ncftpget. (ambas herramientas están disponibles instalando 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 RedHat. Fedora. y sistemas basados ​​en Ubuntu.

Instalación de ncftp y vsftpd en Linux

1. Para RHEL/CentOS 8/7. habilite el repositorio EPEL. Paquetes adicionales para Enterprise Linux ( EPEL. es un repositorio de software de código abierto y gratuito de alta calidad mantenido por el proyecto Fedora y es 100% compatible con sus derivados, como Red Hat Enterprise Linux. y CentOS. Tanto goteo. como 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 casos en los que no se necesita seguridad para cargar o descargar archivos.

Lo usamos en este artículo para ilustrar las recompensas del goteo y porque muestra las tasas de transferencia en stdout. en el cliente, y dejaremos la discusión sobre si debe o no usarse 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 en

4. Si elige configurar el servidor FTP en un droplet CentOS. RHEL. con claves SSH para acceso remoto, necesitará una cuenta de usuario protegida por contraseña con el directorio apropiado y permisos de archivo para cargar y descargar el contenido deseado FUERA del directorio de inicio de root.

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 han cargado durante los pasos anteriores.

Árbol de directorios FTP  Árbol de directorios FTP Árbol de directorios FTP

Cómo instalar Trickle en Linux

Ahora instale goteo a través de yum. o apt.

Para asegurar 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 en sí.

# yum-y update && yum install trickle [En sistemas basados ​​en RedHat] # apt-y update && apt install trickle [En sistemas basados ​​en Debian]

Verifique si goteo funcionará con el binario deseado. Como explicamos anteriormente, el goteo solo funcionará con binarios que utilicen bibliotecas dinámicas o compartidas. Para verificar si podemos utilizar esta herramienta con una determinada aplicación, podemos utilizar la conocida utilidad ldd. donde ldd. significa lista de dependencias dinámicas.

Específicamente, buscaremos la presencia de glibc. (la biblioteca GNU C) en la lista de dependencias dinámicas de cualquier programa dado 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 goteo para dar forma a su ancho de banda:

# ldd $ (which [binary]) | grep libc.so

Por ejemplo,

# ldd $ (que ncftp) | grep libc.so

cuya salida es:

# libc.so.6 =>/lib64/libc.so.6 (0x00007efff2e6c000)

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 devuelve ningún resultado, significa que el binario contra el que se ejecutó no use libc. y por lo tanto, goteo no se puede usar como modelador de ancho de banda en ese caso.

Aprenda a usar Trickle en Linux

El uso más básico de goteo está en modo autónomo. Con este enfoque, el goteo se utiliza para definir explícitamente las velocidades de carga y descarga de una aplicación determinada. Como explicamos anteriormente, en aras de la brevedad, usaremos la misma aplicación para las pruebas de carga y descarga.

Ejecutando Trickle en modo independiente

Compararemos las velocidades de carga y descarga con y sin usar goteo. La opción-d indica la velocidad de descarga en KB/s, mientras que la bandera-u le dice a goteo que limite la velocidad de carga en la misma unidad. Además, usaremos el indicador-s, que especifica que goteo debe ejecutarse en modo autónomo.

La sintaxis básica para ejecutar goteo en modo autónomo es la siguiente:

# goteo-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 goteo. y ncftp. instalado 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 goteo.

Estamos utilizando el archivo PDF Linux Fundamentals. de distribución gratuita (disponible desde aquí) para las siguientes pruebas.

Puede descargar inicialmente 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 goteo es la siguiente:

# ncftpput-u nombre de usuario-p contraseña 192.168.0.15/directorio_remoto nombre-archivo-local

Donde /directorio_remoto. es la ruta del directorio de carga relativa a la casa del nombre de usuario, y nombre-archivo-local. es un archivo en su directorio de trabajo actual.

Específicamente, sin goteo obtenemos una velocidad de carga máxima de 52.02 MB/s. (tenga en cuenta que este no es el promedio real velocidad de carga, pero 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

Salida:

LinuxFun.pdf : 2,79 MB 52,02 MB/s

Con goteo, limitaremos la velocidad de transferencia de subida 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 intentando cargar y no realizará la transferencia:

# rm/absolute/path/to/destino/directorio/LinuxFun.pdf

Entonces:

# truco-s-u 5 ncftpput-u nombre de usuario-p contraseña 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 carga media se redujo a ~ 5 KB/s.

Ejemplo 2: descargando los mismos 2,8 MB Archivo PDF con y sin goteo

Primero, recuerde eliminar el PDF del directorio fuente original:

# rm/absolute/path/to/source/directory/LinuxFun.pdf

Tenga en cuenta que lo siguiente cases descargará el archivo remoto al directorio actual en la máquina cliente. Este hecho está indicado por el punto (‘.. ) que aparece después de la dirección IP del servidor FTP.

Sin goteo:

# ncftpget-u username-p contraseña 111.111.111.111./testdir/LinuxFun.pdf

Salida:

LinuxFun.pdf: 2,79 MB 260,53 MB/s

Con goteo, limitando la velocidad de descarga a 20 KB/s.

# truco-s-d 30 ncftpget-u nombre de usuario-p contraseña 111.111.111.111./testdir/LinuxFun.pdf

Salida:

LinuxFun.pdf: 2,79 MB 17,76 kB/s

Ejecución de Trickle en modo supervisado [no gestionado]

Trickle también puede ejecutarse en modo no gestionado, siguiendo una serie de parámetros definidos en /etc/trickled.conf. Este archivo define cómo se comporta y administra el demonio (el demonio).

Además, si queremos establecer la configuración global para que la utilicen, en general, todas las aplicaciones, necesitaremos utilizar el comando de seguimiento. Este comando ejecuta el demonio y nos permite definir límites de carga y descarga que serán compartidos por todas las aplicaciones ejecutadas sin necesidad de especificar límites cada vez.

Por ejemplo, ejecutar:

# trickled-d 50-u 10

Hará que las velocidades de descarga y carga de cualquier aplicación ejecutada por goteo se limiten a 30 KB/s. y 10 KB/s , respectivamente.

Tenga en cuenta que puede comprobar en cualquier momento si se está ejecutando el filtrado y con qué argumentos:

# ps-ef | grep goteó | grep-v grep

Salida:

root 16475 1 0 Dec24? 00:00:04 trickled-d 50-u 10 Ejemplo 3: Subiendo un archivo mp4 de 19 MB a nuestro servidor FTP usando con y sin goteo.

En este ejemplo usaremos el video de distribución gratuita “H e 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, comenzaremos el demonio goteado con el comando mencionado anteriormente:

# goteo-d 30-u 10

Sin goteo:

# ncftpput-u nombre de usuario-p contraseña 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 goteo:

# goteo ncftpput-u nombre de usuario-p contraseña 192.168.0.15/testdir 2014-00-1460-él-es-el-regalo-360p-eng.mp4

Resultado:

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: Descarga del mismo video con y sin goteo

Como en el Ejemplo 2. descargaremos el archivo al directorio de trabajo actual.

Sin goteo:

# ncftpget-u nombre de usuario-p contraseña 192.168.0.15./testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

Resultado:

2014-00-1460-he-is-the-gift-360p-eng.mp4 : 18,53 MB 108,34 MB/s

Con goteo:

# goteo ncftpget-u nombre de usuario-p contraseña 111.111.111.111./testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

Resultado:

2014-00-1460-he-is-the-gift-360p-eng.mp4 : 18,53 MB 29,28 kB/s

Que está de acuerdo con el límite de descarga establecido anteriormente ( 30 KB/s. .

Nota:. que una vez que se ha iniciado el demonio, no es necesario establecer límites individuales para cada aplicación que utilice goteo.

Como mencionamos anteriormente, se puede personalizar aún más la configuración del ancho de banda de goteo. a través de trickled.conf. Una sección típica de este archivo consta de lo siguiente:

[service] Priority = Time-Smoothing = Length-Smoothing =

Donde,

  1. [servicio] indica el nombre de la aplicación cuyo uso de ancho de banda pretendemos modelar.
  2. Prioridad nos permite especificar un servicio para tener un mayor prioridad en relación con otra, 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 asignará a [servicio].
  3. Suavizado de tiempo [en segundos]: define con qué intervalos de tiempo tratará de dejar que la aplicación transferir y/o recibir datos. Los valores más pequeños (entre 0,1 y 1 s) son ideales para aplicaciones interactivas y darán como resultado una sesión más continua (fluida), mientras que los valores ligeramente mayores (1 a 10 s) son mejores para aplicaciones que necesitan transferencia masiva. Si no se especifica ningún valor, se utiliza el valor predeterminado (5 s).
  4. Suavizado de longitud [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 valor 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 de cada escenario de 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-Suavizado = 3

Con esta configuración, el filtrado priorizará 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 de datos masivas (FTP) usa un valor mayor.

Los valores de suavizado son responsables de la descarga y carga velocidades en nuestro ejemplo anterior que no coinciden con el valor exacto especificado por el demonio goteado pero que se mueven en un intervalo cercano a él.

[También le puede gustar: Cómo proteger y fortalecer el servidor OpenSSH].

Conclusión

En este artículo hemos explorado cómo limitar el ancho de banda utilizado por las aplicaciones que utilizan goteo en distribuciones basadas en Fedora y Debian/derivados. Otros posibles casos de uso incluyen, entre otros:

  • 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 administración de paquetes.
  • Si su servidor está atrasado un proxy o firewall (o es el proxy o firewall en sí), puede usar el goteo para establecer límites tanto en la descarga como en la carga o la velocidad de comunicación con los clientes o el exterior.

Preguntas y los comentarios son bienvenidos. Siéntase libre de usar el formulario a continuación para enviárnoslos.