Comment limiter la bande passante sur une interface réseau Linux?


Réponses:


32

Le module de noyau netem , contrôlé par iproute.

Vous devez compiler Netem avec le noyau:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Une fois le module netem chargé, le tc d’iproute vous permet des choses comme:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50% de perte de paquet, délai supplémentaire de 50 ms)


Oui, c'est un très bon module pour ces choses, en effet. Je ne peux pas croire que personne n'ait répondu à cette question jusqu'à présent ...

J'utilise ceci pour tester les serveurs localement (sur localhost) car il est standard sur toutes les distributions depuis des années. Pour ajouter un délai de 20 ms "tc qdisc ajouter un identificateur de racine de lo lo pour le traitement 1: 0 netem delay 20msec", et pour le supprimer "tc qdisc de la racine du dev lo"
pixelbeat

1
Note rapide: le module du noyau est sch_netem. Généralement, il n'est pas nécessaire de le charger manuellement, il sera chargé automatiquement selon les besoins.
Sleske


Ma version de netem (Ubuntu 13.10) a également la possibilité de limiter la bande passante en utilisant l' rateoption de : tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Notez que pour certains appareils tels que lo(pour accéder à localhost), vous devez définir la longueur de la file d' attente ainsi: ifconfig lo txqueuelen 1000. Voir serverfault.com/a/394949/76090
z0r

27

Côté client, non?

filet doit faire ce que vous voulez. Si vous utilisez Ubuntu (ou Debian, je pense), vous pouvez l’installer avec sudo apt-get install trickle, puis l’exécuter. trickle -s -d 10 -u 10 firefox(ou alors, je ne l'ai pas utilisé depuis un moment) fonctionnerait sous firefox, limitant son téléchargement et sa vitesse de chargement à 10 kilo-octets par seconde.


Merci pour ce conseil. Pour une raison quelconque, goutte à goutte ne fonctionnerait pas pour moi avec Firefox mais cela fonctionnait bien avec Google Chrome. (Ubuntu 9.10 64bit)
Tom le

6
goutte à goutte fonctionne en interceptant les appels à lier dans les fonctions de bibliothèque standard pour les transferts TCP - si une application a ces fonctions liées statiquement au moment de la compilation, cela ne peut pas fonctionner.
David Spillett

16

J'ai trouvé un moyen d'éviter à ma boîte de consommer toute la bande passante disponible sur le réseau en utilisant un outil appelé "wondershaper" dans Ubuntu. J'espère qu'il en existe aussi dans d'autres destros Linux. Je peux limiter la bande passante que mon ordinateur à la maison Linux peut consommer en utilisant la commande suivante.

sudo wondershaper eth0 1000 200

Cela limite la limite de téléchargement à 1000 kilobits et l’uplaod à 200 kilobits. Reportez-vous aux pages de manuel de wondershaper pour plus d'informations / options.


1
Ce n’est pas tout à fait ce que recherche l’OP (il s’agit de conserver la bande passante, pas de dégrader délibérément la connexion), mais reste bon à savoir.
Sleske

1
BTW: C'est un paquet wondershaperdans Debian.
Sleske

Nous avons eu des problèmes au bureau avec la saturation de la bande passante, il y avait un support que je ne pouvais pas interrompre, et j'ai pu résoudre ce problème en deux lignes simples: # apt-get install wondershaper puis # wondershaper eth0 9999999 500 merci encore!
orange80

4
WonderShaper semble avoir quelques problèmes de mathématiques cependant. Pour obtenir un chemin haut / bas de 1 Mb / s, nous avons fini par utiliser 28096 au lieu de 1024. Nous ne savons pas pourquoi cela est arrivé.
Boatcoder

Pour réinitialiser, utilisez:sudo wondershaper clear eth0
Léo Lam le

8

NIST fabrique un simulateur de réseau appelé NistNet.

http://snad.ncsl.nist.gov/nistnet/ (le lien semble mort)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet vous permet de créer un routeur qui émule un lien de communication de votre choix.

Pour une utilisation plus simple, vous l'avez sur un boîtier avec deux cartes d'interface réseau entre deux réseaux.

Par exemple, j'avais une application qui devait fonctionner sur une liaison par satellite.

Les données peuvent passer par le lien 2Mbps avec une latence BIG. Le contrôle devait passer par une liaison à 128 kbps, avec la même latence.

NistNet a contribué à ce que tout fonctionne à 128 kbps.

En utilisant NistNet, je pouvais simuler non seulement la bande passante, mais également la latence, et supprimer des paquets pour vous, simulant ainsi un lien occupé ou peu fiable.

Si vous souhaitez simuler une connexion aléatoire, ne limitez pas simplement la bande passante, augmentez également le temps de latence.

N'oubliez pas de fragmenter les paquets non plus. Vous pouvez définir de belles petites MTU sur le faux lien.

L'ajout de gigue de paquet par le IIRC vous permettra de savoir si vous pouvez gérer des paquets en désordre.


NistNet n'est pas mis à jour depuis longtemps, n'est-ce pas? IMO, le meilleur moyen est de loin le module netem, qui existe déjà dans tous les noyaux récents.

Vous pourrez peut-être simuler une machine avec 2 cartes réseau à l'aide d'une machine virtuelle.
Scott le

Le lien ne fonctionne pas
Juin

Le lien fonctionne pour moi.
triplee

4

Dans le passé, j’ai personnellement utilisé WonderShaper pour cela, bien que cela ait été écrit pour un cas d’utilisation contraire: tirer le meilleur parti de votre connexion ADSL.

Je vais devoir essayer les autres mentionnés ici cependant.


3

Vous pouvez utiliser le proxy squid installé localement pour limiter la bande passante, par exemple pour tester une page Web sur un lien lent:

  1. Installez le proxy squid depuis votre distribution - sur mon Fedora, c’était aussi simple que yum install squid.

  2. Ajouter ce qui suit à /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Cela limitera la bande passante à environ 128 kbps (16 000 bps).

  3. Commencez calmar :/etc/init.d/squid start

  4. Configurez votre navigateur pour utiliser le localhostport du serveur proxy 3128.



3

Personne n'a encore mentionné ip_relay , nommé "iprelay" dans les référentiels Debian. Il fonctionne comme un proxy TCP, plutôt que d’intercepter les appels comme il le fait souvent , et fonctionnera avec toutes les applications pouvant utiliser un proxy (par exemple un navigateur Web) ou accepter un port de destination défini par l’utilisateur (telnet, ssh, ftp, curl, etc.). et cetera ).

C'est un peu plus difficile à mettre en place, mais ça marche souvent dans des situations où le filet ne va pas.


1
Ceci est exactement pour ce que je cherche! Énorme merci. Je suis content d'avoir fait défiler et de lire.
Jay R. Wren
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.