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

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

¿Alguna vez has encontrado situaciones en las que una aplicación dominó todo su ancho de banda de red?? Si alguna vez ha estado en una situación en la que una aplicación comió todo su tráfico, valorará el papel de la aplicación Shaper de ancho de banda de goteo.

O eres un administrador del sistema o solo un Usuario de Linux, Debe aprender cómo controlar las velocidades de carga y descarga para aplicaciones para asegurarse de que su ancho de banda de red no se quema mediante una sola aplicación.

[También puede gustar: 16 herramientas de monitoreo de ancho de banda útiles para analizar el uso de la red en Linux]

Que es el goteo?

Chorrito es una herramienta de shaper de ancho de banda de red que nos permite administrar las velocidades de carga y descarga de las aplicaciones para evitar que cualquiera de ellos acapare todos (o la mayoría) del ancho de banda disponible.

En pocas palabras, Trickle le permite controlar la velocidad de tráfico de la red por solicitud por aplicación, a diferencia del control por usuario, que es el ejemplo clásico de la configuración de ancho de banda en un entorno de cliente cliente, y es probablemente la configuración, somos más somos más familiar con.

Cómo funciona el truco?

Además, un goteo puede ayudarnos a definir las prioridades por solicitud por aplicación para 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 lograr esta tarea, el goteo establece los límites de tráfico a la forma en que se envían y reciben datos, enchufes utilizando conexiones TCP. Debemos tener en cuenta que, aparte de las tasas de transferencia de datos, Trickle no modifica de ninguna manera el comportamiento del proceso que está formando en cualquier momento dado.

¿Qué no puede hacer gotear??

La única limitación, por así decirlo, es que el truco no funcionará con aplicaciones o binarios estáticamente vinculados con el Suid o Sgid Bits establecidos ya que utiliza la vinculación y la carga dinámica para ubicarse entre el proceso con forma y su socket de red asociado. Recurrir luego actúa como un proxy entre estos dos componentes de software.

Dado que Trickle no requiere privilegios de Superuser para ejecutar, los usuarios pueden establecer sus propios límites de tráfico. Dado que esto puede no ser deseable, exploraremos cómo establecer los límites generales que los usuarios del sistema no pueden exceder. En otras palabras, los usuarios aún podrán administrar sus tarifas 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 utilizado por las aplicaciones en un servidor de Linux con un goteo.

Para generar el tráfico necesario, usaremos ncftpput y ncftpget (Ambas herramientas están disponibles instalando NCFTP) en el cliente (Cento servidor - dev1: 192.168.0.17), y VSFTPD en el servidor (Debian - Dev2: 192.168.0.15) para fines de demostración. Las mismas instrucciones también funcionan Sombrero rojo, Fedora y sistemas basados ​​en Ubuntu.

Instalación de NCFTP y VSFTPD en Linux

1. Para RHEL/CENTOS 8/7, Habilitar el repositorio EPEL. Paquetes adicionales para Enterprise Linux (Epel) es un depósito de software gratuito y de código abierto de alta calidad mantenido por el proyecto Fedora y es 100% compatible con sus spin-offs, como Red Hat Enterprise Linux y Cento. Ambos chorrito y NCFTP están disponibles en este repositorio.

2. Instalar NCFTP como sigue:

# yum Update && sudo yum instalación 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 inherentemente inseguro, todavía se usa ampliamente en los casos cuando no se necesita seguridad en la carga o descarga de archivos.

Lo estamos utilizando 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 de si debería 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 /etc/vsftpd/vsftpd.confusión Archivo en el servidor FTP de la siguiente manera:

$ sudo nano/etc/vsftpd/vsftpd.conf o $ sudo /etc /vsftpd.confusión 

Hacer los siguientes cambios:

anónimo_enable = no local_enable = yes chroot_local_user = yeslow_writable_chroot = sí 

Después de eso, asegúrese de iniciar VSFTPD para su sesión actual y habilitarla para el inicio automático en botas futuras:

# SystemCTL Start vsftpd [para sistemas basados ​​en Systemd] # SystemCTL Enable VSFTPD # Servicio VSFTPD Start [para sistemas basados ​​en init] # CHKCONFIG VSFTPD ON 

4. Si eligió configurar el servidor FTP en un Cento/Rhel Gota con claves SSH para acceso remoto, necesitará una cuenta de usuario protegida con contraseña con el directorio apropiado y los permisos de archivo para cargar y descargar el contenido deseado fuera del directorio de inicio de Root.

