Ограничение скорости интерфейса linux

tc, ограничение скорости

Дайте plz готовый скрипт, который бы просто ограничивал скорость в N кбайт/с на таком-то интерфейсе. Без приоритетов, без распределения по адресам и т.д.

Re: tc, ограничение скорости

Re: tc, ограничение скорости

tc=`which tc` $tc qdisc del dev eth0 root

$tc qdisc add dev $lan root handle 1: htb $tc class add dev $lan parent 1: classid 1:6 htb rate 1024kbit ceil 2048kbit $tc filter add dev $lan protocol ip parent 1: prio 1 u32 match ip dst 192.168.0.0/24 flowid 1:6

На что влияет ceil я так и не понял, выше установленного в rate прыгнуть не получилось никак.

Re: tc, ограничение скорости

Злое факин форматирование.

$tc qdisc del dev eth0 root

$tc qdisc add dev $lan root handle 1: htb

$tc class add dev $lan parent 1: classid 1:6 htb rate 1024kbit ceil 2048kbit

$tc filter add dev $lan protocol ip parent 1: prio 1 u32 match ip dst 192.168.0.0/24 flowid 1:6

Re: tc, ограничение скорости

> На что влияет ceil я так и не понял, выше установленного в rate прыгнуть не получилось никак.

rate — минимально гарантированная скорость;
ceil — максимально возможная

Немного не понял смысла всех этих твоих движений. Если нужно просто жёстко ограничить скорость, то можно посмотреть в сторону других более приспособленных для этого дисциплин:

#!/bin/sh
lan=eth0
tc=`which tc`
$tc qdisc del dev $lan root
$tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate 2048kbps

Если же нужно зарезервировать канал для сети 192.168.0.0/24 (при этом есть ещё сети), то нужно поменять правила htb, ибо в таком виде, как сейчас при нагруженном канале только 1024kbit и будет.

В данном примере сеть 192.168.0.0/24 имеет приоритет перед остальными адресами. Причём приоритет практически полный:

#!/bin/sh
lan=eth0
tc=`which tc`
$tc qdisc del dev $lan root
$tc qdisc add dev $lan root handle 1: htb default 3

$tc class add dev $lan parent 1: classid 1:1 htb rate 2048kbit

$tc class add dev $lan parent 1:1 classid 1:2 htb rate 2024kbit ceil 2048kbit prio 1

$tc class add dev $lan parent 1:1 classid 1:3 htb rate 24kbit ceil 2048kbit prio 2

$tc filter add dev $lan protocol ip parent 1: u32 match ip dst 192.168.0.0/24 flowid 1:2

P.S. только не забывай, что максимальная скорость, используемая в tc, должна быть немного меньше реальной пропускной способности канала. Иногда с этим «немного меньше» приходится ограничивать макс.скорость до 70% от реальной.

Читайте также:  Red hat linux дистрибутивы семейства redhat

Re: tc, ограничение скорости

> tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate 2048kbps

И всё, одна строчка, без filter и class?

> В данном примере сеть 192.168.0.0/24 имеет приоритет перед остальными адресами. Причём приоритет практически полный:

С классами этими и дисциплинами мозг вывихнуть можно. Всё равно спасибо за советы 🙂

Re: tc, ограничение скорости

>> tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate 2048kbps
>И всё, одна строчка, без filter и class?

И всё. TBF — это безклассовая дисциплина. То есть конечная, или, краевая дисциплина. Поэтому больше ничего и не нужно прописывать.

> С классами этими и дисциплинами мозг вывихнуть можно.

Ну. дисциплина — это фактически название алгоритма «нарезки» канала.
Класс — это правило «нарезки» внутри алгоритма.

Re: tc, ограничение скорости

> И всё. TBF — это безклассовая дисциплина. То есть конечная, или, краевая дисциплина. Поэтому больше ничего и не нужно прописывать.

> Ну. дисциплина — это фактически название алгоритма «нарезки» канала. Класс — это правило «нарезки» внутри алгоритма.

Чёрт, так просто. Спасибо ещё раз. 🙂

Re: tc, ограничение скорости

а нет какой нибудь GUI утилиты для генерирования таких скриптов?

Re: tc, ограничение скорости

