Auteur:


Date:
23/01/2008

Catégories:
Open-source
Reseau
Systeme

Tags:


Limiter la bande passante avec Mac OS X

Attention:  Apple a choisi de migrer de IPFW vers PF à partir de OS X Lion (ce qui en soit un un bon choix…).

La syntaxe est complètement différente. Pour effectuer une limite de bande passante avec PF il faut passer par un module externe (à voir si il est installé par défaut sous OS X Lion) nommé altq.

Je conseille la lecture des billets suivants:
De IPFW à PF (sur ce blog)
Packet Queueing and Prioritization
Bandwidth Limiting with pf and ALTQ

bsd.jpeg

Je le rappelle assez souvent, Mac OS X est basée sur un noyau BSD. Ce dernier est très efficace, notamment en ce qui concerne les fonctions réseaux. Il est ainsi possible, en passant par la ligne de commande de limiter un flux à une bande passante donnée.

Par exemple, imaginons que l'on veuille limiter la bande passante d'un transfert de fichier HTTP venant du site www.telecharger.com afin de pouvoir continuer à surfer dans de bonne condition.

Il suffit de saisir les commandes suivantes:

# sudo ipfw pipe 1 config bw 1Mbit/s

Cette première commande génère un tuyau virtuel de 1 Mbit par seconde.

On peut voir la liste des tuyaux virtuels avec la commande:

# sudo ipfw pipe show