Luego puede navegar al directorio de su hogar ingresando la siguiente URL en su navegador. Una ventana de inicio de sesión aparecerá que le solicitará una cuenta de usuario y 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 directorio FTP

Cómo instalar goteo en Linux

Ahora instale goteo a través de beque o apto.

Para garantizar una instalación exitosa, se considera una buena práctica para asegurarse de que los paquetes instalados actualmente estén actualizados (utilizando Actualización de Yum) antes de instalar la herramienta misma.

# yum -y update && yum instalación de instalación [en sistemas basados ​​en redhat] # apt -y update && apt install thickle [en sistemas basados ​​en Debian] 

Verifique si Trickle funcionará con el binario deseado. Como explicamos anteriormente, el goteo solo funcionará con binarios utilizando bibliotecas dinámicas o compartidas. Para verificar si podemos usar esta herramienta con una determinada aplicación, podemos usar el conocido LDD utilidad, donde LDD representa las dependencias dinámicas de la lista.

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 del sistema involucradas en la comunicación a través de los sockets.

Ejecute el siguiente comando contra un binario determinado para ver si se puede usar Trickle para dar forma a su ancho de banda:

# ldd $ (que [binario]) | Grep libc.entonces 

Por ejemplo,

# ldd $ (que ncftp) | Grep libc.entonces 

cuya salida es:

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

La cadena entre paréntesis en la salida puede cambiar de sistema a sistema 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 se usa libc, y por lo tanto, el goteo no se puede usar como shaper de ancho de banda en ese caso.

Aprende a usar Trickle en Linux

El uso más básico de Trickle está en modo independiente. Usando este enfoque, Trickle se usa para definir explícitamente las velocidades de descarga y carga de una aplicación dada. Como explicamos anteriormente, en aras de la brevedad, utilizaremos la misma aplicación para las pruebas de descarga y carga.

Ejecutando goteo en modo independiente

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

La sintaxis básica para ejecutar goteo 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 chorrito y NCFTP instalado en la máquina del cliente (192.168.0.17 en mi caso).

Ejemplo 1: cargar un 2.8 MB PDF File con y sin goteo.

Estamos utilizando el libremente distribuible Fundamentos de Linux Archivo PDF (disponible desde aquí) para las siguientes pruebas.

Inicialmente puede descargar este archivo en su directorio de trabajo actual con el siguiente comando:

# wget http: // entrenamiento de linux.be/archivos/libros/Linuxfun.pdf 

La sintaxis para cargar un archivo a nuestro servidor FTP sin goteo es el siguiente:

# ncftpput -u nombre de usuario -p contraseña 192.168.0.15 /remoto_directory local-filename 

Dónde /remoto_directory es el camino del directorio de carga en relación con el hogar de nombre de usuario, y juego de fila 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 esta no es la velocidad de carga promedio real, sino un pico de inicio instantáneo), y el archivo se carga casi al instante:

# 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 en 5 kb/s. Antes de cargar el archivo por segunda vez, 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 tratando de cargar y no realizará la transferencia:

# RM/Absolute/Path/To/Destino/Directory/Linuxfun.pdf 

Entonces:

# Trickle -S -U 5 NCFTPPUT -U Nombre de usuario -P Contraseña 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 cayó a ~ 5 kb/s.

Ejemplo 2: descargar los mismos 2.8 MB PDF File con y sin goteo

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 del cliente. Este hecho está indicado por el período ('.') que aparece después de la dirección IP del servidor FTP.

Sin goteo:

# 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 goteo, limitando la velocidad de descarga en 20 kb/s:

# Trickle -S -D 30 NCFTPGet -U Nombre de usuario -P Contraseña 111.111.111.111 . /testdir/linuxfun.pdf 

Producción:

Linuxfun.PDF: 2.79 MB 17.76 kb/s 

Ejecutando el truco en el modo supervisado [sin administrar]

Trickle también puede ejecutarse en modo no administrado, siguiendo una serie de parámetros definidos en /etc/gotear.confusión. Este archivo define cómo se comporta y maneja el goteo.

Además, si queremos establecer la configuración global para ser utilizadas, en general, en todas las aplicaciones, deberemos usar el comando gotado. Este comando ejecuta el demonio y nos permite definir los límites de descarga y carga que compartirán todas las aplicaciones que se ejecutarán a través de un truco sin que necesitemos especificar límites cada vez.

Por ejemplo, en ejecución:

# goteado -d 50 -u 10 

Causará que las velocidades de descarga y carga de cualquier aplicación ejecutada se limiten a 30 kb/s y 10 kb/s, respectivamente.

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