Для упрощения лепил своё. перловое и негуёвое :). Конфиг в XML, на выходе даёт готовый к запуску bash-скрипт. Похоже на tcng. Велосипед сделал, но свой велосипед, какой мне надо. 🙂
Кому интересно — выложу где-нить.

Re: tc, ограничение скорости

наверное было бы интересно.
Хотя запрос у меня будет примерно такой наверное

локальные порты 2106 7777 8085 — максимальный приоритет
для того что на них висит

LAN 192.168.1.0/24
с низким приоритетом, без ограничения скорости

подсети провайдера, несколько разных блоков 91.122 89.110 92.100 и чего-то там еще — наименьший приоритет, ограничение на upstream

исходящие на last.fm (87.117.0.0/16) — максимальный приоритет
исходящие на порт 22 — тоже максимально

остальное — поровну между всеми соединениями класса

Re: tc, ограничение скорости

Это на файрволле будет настраиваться? Сколько сетевых на нём?

Сейчас подготовлю архив и куда-нить выложу.

Re: tc, ограничение скорости

./bin/ — исполняемые файлы
ethloop — генератор трафика
gnutc-cgi — формирует страничку с графиками.
gnutc-make-diagram
gnutc-parce-config
gnutc-prepare-test
gnutc-show-trafic-table
Из названий примерно понятно для его оно всё. 🙂

./cfgs/ — конфиги
main.conf — общий конфиг (пути и т.д.); tc.conf — основной конфиг для tc. Там заданы общие для всех переменные. tc-.conf — конфиги для каждого интерфейса.

./cgi-bin/
gnutc-cgi — формирует страничку с графиками. дублирует gnutc-cgi из bin. Руки не дошли в порядок привести 🙂

./contrib/
htb_ethloop_ex.tgz — исходники генератора трафика

Читайте также:  Wifi usb adapter linux drivers

./doc/
readme.txt — мнэ. «хочешь сильно наказать программера — посади его описывать свои поделки. » Про меня 🙂

./img/
В этом каталоге создаются графики по результатам тестов.

./out/
Сюда валятся все файлы, которые создаются. По идее временный каталог.

./tests/
Набор правил для формирования тестового трафика

./.htaccess
Если обратиться браузером к нашему каталогу, то отображаем страницу с результатами тестов.

./start.sh
Непосредственно для запуска всего этого добра

./tests.sh
Для запуска тестов.

У меня оно всё лежит в каталоге /var/www/html/gnutc (ЦГИшка в /var/www/cgi-bin). Набираю в браузере http://127.0.0.1/gnutc и вижу результаты тестов. На роутере оно в другом месте, соответственно. запускается только start.sh Оно всё пока не приведено в божеский вид, но если «пойдёт в массы» — сделаю нормально, а не «достаточно для меня».

Пока всё. По созданию XML-конфига под конкретные нужды обращайтесь — либо расскажу, либо пофиксю 🙂

Re: tc, ограничение скорости