Ensuite on associe notre transfert de fichier HTTP (c'est donc du TCP sur le port 80) à ce tuyau virtuel:

# sudo ipfw add 1 pipe 1 proto tcp src-port 80 src-ip www.telecharger.com

Le débit du transfert HTTP devrait être limité à 1 Mbp/s.

Pour supprimer cette limitation, il suffit de supprimer la règle:

# sudo ipfw del 1

Enfin pour supprimer le tuyau virtuel:

# sudo ipfw pipe 1 delete

Il est même possible de simuler des délais de transit et des pertes de paquets dans ces tuyaux virtuels... et je ne parle même pas des fonctions de qualité de service (QoS de type priorité ou RED queue...).

Si c'est pas beau ça...

  • Pirouette

    “Il suffit de saisir les commandes suivantes:”

    Je suis mort de rire à la lecture de cette phrase :D

    Soit il manque un smileys pour indiquer qu’il y a de l’humour dans cette dernière, soit il manque une sacré dose de recul dans tes propos.

  • http://blog.nicolargo.com NicoLargo

    @Pirouette: ??? pourtant il suffit juste de saisir les commandes suivantes… ;)

  • Bak_Alea

    Très intéressant cet article…

    Je souhaiterai limiter la bande passante d’un ordinateur à 50K/s (par exemple) sur l’ensemble des sites web.

    La ligne
    # sudo ipfw add 1 pipe 1 proto tcp src-port 80 src-ip http://www.telecharger.com

    peut elle prendre une expression régulière du type [A-Za-z0-9] ?

    ce qui ferai # sudo ipfw add 1 pipe 1 proto tcp src-port 80 src-ip [A-Za-z0-9]

    Merci d’avance pour la réponse !

  • http://blog.nicolargo.com NicoLargo

    @bak_Alea: je ne pense pas que la commande ipfw puisse prendre une expression régulière comme argument mais je peux me tromper… Tu ne risques rien d’essayer et de nous tenir au courant.

  • https://nicolas.darque.myopenid.com/ NicoDARQUÉ

    je relance la question de Bak_Alea, moi aussi j’aimerais limiter la bande passante d’un ordinateur.
    Avez-vous de nouveaux éléments là-dessus ?

  • http://gy6-performance.fr/ luisa

    Salut nicolas j’ai un soucis sur mon mac os x Tiger,

    j’ai un probleme de bande passante voila quand je fais un test de telechargement ftp je suis limité a 3 Mbp/s alors que sur la meme connection meme serveur, mon mac book pro qui est sous leopard
    prend presque 10Mbp/s j’ai essayer de telecharger plusieur fichiers à
    la fois et je bloque toujours à 3Mbp/s par fichier on dirai que mon imac est bridé par fichier telechargé… car j’arrive à presque 10Mbp/s au totale en vitesse stable en telechargant plusieurs fichier à la fois .
    En gros je voudrai savoir c’est quoi qui me bride comme ca merci bien

  • tonton

    c bien gentil, mais pour les novices c pas très clair
    je sais pas ou il faut saisir les commandes.
    merci pour le coup de pouce car la je galère

    • http://www.nicolargo.com NicoLargo

      Je trouve bizarre qu’un novice veuille limiter le débit de ses flux IP… Mais soit… Il faut en premier lieu ouvrir l’application terminal ou il sera possible de saisir les commandes.

  • Albannor

    Salut NicoLargo,

    Je trouve tes conseils très intéressants et utiles, néanmoins j’aimerais aller plus loin que limiter le flux venant d’un site. J’habite au Canada, où les forfaits internet te limitent en UL et DL, or j’utilise souvent Skype, est-il possible de limiter la bande passante utilisée par une application ?
    Un commande du genre :
    # sudo ipfw add 1 pipe 1 proto tcp src-port 80 src-ip /Applications/Skype.app

    Merci de ta réponse

    • http://www.nicolargo.com NicoLargo

      Bonjour,

      si j’ai bien compris tu veux garantir à Skype une bande passante garantie afin que les autres flux ne l’impacte pas ?

      Le problème de Skype est qu’il utile les mêmes ports TCP que le trafic Web standard, la seule solution est donc de mettre en place une règle par processus.

      La configuration est un peu plus complexe que celle donnée dans ce billet car il faut lui garantir un débit minimum donc avoir deux pipes, un pour skype avec un débit fixe et un autre pour le reste du trafic.

      Pour le filtrage le plus simple est de faire un filtre par UID. Si par bonheur le process Skype est lancé avec un user spécifique (UID) alors c’est gagné (à vérifier sous Mac mais c’est le cas sous Linux):

      sudo ipfw add 1 pipe 1 proto tcp uid skype

      PS:je n’ai pas de Mac sous la main, il faut donc vérifier:
      1) que le processus skype est bien lancé avec un user spécifique (ps aux | grep skype pour vérifier cela)
      2) vérifier que la version de ipfw de Mac OS X supporte le filtrage par UID

      Tiens nous au courant de tes recherches.

  • Varum

    Bonjour,
    Je lis à droite à gauche que ipfw a été remplacé par
    pf dans Mac OS X Lion.
    Est-il envisageable de remplacer “ipfw” par “pf” dans vos commandes ?
    (Je préfère éviter de tester sans savoir ou je mets les pieds ;-)
    Merci

    • Varum

      Par ailleurs, le Moniteur d’Activité Mac OS X indique un PID dans la liste des processus.
      Là aussi le PID est-il équivalent au UID évoqué ci-dessus ?

      Merci

    • http://www.nicolargo.com NicoLargo

      Effectivement, il semble qu’Apple ait choisi de migrer de IPFW vers PF à partir de OS X Lion (ce qui en soit un un bon choix…).

      La syntaxe est complètement différente. Pour effectuer une limite de bande passante avec PF il faut passer par un module externe (à voir si il est installé par défaut sous OS X Lion) nommé altq.

      Je te conseille la lecture des billets suivants:
      - De IPFW à PF (sur ce blog)
      - Packet Queueing and Prioritization
      - Bandwidth Limiting with pf and ALTQ

  • Pierre58

    Salut j’aimerai moi aussi pouvoir faire cela mais je suis sous PF et donc je dois passer par un module externe (altq) comme tu le suggères; mais comment faire ensuite ? Merci

    • Pierre58

      Personne pour m’aider :( ?

  • Pierre58

    Bonsoir,

    Ma question est vraiment importante, donc petit up merci