
Il vous est peut-être déjà arrivé de lancer un rsync
, un téléchargement via wget
, ou un conteneur un peu trop gourmand… et de voir tout le réseau s’effondrer. Résultat : services lents, SSH qui lag, et plus de place pour le reste.
Heureusement, il existe des outils simples pour limiter la bande passante utilisée par un processus ou une interface réseau. Deux outils complémentaires ressortent :
Voici comment les utiliser.
1. Limiter un processus avec trickle
🔧 Installation
sudo apt install trickle # Debian/Ubuntu
sudo dnf install trickle # RHEL/Fedora
▶️ Utilisation de base
trickle -d 100 -u 50 rsync -avz monsite/ user@host:/backup/
-d 100
: limite le download à 100 KB/s-u 50
: limite l’upload à 50 KB/s
C’est tout. trickle
intercepte les appels réseau de l’application et ralentit la communication.
💡 Exemple avec wget
trickle -d 500 wget https://fichier-lourd.iso
⚠️ Limitations de trickle
- Fonctionne uniquement avec des programmes qui utilisent
libc
etlibsocket
(pas tous les langages ou binaires modernes). - Ne fonctionne pas avec les processus déjà lancés.
- Pas compatible avec certains usages (Docker, curl avec OpenSSL statique, etc.)
2. Limiter finement avec tc
(traffic control)
tc
fait partie de l’ensemble iproute2. Il agit au niveau du noyau pour contrôler le trafic entrant et sortant par interface.
🧱 Exemple simple : limiter toute l’interface eth0
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
rate
: débit maximum autoriséburst
: quantité autorisée dans un court piclatency
: délai max de la file
Pour supprimer la limitation :
sudo tc qdisc del dev eth0 root
🎯 Limiter un port ou un processus spécifique (plus avancé)
Pour cibler un port source ou destination, il faut combiner tc
avec des filtres iptables
et des classes. Exemple rapide :
- Marquer les paquets sortants du port 443 :
sudo iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 10
- Appliquer une limitation sur les paquets marqués :
sudo tc qdisc add dev eth0 root handle 1: htb default 12
sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 512kbit
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
Ici, tout le trafic sortant sur le port 443 sera limité à 512 kbit/s.
3. Comparatif rapide
Outil | Portée | Avantages | Limites |
---|---|---|---|
trickle |
Processus local | Simple, rapide, sans privilèges | Incompatible avec certains programmes |
tc |
Interface réseau | Très précis, système complet | Plus complexe, nécessite root |
4. Quelques cas d’usage concrets
- 🧪 Tester le comportement d’une app web sur une connexion lente
- 📡 Lancer un
rsync
ou unscp
en arrière-plan sans saturer la bande passante - 🔁 Simuler une latence ou un débit limité dans une CI/CD
- 🧘♂️ Éviter que le téléchargement d’images ISO ou de paquets n’étrangle les autres services en prod
5. Pour aller plus loin
- Utilisez
netem
avectc
pour simuler de la latence, perte de paquets ou gigue réseau (parfait pour les tests d’applications distribuées). - Coupez
tc
à un conteneur Docker avec--net=host
outc
surveth*
. - Combinez
trickle
avecnice
ouionice
pour contrôler aussi l’impact CPU ou disque.
En résumé
Limiter la bande passante d’un processus est un excellent moyen de :
- garder la main sur vos ressources réseau,
- éviter les conflits entre services,
- tester des comportements dans un environnement contrôlé.