
Um wrapper do comando tc. Facilita a configuração de controle de tráfego de largura de banda/latência/perda de pacotes/corrupção de pacotes/etc. para uma interface de rede/container Docker (veth).
.. contents:: tcconfig :backlinks: top :depth: 2
tcconfig <https://github.com/thombashi/tcconfig>__ é um wrapper do comando tc. Facilita a configuração do controle de tráfego de largura de banda/latência/perda de pacotes/corrupção de pacotes/etc. para uma interface de rede/container 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
Configurar regras de modelagem de tráfego ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Fácil de aplicar regras de modelagem de tráfego a redes específicas:
Parâmetros disponíveis ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Os seguintes parâmetros podem ser definidos para interfaces de rede:
[G/M/K bps][microseconds/milliseconds/seconds/minutes][%][%][%][%][COUNT]Alvos ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
eth0veth correspondente a um container).. image:: docs/gif/tcset_example.gif
tcset)tcset é um comando para adicionar uma regra de controle de tráfego a uma interface de rede (dispositivo).
Exemplo: Definir um limite de largura de banda de até 100Kbps ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --rate 100Kbps
Exemplo: Definir latência de rede ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Você pode usar unidades de tempo (como us/sec/min/etc.) para designar o tempo de atraso.
Definir 100 milissegundos de latência de rede ''''''''''''''''''''''''''''''''''''''''''''''''''' .. code-block:: console
# tcset eth0 --delay 100ms
Definir 10 segundos de latência de rede ''''''''''''''''''''''''''''''''''''''''''''''''''' .. code-block:: console
# tcset eth0 --delay 10sec
Definir 0,5 minuto (30 segundos) de latência de rede ''''''''''''''''''''''''''''''''''''''''''''''''''' .. code-block:: console
# tcset eth0 --delay 0.5min
Você também pode usar as seguintes unidades de tempo:
.. table::
+----------------+----------------------------------------------------------+
| Unidade | Especificadores disponíveis (str) |
+================+==========================================================+
|horas |``h``/``hour``/``hours`` |
+----------------+----------------------------------------------------------+
|minutos |``m``/``min``/``mins``/``minute``/``minutes`` |
+----------------+----------------------------------------------------------+
|segundos |``s``/``sec``/``secs``/``second``/``seconds`` |
+----------------+----------------------------------------------------------+
|milissegundos |``ms``/``msec``/``msecs``/``millisecond``/``milliseconds``|
+----------------+----------------------------------------------------------+
|microssegundos |``us``/``usec``/``usecs``/``microsecond``/``microseconds``|
+----------------+----------------------------------------------------------+
Exemplo: Definir 0,1% de perda de pacotes ^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --loss 0.1%
Exemplo: Todas as configurações acima de uma vez ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --rate 100Kbps --delay 100ms --loss 0.1%
Exemplo: Especificar o endereço IP do controle de tráfego ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --delay 100ms --network 192.168.0.10
Exemplo: Especificar a rede IP e a porta do controle de tráfego ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console
# tcset eth0 --delay 100ms --network 192.168.0.0/24 --port 80
Definir controle de tráfego para um container Docker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Execute tcconfig com a opção --docker em um host Docker:
.. code-block:: console
# tcset <nome ou ID do container> --docker ...
Você pode usar as opções --src-container/--dst-container para especificar o container de origem/destino.
Definir controle de tráfego dentro de um container Docker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Você precisa executar um container com a opção --cap-add NET_ADMIN se desejar definir uma regra tc dentro de um container:
.. code-block:: console
docker run -d --cap-add NET_ADMIN -t <imagem docker>
Uma imagem de container com tcconfig integrado está disponível em https://hub.docker.com/r/thombashi/tcconfig/
tcdel)tcdel é um comando para excluir regras de modelagem de tráfego de uma interface de rede (dispositivo).
Exemplo: Excluir controle de tráfego de eth0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Você pode excluir todas as regras de modelagem para eth0 com a opção -a/--all:
.. code-block:: console
# tcdel eth0 --all
tcshow)tcshow é um comando para exibir as configurações atuais de controle de tráfego para interface(s) de rede.
Exemplo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. 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"
}
}
}
}
Mais exemplos estão disponíveis em https://tcconfig.rtfd.io/en/latest/pages/usage/index.html
tcconfig pode ser instalado a partir do PyPI <https://pypi.python.org/pypi>__ através do comando pip <https://pip.pypa.io/en/stable/installing/>__ (gerenciador de pacotes Python).
.. code:: console
sudo pip install tcconfig
.. code:: console