Имитация медленной связи с тк

9

У меня есть linux box (Centos 5.5), на котором я хочу ограничить сетевой трафик. У меня есть приложение, которое мы распространяем среди клиентов, и я хочу протестировать его на минимальной рекомендуемой пропускной способности 256 Мбит / с. Пока что учебники tc, которые я видел, позволяют вам ограничивать пропускную способность в соответствии с определенными критериями, но я хочу ограничить пропускную способность во всех ситуациях (от / до всех IP-адресов, независимо от того, как выглядит заголовок IP и т. Д.).

Один урок предложил мне использовать:

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

но я получаю следующую ошибку:

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

Любые идеи о том, как ограничить пропускную способность, входящую / выходящую из eth0 при любых обстоятельствах?

rancidfishbreath
источник

Ответы:

11

Если вы хотите применить ограничение ко всему исходящему трафику, вам не нужны фильтры вообще. Просто добавьте свой qdisc в корневой дескриптор интерфейса следующим образом:

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

Если вы хотите формировать / контролировать входящий трафик, это немного сложнее. Вам нужно будет использовать, например, интерфейс 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

Вот другой подход, использующий два простых фильтра:

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
и др.
источник
Я взломал ваше решение, но не могу заставить его работать. Я запускаю ваши команды, открываю Firefox, слишком быстро начинаю загрузку и скачивание. Когда я делаю ifconfig, я должен видеть некоторые пакеты RX и TX под ifb0 (потому что я не делаю)? Спасибо.
прогорклое дыхание
Я добавил другой подход, который работает без интерфейса ifb.
ал.
Второй подход с использованием двух простых фильтров работает отлично! Спасибо. Мне очень нравится это решение, потому что оно простое и легкое для понимания.
Rancidfishbreath
Круто спасибо, новый вопрос, как я могу снять ограничение после запуска tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540:? Спасибо!
SSH это
Как отключить дросселирование и вернуть его обратно в прежнее состояние? Просьба ответить на версию «другой подход с использованием двух простых фильтров», если вы будете так любезны. "Man tc" ... как обычно, ошеломляет.
Джеффри Андерсон
1

Это может быть немного за пределами вашей компетенции, но WAN-emu очень хорошо справляется с эмуляцией сред со странными требованиями к пропускной способности и задержке [1]

[1]: http://speed.cis.nctu.edu.tw/wanemu/ WAN-emu

Marcin
источник
Каналы с высокой задержкой или потерями могут быть смоделированы с помощью модуля netem tc также довольно удобно: linuxfoundation.org/collaborate/workgroups/networking/netem
al.
0

Вы добавили 1 линейку, подобную этой, tc qdisc add dev eth0 root handle 10: htb default 20

аффтер что нравится твой

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

N-Trance
источник