Avez-vous déjà rencontré des situations où une application a dominé la bande passante de votre réseau? Si vous avez déjà été dans une situation où une application a tout mangé de votre trafic, alors vous apprécierez le rôle de l’application de formateur de bande passante trickle.
Que vous soyez un administrateur système ou simplement un utilisateur Linux, vous devez apprendre à contrôler les vitesses de téléchargement et de téléchargement pour les applications afin de vous assurer que votre bande passante réseau n’est pas brûlée par une seule application.
Qu’est-ce que Trickle?
Trickle est un outil de formateur de bande passante réseau qui nous permet de gérer les vitesses de téléchargement et de téléchargement des applications afin d’empêcher qu’aucune d’entre elles ne prenne tout (ou la plupart) de la bande passante disponible.
En quelques mots, Trickle vous permet de contrôler le débit du trafic réseau au niveau de chaque application, contrairement au contrôle par utilisateur, qui est l’exemple classique de mise en forme de bande passante dans un environnement client-serveur, et est probablement le dispositif auquel nous sommes plus habitués.
Comment Trickle fonctionne-t-il?
De plus, un Trickle peut nous aider à définir des priorités au niveau de chaque application de sorte que lorsque des limites globales ont été fixées pour tout le système, les applications prioritaires obtiendront encore plus de bande passante automatiquement.
Pour accomplir cette tâche, Trickle fixe des limites de trafic sur la manière dont les données sont envoyées et reçues à partir des sockets utilisant des connexions TCP. Il convient de noter que, à l’exception des taux de transfert de données, Trickle ne modifie en aucune façon le comportement du processus qu’il met en forme à un moment donné.
Qu’est-ce que Trickle ne peut pas faire?
La seule limitation, pour ainsi dire, est que Trickle ne fonctionnera pas avec des applications ou des binaires liés statiquement ou ayant les bits SUID ou SGID définis, car il utilise le couplage dynamique et le chargement pour se placer entre le processus moulé et son socket réseau associé. Trickle agit alors comme un proxy entre ces deux composants logiciels.
Étant donné que Trickle ne nécessite pas de privilèges superutilisateur pour s’exécuter, les utilisateurs peuvent définir leurs propres limites de trafic. Comme cela peut ne pas être souhaitable, nous explorerons comment définir des limites globales que les utilisateurs système ne peuvent pas dépasser. En d’autres termes, les utilisateurs pourront toujours gérer leurs débits de trafic, mais toujours dans les limites fixées par l’administrateur système.
Environnement de test
Dans cet article, nous expliquerons comment limiter la bande passante réseau utilisée par les applications dans un serveur Linux avec Trickle.
Pour générer le trafic nécessaire, nous utiliserons ncftpput et ncftpget (ces deux outils sont disponibles en installant ncftp) sur le client (serveur CentOS – dev1 : 192.168.0.17), et vsftpd sur le serveur (Debian – dev2 : 192.168.0.15) à des fins de démonstration.
Les mêmes instructions fonctionnent également sur les distributions basées sur RHEL et basées sur Debian telles que Ubuntu et Linux Mint.
Comment installer ncftp et vsftpd sous Linux
1. Pour les distributions basées sur RedHat, vous devez activer le dépôt EPEL, qui est un dépôt de logiciels libres de haute qualité maintenu par le projet Fedora.
Installer EPEL sur 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
Installer EPEL sur CentOS 9, AlmaLinux 9, Rocky Linux 9:
sudo dnf config-manager --set-enabled crb sudo dnf install epel-release
Installer EPEL sur 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
Installer EPEL sur CentOS 8, AlmaLinux 8, Rocky Linux 8:
sudo dnf config-manager --set-enabled powertools sudo dnf install epel-release
2. Ensuite, installez ncftp comme suit.
sudo dnf install ncftp [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install ncftp [On Debian, Ubuntu and Mint]
3. Configurez un serveur FTP sur un serveur séparé. Veuillez noter qu’ bien que le FTP soit intrinsèquement peu sécurisé, il est encore largement utilisé dans les cas où la sécurité lors du téléchargement ou de l’envoi de fichiers n’est pas nécessaire.
Nous l’utilisons dans cet article pour illustrer les avantages de trickle et parce qu’il affiche les taux de transfert dans stdout sur le client, et nous laisserons la discussion de savoir s’il doit être utilisé ou non pour une autre date et heure.
sudo dnf install vsftpd [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install vsftpd [On Debian, Ubuntu and Mint]
Maintenant, éditez le fichier /etc/vsftpd/vsftpd.conf sur le serveur FTP comme suit:
$ sudo nano /etc/vsftpd/vsftpd.conf OR $ sudo nano /etc/vsftpd.conf
Faites les changements suivants:
anonymous_enable=NO local_enable=YES chroot_local_user=YES allow_writeable_chroot=YES
Après cela, assurez-vous de démarrer vsftpd pour votre session actuelle et de l’activer pour un démarrage automatique lors des prochains démarrages:
sudo systemctl start vsftpd sudo systemctl enable vsftpd sudo systemctl status vsftpd
4. Si vous choisissez de configurer le serveur FTP dans un droplet CentOS/RHEL avec des clés SSH pour l’accès à distance, vous aurez besoin d’un compte utilisateur protégé par mot de passe avec les autorisations appropriées sur le répertoire et les fichiers pour télécharger et télécharger le contenu souhaité EN DEHORS du répertoire personnel de root.
Ensuite, vous pouvez accéder à votre répertoire personnel en entrant l’URL suivante dans votre navigateur. Une fenêtre de connexion apparaîtra vous demandant un compte utilisateur et un mot de passe valides sur le serveur FTP.
ftp://192.168.0.15
Si l’authentification réussit, vous verrez le contenu de votre répertoire personnel. Plus tard dans ce tutoriel, vous pourrez rafraîchir cette page pour afficher les fichiers qui ont été téléchargés lors des étapes précédentes.

Comment Installer Trickle dans Linux
Installez maintenant trickle via yum ou apt.
Pour garantir une installation réussie, il est conseillé de s’assurer que les packages actuellement installés sont à jour (en utilisant yum update) avant d’installer l’outil lui-même.
sudo yum -y update && sudo yum install trickle [On RedHat based systems] sudo apt -y update && sudo apt install trickle [On Debian based systems]
Vérifiez si le trickle fonctionnera avec le binaire désiré. Comme nous l’avons expliqué précédemment, le trickle ne fonctionnera qu’avec des binaires utilisant des bibliothèques dynamiques ou partagées.
Pour vérifier si nous pouvons utiliser cet outil avec une certaine application, nous pouvons utiliser l’utilitaire bien connu ldd, où ldd signifie « liste des dépendances dynamiques ».
Plus précisément, nous chercherons la présence de glibc (la bibliothèque C GNU) dans la liste des dépendances dynamiques de tout programme donné, car c’est précisément cette bibliothèque qui définit les appels système impliqués dans la communication via des sockets.
Exécutez la commande suivante contre un binaire donné pour voir si trickle peut être utilisé pour façonner sa bande passante :
sudo ldd $(which [binary]) | grep libc.so
Par exemple,
sudo ldd $(which ncftp) | grep libc.so
dont la sortie est :
sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
La chaîne entre parenthèses dans la sortie peut changer d’un système à un autre et même entre les exécutions successives de la même commande, car elle représente l’adresse de chargement de la bibliothèque en mémoire physique.
Si la commande ci-dessus ne renvoie aucun résultat, cela signifie que le binaire contre lequel elle a été exécutée n’utilise pas libc, et donc trickle ne peut pas être utilisé comme façonneur de bande passante dans ce cas.
Apprenez à utiliser Trickle sous Linux
L’utilisation la plus basique de trickle est en mode autonome. Avec cette approche, trickle est utilisé pour définir explicitement les vitesses de téléchargement et de téléversement d’une application donnée. Comme nous l’avons expliqué précédemment, pour des raisons de brièveté, nous utiliserons la même application pour les tests de téléchargement et de téléversement.
Exécution de Trickle en mode autonome
Nous allons comparer les vitesses de téléchargement et d’envoi avec et sans utiliser trickle. L’option -d
indique la vitesse de téléchargement en KB/s, tandis que le drapeau -u
indique à trickle de limiter la vitesse d’envoi par la même unité. De plus, nous utiliserons le drapeau -s
, qui spécifie que trickle doit fonctionner en mode autonome.
La syntaxe de base pour exécuter trickle en mode autonome est la suivante:
sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]
Pour réaliser les exemples suivants sur votre propre machine, assurez-vous d’avoir trickle et ncftp installés sur la machine cliente (192.168.0.17 dans mon cas).
Exemple 1 : Envoi d’un fichier de 2,8 Mo avec et sans Trickle
Nous utilisons le fichier PDF Linux Fundamentals (disponible à partir de ici) pour les tests suivants.
Vous pouvez initialement télécharger ce fichier dans votre répertoire de travail actuel avec la commande wget suivante:
wget http://linux-training.be/files/books/LinuxFun.pdf
La syntaxe pour envoyer un fichier à notre serveur FTP sans trickle est la suivante:
sudo ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename
Où /remote_directory est le chemin du répertoire d’envoi par rapport au répertoire personnel de l’utilisateur, et local-filename est un fichier dans votre répertoire de travail actuel.
Spécifiquement, sans Trickle, nous obtenons une vitesse de téléchargement maximale de 52,02 Mo/s (notez que ce n’est pas la vitesse de téléchargement moyenne réelle, mais un pic instantané au démarrage), et le fichier est téléchargé presque instantanément :
sudo ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf
Sortie :
LinuxFun.pdf: 2.79 MB 52.02 MB/s
Avec Trickle, nous limiterons le débit de transfert de téléchargement à 5 Ko/s. Avant de télécharger le fichier une deuxième fois, nous devons le supprimer du répertoire de destination.
Sinon, ncftp nous informera que le fichier dans le répertoire de destination est le même que celui que nous essayons de télécharger, et ne réalisera pas le transfert :
rm /absolute/path/to/destination/directory/LinuxFun.pdf
Ensuite :
trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf
Sortie :
LinuxFun.pdf: 2.79 MB 4.94 kB/s
Dans l’exemple ci-dessus, nous pouvons voir que la vitesse de téléchargement moyenne a chuté à ~5 Ko/s.
Exemple 2 : Téléchargement du même fichier de 2,8 Mo avec et sans Trickle
Tout d’abord, rappelez-vous de supprimer le PDF du répertoire source d’origine :
rm /absolute/path/to/source/directory/LinuxFun.pdf
Notez que les cas suivants téléchargeront le fichier distant vers le répertoire courant sur la machine cliente. Ce fait est indiqué par le point (‘.‘) qui apparaît après l’adresse IP du serveur FTP.
Sans Trickle :
ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Sortie :
LinuxFun.pdf: 2.79 MB 260.53 MB/s
Avec Trickle, limitant la vitesse de téléchargement à 20 Ko/s :
trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Sortie :
LinuxFun.pdf: 2.79 MB 17.76 kB/s
Exécution de Trickle en mode supervisé [non géré]
Trickle peut également s’exécuter en mode non géré, en suivant une série de paramètres définis dans /etc/trickled.conf. Ce fichier définit le comportement et la gestion de trickled (le démon) par Trickle.
De plus, si nous voulons définir des paramètres globaux à utiliser, dans l’ensemble, par toutes les applications, nous devrons utiliser la commande trickled. Cette commande exécute le démon et nous permet de définir des limites de téléchargement et de téléversement qui seront partagées par toutes les applications exécutées via trickle sans que nous ayons besoin de spécifier des limites à chaque fois.
Par exemple, en exécutant:
trickled -d 50 -u 10
Cela limitera les vitesses de téléchargement et de téléversement de toute application exécutée via trickle à 30 KB/s et 10 KB/s, respectivement.
Notez que vous pouvez vérifier à tout moment si trickled est en cours d’exécution et avec quels arguments:
ps -ef | grep trickled | grep -v grep
Sortie:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
Exemple 3 : Téléverser un fichier MP4 de 19 Mo sur un serveur FTP à l’aide de Trickle
Dans cet exemple, nous utiliserons la vidéo « He is the gift » distribuée gratuitement, disponible à partir de ce lien.
Nous allons tout d’abord télécharger ce fichier dans votre répertoire de travail actuel avec la commande suivante:
wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4
Tout d’abord, nous allons démarrer le démon trickled avec la commande indiquée ci-dessus:
trickled -d 30 -u 10
Sans trickle:
ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Sortie:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s
Avec trickle:
trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Sortie:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
Comme nous pouvons le voir dans la sortie ci-dessus, le taux de transfert de téléversement est tombé à ~10 KB/s.
Exemple 4 : Télécharger la même vidéo avec Trickle
Comme dans Exemple 2, nous allons télécharger le fichier dans le répertoire de travail actuel.
Sans trickle:
ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Sortie:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s
Avec trickle:
trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Sortie:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s
Ce qui est conforme à la limite de téléchargement fixée précédemment (30 KB/s).
Note: Une fois que le démon a été démarré, il n’est pas nécessaire de fixer des limites individuelles pour chaque application qui utilise trickle.
Comme nous l’avons mentionné précédemment, on peut personnaliser davantage la mise en forme de la bande passante de trickle via trickled.conf. Une section typique de ce fichier se compose des éléments suivants:
[service] Priority = <value> Time-Smoothing = <value> Length-Smoothing = <value>
Où,
- [service] indique le nom de l’application dont l’utilisation de la bande passante nous voulons façonner.
- Priorité nous permet de spécifier un service ayant une priorité plus élevée par rapport à un autre, ne permettant ainsi pas qu’une seule application monopolise toute la bande passante que le démon gère. Plus le nombre est faible, plus la bande passante est attribuée à [service].
- Time-Smoothing [en secondes]: définit avec quelles intervalles de temps trickled essaiera de permettre à l’application de transférer et/ou recevoir des données. Des valeurs plus petites (quelque chose dans la gamme de 0,1 à 1 s) sont idéales pour les applications interactives et conduiront à une session plus continue (lissée) tandis que des valeurs légèrement plus grandes (1 à 10 s) sont meilleures pour les applications qui nécessitent un transfert en vrac. Si aucune valeur n’est spécifiée, la valeur par défaut (5 s) est utilisée.
- Lissage de longueur [en KB] : l’idée est la même que dans le Lissage temporel, mais basée sur la longueur d’une opération E/S. Si aucune valeur n’est spécifiée, la valeur par défaut (10 KB) est utilisée.
Le changement des valeurs de lissage se traduirait par l’application spécifiée par [service] utilisant des taux de transfert dans un intervalle au lieu d’une valeur fixe. Malheureusement, il n’y a pas de formule pour calculer les limites inférieures et supérieures de cet intervalle car cela dépend principalement de chaque scénario spécifique.
Voici un exemple de fichier trickled.conf sur le client 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
Avec cette configuration, trickled priorisera les connexions SSH sur les transferts FTP. Notez qu’un processus interactif, tel que SSH, utilise des valeurs de lissage temporel plus petites, tandis qu’un service qui effectue des transferts de données en masse (FTP) utilise une valeur plus grande.
Les valeurs de lissage sont responsables des vitesses de téléchargement et de téléversement dans notre exemple précédent ne correspondant pas à la valeur exacte spécifiée par le démon trickled mais se déplaçant dans un intervalle proche.
[ Vous pourriez également aimer : Comment sécuriser et renforcer le serveur OpenSSH ]
Conclusion
Dans cet article, nous avons exploré comment limiter la bande passante utilisée par les applications à l’aide de trickle sur les distributions basées sur Fedora et Debian / dérivées. D’autres utilisations possibles incluent, mais sans s’y limiter :
- Limiter la vitesse de téléchargement via un utilitaire système tel que wget, ou un client torrent, par exemple.
- Limiter la vitesse à laquelle votre système peut être mis à jour via `yum` (ou `aptitude`, si vous êtes sur un système basé sur Debian), le système de gestion de paquets.
- Si votre serveur se trouve derrière un proxy ou un pare-feu (ou est le proxy ou le pare-feu lui-même), vous pouvez utiliser trickle pour définir des limites sur la vitesse de téléchargement et de téléversement ou de communication avec les clients ou l’extérieur.
Les questions et commentaires sont les bienvenus. N’hésitez pas à utiliser le formulaire ci-dessous pour les envoyer à notre attention.
Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/