> локальные порты 2106 7777 8085 - максимальный приоритет для того что на них висит Это доступ к самому роутеру? Трафик к нему и так выделится в отдельный канал. Ну представим, что: - ширина канала у тебя из инета 2048к - сетевуха eth0 - это сетевуха в локалку. - ширина канала в инет 1024к - сетевуха к модему: eth1 - адрес роутера, на котором всё это пускается: 192.168.1.254 - провайдер жёстко ограничил скорости на всё(у меня в инет жёстко ограничено, а на внутренние ресурсы провайдера - на максимально возможной для ADSL). Тогда: cfgs/tc.conf: $PERCENT_DOWN=16% $eth0_ADSL_RATE=2048kbit $eth1_ADSL_RATE=1024kbit $PROVIDER_IP=192.168.91.122, 192.168.89.110, 192.168.92.100 $LAN_NETWORK=192.168.1.0/24 Include tc-eth0.conf Include tc-eth1.conf cfgs/tc-eth0.conf: name=eth0 lan_interface=true description="Сетевая карта в LAN" queue_length=30 mtu=1500 name=ROOT description="корневая дисциплина" default=OTHER name=LAN description="Канал 'жирных' хостов" rate=80mbit ip = 192.168.1.254  name=INTERNET description="Интернет-трафик" rate=$eth0_INET_RATE name=SUPERCHANNEL description="Рабочий канал с высоким приоритетом" rate=($eth0_INET_RATE/2) ceil=$eth0_INET_RATE prio=1 # маленькие пакеты и приоритетные порты и last.fm size = :100 port = tcp:22, 53 src_ip = 87.117.0.0/16  name=LAN_NETWORK description="Канал локальной сети" rate=$eth0_INET_RATE/4 ceil=$eth0_INET_RATE prio=2 dst_ip = $LAN_NETWORK name=LAN_NETWORK_esfq description="Справедливая раздача канала" qdisc=true type=esfq params=perturb 10 hash dst  name=OTHER description="Канал остальных" rate=$eth0_INET_RATE/4 ceil=$eth0_INET_RATE prio=3 name=OTHER_esfq description="Справедливая раздача канала" qdisc=true type=esfq params=perturb 10 hash dst  name=PROVIDER description="Канал от хостов провайдера" rate=0 ceil=$eth0_INET_RATE prio=4 src_ip = $PROVIDER_IP name=OTHER_esfq description="Справедливая раздача канала" qdisc=true type=esfq # трафик поровну между хостами провайдера params=perturb 10 hash dst # трафик поровну между "качателями" # params=perturb 10 hash src    cfgs/tc-eth1.conf: По аналогии с cfgs/tc-eth0.conf. Лениво расписывать. Примерно так. Если что не понял - уточни. P.S. Вместо esfq можно использовать и sfq (если нету esfq), но sfq делит поровну между потоками, а esfq - между хостами. Разница в том, что кто-то один может качать в *надцать потоков и перебьёт всем канал.

Источник

How to limit network bandwidth on linux

Have you ever shared network bandwidth with multiple devices? If you have ever been in a position where one application consumed all your traffic, then either you are a system admin or just a Linux user, you will need to discover how to control the upload and download speeds for applications to make sure that your bandwidth is not occupied entirely by a single application. This article gives an idea about how to limit network bandwidth on Linux.

Limiting Network Bandwidth

One of the easiest way to control over the network traffic is via command line tool called “trickle“. It can be limit application bandwidth, upload or download speed, or prioritizing daemons (a computer program that runs as a background process). tickle works on the concept based on “Linux Pre-Loader”. It controls the network using send and receive the data through sockets.

Installing Trickle

To install trickle package, use the following command –

$ sudo apt-get install trickle

The sample output should be like this –

Reading package lists. Done Building dependency tree Reading state information. Done The following NEW packages will be installed: trickle 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 34.6 kB of archives. After this operation, 158 kB of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu/ trusty/universe trickle amd64 1.07-10ubuntu2 [34.6 kB] .

Usage of Trickle

When using Trickle, choose the appropriate download and upload speeds to limit applications.

For instance, If you are using Firefox as your browser, then limit its downloading capacity to 25 KB/s, and upload badwidth to 15 KB/s. To use trickle in standalone mode, use the following command –

$ trickle -d 25 -u 15 firefox

The above command will open a custom Firefox launcher with network limitations.

Limiting a Network Interface on Linux

Alternatively, control over the network traffic is by enforcing bandwidth limit on per-interface basis. This is most useful way when sharing upstream internet connection with someone else. Using wondershaper tool, you can enforce bandwidth limit on per-interface basis.

To install wondershaper, use the following command –

$ sudo apt-get install wondershaper

The sample output should be like this –

Reading package lists. Done Building dependency tree Reading state information. Done The following NEW packages will be installed: wondershaper 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 15.0 kB of archives. After this operation, 77.8 kB of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu/ trusty/universe wondershaper all 1.1a-6 [15.0 kB] .

Usage of wondershaper

Use the following command to control the Ethernet0 (Number-Zero) in Linux system-

$ sudo wondershaper eth0 1000 500

You can remove wondershaper limit using the following command –

$ sudo wondershaper clear eth0

Congratulations! Now, you know “How to limit Network Bandwidth on Linux”. We’ll learn more about these types of commands in our next Linux post. Keep reading!

Samual Sam

Learning faster. Every day.

Источник

Оцените статью
Adblock
detector