# PS -EF | grep goteó | Grep -V Grep 

Producción:

Root 16475 1 0 dic24 ? 00:00:04 goteado -d 50 -u 10 
Ejemplo 3: cargar un archivo MP4 de 19 MB a nuestro servidor FTP usando con y sin goteo.

En este ejemplo, usaremos el "H-Distribuible libremente" HE es el regalo"Video, disponible para descargar desde este enlace.

Inicialmente descargaremos este archivo en su directorio de trabajo actual con el siguiente comando:

# wget http: // Media2.ldscdn.org/activos/misionero/nuestro-personas-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 

En primer lugar, comenzaremos el demonio gotado con el comando enumerado anteriormente:

# goteado -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 

Producción:

2014-00-1460-he-is-the-gift-360p-eng.MP4: 18.53 MB 36.31 MB/s 

Con goteo:

# TRACTLE NCFTPPUT -U Nombre de usuario -P Contraseña 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 la salida anterior, la velocidad de transferencia de carga cayó a ~ 10 kb/s.

Ejemplo 4: Descargar el mismo video con y sin goteo

Como en 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 

Producción:

2014-00-1460-he-is-the-gift-360p-eng.MP4: 18.53 MB 108.34 MB/s 

Con goteo:

# TRACTLE NCFTPGET -U Nombre de usuario -P Contraseña 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 

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 hay necesidad de establecer límites individuales para cada aplicación que usa goteo.

Como mencionamos anteriormente, uno puede personalizar aún más la configuración del ancho de banda de Trickle a través de Trickled.confusión. Una sección típica en este archivo consta de lo siguiente:

[Servicio] Priority = Time-Smoothing = Longitud-Smoothing =  

Dónde,

  1. [servicio] Indica el nombre de la aplicación cuyo uso de ancho de banda tenemos la intención de dar forma.
  2. Prioridad nos permite especificar un servicio para tener una prioridad más alta en relación con otra, por lo que no permite que una sola aplicación acapare todo el ancho de banda que el demonio está administrando. Cuanto menor sea el número, más ancho de banda se asigna a [Servicio].
  3. Asignación de tiempo [En segundos]: define con qué intervalos de tiempo se dispararon intentará 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 darán como resultado una sesión más continua (suave), mientras que los valores ligeramente más grandes (1 - 10 s) son mejores para aplicaciones que necesitan transferencia a granel. Si no se especifica ningún valor, se usa el valor predeterminado (5 s).
  4. Longitud [En KB]: la idea es la misma que en el tiempo de suavización, pero según la longitud de una operación de E/S. Si no se especifica ningún valor, se usa el valor predeterminado (10 kb).

Cambiar los valores de suavizado se traducirá en la aplicación especificada por [servicio] Usar tasas de transferencia dentro de un intervalo en lugar de un valor fijo. Desafortunadamente, no hay fórmula para calcular los límites inferiores y superiores de este intervalo, ya que depende principalmente de cada escenario de caso específico.

Lo siguiente es un goteo.confusión archivo de muestra en el cliente CentOS 7 (192.168.0.17)

[ssh] prioridad = 1 suave tiempo = 0.1 longitud de suavización = 2 [ftp] prioridad = 2 suave de tiempo = 1 suave longitud = 3 

Usando esta configuración, Trickled priorizará las conexiones SSH sobre las transferencias FTP. Tenga en cuenta que un proceso interactivo, como SSH, utiliza valores de suavización de tiempo más pequeños, mientras que un servicio que realiza transferencias de datos a granel (FTP) utiliza un valor mayor.

Los valores de suavizado son responsables de las velocidades de descarga y carga en nuestro ejemplo anterior, no coincidir con el valor exacto especificado por el demonio gotado, pero en un intervalo cercano a él.

[También puede que le guste: cómo asegurar y endurecer el servidor OpenSsh]

Conclusión

En este artículo hemos explorado cómo limitar el ancho de banda utilizado por las aplicaciones utilizando Trickle on Fedora Distributions y Debian / Derivative. 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 torrent, por ejemplo.
  • Limitar la velocidad a la que su sistema se puede actualizar a través de 'yum' (o 'aptitud', si se encuentra 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 proxy o firewall en sí), puede usar el goteo para establecer límites tanto en la descarga como en la velocidad de carga o comunicación con los clientes o el exterior.

Las preguntas y los comentarios son bienvenidos. Siéntase libre de usar el formulario a continuación para enviarlos a nuestro camino.