
Un wrapper pour la commande tc. Facilite la mise en place du contrôle de trafic (bande passante, latence, perte de paquets, corruption de paquets, etc.) sur une interface réseau / un conteneur Docker (veth).
.. contents:: tcconfig :backlinks: top :depth: 2
tcconfig <https://github.com/thombashi/tcconfig>__ est un wrapper de la commande tc. Il facilite la mise en place du contrôle de trafic (bande passante, latence, perte de paquets, corruption de paquets, etc.) sur une interface réseau ou un conteneur Docker (veth).
|PyPI pkg ver| |Supported Python ver| |CI status| |CodeQL|
.. |PyPI pkg ver| image:: https://badge.fury.io/py/tcconfig.svg :target: https://badge.fury.io/py/tcconfig :alt: PyPI package version
.. |Supported Python ver| image:: https://img.shields.io/pypi/pyversions/tcconfig.svg :target: https://pypi.org/project/tcconfig :alt: Supported Python versions
.. |CI status| image:: https://github.com/thombashi/tcconfig/actions/workflows/ci.yml/badge.svg :target: https://github.com/thombashi/tcconfig/actions/workflows/ci.yml :alt: Test CI status
.. |CodeQL| image:: https://github.com/thombashi/tcconfig/actions/workflows/build_and_release.yml/badge.svg :target: https://github.com/thombashi/tcconfig/actions/workflows/build_and_release.yml :alt: Build CI status
Configuration des règles de mise en forme du trafic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Application facile des règles de mise en forme du trafic à des réseaux spécifiques :
Paramètres disponibles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Les paramètres suivants peuvent être définis sur les interfaces réseau :
[G/M/K bps][microsecondes/millisecondes/secondes/minutes][%][%][%][%][COUNT]Cibles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
eth0veth correspondant à un conteneur).. image:: docs/gif/tcset_example.gif
tcset)tcset est une commande pour ajouter une règle de contrôle de trafic à une interface réseau (périphérique).
Ex. : Limiter la bande passante à 100Kbps ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --rate 100Kbps
Ex. : Définir la latence réseau ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Vous pouvez utiliser des unités de temps (telles que us/sec/min/etc.) pour désigner le temps de latence.
Définir une latence réseau de 100 millisecondes ''''''''''''''''''''''''''''''''''''''''''''''''''' .. code-block:: console
# tcset eth0 --delay 100ms
Définir une latence réseau de 10 secondes ''''''''''''''''''''''''''''''''''''''''''''''''''' .. code-block:: console
# tcset eth0 --delay 10sec
Définir une latence réseau de 0,5 minute (30 secondes) ''''''''''''''''''''''''''''''''''''''''''''''''''' .. code-block:: console
# tcset eth0 --delay 0.5min
Vous pouvez également utiliser les unités de temps suivantes :
.. table::
+------------+----------------------------------------------------------+
| Unité | Indicateurs disponibles (chaîne) |
+============+==========================================================+
|heures |``h``/``hour``/``hours`` |
+------------+----------------------------------------------------------+
|minutes |``m``/``min``/``mins``/``minute``/``minutes`` |
+------------+----------------------------------------------------------+
|secondes |``s``/``sec``/``secs``/``second``/``seconds`` |
+------------+----------------------------------------------------------+
|millisecondes|``ms``/``msec``/``msecs``/``millisecond``/``milliseconds``|
+------------+----------------------------------------------------------+
|microsecondes|``us``/``usec``/``usecs``/``microsecond``/``microseconds``|
+------------+----------------------------------------------------------+
Ex. : Définir une perte de paquets de 0,1 % ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --loss 0.1%
Ex. : Tous les réglages ci-dessus en une seule fois ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --rate 100Kbps --delay 100ms --loss 0.1%
Ex. : Spécifier l'adresse IP du contrôle de trafic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --delay 100ms --network 192.168.0.10
Ex. : Spécifier le réseau IP et le port du contrôle de trafic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --delay 100ms --network 192.168.0.0/24 --port 80
Définir le contrôle de trafic pour un conteneur Docker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exécutez tcconfig avec l'option --docker sur un hôte Docker :
.. code-block:: console
# tcset <container name or ID> --docker ...
Vous pouvez utiliser les options --src-container/--dst-container pour spécifier le conteneur source/destination.
Définir le contrôle de trafic à l'intérieur d'un conteneur Docker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Vous devez exécuter un conteneur avec l'option --cap-add NET_ADMIN si vous souhaitez définir une règle tc à l'intérieur d'un conteneur :
.. code-block:: console
docker run -d --cap-add NET_ADMIN -t <docker image>
Une image de conteneur intégrant tcconfig est disponible sur https://hub.docker.com/r/thombashi/tcconfig/
tcdel)tcdel est une commande pour supprimer les règles de mise en forme du trafic d'une interface réseau (périphérique).
Ex. : Supprimer le contrôle de trafic de eth0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Vous pouvez supprimer toutes les règles de mise en forme pour eth0 avec l'option -a/--all :
.. code-block:: console
# tcdel eth0 --all
tcshow)tcshow est une commande pour afficher les paramètres actuels de contrôle de trafic pour une ou plusieurs interfaces réseau.
Exemple ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: console
# tcset eth0 --delay 10ms --delay-distro 2 --loss 0.01% --rate 0.25Mbps --network 192.168.0.10 --port 8080
# tcset eth0 --delay 1ms --loss 0.02% --rate 500Kbps --direction incoming
# tcshow eth0
{
"eth0": {
"outgoing": {
"dst-network=192.168.0.10/32, dst-port=8080, protocol=ip": {
"filter_id": "800::800",
"delay": "10.0ms",
"delay-distro": "2.0ms",
"loss": "0.01%",
"rate": "250Kbps"
}
},
"incoming": {
"protocol=ip": {
"filter_id": "800::800",
"delay": "1.0ms",
"loss": "0.02%",
"rate": "500Kbps"
}
}
}
}
Plus d'exemples sont disponibles sur https://tcconfig.rtfd.io/en/latest/pages/usage/index.html
tcconfig peut être installé depuis PyPI <https://pypi.python.org/pypi>__ via la commande pip <https://pip.pypa.io/en/stable/installing/>__ (gestionnaire de paquets Python).
.. code:: console
sudo pip install tcconfig
.. code:: console
curl -sSL https://raw.githubusercontent.com/thombashi/tcconfig/master/scripts/installer.sh | sudo bash
Dépendances des paquets Python (installées automatiquement) <https://github.com/thombashi/tcconfig/network/dependencies>__tc :
Ubuntu/Debian : iproute2Fedora/RHEL : iproute-tc--iptables :
iptablessch_netemPygments <http://pygments.org/>__https://tcconfig.rtfd.io/en/latest/pages/troubleshooting.html
https://hub.docker.com/r/thombashi/tcconfig/
|chasbecker| |shiguredo| |b4tman| |Arturi0| |github|
.. |chasbecker| image:: https://avatars.githubusercontent.com/u/44389260?s=48&u=6da7176e51ae2654bcfd22564772ef8a3bb22318&v=4 :target: https://github.com/chasbecker :alt: ex-sponsor: Charles Becker (chasbecker) .. |shiguredo| image:: https://avatars.githubusercontent.com/u/2549434?s=48&v=4 :target: https://github.com/shiguredo :alt: ex-sponsor: 時雨堂 (shiguredo) .. |b4tman| image:: https://avatars.githubusercontent.com/u/3658062?s=48&v=4 :target: https://github.com/b4tman :alt: onetime: Dmitry Belyaev (b4tman) .. |Arturi0| image:: https://avatars.githubusercontent.com/u/46711571?s=48&u=57687c0e02d5d6e8eeaf9177f7b7af4c9f275eb5&v=4 :target: https://github.com/Arturi0 :alt: onetime: Arturi0 .. |github| image:: https://avatars.githubusercontent.com/u/9919?s=48&v=4 :target: https://github.com/github :alt: onetime: GitHub (github)
Devenez sponsor <https://github.com/sponsors/thombashi>__