Simulando uma conexão lenta com tc


9

Eu tenho uma caixa Linux (Centos 5.5) na qual quero limitar o tráfego de rede. Eu tenho um aplicativo que distribuímos aos clientes e quero testá-lo com a largura de banda mínima recomendada de 256Mbit / s. Até agora, os tutoriais tc que vi parecem permitir que você limite a largura de banda de acordo com certos critérios, mas quero limitar a largura de banda em todas as situações (de / para todo endereço IP, independentemente da aparência do cabeçalho IP, etc.).

Um tutorial sugeriu que eu use:

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2

mas eu recebo o seguinte erro:

Unknown filter "flowid", hence option 10:2 is unparsable

Alguma idéia de como limitar a largura de banda que entra / sai da eth0 em todas as circunstâncias?

Respostas:


11

Se você deseja aplicar uma limitação a todo o tráfego de saída, não precisa de filtros. Basta adicionar o seu qdisc ao identificador raiz da interface da seguinte forma:

tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Se você deseja modelar / policiar o tráfego de entrada, é um pouco mais complicado. Você precisará usar, por exemplo, uma interface IFB:

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#  ^- this is a dummy filter, match u32 0 0 matches all traffic
tc qdisc add dev ifb0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Aqui está uma abordagem diferente, usando dois filtros simples:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 root         protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1

Eu tenho invadido sua solução, mas não consigo fazê-la funcionar. Estou executando seus comandos, abrindo o Firefox, iniciando um download e baixando muito rápido. Quando eu faço um ifconfig, devo ver alguns pacotes RX e TX no ifb0 (porque não vejo)? Obrigado.
rancidfishbreath

Eu adicionei uma abordagem diferente que funciona sem uma interface ifb.
al.

A segunda abordagem, usando os dois filtros simples, está funcionando muito bem! Muito obrigado. Eu realmente gosto desta solução porque é simples e fácil de entender.
Rancidfishbreath #

Incrível obrigado, newb pergunta, como posso remover o limite depois de executar tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540:? Obrigado!
SSH Este

Como desligar a aceleração e revertê-la do jeito que estava? Por favor, responda à versão "abordagem diferente usando dois filtros simples", se você quiser. O "homem tc" é ... esmagador como sempre.
Geoffrey Anderson


0

Você adicionou uma régua como esta tc qdisc add dev eth0 root handle 10: htb default 20

Afirmar que como o seu

tc filter add dev eth0 protocol ip pai 10: prio 2 flowid 10: 2

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.