Comment limiter la bande passante sous Linux

I. Présentation de wondershaper et trickle

Lorsque l'on commence à beaucoup travailler sur des machines et des serveurs Linux, il est intéressant de savoir comment limiter la bande passante. Cela peut être utile dans différents contextes, dans le cadre d'un serveur ou d'une infrastructure mutualisés par exemple ou juste pour éviter qu'un téléchargement ou une application prenne l'ensemble du trafic au détriment des autres utilisateurs du réseau. On pourrait très bien mettre de la QoS ou d'autres technologies, mais les outils que nous allons voir ensemble ici permettent d'effectuer une limitation de la bande passante utilisée très simplement et rapidement sous Linux, j'ai nommé wondershaper et trickle.

II. Limiter la bande passante par interface avec wondershaper

wondershaper est un petit outil, léger et très simple qui n'a qu'une seule fonction : limiter la bande passante qui peut être utilisée par une interface réseau donnée de notre machine Linux. On peut en effet limiter la bande passante entrant (download) et la bande passante sortant (upload) avec des valeurs différentes et avoir un paramétrage différent par interface.
On commence par l'installer, pour les machines Debian et Ubuntu :

apt-get install wondershaper

Pour les machines CentOS/RHEL :

yum install wondershaper

L'utilisation de cette commande est des plus basique, voici la syntaxe générale :

wondershaper <interface> <limite_download> <limite_upload>

Il faut bien noter ici que les limites sont à inscrite en kilobits par seconde et non en kilooctets comme il est plus courant de le faire. Pour limiter la bande passante à 1Mo/s par en download et 200Ko/s en uload sur l'interface eth0 par exemple :

wondershaper eth0 8192 1600

1 mégaoctects étant égale à 8192 kilobits et 200Ko/s à 1600 kilobits. Il existe des convertisseurs très efficace sur le net, voici celui que j'ai utilisé pour ma conversion : Bit Calculator

On peut ensuite faire un test, par exemple en téléchargeant une archive depuis internet pour voir que la bande passante est bien limitée.

Il est à noter que l'on peut très bien, si l'on dispose de plusieurs interfaces, laisser les autres interfaces sans limitations ou au contraire, en mettre des plus ou moins restrictives en utilisant la même syntaxe. Il nous suffira juste pour cela de changer le nom de l'interface dans la commande utilisée.

Pour faire sauter toute restrictions sur une interface donnée, on va simplement utiliser la ligne de commande suivante, par exemple pour l'interface "eth0" :

wondershaper clear eth0

L'interface désignée n'aura alors plus aucune restrictions.

III. Limiter la bande passante d'une commande avec trickle

Bien qu'il agisse également sur la limitation de la bande passante en upload et en download, trickle correspond à d'autres contextes d'utilisation puisqu'il ne s'applique que lors de l'utilisation en ligne de commande, c'est à dire de façon ponctuelle. Si je souhaite télécharger une archive sur internet et que je souhaite limiter la bande passante utilisée par ce téléchargement, je peux utiliser trickle pour limiter la bande passante. On commence par l'installer avec les lignes de commandes suivantes, pour Debian/Ubuntu :

apt-get install trickle

pour les machines CentOS/RHEL :

yum install trickle

On peut ensuite l'utiliser, il suffit pour cela de faire précéder notre commande de la limitation que l'on souhaite effectuer. Par exemple si je veux télécharger l'archive du dernier WordPress en limitant la bande passante utilisée en download à 10 Kilooctets par seconde :

trickle -d 10 wget https://fr.wordpress.org/wordpress-4.1-fr_FR.zip

Je vais alors voir le téléchargement s'effectuer normalement, mais la bande passante sera limitée à 10Ko/s. Je peux également effectuer une limitation sur l'upload indépendemment avec l'option "-u" au lieu de "-d" ou alors les deux en même temps :

trickle -d 10 -u 20 scp archive.zip emile@serveur-34:/home/emile

Ici, je vais envoyer une archive via scp sur un serveur distant et la bande passante en upload ne pourra pas dépasser 20 mo/s, la bande passante en download ne pourra excéder 10mo/s.

C'est une limitation qui prendra fin dès que la commande sera terminée.

Si l'on ne souhaite pas saisir notre limitation à chaque fois que l'on saisi une commande, on peut utiliser trickle en mode démon. On va commencer par lancer le démon en indiquant notre limite de bande passante, par exemple, 50mo/s en download et pas de limitation en upload :

trickled -d 20

puis on va juste saisir "trickle" avant chaque commande sur lesquelles nous souhaitons appliquer cette restriction :

trickle wget https://fr.wordpress.org/...

Si la même commande est lancée sans "trickle" devant, aucune restriction ne lui sera appliquée.

Ces deux commandes sont très simple d'utilisation et peuvent rendre bien des services lorsque la bande passante est faible et que plusieurs utilisateurs se la partagent !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 523.Voir tous les posts

2 thoughts on “Comment limiter la bande passante sous Linux

  • j’ai un debit de 2Mbps/2Mbps. J’ai utilisé wondershaper pour limiter la BP montant et descendant à 1Mbps, comme suit sur l’interface de sortie sur Internet de mon firewall ,mais aucun changement en terme de limitation :

    wondershaper eth0 1024 1024

    Mais en exécutant la commande vnstat -l -i eth0, elle montre un débit descendant au delà de de 1mbps, le débit atteint même 2,05 mbps.

    Répondre
  • Bonjour, cette limite se porte sur la carte réseau mais par exemple si on a un dédié sur ovh et que quelqu’un possède une ligne pour télécharger un fichier lourd, ovh envoi ce fichier à une vitesse très élevé, 800-900mb/s
    Comment limiter la vitesse par raquette sur le serveur et non la carte réseau de façon général ? Merci de votre aide.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.